From 6116cf9d64b1d19624e41e6ae6c6b006d1177e8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 16:39:48 +0000 Subject: [PATCH] Deploy to GitHub pages --- Classes.html | 686 ++++ Classes/BlueprintView.html | 1234 +++++++ Classes/FocusTrigger.html | 800 +++++ Common Elements.html | 1523 +++++++++ Creating Custom Elements.html | 888 +++++ Displaying Elements.html | 773 +++++ Enums.html | 976 ++++++ Enums/BlueprintLogging.html | 739 ++++ Enums/BlueprintLogging/Config.html | 764 +++++ Enums/ColorKey.html | 705 ++++ Enums/FontKey.html | 705 ++++ Enums/LayoutMode.html | 826 +++++ Enums/LayoutTransition.html | 779 +++++ Enums/LinkKey.html | 705 ++++ Enums/ParagraphStyleKey.html | 705 ++++ Enums/TrackingKey.html | 705 ++++ Enums/UnderlineColorKey.html | 705 ++++ Enums/UnderlineStyleKey.html | 705 ++++ Environment.html | 752 +++++ Extensions.html | 880 +++++ Extensions/AXCustomContent.html | 705 ++++ Extensions/CGSize.html | 707 ++++ Extensions/ElementBuilder.html | 814 +++++ Extensions/FloatingPoint.html | 808 +++++ Extensions/PreviewDevice.html | 1263 +++++++ Extensions/UIAccessibilityTraits.html | 679 ++++ Extensions/UIOffset.html | 679 ++++ Protocols.html | 1209 +++++++ Protocols/AlignmentID.html | 686 ++++ Protocols/AttributedTextKey.html | 711 ++++ Protocols/BlueprintViewMetricsDelegate.html | 680 ++++ Protocols/CaffeinatedLayout.html | 1065 ++++++ Protocols/CaffeinatedSingleChildLayout.html | 1018 ++++++ Protocols/Element.html | 2992 +++++++++++++++++ Protocols/ElementBuilderChild.html | 681 ++++ Protocols/EnvironmentKey.html | 728 ++++ Protocols/LegacyLayout.html | 834 +++++ Protocols/LegacySingleChildLayout.html | 777 +++++ Protocols/Measurable.html | 704 ++++ Protocols/NativeView.html | 722 ++++ Protocols/ProxyElement.html | 744 ++++ Protocols/StackElement.html | 1098 ++++++ Protocols/UIViewElement.html | 893 +++++ Protocols/URLHandler.html | 683 ++++ Structs.html | 2075 ++++++++++++ Structs/AccessibilityBlocker.html | 805 +++++ Structs/AccessibilityContainer.html | 812 +++++ Structs/AccessibilityElement.html | 1116 ++++++ .../AccessibilityElement/CustomAction.html | 839 +++++ .../AccessibilityElement/CustomContent.html | 811 +++++ .../CustomContent/Importance.html | 709 ++++ Structs/AccessibilityElement/Trait.html | 1204 +++++++ Structs/AccessibilityFocus.html | 844 +++++ Structs/AccessibilityFocus/Trigger.html | 796 +++++ Structs/AdaptedEnvironment.html | 947 ++++++ Structs/Aligned.html | 922 +++++ Structs/Aligned/HorizontalAlignment.html | 764 +++++ Structs/Aligned/VerticalAlignment.html | 762 +++++ Structs/Alignment.html | 978 ++++++ Structs/AnimationAttributes.html | 791 +++++ Structs/AspectRatio.html | 812 +++++ Structs/AttributedLabel.html | 1215 +++++++ .../AttributedLabel/LinkDetectionType.html | 764 +++++ Structs/AttributedText.html | 959 ++++++ Structs/AttributedText/Run.html | 741 ++++ Structs/BlueprintViewRenderMetrics.html | 788 +++++ Structs/Box.html | 1038 ++++++ Structs/Box/BorderStyle.html | 705 ++++ Structs/Box/CornerCurve.html | 711 ++++ Structs/Box/CornerStyle.html | 758 +++++ Structs/Box/CornerStyle/Corners.html | 939 ++++++ Structs/Box/ShadowStyle.html | 705 ++++ Structs/Builder.html | 946 ++++++ Structs/Button.html | 837 +++++ Structs/Centered.html | 738 ++++ Structs/Column.html | 997 ++++++ Structs/Column/ColumnAlignment.html | 793 +++++ Structs/ConstrainedAspectRatio.html | 886 +++++ .../ConstrainedAspectRatio/ContentMode.html | 789 +++++ Structs/ConstrainedSize.html | 855 +++++ Structs/ConstrainedSize/Constraint.html | 791 +++++ Structs/Decorate.html | 937 ++++++ Structs/Decorate/Corner.html | 758 +++++ Structs/Decorate/Layering.html | 708 ++++ Structs/Decorate/Position.html | 904 +++++ .../Decorate/Position/PositionContext.html | 735 ++++ Structs/EditingMenu.html | 920 +++++ Structs/EditingMenu/Gesture.html | 708 ++++ Structs/EditingMenu/MenuTrigger.html | 690 ++++ Structs/EditingMenuItem.html | 877 +++++ Structs/EditingMenuItem/Kind.html | 738 ++++ Structs/EditingMenuItem/Kind/System.html | 1046 ++++++ Structs/ElementContent.html | 1427 ++++++++ Structs/ElementContent/Builder.html | 713 ++++ Structs/ElementDimensions.html | 838 +++++ Structs/ElementPreview.html | 919 +++++ Structs/ElementPreview/PreviewType.html | 795 +++++ Structs/Empty.html | 732 ++++ Structs/Environment.html | 1050 ++++++ Structs/Environment/LayoutDirection.html | 705 ++++ Structs/EnvironmentReader.html | 750 +++++ Structs/EqualStack.html | 998 ++++++ Structs/EqualStack/Child.html | 705 ++++ Structs/EqualStack/Direction.html | 705 ++++ Structs/Flow.html | 995 ++++++ Structs/Flow/Child.html | 815 +++++ Structs/Flow/ItemAlignment.html | 762 +++++ Structs/Flow/LineAlignment.html | 735 ++++ Structs/FocusBinding.html | 829 +++++ Structs/FocusState.html | 956 ++++++ Structs/GeometryProxy.html | 708 ++++ Structs/GeometryReader.html | 749 +++++ Structs/GridRow.html | 1056 ++++++ Structs/GridRow/Child.html | 822 +++++ Structs/GridRow/Width.html | 719 ++++ Structs/Hidden.html | 789 +++++ Structs/HorizontalAlignment.html | 816 +++++ Structs/Image.html | 877 +++++ Structs/Image/ContentMode.html | 772 +++++ Structs/Inset.html | 976 ++++++ Structs/Keyed.html | 809 +++++ Structs/Label.html | 1159 +++++++ Structs/Label/LineHeight.html | 734 ++++ Structs/Label/LineHeight/Alignment.html | 737 ++++ Structs/LayoutAttributes.html | 1053 ++++++ Structs/LayoutOptions.html | 768 +++++ Structs/LayoutSubelement.html | 1031 ++++++ Structs/LayoutSubelement/Attributes.html | 789 +++++ Structs/LayoutWriter.html | 938 ++++++ Structs/LayoutWriter/Builder.html | 825 +++++ Structs/LayoutWriter/Child.html | 766 +++++ Structs/LayoutWriter/Context.html | 739 ++++ Structs/LayoutWriter/Context/LayoutPhase.html | 738 ++++ Structs/LayoutWriter/Sizing.html | 725 ++++ Structs/LifecycleObserver.html | 874 +++++ Structs/Opacity.html | 821 +++++ Structs/Overlay.html | 927 +++++ Structs/Overlay/Child.html | 762 +++++ Structs/Row.html | 970 ++++++ Structs/Row/RowAlignment.html | 849 +++++ Structs/Rule.html | 889 +++++ Structs/Rule/Orientation.html | 708 ++++ Structs/Rule/Thickness.html | 709 ++++ Structs/ScrollView.html | 1241 +++++++ Structs/ScrollView/ContentOffset.html | 784 +++++ .../ContentOffset/ScrollingContext.html | 731 ++++ Structs/ScrollView/ContentSize.html | 761 +++++ .../ScrollView/KeyboardAdjustmentMode.html | 705 ++++ Structs/ScrollView/PullToRefreshBehavior.html | 731 ++++ Structs/ScrollView/ScrollTrigger.html | 705 ++++ Structs/SegmentedControl.html | 972 ++++++ Structs/SegmentedControl/Item.html | 758 +++++ Structs/SegmentedControl/Item/Width.html | 705 ++++ Structs/SegmentedControl/Selection.html | 705 ++++ Structs/SizeConstraint.html | 1044 ++++++ Structs/SizeConstraint/Axis.html | 1080 ++++++ .../UnconstrainedInfiniteAxis.html | 708 ++++ Structs/Spacer.html | 816 +++++ Structs/StackLayout.html | 1178 +++++++ Structs/StackLayout/Alignment.html | 709 ++++ Structs/StackLayout/AlignmentGuide.html | 682 ++++ Structs/StackLayout/Axis.html | 706 ++++ Structs/StackLayout/Child.html | 859 +++++ Structs/StackLayout/Child/Priority.html | 765 +++++ Structs/StackLayout/OverflowDistribution.html | 708 ++++ Structs/StackLayout/Traits.html | 786 +++++ .../StackLayout/UnderflowDistribution.html | 816 +++++ Structs/Tappable.html | 784 +++++ Structs/TextAttributeContainer.html | 966 ++++++ Structs/TextField.html | 1461 ++++++++ Structs/TextShadow.html | 788 +++++ Structs/TintAdjustmentMode.html | 789 +++++ Structs/Transformed.html | 882 +++++ Structs/TransitionContainer.html | 959 ++++++ Structs/UIViewElementContext.html | 709 ++++ Structs/URLHandlerEnvironmentKey.html | 679 ++++ Structs/UnitPoint.html | 1036 ++++++ Structs/UserInteractionEnabled.html | 789 +++++ Structs/VerticalAlignment.html | 816 +++++ Structs/ViewDescription.html | 1013 ++++++ Structs/ViewDescription/Configuration.html | 1104 ++++++ .../FrameRoundingBehavior.html | 708 ++++ Structs/ViewDescriptionContext.html | 762 +++++ Structs/VisibilityTransition.html | 842 +++++ Typealiases.html | 728 ++++ badge.svg | 28 + css/highlight.css | 202 ++ css/jazzy.css | 404 +++ docsets/Blueprint.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 686 ++++ .../Documents/Classes/BlueprintView.html | 1234 +++++++ .../Documents/Classes/FocusTrigger.html | 800 +++++ .../Resources/Documents/Common Elements.html | 1523 +++++++++ .../Documents/Creating Custom Elements.html | 888 +++++ .../Documents/Displaying Elements.html | 773 +++++ .../Contents/Resources/Documents/Enums.html | 976 ++++++ .../Documents/Enums/BlueprintLogging.html | 739 ++++ .../Enums/BlueprintLogging/Config.html | 764 +++++ .../Resources/Documents/Enums/ColorKey.html | 705 ++++ .../Resources/Documents/Enums/FontKey.html | 705 ++++ .../Resources/Documents/Enums/LayoutMode.html | 826 +++++ .../Documents/Enums/LayoutTransition.html | 779 +++++ .../Resources/Documents/Enums/LinkKey.html | 705 ++++ .../Documents/Enums/ParagraphStyleKey.html | 705 ++++ .../Documents/Enums/TrackingKey.html | 705 ++++ .../Documents/Enums/UnderlineColorKey.html | 705 ++++ .../Documents/Enums/UnderlineStyleKey.html | 705 ++++ .../Resources/Documents/Environment.html | 752 +++++ .../Resources/Documents/Extensions.html | 880 +++++ .../Documents/Extensions/AXCustomContent.html | 705 ++++ .../Documents/Extensions/CGSize.html | 707 ++++ .../Documents/Extensions/ElementBuilder.html | 814 +++++ .../Documents/Extensions/FloatingPoint.html | 808 +++++ .../Documents/Extensions/PreviewDevice.html | 1263 +++++++ .../Extensions/UIAccessibilityTraits.html | 679 ++++ .../Documents/Extensions/UIOffset.html | 679 ++++ .../Resources/Documents/Protocols.html | 1209 +++++++ .../Documents/Protocols/AlignmentID.html | 686 ++++ .../Protocols/AttributedTextKey.html | 711 ++++ .../BlueprintViewMetricsDelegate.html | 680 ++++ .../Protocols/CaffeinatedLayout.html | 1065 ++++++ .../CaffeinatedSingleChildLayout.html | 1018 ++++++ .../Documents/Protocols/Element.html | 2992 +++++++++++++++++ .../Protocols/ElementBuilderChild.html | 681 ++++ .../Documents/Protocols/EnvironmentKey.html | 728 ++++ .../Documents/Protocols/LegacyLayout.html | 834 +++++ .../Protocols/LegacySingleChildLayout.html | 777 +++++ .../Documents/Protocols/Measurable.html | 704 ++++ .../Documents/Protocols/NativeView.html | 722 ++++ .../Documents/Protocols/ProxyElement.html | 744 ++++ .../Documents/Protocols/StackElement.html | 1098 ++++++ .../Documents/Protocols/UIViewElement.html | 893 +++++ .../Documents/Protocols/URLHandler.html | 683 ++++ .../Contents/Resources/Documents/Structs.html | 2075 ++++++++++++ .../Structs/AccessibilityBlocker.html | 805 +++++ .../Structs/AccessibilityContainer.html | 812 +++++ .../Structs/AccessibilityElement.html | 1116 ++++++ .../AccessibilityElement/CustomAction.html | 839 +++++ .../AccessibilityElement/CustomContent.html | 811 +++++ .../CustomContent/Importance.html | 709 ++++ .../Structs/AccessibilityElement/Trait.html | 1204 +++++++ .../Documents/Structs/AccessibilityFocus.html | 844 +++++ .../Structs/AccessibilityFocus/Trigger.html | 796 +++++ .../Documents/Structs/AdaptedEnvironment.html | 947 ++++++ .../Resources/Documents/Structs/Aligned.html | 922 +++++ .../Structs/Aligned/HorizontalAlignment.html | 764 +++++ .../Structs/Aligned/VerticalAlignment.html | 762 +++++ .../Documents/Structs/Alignment.html | 978 ++++++ .../Structs/AnimationAttributes.html | 791 +++++ .../Documents/Structs/AspectRatio.html | 812 +++++ .../Documents/Structs/AttributedLabel.html | 1215 +++++++ .../AttributedLabel/LinkDetectionType.html | 764 +++++ .../Documents/Structs/AttributedText.html | 959 ++++++ .../Documents/Structs/AttributedText/Run.html | 741 ++++ .../Structs/BlueprintViewRenderMetrics.html | 788 +++++ .../Resources/Documents/Structs/Box.html | 1038 ++++++ .../Documents/Structs/Box/BorderStyle.html | 705 ++++ .../Documents/Structs/Box/CornerCurve.html | 711 ++++ .../Documents/Structs/Box/CornerStyle.html | 758 +++++ .../Structs/Box/CornerStyle/Corners.html | 939 ++++++ .../Documents/Structs/Box/ShadowStyle.html | 705 ++++ .../Resources/Documents/Structs/Builder.html | 946 ++++++ .../Resources/Documents/Structs/Button.html | 837 +++++ .../Resources/Documents/Structs/Centered.html | 738 ++++ .../Resources/Documents/Structs/Column.html | 997 ++++++ .../Structs/Column/ColumnAlignment.html | 793 +++++ .../Structs/ConstrainedAspectRatio.html | 886 +++++ .../ConstrainedAspectRatio/ContentMode.html | 789 +++++ .../Documents/Structs/ConstrainedSize.html | 855 +++++ .../Structs/ConstrainedSize/Constraint.html | 791 +++++ .../Resources/Documents/Structs/Decorate.html | 937 ++++++ .../Documents/Structs/Decorate/Corner.html | 758 +++++ .../Documents/Structs/Decorate/Layering.html | 708 ++++ .../Documents/Structs/Decorate/Position.html | 904 +++++ .../Decorate/Position/PositionContext.html | 735 ++++ .../Documents/Structs/EditingMenu.html | 920 +++++ .../Structs/EditingMenu/Gesture.html | 708 ++++ .../Structs/EditingMenu/MenuTrigger.html | 690 ++++ .../Documents/Structs/EditingMenuItem.html | 877 +++++ .../Structs/EditingMenuItem/Kind.html | 738 ++++ .../Structs/EditingMenuItem/Kind/System.html | 1046 ++++++ .../Documents/Structs/ElementContent.html | 1427 ++++++++ .../Structs/ElementContent/Builder.html | 713 ++++ .../Documents/Structs/ElementDimensions.html | 838 +++++ .../Documents/Structs/ElementPreview.html | 919 +++++ .../Structs/ElementPreview/PreviewType.html | 795 +++++ .../Resources/Documents/Structs/Empty.html | 732 ++++ .../Documents/Structs/Environment.html | 1050 ++++++ .../Structs/Environment/LayoutDirection.html | 705 ++++ .../Documents/Structs/EnvironmentReader.html | 750 +++++ .../Documents/Structs/EqualStack.html | 998 ++++++ .../Documents/Structs/EqualStack/Child.html | 705 ++++ .../Structs/EqualStack/Direction.html | 705 ++++ .../Resources/Documents/Structs/Flow.html | 995 ++++++ .../Documents/Structs/Flow/Child.html | 815 +++++ .../Documents/Structs/Flow/ItemAlignment.html | 762 +++++ .../Documents/Structs/Flow/LineAlignment.html | 735 ++++ .../Documents/Structs/FocusBinding.html | 829 +++++ .../Documents/Structs/FocusState.html | 956 ++++++ .../Documents/Structs/GeometryProxy.html | 708 ++++ .../Documents/Structs/GeometryReader.html | 749 +++++ .../Resources/Documents/Structs/GridRow.html | 1056 ++++++ .../Documents/Structs/GridRow/Child.html | 822 +++++ .../Documents/Structs/GridRow/Width.html | 719 ++++ .../Resources/Documents/Structs/Hidden.html | 789 +++++ .../Structs/HorizontalAlignment.html | 816 +++++ .../Resources/Documents/Structs/Image.html | 877 +++++ .../Documents/Structs/Image/ContentMode.html | 772 +++++ .../Resources/Documents/Structs/Inset.html | 976 ++++++ .../Resources/Documents/Structs/Keyed.html | 809 +++++ .../Resources/Documents/Structs/Label.html | 1159 +++++++ .../Documents/Structs/Label/LineHeight.html | 734 ++++ .../Structs/Label/LineHeight/Alignment.html | 737 ++++ .../Documents/Structs/LayoutAttributes.html | 1053 ++++++ .../Documents/Structs/LayoutOptions.html | 768 +++++ .../Documents/Structs/LayoutSubelement.html | 1031 ++++++ .../Structs/LayoutSubelement/Attributes.html | 789 +++++ .../Documents/Structs/LayoutWriter.html | 938 ++++++ .../Structs/LayoutWriter/Builder.html | 825 +++++ .../Documents/Structs/LayoutWriter/Child.html | 766 +++++ .../Structs/LayoutWriter/Context.html | 739 ++++ .../LayoutWriter/Context/LayoutPhase.html | 738 ++++ .../Structs/LayoutWriter/Sizing.html | 725 ++++ .../Documents/Structs/LifecycleObserver.html | 874 +++++ .../Resources/Documents/Structs/Opacity.html | 821 +++++ .../Resources/Documents/Structs/Overlay.html | 927 +++++ .../Documents/Structs/Overlay/Child.html | 762 +++++ .../Resources/Documents/Structs/Row.html | 970 ++++++ .../Documents/Structs/Row/RowAlignment.html | 849 +++++ .../Resources/Documents/Structs/Rule.html | 889 +++++ .../Documents/Structs/Rule/Orientation.html | 708 ++++ .../Documents/Structs/Rule/Thickness.html | 709 ++++ .../Documents/Structs/ScrollView.html | 1241 +++++++ .../Structs/ScrollView/ContentOffset.html | 784 +++++ .../ContentOffset/ScrollingContext.html | 731 ++++ .../Structs/ScrollView/ContentSize.html | 761 +++++ .../ScrollView/KeyboardAdjustmentMode.html | 705 ++++ .../ScrollView/PullToRefreshBehavior.html | 731 ++++ .../Structs/ScrollView/ScrollTrigger.html | 705 ++++ .../Documents/Structs/SegmentedControl.html | 972 ++++++ .../Structs/SegmentedControl/Item.html | 758 +++++ .../Structs/SegmentedControl/Item/Width.html | 705 ++++ .../Structs/SegmentedControl/Selection.html | 705 ++++ .../Documents/Structs/SizeConstraint.html | 1044 ++++++ .../Structs/SizeConstraint/Axis.html | 1080 ++++++ .../UnconstrainedInfiniteAxis.html | 708 ++++ .../Resources/Documents/Structs/Spacer.html | 816 +++++ .../Documents/Structs/StackLayout.html | 1178 +++++++ .../Structs/StackLayout/Alignment.html | 709 ++++ .../Structs/StackLayout/AlignmentGuide.html | 682 ++++ .../Documents/Structs/StackLayout/Axis.html | 706 ++++ .../Documents/Structs/StackLayout/Child.html | 859 +++++ .../Structs/StackLayout/Child/Priority.html | 765 +++++ .../StackLayout/OverflowDistribution.html | 708 ++++ .../Documents/Structs/StackLayout/Traits.html | 786 +++++ .../StackLayout/UnderflowDistribution.html | 816 +++++ .../Resources/Documents/Structs/Tappable.html | 784 +++++ .../Structs/TextAttributeContainer.html | 966 ++++++ .../Documents/Structs/TextField.html | 1461 ++++++++ .../Documents/Structs/TextShadow.html | 788 +++++ .../Documents/Structs/TintAdjustmentMode.html | 789 +++++ .../Documents/Structs/Transformed.html | 882 +++++ .../Structs/TransitionContainer.html | 959 ++++++ .../Structs/UIViewElementContext.html | 709 ++++ .../Structs/URLHandlerEnvironmentKey.html | 679 ++++ .../Documents/Structs/UnitPoint.html | 1036 ++++++ .../Structs/UserInteractionEnabled.html | 789 +++++ .../Documents/Structs/VerticalAlignment.html | 816 +++++ .../Documents/Structs/ViewDescription.html | 1013 ++++++ .../ViewDescription/Configuration.html | 1104 ++++++ .../FrameRoundingBehavior.html | 708 ++++ .../Structs/ViewDescriptionContext.html | 762 +++++ .../Structs/VisibilityTransition.html | 842 +++++ .../Resources/Documents/Typealiases.html | 728 ++++ .../Resources/Documents/css/highlight.css | 202 ++ .../Resources/Documents/css/jazzy.css | 404 +++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 753 +++++ .../Contents/Resources/Documents/js/jazzy.js | 74 + .../Resources/Documents/js/jazzy.search.js | 74 + .../Resources/Documents/js/jquery.min.js | 2 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1694 ++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 331776 bytes docsets/Blueprint.tgz | Bin 0 -> 923970 bytes img/carat.png | Bin 0 -> 274 bytes img/dash.png | Bin 0 -> 1338 bytes img/gh.png | Bin 0 -> 1571 bytes img/spinner.gif | Bin 0 -> 1849 bytes index.html | 753 +++++ js/jazzy.js | 74 + js/jazzy.search.js | 74 + js/jquery.min.js | 2 + js/lunr.min.js | 6 + js/typeahead.jquery.js | 1694 ++++++++++ search.json | 1 + undocumented.json | 6 + 401 files changed, 324276 insertions(+) create mode 100644 Classes.html create mode 100644 Classes/BlueprintView.html create mode 100644 Classes/FocusTrigger.html create mode 100644 Common Elements.html create mode 100644 Creating Custom Elements.html create mode 100644 Displaying Elements.html create mode 100644 Enums.html create mode 100644 Enums/BlueprintLogging.html create mode 100644 Enums/BlueprintLogging/Config.html create mode 100644 Enums/ColorKey.html create mode 100644 Enums/FontKey.html create mode 100644 Enums/LayoutMode.html create mode 100644 Enums/LayoutTransition.html create mode 100644 Enums/LinkKey.html create mode 100644 Enums/ParagraphStyleKey.html create mode 100644 Enums/TrackingKey.html create mode 100644 Enums/UnderlineColorKey.html create mode 100644 Enums/UnderlineStyleKey.html create mode 100644 Environment.html create mode 100644 Extensions.html create mode 100644 Extensions/AXCustomContent.html create mode 100644 Extensions/CGSize.html create mode 100644 Extensions/ElementBuilder.html create mode 100644 Extensions/FloatingPoint.html create mode 100644 Extensions/PreviewDevice.html create mode 100644 Extensions/UIAccessibilityTraits.html create mode 100644 Extensions/UIOffset.html create mode 100644 Protocols.html create mode 100644 Protocols/AlignmentID.html create mode 100644 Protocols/AttributedTextKey.html create mode 100644 Protocols/BlueprintViewMetricsDelegate.html create mode 100644 Protocols/CaffeinatedLayout.html create mode 100644 Protocols/CaffeinatedSingleChildLayout.html create mode 100644 Protocols/Element.html create mode 100644 Protocols/ElementBuilderChild.html create mode 100644 Protocols/EnvironmentKey.html create mode 100644 Protocols/LegacyLayout.html create mode 100644 Protocols/LegacySingleChildLayout.html create mode 100644 Protocols/Measurable.html create mode 100644 Protocols/NativeView.html create mode 100644 Protocols/ProxyElement.html create mode 100644 Protocols/StackElement.html create mode 100644 Protocols/UIViewElement.html create mode 100644 Protocols/URLHandler.html create mode 100644 Structs.html create mode 100644 Structs/AccessibilityBlocker.html create mode 100644 Structs/AccessibilityContainer.html create mode 100644 Structs/AccessibilityElement.html create mode 100644 Structs/AccessibilityElement/CustomAction.html create mode 100644 Structs/AccessibilityElement/CustomContent.html create mode 100644 Structs/AccessibilityElement/CustomContent/Importance.html create mode 100644 Structs/AccessibilityElement/Trait.html create mode 100644 Structs/AccessibilityFocus.html create mode 100644 Structs/AccessibilityFocus/Trigger.html create mode 100644 Structs/AdaptedEnvironment.html create mode 100644 Structs/Aligned.html create mode 100644 Structs/Aligned/HorizontalAlignment.html create mode 100644 Structs/Aligned/VerticalAlignment.html create mode 100644 Structs/Alignment.html create mode 100644 Structs/AnimationAttributes.html create mode 100644 Structs/AspectRatio.html create mode 100644 Structs/AttributedLabel.html create mode 100644 Structs/AttributedLabel/LinkDetectionType.html create mode 100644 Structs/AttributedText.html create mode 100644 Structs/AttributedText/Run.html create mode 100644 Structs/BlueprintViewRenderMetrics.html create mode 100644 Structs/Box.html create mode 100644 Structs/Box/BorderStyle.html create mode 100644 Structs/Box/CornerCurve.html create mode 100644 Structs/Box/CornerStyle.html create mode 100644 Structs/Box/CornerStyle/Corners.html create mode 100644 Structs/Box/ShadowStyle.html create mode 100644 Structs/Builder.html create mode 100644 Structs/Button.html create mode 100644 Structs/Centered.html create mode 100644 Structs/Column.html create mode 100644 Structs/Column/ColumnAlignment.html create mode 100644 Structs/ConstrainedAspectRatio.html create mode 100644 Structs/ConstrainedAspectRatio/ContentMode.html create mode 100644 Structs/ConstrainedSize.html create mode 100644 Structs/ConstrainedSize/Constraint.html create mode 100644 Structs/Decorate.html create mode 100644 Structs/Decorate/Corner.html create mode 100644 Structs/Decorate/Layering.html create mode 100644 Structs/Decorate/Position.html create mode 100644 Structs/Decorate/Position/PositionContext.html create mode 100644 Structs/EditingMenu.html create mode 100644 Structs/EditingMenu/Gesture.html create mode 100644 Structs/EditingMenu/MenuTrigger.html create mode 100644 Structs/EditingMenuItem.html create mode 100644 Structs/EditingMenuItem/Kind.html create mode 100644 Structs/EditingMenuItem/Kind/System.html create mode 100644 Structs/ElementContent.html create mode 100644 Structs/ElementContent/Builder.html create mode 100644 Structs/ElementDimensions.html create mode 100644 Structs/ElementPreview.html create mode 100644 Structs/ElementPreview/PreviewType.html create mode 100644 Structs/Empty.html create mode 100644 Structs/Environment.html create mode 100644 Structs/Environment/LayoutDirection.html create mode 100644 Structs/EnvironmentReader.html create mode 100644 Structs/EqualStack.html create mode 100644 Structs/EqualStack/Child.html create mode 100644 Structs/EqualStack/Direction.html create mode 100644 Structs/Flow.html create mode 100644 Structs/Flow/Child.html create mode 100644 Structs/Flow/ItemAlignment.html create mode 100644 Structs/Flow/LineAlignment.html create mode 100644 Structs/FocusBinding.html create mode 100644 Structs/FocusState.html create mode 100644 Structs/GeometryProxy.html create mode 100644 Structs/GeometryReader.html create mode 100644 Structs/GridRow.html create mode 100644 Structs/GridRow/Child.html create mode 100644 Structs/GridRow/Width.html create mode 100644 Structs/Hidden.html create mode 100644 Structs/HorizontalAlignment.html create mode 100644 Structs/Image.html create mode 100644 Structs/Image/ContentMode.html create mode 100644 Structs/Inset.html create mode 100644 Structs/Keyed.html create mode 100644 Structs/Label.html create mode 100644 Structs/Label/LineHeight.html create mode 100644 Structs/Label/LineHeight/Alignment.html create mode 100644 Structs/LayoutAttributes.html create mode 100644 Structs/LayoutOptions.html create mode 100644 Structs/LayoutSubelement.html create mode 100644 Structs/LayoutSubelement/Attributes.html create mode 100644 Structs/LayoutWriter.html create mode 100644 Structs/LayoutWriter/Builder.html create mode 100644 Structs/LayoutWriter/Child.html create mode 100644 Structs/LayoutWriter/Context.html create mode 100644 Structs/LayoutWriter/Context/LayoutPhase.html create mode 100644 Structs/LayoutWriter/Sizing.html create mode 100644 Structs/LifecycleObserver.html create mode 100644 Structs/Opacity.html create mode 100644 Structs/Overlay.html create mode 100644 Structs/Overlay/Child.html create mode 100644 Structs/Row.html create mode 100644 Structs/Row/RowAlignment.html create mode 100644 Structs/Rule.html create mode 100644 Structs/Rule/Orientation.html create mode 100644 Structs/Rule/Thickness.html create mode 100644 Structs/ScrollView.html create mode 100644 Structs/ScrollView/ContentOffset.html create mode 100644 Structs/ScrollView/ContentOffset/ScrollingContext.html create mode 100644 Structs/ScrollView/ContentSize.html create mode 100644 Structs/ScrollView/KeyboardAdjustmentMode.html create mode 100644 Structs/ScrollView/PullToRefreshBehavior.html create mode 100644 Structs/ScrollView/ScrollTrigger.html create mode 100644 Structs/SegmentedControl.html create mode 100644 Structs/SegmentedControl/Item.html create mode 100644 Structs/SegmentedControl/Item/Width.html create mode 100644 Structs/SegmentedControl/Selection.html create mode 100644 Structs/SizeConstraint.html create mode 100644 Structs/SizeConstraint/Axis.html create mode 100644 Structs/SizeConstraint/UnconstrainedInfiniteAxis.html create mode 100644 Structs/Spacer.html create mode 100644 Structs/StackLayout.html create mode 100644 Structs/StackLayout/Alignment.html create mode 100644 Structs/StackLayout/AlignmentGuide.html create mode 100644 Structs/StackLayout/Axis.html create mode 100644 Structs/StackLayout/Child.html create mode 100644 Structs/StackLayout/Child/Priority.html create mode 100644 Structs/StackLayout/OverflowDistribution.html create mode 100644 Structs/StackLayout/Traits.html create mode 100644 Structs/StackLayout/UnderflowDistribution.html create mode 100644 Structs/Tappable.html create mode 100644 Structs/TextAttributeContainer.html create mode 100644 Structs/TextField.html create mode 100644 Structs/TextShadow.html create mode 100644 Structs/TintAdjustmentMode.html create mode 100644 Structs/Transformed.html create mode 100644 Structs/TransitionContainer.html create mode 100644 Structs/UIViewElementContext.html create mode 100644 Structs/URLHandlerEnvironmentKey.html create mode 100644 Structs/UnitPoint.html create mode 100644 Structs/UserInteractionEnabled.html create mode 100644 Structs/VerticalAlignment.html create mode 100644 Structs/ViewDescription.html create mode 100644 Structs/ViewDescription/Configuration.html create mode 100644 Structs/ViewDescription/FrameRoundingBehavior.html create mode 100644 Structs/ViewDescriptionContext.html create mode 100644 Structs/VisibilityTransition.html create mode 100644 Typealiases.html create mode 100644 badge.svg create mode 100644 css/highlight.css create mode 100644 css/jazzy.css create mode 100644 docsets/Blueprint.docset/Contents/Info.plist create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Classes.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Classes/BlueprintView.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Classes/FocusTrigger.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Common Elements.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Creating Custom Elements.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Displaying Elements.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging/Config.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ColorKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/FontKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutMode.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutTransition.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LinkKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ParagraphStyleKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/TrackingKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineColorKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineStyleKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Environment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/AXCustomContent.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/CGSize.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/ElementBuilder.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/PreviewDevice.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIAccessibilityTraits.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIOffset.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AlignmentID.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AttributedTextKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/BlueprintViewMetricsDelegate.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedLayout.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedSingleChildLayout.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Element.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ElementBuilderChild.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/EnvironmentKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacyLayout.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacySingleChildLayout.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Measurable.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/NativeView.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ProxyElement.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/StackElement.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/UIViewElement.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/URLHandler.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityBlocker.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityContainer.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomAction.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent/Importance.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/Trait.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus/Trigger.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AdaptedEnvironment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/HorizontalAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/VerticalAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Alignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AnimationAttributes.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AspectRatio.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel/LinkDetectionType.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText/Run.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/BlueprintViewRenderMetrics.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/BorderStyle.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerCurve.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle/Corners.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/ShadowStyle.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Builder.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Button.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Centered.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column/ColumnAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio/ContentMode.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize/Constraint.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Corner.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Layering.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position/PositionContext.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/Gesture.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/MenuTrigger.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind/System.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent/Builder.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementDimensions.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview/PreviewType.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Empty.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment/LayoutDirection.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EnvironmentReader.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Direction.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/ItemAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/LineAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusBinding.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusState.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryProxy.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryReader.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Width.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Hidden.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/HorizontalAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image/ContentMode.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Inset.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Keyed.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight/Alignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutAttributes.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutOptions.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement/Attributes.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Builder.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context/LayoutPhase.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Sizing.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LifecycleObserver.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Opacity.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row/RowAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Orientation.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Thickness.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset/ScrollingContext.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentSize.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/KeyboardAdjustmentMode.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/PullToRefreshBehavior.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ScrollTrigger.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item/Width.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Selection.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/Axis.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Spacer.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Alignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/AlignmentGuide.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Axis.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child/Priority.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/OverflowDistribution.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Traits.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/UnderflowDistribution.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Tappable.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextAttributeContainer.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextField.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextShadow.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TintAdjustmentMode.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Transformed.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TransitionContainer.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UIViewElementContext.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/URLHandlerEnvironmentKey.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UnitPoint.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UserInteractionEnabled.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VerticalAlignment.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/Configuration.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/FrameRoundingBehavior.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescriptionContext.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VisibilityTransition.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/Typealiases.html create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docsets/Blueprint.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docsets/Blueprint.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docsets/Blueprint.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/index.html create mode 100755 docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docsets/Blueprint.docset/Contents/Resources/Documents/search.json create mode 100644 docsets/Blueprint.docset/Contents/Resources/docSet.dsidx create mode 100644 docsets/Blueprint.tgz create mode 100755 img/carat.png create mode 100755 img/dash.png create mode 100755 img/gh.png create mode 100644 img/spinner.gif create mode 100644 index.html create mode 100755 js/jazzy.js create mode 100644 js/jazzy.search.js create mode 100644 js/jquery.min.js create mode 100644 js/lunr.min.js create mode 100644 js/typeahead.jquery.js create mode 100644 search.json create mode 100644 undocumented.json diff --git a/Classes.html b/Classes.html new file mode 100644 index 000000000..bd209a22f --- /dev/null +++ b/Classes.html @@ -0,0 +1,686 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + FocusTrigger + +
    +
    +
    +
    +
    +
    +

    A trigger for focus and blur actions.

    + +

    This type is meant to be used in conjunction with FocusState; you will usually not create +it directly. For information about adding focus support to a custom element, see FocusBinding.

    + +

    Triggers allow imperative actions to be invoked on backing views, by creating a trigger in a +declarative model before the view is realized, late-binding the actions to a backing view after +that view has been realized, and then invoking the action on the trigger later in response to +some other event.

    +

    See Also

    + +

    FocusBinding

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class FocusTrigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/BlueprintView.html b/Classes/BlueprintView.html new file mode 100644 index 000000000..4f0f78f80 --- /dev/null +++ b/Classes/BlueprintView.html @@ -0,0 +1,1234 @@ + + + + BlueprintView Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintView

+
+
+ +
public final class BlueprintView : UIView
+ +
+
+

A view that is responsible for displaying an Element hierarchy.

+ +

A view controller that renders content via Blueprint might look something +like this:

+
final class HelloWorldViewController: UIViewController {
+
+   private var blueprintView = BlueprintView(element: nil)
+
+   override func viewDidLoad() {
+       super.viewDidLoad()
+
+       let rootElement = Label(text: "Hello, world!")
+       blueprintView.element = rootElement
+       view.addSubview(blueprintView)
+    }
+
+    override func viewDidLayoutSubviews() {
+        super.viewDidLayoutSubviews()
+        blueprintView.frame = view.bounds
+    }
+
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    A base environment used when laying out and rendering the element tree.

    + +

    Some keys will be overridden with the traits from the view itself. Eg, windowSize, safeAreaInsets, etc.

    + +

    If this blueprint view is within another blueprint view, the environment of the parent view +will be inherited by this view if automaticallyInheritsEnvironmentFromContainingBlueprintViews +is enabled. In the case of matching keys in both the inherited environment and the provided +environment, the values from this environment will take priority over the inherited environment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    If true, then Blueprint will automatically inherit the Environment from the nearest +parent BlueprintView in the view hierarchy.

    + +

    If false, then only the values from environment will be used to +seed the environment passed to the element hierarchy.

    + +

    This property is recursive – if the nearest parent BlueprintView also sets this property to +true, then you will inherit the Environment from that view’s parent BlueprintView, and so on.

    + +

    Defaults to true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var automaticallyInheritsEnvironmentFromContainingBlueprintViews: Bool { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The root element that is displayed within the view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    We need to invalidateIntrinsicContentSize when bound.size changes for Auto Layout to work correctly.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var bounds: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    An optional explicit layout mode for this view. If nil, this view will inherit the layout +mode of its nearest ancestor or use default if it has no ancestor.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutMode: LayoutMode? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name to help identify this view

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + metricsDelegate + +
    +
    +
    +
    +
    +
    +

    Provides performance metrics about the duration of layouts, updates, etc.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var metricsDelegate: BlueprintViewMetricsDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Instantiates a view with the given element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public required init(element: Element?, environment: Environment = .empty)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + element + + +
    +

    The root element that will be displayed in the view.

    +
    +
    + + environment + + +
    +

    A base environment to render elements with. Defaults to .empty.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience override init(frame: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within the given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis, eg:

    +
    // Measures with a width of 100, and no height constraint.
    +blueprintView.sizeThatFits(CGSize(width: 100.0, height: 0.0))
    +
    +// Measures with a height of 100, and no width constraint.
    +blueprintView.sizeThatFits(CGSize(width: 0.0, height: 100.0))
    +
    +// Measures unconstrained in both axes.
    +blueprintView.sizeThatFits(.zero)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func sizeThatFits(_ fittingSize: CGSize) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within the given SizeConstraint. +by measuring the current element of the BlueprintView.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sizeThatFits(_ constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within then given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func systemLayoutSizeFitting(
    +    _ targetSize: CGSize
    +) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within then given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func systemLayoutSizeFitting(
    +    _ targetSize: CGSize,
    +    withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority,
    +    verticalFittingPriority: UILayoutPriority
    +) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intrinsicContentSize + +
    +
    +
    +
    +
    +
    +

    For us, this is the same as sizeThatFits, since blueprint does not +contain the same concept of constraints as Autolayout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var intrinsicContentSize: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var semanticContentAttribute: UISemanticContentAttribute { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func safeAreaInsetsDidChange()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutSubviews() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func layoutSubviews()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + didMoveToWindow() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func didMoveToWindow()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/FocusTrigger.html b/Classes/FocusTrigger.html new file mode 100644 index 000000000..1138444ab --- /dev/null +++ b/Classes/FocusTrigger.html @@ -0,0 +1,800 @@ + + + + FocusTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusTrigger

+
+
+ +
public final class FocusTrigger
+ +
+
+

A trigger for focus and blur actions.

+ +

This type is meant to be used in conjunction with FocusState; you will usually not create +it directly. For information about adding focus support to a custom element, see FocusBinding.

+ +

Triggers allow imperative actions to be invoked on backing views, by creating a trigger in a +declarative model before the view is realized, late-binding the actions to a backing view after +that view has been realized, and then invoking the action on the trigger later in response to +some other event.

+

See Also

+ +

FocusBinding

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Create a new trigger, not yet bound to any view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focusAction + +
    +
    +
    +
    +
    +
    +

    The action to be invoked on focus, which will be set by a backing view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var focusAction: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blurAction + +
    +
    +
    +
    +
    +
    +

    The action to be invoked on blur, which will be set by a backing view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var blurAction: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focus() + +
    +
    +
    +
    +
    +
    +

    Focuses the backing view bound to this trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focus()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blur() + +
    +
    +
    +
    +
    +
    +

    Blurs (removes focus from) the backing view bound to this trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func blur()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Common Elements.html b/Common Elements.html new file mode 100644 index 000000000..7195c6132 --- /dev/null +++ b/Common Elements.html @@ -0,0 +1,1523 @@ + + + + Common Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Common Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AccessibilityBlocker + +
    +
    +
    +
    +
    +
    +

    Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityBlocker : Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Acts as an accessibility container for any accessible subviews.

    + +

    Accessible subviews are found using the following algorithm:

    + +

    Recurse subviews until a view is found that either

    + +
      +
    • hasisAccessibilityElement set to true or
    • +
    + +

    If an accessibility element is found, we add it to the accessibilityElements +and terminate the search down that branch. If a container is found, +the elements returned from the container are added to the accessibilityElements +and the search down that branch is also terminated.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityContainer : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AccessibilityElement + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AdaptedEnvironment + +
    +
    +
    +
    +
    +
    +

    Wraps an element tree with a modified environment.

    + +

    By specifying environmental values with this element, all child elements nested +will automatically inherit those values automatically. Values can be changed +anywhere in a sub-tree by inserting another AdaptedEnvironment element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AdaptedEnvironment : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EnvironmentReader + +
    +
    +
    +
    +
    +
    +

    An element that dynamically builds its content based on the environment.

    + +

    Use this element to build elements whose contents may change depending on the Environment.

    +

    Example

    +
    EnvironmentReader { environment -> Element in
    +    MyElement(
    +        foo: environment.foo
    +    )
    +}
    +
    +
    +

    Seealso

    + ProxyElement + +
    +

    Seealso

    + Environment + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EnvironmentReader : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Aligned + +
    +
    +
    +
    +
    +
    +

    Aligns a content element within itself. The vertical and horizontal alignment may be set independently.

    + +

    When using alignment mode .fill, the content is scaled to the width or height of the Aligned element.

    + +

    For other modes, the size of the content element is determined by calling measure(in:) +on the content element – even if that size is larger than the wrapping element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Aligned : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AttributedLabel + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AttributedLabel : Element, Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Box + +
    +
    +
    +
    +
    +
    +

    A simple element that wraps a child element and adds visual styling including +background color.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Box : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Button + +
    +
    +
    +
    +
    +
    +

    An element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when +highlighted (or disabled), it fades its contents to partial alpha.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Button : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Centered + +
    +
    +
    +
    +
    +
    +

    Centers a content element within itself.

    + +

    The size of the content element is determined by calling measure(in:) on +the content element – even if that size is larger than the wrapping Centered +element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Centered : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Column + +
    +
    +
    +
    +
    +
    +

    Displays a list of items in a linear vertical layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Column : StackElement
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Constrains the size of the content element to an aspect ratio.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ConstrainedAspectRatio : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ConstrainedSize + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the contained element in the ranges specified by the width and height properties.

    + +

    There are several constraint types available for each axis. See ConstrainedSize.Constraint for a full list and in-depth +descriptions of each.

    +

    Notes

    + +

    An important note is that the constraints of ConstrainedSize are authoritative during measurement. For example, +if your ConstrainedSize specifies .atLeast(300) for width, and the ConstrainedSize is asked to measure within +a SizeConstraint that is at most 100 points wide, the returned measurement will still be 300 points. The same goes for the +height of the ConstrainedSize.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ConstrainedSize : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Empty + +
    +
    +
    +
    +
    +
    +

    An empty Element which has no size and draws no content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Empty : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EqualStack + +
    +
    +
    +
    +
    +
    +

    An element that sizes its children equally, stacking them in the primary axis according to +the specified direction and spacing them according to the specified spacing. In the +secondary axis, children are justified to fill the space of the largest child.

    +
    +

    Note

    + A stack measures itself by determining its largest child in each axis, and + in the case of the primary axis, multiplying by children.count (accounting + for spacing as necessary). + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EqualStack : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GeometryReader + +
    +
    +
    +
    +
    +
    +

    An element that dynamically builds its content based on the available space.

    + +

    Use this element to build elements whose contents may change responsively to +different layouts.

    +

    Example

    +
    GeometryReader { (geometry) -> Element in
    +    let image: UIImage
    +    switch geometry.constraint.width.maximum {
    +    case ..<100:
    +        image = UIImage(named: "small")!
    +    case 100..<500:
    +        image = UIImage(named: "medium")!
    +    default:
    +        image = UIImage(named: "large")!
    +    }
    +    return Image(image: image)
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GeometryReader : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Image + +
    +
    +
    +
    +
    +
    +

    Displays an image within an element hierarchy.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Image : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Inset + +
    +
    +
    +
    +
    +
    +

    Insets a content element within a layout.

    + +

    Commonly used to add padding around another element when displayed within a container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Inset : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Label + +
    +
    +
    +
    +
    +
    +

    Displays text content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Label : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Overlay + +
    +
    +
    +
    +
    +
    +

    Stretches all of its child elements to fill the layout area, stacked on top of each other.

    + +

    During a layout pass, measurement is calculated as the max size (in both x and y dimensions) +produced by measuring all of the child elements.

    + +

    View-backed descendants will be z-ordered from back to front in the order of this element’s +children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Overlay : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Row + +
    +
    +
    +
    +
    +
    +

    Displays a list of items in a linear horizontal layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Row : StackElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Rule + +
    +
    +
    +
    +
    +
    +

    A solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length, +suitable for use as a separator.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Rule : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ScrollView + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and makes it scrollable.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ScrollView : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SegmentedControl + +
    +
    +
    +
    +
    +
    +

    Allows users to pick from an array of options.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct SegmentedControl : Element, Measurable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Spacer + +
    +
    +
    +
    +
    +
    +

    An element that does not display anything (it has neither children or a view).

    + +

    Spacer simply takes up a specified amount of space within a layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Spacer : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Tappable + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and calls the provided closure when tapped.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Tappable : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TextField + +
    +
    +
    +
    +
    +
    +

    Displays a text field.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextField : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TransitionContainer + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and adds transitions when the element appears, +disappears, or changes layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TransitionContainer : Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Creating Custom Elements.html b/Creating Custom Elements.html new file mode 100644 index 000000000..23e934baf --- /dev/null +++ b/Creating Custom Elements.html @@ -0,0 +1,888 @@ + + + + Creating Custom Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Creating Custom Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Element + +
    +
    +
    +
    +
    +
    +

    Conforming types represent a rectangular content area in a two-dimensional +layout space.

    + +
    + +

    The ultimate purpose of an element is to provide visual content. This can be +done in two ways:

    + +
      +
    • By providing a view description (ViewDescription).

    • +
    • By providing child elements that will be displayed recursively within +the local coordinate space.

    • +
    + +
    + +

    A custom element might look something like this:

    +
    struct MyElement: Element {
    +
    +    var backgroundColor: UIColor = .red
    +
    +    // Returns a single child element.
    +    var content: ElementContent {
    +        return ElementContent(child: Label(text: "😂"))
    +    }
    +
    +    // Providing a view description means that this element will be
    +    // backed by a UIView instance when displayed in a `BlueprintView`.
    +    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
    +        return UIView.describe { config in
    +            config.bind(backgroundColor, to: \.backgroundColor)
    +        }
    +    }
    +
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ProxyElement + +
    +
    +
    +
    +
    +
    +

    Custom elements commonly use another element to actually display content. For example, a profile element might +display an image and a few labels inside a Column element. The ProxyElement protocol is provided to make that +task easier.

    + +

    Conforming types only need to implement elementRepresentation in order to generate an element that will be +displayed.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ProxyElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementContent + +
    +
    +
    +
    +
    +
    +

    Represents the content of an element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ElementContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ViewDescription + +
    +
    +
    +
    +
    +
    +

    Contains a description of a UIView instance. A description includes +logic to handle all parts of a view lifecycle from instantiation onward.

    + +

    View descriptions include:

    + +
      +
    • The view’s class.
    • +
    • How an instance of the view should be instantiated.
    • +
    • How to update a view instance by setting properties appropriately.
    • +
    • Which subview of a view instance should be used as a contain for +additional subviews.
    • +
    • How to animate transitions for appearance, layout changes, and +disappearance.
    • +
    • Hooks to be called during lifecycle events.
    • +
    + +

    A view description does not contain a concrete view instance. It simply +contains functionality for creating, updating, and animating view instances.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ViewDescription
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition used when layout attributes change for a view during an +update cycle.

    + +

    ‘Inherited’ transitions: the ‘inherited’ transition is determined by searching up the tree (not literally, but +this is the resulting behavior). The nearest ancestor that defines an animation will be used, following this +logic:

    + +
      +
    • Ancestors with a layout transition of none will result in no inherited animation for their descendents.
    • +
    • Ancestors in the tree with a layout transition of inherited will be skipped, and the search will continue +up the tree.
    • +
    • Any ancestors in the tree with a layout transition of inheritedWithFallback will be used if they do not +themselves inherit a layout transition from one of their ancestors.
    • +
    • Ancestors with a layout transition of specific will always be used for their descendents inherited +animation.
    • +
    • If no ancestor is found that specifies a layout transition, but the containing BlueprintView has the element +property assigned from within a UIKit animation block, that animation will be used as the inherited animation.
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VisibilityTransition + +
    +
    +
    +
    +
    +
    +

    The transition used when a view is inserted or removed during an update cycle.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct VisibilityTransition
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Displaying Elements.html b/Displaying Elements.html new file mode 100644 index 000000000..29435f7bf --- /dev/null +++ b/Displaying Elements.html @@ -0,0 +1,773 @@ + + + + Displaying Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Displaying Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + BlueprintView + +
    +
    +
    +
    +
    +
    +

    A view that is responsible for displaying an Element hierarchy.

    + +

    A view controller that renders content via Blueprint might look something +like this:

    +
    final class HelloWorldViewController: UIViewController {
    +
    +   private var blueprintView = BlueprintView(element: nil)
    +
    +   override func viewDidLoad() {
    +       super.viewDidLoad()
    +
    +       let rootElement = Label(text: "Hello, world!")
    +       blueprintView.element = rootElement
    +       view.addSubview(blueprintView)
    +    }
    +
    +    override func viewDidLayoutSubviews() {
    +        super.viewDidLayoutSubviews()
    +        blueprintView.frame = view.bounds
    +    }
    +
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class BlueprintView : UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementPreview + +
    +
    +
    +
    +
    +
    +

    A SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements +via Xcode’s preview functionality (enable via the Editor > Canvas menu).

    + +

    You can leverage ElementPreview by adding something like this to the bottom of the file which contains +your Blueprint element, then as you edit and work on your element, the live preview will update to show the +current state of your element:

    +
    
    +struct MyElement : Element {
    +   ...
    +}
    +
    +// Add this at the bottom of your element's source file.
    +
    +#if DEBUG && canImport(SwiftUI) && !arch(i386) && !arch(arm)
    +
    +import SwiftUI
    +
    +@available(iOS 13.0, *)
    +struct MyElement_Preview: PreviewProvider {
    +    static var previews: some View {
    +        ElementPreview {
    +            MyElement()
    +        }
    +    }
    +}
    +
    +#endif
    +
    +
    +

    Uhhh

    + +

    You’re probably asking… +Why the !arch(i386) check above? Turns out, a compiler bug! +SwiftUI is only available on 64 bit devices, but the canImport check erroneously +finds it when building to target iOS 10 devices. Until we drop iOS 10, this part of the check is also required.

    +

    Details

    + +

    It’s important that you keep the PreviewProvider in the same file as the element that you are editing.

    + +

    Why? Xcode uses a new feature called “Dynamic Replacement” to re-compile the source file you are editing, +and inject it back into the running app which drives the preview. This only works on the level of a single +file – if your preview and element live in separate files, Xcode needs to recompile your entire module +which will slow down preview updates greatly.

    + +

    You can learn more about Xcode previews here: https://nshipster.com/swiftui-previews/

    +

    Requirements

    + +

    You must be running Xcode 11 and Catalina to take advantage of live previews. +They do not work on Mojave. Your selected simulator must also be an iOS 13 device.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 13.0, *)
    +public struct ElementPreview : View
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums.html b/Enums.html new file mode 100644 index 000000000..bc3ce0f45 --- /dev/null +++ b/Enums.html @@ -0,0 +1,976 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+
+ + +
+ +

Font +

+
+
+ +
+
+
+ + +
+ +

Color +

+
+
+ +
+
+
+ + +
+ +

Tracking +

+
+
+ +
+
+
+ + +
+ +

Underline +

+
+
+ +
+
+
+ + +
+ +

Paragraph style +

+
+
+ +
+
+
+ + +
+ +

Link +

+
+
+
    +
  • +
    + + + + LinkKey + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LinkKey : AttributedTextKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + BlueprintLogging + +
    +
    +
    +
    +
    +
    +

    Namespace for logging config.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BlueprintLogging
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutMode + +
    +
    +
    +
    +
    +
    +

    Controls the layout system that Blueprint uses to lay out elements.

    + +

    Blueprint supports multiple layout systems. Each is expected to produce the same result, but +some may have different performance profiles or special requirements.

    + +

    You can change the layout system used by setting the layoutMode property, but +generally you should use the default option.

    + +

    Changing the default will cause all instances of BlueprintView to be invalidated, and re- +render their contents.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutMode : Equatable
    +
    extension LayoutMode: CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/BlueprintLogging.html b/Enums/BlueprintLogging.html new file mode 100644 index 000000000..d4539c7e2 --- /dev/null +++ b/Enums/BlueprintLogging.html @@ -0,0 +1,739 @@ + + + + BlueprintLogging Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintLogging

+
+
+ +
public enum BlueprintLogging
+ +
+
+

Namespace for logging config.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Config + +
    +
    +
    +
    +
    +
    +

    Configuration for logging options

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + config + +
    +
    +
    +
    +
    +
    +

    Logging configuration

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var config: Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    If enabled, Blueprint will emit signpost logs. You can view these logs in Instruments to +aid in debugging or performance tuning.

    + +

    Signpost logging is disabled by default.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var isEnabled: Bool { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/BlueprintLogging/Config.html b/Enums/BlueprintLogging/Config.html new file mode 100644 index 000000000..c3d6e688b --- /dev/null +++ b/Enums/BlueprintLogging/Config.html @@ -0,0 +1,764 @@ + + + + Config Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Config

+
+
+ +
public struct Config
+ +
+
+

Configuration for logging options

+ +
+
+ +
+
+
+
    +
  • +
    + + + + recordElementMeasures + +
    +
    +
    +
    +
    +
    +

    When true, timing data will be logged when measuring each Element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var recordElementMeasures: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(recordElementMeasures: Bool)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lite + +
    +
    +
    +
    +
    +
    +

    Logging configuration that will not record measurement data for all Elements. +This provides a reasonable balance between data collection and performance impact. +This is the default logging configuration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let lite: BlueprintLogging.Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verbose + +
    +
    +
    +
    +
    +
    +

    Logging configuration that includes measurement data. +This provides the most granular information, but has a noticeable impact on performance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let verbose: BlueprintLogging.Config
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ColorKey.html b/Enums/ColorKey.html new file mode 100644 index 000000000..f9d9968df --- /dev/null +++ b/Enums/ColorKey.html @@ -0,0 +1,705 @@ + + + + ColorKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ColorKey

+
+
+ +
public enum ColorKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/FontKey.html b/Enums/FontKey.html new file mode 100644 index 000000000..930a778ec --- /dev/null +++ b/Enums/FontKey.html @@ -0,0 +1,705 @@ + + + + FontKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FontKey

+
+
+ +
public enum FontKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LayoutMode.html b/Enums/LayoutMode.html new file mode 100644 index 000000000..b888b9f33 --- /dev/null +++ b/Enums/LayoutMode.html @@ -0,0 +1,826 @@ + + + + LayoutMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutMode

+
+
+ +
public enum LayoutMode : Equatable
+
extension LayoutMode: CustomStringConvertible
+ +
+
+

Controls the layout system that Blueprint uses to lay out elements.

+ +

Blueprint supports multiple layout systems. Each is expected to produce the same result, but +some may have different performance profiles or special requirements.

+ +

You can change the layout system used by setting the layoutMode property, but +generally you should use the default option.

+ +

Changing the default will cause all instances of BlueprintView to be invalidated, and re- +render their contents.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var `default`: `Self` { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + legacy + +
    +
    +
    +
    +
    +
    +

    The “standard” layout system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case legacy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + caffeinated(options:) + +
    +
    +
    +
    +
    +
    +

    A newer layout system with some optimizations made possible by ensuring elements adhere +to a certain contract for behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case caffeinated(options: LayoutOptions = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + caffeinated + +
    +
    +
    +
    +
    +
    +

    A newer layout system with some optimizations made possible by ensuring elements adhere +to a certain contract for behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let caffeinated: LayoutMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the layout mode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LayoutTransition.html b/Enums/LayoutTransition.html new file mode 100644 index 000000000..2896dd116 --- /dev/null +++ b/Enums/LayoutTransition.html @@ -0,0 +1,779 @@ + + + + LayoutTransition Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutTransition

+
+
+ +
public enum LayoutTransition
+ +
+
+

The transition used when layout attributes change for a view during an +update cycle.

+ +

‘Inherited’ transitions: the ‘inherited’ transition is determined by searching up the tree (not literally, but +this is the resulting behavior). The nearest ancestor that defines an animation will be used, following this +logic:

+ +
    +
  • Ancestors with a layout transition of none will result in no inherited animation for their descendents.
  • +
  • Ancestors in the tree with a layout transition of inherited will be skipped, and the search will continue +up the tree.
  • +
  • Any ancestors in the tree with a layout transition of inheritedWithFallback will be used if they do not +themselves inherit a layout transition from one of their ancestors.
  • +
  • Ancestors with a layout transition of specific will always be used for their descendents inherited +animation.
  • +
  • If no ancestor is found that specifies a layout transition, but the containing BlueprintView has the element +property assigned from within a UIKit animation block, that animation will be used as the inherited animation.
  • +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    +

    The view will never animate layout changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + specific(_:) + +
    +
    +
    +
    +
    +
    +

    Layout changes will always animate with the given attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case specific(_: AnimationAttributes = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inherited + +
    +
    +
    +
    +
    +
    +

    The view will only animate layout changes if an inherited transition exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inherited
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The view will animate along with an inherited transition (if present) or the specified fallback attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inheritedWithFallback(_: AnimationAttributes = .default)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LinkKey.html b/Enums/LinkKey.html new file mode 100644 index 000000000..fcfa01ae3 --- /dev/null +++ b/Enums/LinkKey.html @@ -0,0 +1,705 @@ + + + + LinkKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LinkKey

+
+
+ +
public enum LinkKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = URL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ParagraphStyleKey.html b/Enums/ParagraphStyleKey.html new file mode 100644 index 000000000..f228059d5 --- /dev/null +++ b/Enums/ParagraphStyleKey.html @@ -0,0 +1,705 @@ + + + + ParagraphStyleKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ParagraphStyleKey

+
+
+ +
public enum ParagraphStyleKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = NSParagraphStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/TrackingKey.html b/Enums/TrackingKey.html new file mode 100644 index 000000000..1ba2df447 --- /dev/null +++ b/Enums/TrackingKey.html @@ -0,0 +1,705 @@ + + + + TrackingKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TrackingKey

+
+
+ +
public enum TrackingKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/UnderlineColorKey.html b/Enums/UnderlineColorKey.html new file mode 100644 index 000000000..f946c82f1 --- /dev/null +++ b/Enums/UnderlineColorKey.html @@ -0,0 +1,705 @@ + + + + UnderlineColorKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderlineColorKey

+
+
+ +
public enum UnderlineColorKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/UnderlineStyleKey.html b/Enums/UnderlineStyleKey.html new file mode 100644 index 000000000..69cf23a53 --- /dev/null +++ b/Enums/UnderlineStyleKey.html @@ -0,0 +1,705 @@ + + + + UnderlineStyleKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderlineStyleKey

+
+
+ +
public enum UnderlineStyleKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Environment.html b/Environment.html new file mode 100644 index 000000000..98271525c --- /dev/null +++ b/Environment.html @@ -0,0 +1,752 @@ + + + + Environment Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Environment

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Environment + +
    +
    +
    +
    +
    +
    +

    Environment is a container for values to be passed down an element tree.

    + +

    Environment values are not resolved until the tree is being rendered, so they do not need to be +explicitly passed to elements at the time they are created.

    + +

    Environment key-value pairs are strongly typed: keys are types conforming to the +EnvironmentKey protocol, and each key’s value is the type of that key’s +EnvironmentKey.Value associated value. Keys must provide a default value.

    +

    Example

    + +

    To set an environment value, so that it will cascade to child elements, use +AdaptedEnvironment. Here, every element in childElement will have access to someValue +via the key MyEnvironmentKey.

    +
    AdaptedEnvironment(
    +    key: MyEnvironmentKey.self,
    +    value: someValue,
    +    wrapping: childElement
    +)
    +
    + +

    To read an environment value, use EnvironmentReader. If this element were part of the child +element in the previous example, myValue would be set to someValue. If the key had not +been set in an ancestor element, the value would be MyEnvironmentKey.defaultValue.

    +
    struct MyElement: ProxyElement {
    +    var elementRepresentation: Element {
    +        return EnvironmentReader { environment -> Element in
    +            let myValue = environment[MyEnvironmentKey.self]
    +            return SomeElement(using: myValue)
    +        }
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Environment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EnvironmentKey + +
    +
    +
    +
    +
    +
    +

    Types conforming to this protocol can be used as keys in an Environment.

    + +

    Using a type as the key allows us to strongly type each value, with the +key’s EnvironmentKey.Value associated value.

    +

    Example

    + +

    Usually a key is implemented with an uninhabited type, such an empty enum.

    +
    enum WidgetCountKey: EnvironmentKey {
    +    static let defaultValue: Int = 0
    +}
    +
    + +

    You can write a small extension on Environment to make it easier to use your key.

    +
    extension Environment {
    +    var widgetCount: Int {
    +        get { self[WidgetCountKey.self] }
    +        set { self[WidgetCountKey.self] = newValue }
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol EnvironmentKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions.html b/Extensions.html new file mode 100644 index 000000000..182d5362a --- /dev/null +++ b/Extensions.html @@ -0,0 +1,880 @@ + + + + Extensions Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+ +
+
+
+ +
+
+
+ + +
+ +

Extensions +

+
+
+
    +
  • +
    + + + + UIOffset + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UIOffset: Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/AXCustomContent.html b/Extensions/AXCustomContent.html new file mode 100644 index 000000000..0b5dbc50c --- /dev/null +++ b/Extensions/AXCustomContent.html @@ -0,0 +1,705 @@ + + + + AXCustomContent Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AXCustomContent

+
+
+ +
extension AXCustomContent
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(_ content: AccessibilityElement.CustomContent)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(label: String, value: String?, importance: AXCustomContent.Importance = .default)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/CGSize.html b/Extensions/CGSize.html new file mode 100644 index 000000000..2cf3624dd --- /dev/null +++ b/Extensions/CGSize.html @@ -0,0 +1,707 @@ + + + + CGSize Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CGSize

+
+
+ +
extension CGSize
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + infinity + +
    +
    +
    +
    +
    +
    +

    A size with infinity in both dimensions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let infinity: CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns a size with infinite dimensions replaced by the values from the given replacement.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replacingInfinity(with replacement: CGSize) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/ElementBuilder.html b/Extensions/ElementBuilder.html new file mode 100644 index 000000000..c1847f420 --- /dev/null +++ b/Extensions/ElementBuilder.html @@ -0,0 +1,814 @@ + + + + ElementBuilder Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementBuilder

+
+
+ +
extension ElementBuilder
+
extension ElementBuilder where Child == Overlay.Child
+
extension ElementBuilder where Child == StackLayout.Child
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow an Element to be implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ element: Element) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow an Optional Element to be unwrapped and implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ child: Element?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow Elements to be implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ elements: [Element]) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Available where Child == Overlay.Child +

+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ keyed: Keyed) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Available where Child == StackLayout.Child +

+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ keyed: Keyed) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/FloatingPoint.html b/Extensions/FloatingPoint.html new file mode 100644 index 000000000..d0063e769 --- /dev/null +++ b/Extensions/FloatingPoint.html @@ -0,0 +1,808 @@ + + + + FloatingPoint Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FloatingPoint

+
+
+ +
extension FloatingPoint
+ +
+
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns replacement if self.isInfinite is true, or self if self is finite.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replacingInfinity(with replacement: Self) -> Self
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + round(_:by:) + +
    +
    +
    +
    +
    +
    +

    Rounds this value to the specified scale, where the scale is the number of rounding stops per integer.

    + +

    A rounding scale of 1.0 is standard integer rounding. +A rounding scale of 2.0 rounds to halves (0, 0.5, 1.0, 1.5, 2.0, 2.5., …). +A rounding scale of 3.0 rounds to thirds (0, 1/3, 2/3, 1.0, 4/3, 5/3, 2.0, …).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func round(_ rule: FloatingPointRoundingRule, by scale: Self)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + rule + + +
    +

    the rounding rule

    +
    +
    + + scale + + +
    +

    the rounding scale

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + rounded(_:by:) + +
    +
    +
    +
    +
    +
    +

    Returns this value rounded to the specified scale, where the scale is the number of rounding stops per integer.

    + +

    A rounding scale of 1.0 is standard integer rounding. +A rounding scale of 2.0 rounds to halves (0, 0.5, 1.0, 1.5, 2.0, 2.5., …). +A rounding scale of 3.0 rounds to thirds (0, 1/3, 2/3, 1.0, 4/3, 5/3, 2.0, …).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func rounded(_ rule: FloatingPointRoundingRule, by scale: Self) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + rule + + +
    +

    the rounding rule

    +
    +
    + + scale + + +
    +

    the rounding scale

    +
    +
    +
    +
    +

    Return Value

    +

    The rounded value.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/PreviewDevice.html b/Extensions/PreviewDevice.html new file mode 100644 index 000000000..56cebf0c9 --- /dev/null +++ b/Extensions/PreviewDevice.html @@ -0,0 +1,1263 @@ + + + + PreviewDevice Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PreviewDevice

+
+
+ +
extension PreviewDevice
+ +
+
+

The available devices to be used for previewing elements in an Xcode preview.

+ +

Via https://developer.apple.com/documentation/swiftui/securefield/3289399-previewdevice

+ +
+
+ +
+
+
+
    +
  • +
    + + + + iPhone7 + +
    +
    +
    +
    +
    +
    +

    iPhone 7

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone7: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone7Plus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone7Plus: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone8 + +
    +
    +
    +
    +
    +
    +

    iPhone 8

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone8: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone8Plus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone8Plus: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneSE_1 + +
    +
    +
    +
    +
    +
    +

    iPhone SE

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneSE_1: PreviewDevice { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneSE_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneSE_2: PreviewDevice { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneX + +
    +
    +
    +
    +
    +
    +

    iPhone X

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneX: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXs: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXsMax + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXsMax: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXr + +
    +
    +
    +
    +
    +
    +

    iPhone Xr

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXr: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadMini_4 + +
    +
    +
    +
    +
    +
    +

    iPad Mini

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadMini_4: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadMini_5 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadMini_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadAir_2 + +
    +
    +
    +
    +
    +
    +

    iPad Air

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadAir_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadAir_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadAir_3: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPad_5 + +
    +
    +
    +
    +
    +
    +

    iPad

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPad_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPad_6 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPad_6: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_9_7 + +
    +
    +
    +
    +
    +
    +

    iPad Pro

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_9_7: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_10_5 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_10_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_11_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_11_1: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_11_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_11_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_1: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_3: PreviewDevice
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Extensions/UIAccessibilityTraits.html b/Extensions/UIAccessibilityTraits.html new file mode 100644 index 000000000..e0d376a01 --- /dev/null +++ b/Extensions/UIAccessibilityTraits.html @@ -0,0 +1,679 @@ + + + + UIAccessibilityTraits Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIAccessibilityTraits

+
+
+ +
extension UIAccessibilityTraits
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Extensions/UIOffset.html b/Extensions/UIOffset.html new file mode 100644 index 000000000..57dabc867 --- /dev/null +++ b/Extensions/UIOffset.html @@ -0,0 +1,679 @@ + + + + UIOffset Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIOffset

+
+
+ +
extension UIOffset: Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols.html b/Protocols.html new file mode 100644 index 000000000..32a219cf8 --- /dev/null +++ b/Protocols.html @@ -0,0 +1,1209 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AttributedTextKey + +
    +
    +
    +
    +
    +
    +

    Define AttributedText keys using this protocol. Keys must have an attribute name +and an associated type for the attribute.

    + +

    After defining a key, enable dynamic member access to it by extending TextAttributeContainer +with a property for getting and setting setting the value. This property should generally be optional, +since the text may not have that property defined.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol AttributedTextKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Provides performance information for blueprint layouts and updates.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol BlueprintViewMetricsDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UIViewElement + +
    +
    +
    +
    +
    +
    +

    An element type which makes it easier to wrap an existing UIView instance that +provides its own sizing via sizeThatFits. An instance of the view is used for +sizing and measurement, so that you do not need to re-implement your own measurement.

    +

    Note

    + +

    The sizing and measurement prototype view is kept alive for the lifetime of the containing application. +Do not pass anything to the initializer of this type that you expect to be quickly released.

    +

    Example

    + +

    If you were implementing a very basic Switch element, your implementation would look something +like this:

    +
    struct Switch : UIViewElement
    +{
    +    var isOn : Bool
    +
    +    typealias UIViewType = UISwitch
    +
    +    func makeUIView() -> UISwitch {
    +        UISwitch()
    +    }
    +
    +    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
    +        view.isOn = self.isOn
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol UIViewElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AlignmentID + +
    +
    +
    +
    +
    +
    +

    Types used to identify alignment guides.

    + +

    Types conforming to AlignmentID have a corresponding alignment guide value, +typically declared as a static constant property of HorizontalAlignment or +VerticalAlignment.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol AlignmentID
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementBuilderChild + +
    +
    +
    +
    +
    +
    +

    Defines a way for anElement to be implicitly converted into the conforming type (the child of a container). +In practice, this allows us to pass an Element directly into the result builder without manually converting to Child (i.e. Converting Element -> StackLayout.Child.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Layout + +
    +
    +
    +
    +
    +
    +

    A type that defines the geometry of a collection of elements.

    + +

    You traditionally arrange views in your app’s user interface using built-in layout containers +like Row and Column. If you need more complex layout behavior, you can define a custom +layout container by creating a type that conforms to the Layout protocol and implementing +its required methods:

    + + + +

    You can define a basic layout type with only these two methods (see note below):

    +
    struct BasicLayout: Layout {
    +    func sizeThatFits(
    +        proposal: SizeConstraint,
    +        subelements: Subelements,
    +        cache: inout ()
    +    ) -> CGSize {
    +        // Calculate and return the size of the layout container.
    +    }
    +
    +    func placeSubelements(
    +        in size: CGSize,
    +        subelements: Subelements,
    +        cache: inout ()
    +    ) {
    +        // Tell each subelement where to appear.
    +    }
    +}
    +
    + +

    Add your layout to an element by passing it to the ElementContent initializer +init(layout:configure:). If your layout has parameters that come from the +element, pass them at initialization time. Use the configure block to add your element’s +children to the content.

    +
    struct BasicContainer: Element {
    +    var alignment: Alignment = .center
    +    var children: [Element]
    +
    +    var content: ElementContent {
    +        ElementContent(layout: BasicLayout(alignment: alignment)) { builder in
    +            for child in children {
    +                builder.add(element: child)
    +            }
    +        }
    +    }
    +
    +    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
    +        nil
    +    }
    +}
    +
    + +

    If your layout is specialized for laying out a single subelement, you can use the +SingleChildLayout protocol instead. It has similar methods, but is strongly typed for a +single subelement instead of a collection.

    +
    +

    Note

    + During the transition from Blueprint’s legacy layout system to Caffeinated Layout, the +Layout protocol is composed of two sets of layout methods: LegacyLayout and +CaffeinatedLayout. While this documentation focuses on the newer layout API, you must +currently implement both. Fortunately, the methods are similar, and you may be able to reuse +logic. + +
    +

    Interact with subelements through their proxies

    + +

    To perform layout, you need information about all of your container’s subelements, which are the +child elements that your container arranges. While your layout can’t interact directly with its +subelements, it can access a set of subelement proxies through the +Subelements collection that each protocol method receives as an input +parameter. That type is an alias for the LayoutSubelements collection type, which in turn +contains LayoutSubelement instances that are the subelement proxies.

    + +

    You can get information about each subelement from its proxy, like its dimensions and traits. +This enables you to measure subelements before you commit to placing them. You also assign a +position to each subelement by calling its proxy’s place(at:anchor:size:) +method. Call the method on each subelement from within your implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

    +

    Access layout traits

    + +

    Subelements may have traits that are specific to their container’s layout. The traits are of +the Layout protocol’s associated type Traits, and each subelement can have +a distinct Traits value assigned. You can set this in the configure block of +init(layout:configure:), when you call +add(traits:key:element:). If you do not specify a Traits type for +your layout, it defaults to the void type, ().

    + +

    Containers can choose to condition their behavior according to the traits of their subelements. +For example, the Row and Column types allocate space for their subelements based in part +on the grow and shrink priorities that you set on each child. Your layout container accesses the +traits for a subelement by calling traits(forLayoutType:) on the +LayoutSubelement proxy.

    +
    +

    Note

    + The Layout API, and its documentation, are modeled after SwiftUI’s +Layout, with major differences +noted. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Layout : CaffeinatedLayout, LegacyLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LegacyLayout + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LegacyLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CaffeinatedLayout + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CaffeinatedLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SingleChildLayout + +
    +
    +
    +
    +
    +
    +

    A type that defines the geometry of a single element.

    + +

    For convenience, you can implement this protocol instead of Layout when building a container +that always has a single child element.

    + +

    For more information about writing custom layouts, see Layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SingleChildLayout : CaffeinatedSingleChildLayout, LegacySingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LegacySingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CaffeinatedSingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StackElement + +
    +
    +
    +
    +
    +
    +

    Conforming types (Row and Column) act as StackLayout powered containers.

    + +

    This protocol should only be used by Row and Column elements (you should never add conformance to other custom +types).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol StackElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Measurable + +
    +
    +
    +
    +
    +
    +

    Conforming types can calculate the size that they require within a layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Measurable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NativeView + +
    +
    +
    +
    +
    +
    +

    Marker protocol used by generic extensions to native views (e.g. UIView).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NativeView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + URLHandler + +
    +
    +
    +
    +
    +
    +

    Conform to this protocol to handle links tapped in an AttributedLabel.

    + +

    Use the URLHandlerEnvironmentKey or Environment.urlHandler property to override +the link handler in the environment.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol URLHandler
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/AlignmentID.html b/Protocols/AlignmentID.html new file mode 100644 index 000000000..d2c31d951 --- /dev/null +++ b/Protocols/AlignmentID.html @@ -0,0 +1,686 @@ + + + + AlignmentID Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AlignmentID

+
+
+ +
public protocol AlignmentID
+ +
+
+

Types used to identify alignment guides.

+ +

Types conforming to AlignmentID have a corresponding alignment guide value, +typically declared as a static constant property of HorizontalAlignment or +VerticalAlignment.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultValue(in:) + +
    +
    +
    +
    +
    +
    +

    Returns the value of the corresponding guide, in context, when not +otherwise set in context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func defaultValue(in context: ElementDimensions) -> CGFloat
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/AttributedTextKey.html b/Protocols/AttributedTextKey.html new file mode 100644 index 000000000..894faf8b2 --- /dev/null +++ b/Protocols/AttributedTextKey.html @@ -0,0 +1,711 @@ + + + + AttributedTextKey Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedTextKey

+
+
+ +
public protocol AttributedTextKey
+ +
+
+

Define AttributedText keys using this protocol. Keys must have an attribute name +and an associated type for the attribute.

+ +

After defining a key, enable dynamic member access to it by extending TextAttributeContainer +with a property for getting and setting setting the value. This property should generally be optional, +since the text may not have that property defined.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Value : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/BlueprintViewMetricsDelegate.html b/Protocols/BlueprintViewMetricsDelegate.html new file mode 100644 index 000000000..12b357020 --- /dev/null +++ b/Protocols/BlueprintViewMetricsDelegate.html @@ -0,0 +1,680 @@ + + + + BlueprintViewMetricsDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintViewMetricsDelegate

+
+
+ +
public protocol BlueprintViewMetricsDelegate : AnyObject
+ +
+
+

Provides performance information for blueprint layouts and updates.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Protocols/CaffeinatedLayout.html b/Protocols/CaffeinatedLayout.html new file mode 100644 index 000000000..4800bac7c --- /dev/null +++ b/Protocols/CaffeinatedLayout.html @@ -0,0 +1,1065 @@ + + + + CaffeinatedLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CaffeinatedLayout

+
+
+ +
public protocol CaffeinatedLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Subelements + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    typealias Subelements = LayoutSubelements
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Cache + +
    +
    +
    +
    +
    +
    +

    Cached values associated with the layout instance.

    + +

    If you create a cache for your custom layout, you can use a type alias to define this type +as your data storage type. Alternatively, you can refer to the data storage type directly in +all the places where you work with the cache.

    + +

    See makeCache(subelements:environment:) for more information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Cache = Void
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the size of the composite element, given a proposed size constraint and the +container’s subelements.

    + +

    Implement this method to tell your custom layout container’s parent how much space the +container needs for a set of subelements, given a size constraint. The parent might call +this method more than once during a layout pass with different proposed sizes to test the +flexibility of the container.

    + +

    In Blueprint, parents ultimately choose the size of their children, so the actual size that +this container is laid out in may not be a size that was returned from this method.

    +

    Sizing Rules

    + +

    For performance reasons, the layout engine may deduce the measurement of your container for +some constraint values without explicitly calling +sizeThatFits(proposal:subelements:environment:cache:). To ensure that the deduced value +is correct, your layout must follow some ground rules:

    + +
      +
    1. Given one fixed constraint axis, the element’s growth along the other axis should be +monotonic. That is, an element can grow when given a larger constraint, or shrink +when given a smaller constraint, but it should never shrink when given a larger +constraint. When growing on one axis, it is OK to shrink along the other axis, such as a +block of text that re-flows as the width changes.
    2. +
    3. For a constraint axis value a, if an element has a length b that is less than a on +that axis, then the element must return b for all constraint values between a and +b. In other words, growth must follow a stair-step pattern; elements that grow +continuously by calculating a fixed inset of the constraint or a percentage value of the +constraint are forbidden. For example, if an element returns 10 for a constraint of +20, then the element must return 10 for all values in the range [10, 20].
    4. +
    5. If your element has no intrinsic size along an axis, you can represent that in a couple +ways: + +
        +
      • You can return a fixed value representing the minimum size for your element. In this +approach, a containing element is usually responsible for stretching your element to +fill desired space.
      • +
      • You can return a size that entirely fills the constraint proposed. In this approach, +you must return .infinity when the constraint is +unconstrained. Otherwise, your behavior would be in violation +of rule #1.
      • +
    6. +
    + +

    If an element does not adhere to these rules, it may lay out in unexpected and unpredictable +ways.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sizeThatFits(
    +    proposal: SizeConstraint,
    +    subelements: Subelements,
    +    environment: Environment,
    +    cache: inout Cache
    +) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + proposal + + +
    +

    A size constraint for the container. The container’s parent element that calls +this method might call the method more than once with different constraints to learn +more about the container’s flexibility before choosing a size for placement.

    +
    +
    + + subelements + + +
    +

    A collection of proxies that represent the elements that the container +arranges. You can use the proxies in the collection to get information about the +subelements as you determine how much space the container needs to display them.

    +
    +
    + + environment + + +
    +

    The environment of the container. You can use properties from the +environment when calculating the size of this container, as long as you adhere to the +sizing rules.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelements:environment:) for details.

    +
    +
    +
    +
    +

    Return Value

    +

    A size that indicates how much space the container needs to arrange its +subelements.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns positions to each of the layout’s subelements.

    + +

    Blueprint calls your implementation of this method to tell your custom layout container to +place its subelements. From this method, call the +place(at:anchor:size:) method on each item in subelements to tell the +subelements where to appear in the user interface.

    + +

    You can also update the attributes property of each +subelement to set properties like opacity and transforms on each subelement.

    + +

    Be sure that you use computations during placement that are consistent with those in your +implementation of other protocol methods for a given set of inputs. For example, if you add +spacing during placement, make sure your implementation of +sizeThatFits(proposal:subelements:environment:cache:) accounts for the extra space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func placeSubelements(
    +    in size: CGSize,
    +    subelements: Subelements,
    +    environment: Environment,
    +    cache: inout Cache
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + size + + +
    +

    The region that the container’s parent allocates to the container. Place all the +container’s subelements within the region. The size of this region may not match any +size that was returned from a call to +sizeThatFits(proposal:subelements:environment:cache:).

    +
    +
    + + subelements + + +
    +

    A collection of proxies that represent the elements that the container +arranges. Use the proxies in the collection to get information about the subelements and +to tell the subelements where to appear.

    +
    +
    + + environment + + +
    +

    The environment of this container. You can use properties from the +environment to vary the placement of subelements.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelements:environment:) for details.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates and initializes a cache for a layout instance.

    + +

    You can optionally use a cache to preserve calculated values across calls to a layout +container’s methods. Many layout types don’t need a cache, because Blueprint automatically +caches the results of calls into layout methods, such as +sizeThatFits(_:). Rely on the protocol’s default implementation of this +method if you don’t need a cache.

    + +

    However you might find a cache useful when the layout container repeats complex intermediate +calculations across calls to sizeThatFits(proposal:subelements:environment:cache:) and +placeSubelements(in:subelements:environment:cache:). You might be able to improve +performance by calculating values once and storing them in a cache.

    +
    +

    Note

    + A cache’s lifetime is limited to a single render pass, so you cannot use it to store +values across multiple calls to placeSubelements(in:subelements:environment:cache:). A +render pass includes zero, one, or many calls to +sizeThatFits(proposal:subelements:environment:cache:), followed by a single call to +placeSubelements(in:subelements:environment:cache:). + +
    + +

    Only implement a cache if profiling shows that it improves performance.

    +

    Initializing a cache

    + +

    Implement the makeCache(subelements:) method to create a cache. You can add computed +values to the cache right away, using information from the subelements input parameter, or +you can do that later. The methods of the Layout protocol that can access the cache take +the cache as an in-out parameter, which enables you to modify the cache anywhere that you +can read it.

    + +

    You can use any storage type that makes sense for your layout algorithm, but be sure that +you only store data that you derive from the layout and its subelements (lazily, if +possible). For this to work correctly, Blueprint needs to be able to call this method to +recreate the cache without changing the layout result.

    + +

    When you return a cache from this method, you implicitly define a type for your cache. Be +sure to either make the type of the cache parameters on your other Layout protocol +methods match, or use a type alias to define the Cache associated type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeCache(subelements: Subelements, environment: Environment) -> Cache
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + subelements + + +
    +

    A collection of proxy instances that represent the subelements that +the container arranges. You can use the proxies in the collection to get information about +the subelements as you calculate values to store in the cache.

    +
    +
    + + environment + + +
    +

    The environment of this container.

    +
    +
    +
    +
    +

    Return Value

    +

    Storage for calculated data that you share among the methods of your custom +layout container.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/CaffeinatedSingleChildLayout.html b/Protocols/CaffeinatedSingleChildLayout.html new file mode 100644 index 000000000..7a69d9ae0 --- /dev/null +++ b/Protocols/CaffeinatedSingleChildLayout.html @@ -0,0 +1,1018 @@ + + + + CaffeinatedSingleChildLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CaffeinatedSingleChildLayout

+
+
+ +
public protocol CaffeinatedSingleChildLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Subelement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    typealias Subelement = LayoutSubelement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Cache + +
    +
    +
    +
    +
    +
    +

    Cached values associated with the layout instance.

    + +

    If you create a cache for your custom layout, you can use a type alias to define this type +as your data storage type. Alternatively, you can refer to the data storage type directly in +all the places where you work with the cache.

    + +

    See makeCache(subelement:environment:) for more information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Cache = Void
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the size of the element, given a proposed size constraint and the container’s +subelement.

    + +

    Implement this method to tell your custom layout container’s parent how much space the +container needs for a subelement, given a size constraint. The parent might call this method +more than once during a layout pass with different proposed sizes to test the flexibility of +the container.

    + +

    In Blueprint, parents ultimately choose the size of their children, so the actual size that +this container is laid out in may not be a size that was returned from this method.

    + +

    For more information, see +sizeThatFits(proposal:subelements:environment:cache:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sizeThatFits(
    +    proposal: SizeConstraint,
    +    subelement: Subelement,
    +    environment: Environment,
    +    cache: inout Cache
    +) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + proposal + + +
    +

    A size constraint for the container. The container’s parent element that calls +this method might call the method more than once with different constraints to learn +more about the container’s flexibility before choosing a size for placement.

    +
    +
    + + subelement + + +
    +

    A proxy that represents the element that the container arranges. You can use +the proxy to get information about the subelement as you determine how much space the +container needs to display it.

    +
    +
    + + environment + + +
    +

    The environment of the container. You can use properties from the +environment when calculating the size of this container, as long as you adhere to the +sizing rules.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelement:environment:) for details.

    +
    +
    +
    +
    +

    Return Value

    +

    A size that indicates how much space the container needs to arrange its +subelement.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns a position to the layout’s subelement.

    + +

    Blueprint calls your implementation of this method to tell your custom layout container to +place its subelement. From this method, call the place(at:anchor:size:) +method on subelement to tell the subelement where to appear in the user interface.

    + +

    You can also update the attributes property to set +properties like opacity and transforms on the subelement.

    + +

    Be sure that you use computations during placement that are consistent with those in your +implementation of other protocol methods for a given set of inputs. For example, if you add +spacing during placement, make sure your implementation of +sizeThatFits(proposal:subelement:environment:cache:) accounts for the extra space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func placeSubelement(
    +    in size: CGSize,
    +    subelement: Subelement,
    +    environment: Environment,
    +    cache: inout Cache
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + size + + +
    +

    The region that the container’s parent allocates to the container. Place the +container’s subelement within the region. The size of this region may not match any size +that was returned from a call to +sizeThatFits(proposal:subelement:environment:cache:).

    +
    +
    + + subelement + + +
    +

    A proxy that represents the element that the container arranges. Use the +proxy to get information about the subelement and to tell the subelement where to +appear.

    +
    +
    + + environment + + +
    +

    The environment of this container. You can use properties from the +environment to vary the placement of the subelement.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelement:environment:) for details.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates and initializes a cache for a layout instance.

    + +

    You can optionally use a cache to preserve calculated values across calls to a layout +container’s methods. Many layout types don’t need a cache, because Blueprint automatically +caches the results of calls into layout methods, such as +sizeThatFits(_:). Rely on the protocol’s default implementation of this +method if you don’t need a cache.

    + +

    However you might find a cache useful when the layout container repeats complex intermediate +calculations across calls to sizeThatFits(proposal:subelement:environment:cache:) and +placeSubelement(in:subelement:environment:cache:). You might be able to improve +performance by calculating values once and storing them in a cache.

    +
    +

    Note

    + A cache’s lifetime is limited to a single render pass, so you cannot use it to store +values across multiple calls to placeSubelement(in:subelement:environment:cache:). A +render pass includes zero, one, or many calls to +sizeThatFits(proposal:subelement:environment:cache:), followed by a single call to +placeSubelement(in:subelement:environment:cache:). + +
    + +

    Only implement a cache if profiling shows that it improves performance.

    + +

    For more information, see makeCache(subelements:environment:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeCache(subelement: Subelement, environment: Environment) -> Cache
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + subelement + + +
    +

    A proxy that represent the subelement that the container arranges. +You can use the proxy to get information about the subelement as you calculate values to +store in the cache.

    +
    +
    + + environment + + +
    +

    The environment of this container.

    +
    +
    +
    +
    +

    Return Value

    +

    Storage for calculated data that you share among the methods of your custom +layout container.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/Element.html b/Protocols/Element.html new file mode 100644 index 000000000..923e29585 --- /dev/null +++ b/Protocols/Element.html @@ -0,0 +1,2992 @@ + + + + Element Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Element

+
+
+ +
public protocol Element
+ +
+
+

Conforming types represent a rectangular content area in a two-dimensional +layout space.

+ +
+ +

The ultimate purpose of an element is to provide visual content. This can be +done in two ways:

+ +
    +
  • By providing a view description (ViewDescription).

  • +
  • By providing child elements that will be displayed recursively within +the local coordinate space.

  • +
+ +
+ +

A custom element might look something like this:

+
struct MyElement: Element {
+
+    var backgroundColor: UIColor = .red
+
+    // Returns a single child element.
+    var content: ElementContent {
+        return ElementContent(child: Label(text: "😂"))
+    }
+
+    // Providing a view description means that this element will be
+    // backed by a UIView instance when displayed in a `BlueprintView`.
+    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
+        return UIView.describe { config in
+            config.bind(backgroundColor, to: \.backgroundColor)
+        }
+    }
+
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    Returns the content of this element.

    + +

    Elements generally fall into two types:

    + +
      +
    • Leaf elements, or elements that have no children. These elements commonly have an intrinsic size, or some +content that can be measured. Leaf elements typically instantiate their content with +ElementContent(measurable:) or similar.
    • +
    • Container elements: these element have one or more children, which are arranged by a layout implementation. +Container elements typically use methods like ElementContent(layout:configure:) to instantiate +their content.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns an (optional) description of the view that should back this element.

    + +

    In Blueprint, elements that are displayed using a live UIView instance are referred to as “view-backed”. +Elements become view-backed by returning a ViewDescription value from this method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + context + + +
    +

    The context this element is rendered in.

    +
    +
    +
    +
    +

    Return Value

    +

    An optional ViewDescription.

    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(key:value:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given environment key and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment<Key>(key: Key.Type, value: Key.Value) -> Element where Key : EnvironmentKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(keyPath:value:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given keypath and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment<Value>(keyPath: WritableKeyPath<Environment, Value>, value: Value) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given configuration block.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment(by environmentAdapter: @escaping (inout Environment) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aligned(vertically:horizontally:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Aligned element with the provided parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func aligned(
    +    vertically: Aligned.VerticalAlignment = .center,
    +    horizontally: Aligned.HorizontalAlignment = .center
    +) -> Aligned
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + vertically + + +
    +

    The vertical alignment. Defaults to .centered.

    +
    +
    + + horizontally + + +
    +

    The horizontal alignment. Defaults to .centered.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + centered() + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a Centered element to center it within its parent.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func centered() -> Centered
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

If / Else +

+
+
+
    +
  • +
    + + + + if(_:then:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided modify +closure, if the provided boolean is true. Otherwise, the original +element is returned.

    +
    myElement.if(someBoolean) { element in
    +    element.centered()
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`(
    +    _ isTrue: Bool,
    +    then: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + if(_:then:else:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided then +closure if the provided boolean is true. If the provided boolean +is false, the else closure is used

    +
    myElement.if(
    +    someBoolean,
    +    then: { element in
    +          element.aligned(horizontally: .trailing, vertically: .fill)
    +    },
    +    else: { element in
    +        element.aligned(horizontally: .leading, vertically: .fill)
    +    }
    +)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`(
    +    _ isTrue: Bool,
    +    then: (Self) -> Element,
    +    else: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

If Let +

+
+
+
    +
  • +
    + + + + if(let:then:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided modify +closure if the provided value is non-nil. Otherwise, the original +element is returned.

    +
    myElement.if(let: someValue) { value, element in
    +    element.inset(uniform: someValue.padding)
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`<Value>(
    +    `let` value: Value?,
    +    then: (Value, Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + if(let:then:else:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided then +closure if the provided boolean is true. If the provided value +is nil, the else closure is used

    +
    myElement.if(
    +    let: someValue,
    +    then: { value, element in
    +          element.inset(uniform: value.padding)
    +    },
    +    else: { element in
    +        element.inset(uniform: 10)
    +    }
    +)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`<Value>(
    +    `let` value: Value?,
    +    then: (Value, Self) -> Element,
    +    else: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Map & Modify +

+
+
+
    +
  • +
    + + + + map(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Creates and returns a new element by passing the +element to the provided map function.

    +
    myElement.map { element in
    +    switch myState {
    +    case .small: element.inset(uniform: 5)
    +    case .medium: element.inset(uniform: 10)
    +    case .large: element.inset(uniform: 15)
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func map(_ map: (Self) -> Element) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + modify(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Creates and returns a new element by passing the +element to the provided modify function, which can edit it.

    +
    myElement.modify { element in
    +    switch myState {
    +    case .small: element.inset = 5
    +    case .medium: element.inset = 10
    +    case .large: element.inset = 15
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func modify(_ modify: (inout Self) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(aspectRatio:contentMode:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the element to the provided aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    aspectRatio: AspectRatio,
    +    contentMode: ConstrainedAspectRatio.ContentMode = .fitContent
    +) -> ConstrainedAspectRatio
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + aspectRatio + + +
    +

    The aspect ratio that the content size should match.

    +
    +
    + + contentMode + + +
    +

    How the content should size itself relative to its parent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(width:height:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    width: ConstrainedSize.Constraint = .unconstrained,
    +    height: ConstrainedSize.Constraint = .unconstrained
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(width:height:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    width: CGFloat,
    +    height: CGFloat
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(size:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    size: CGSize
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrained(to:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided SizeConstraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrained(to sizeConstraint: SizeConstraint) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decorate(layering:position:with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

    + +

    See the Decorate element for more.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decorate(
    +    layering: Decorate.Layering,
    +    position: Decorate.Position,
    +    with decoration: () -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flowChild(key:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a Flow.Child to allow customizing the item in the flow layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func flowChild(key: AnyHashable? = nil) -> Flow.Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + gridRowChild(key:width:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a GridRowChild in order to provide meta information that a GridRow can aply to its layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func gridRowChild(key: AnyHashable? = nil, width: GridRow.Width) -> GridRow.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A unique identifier for the child.

    +
    +
    + + width + + +
    +

    The sizing for the element.

    +
    +
    +
    +
    +

    Return Value

    +

    GridRowChild

    +
    +
    +
    +
  • +
  • +
    + + + + hidden(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally hide the wrapped element.

    + +

    Hidden elements still participate in layout. Hiding sets the UIView.isHidden property of the nearest backing view.

    +
    +

    Note

    + When an element is hidden, any elements within the wrapped element will be hidden. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hidden(_ hidden: Bool = true) -> Hidden
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(top:bottom:left:right:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(
    +    top: CGFloat = 0.0,
    +    bottom: CGFloat = 0.0,
    +    left: CGFloat = 0.0,
    +    right: CGFloat = 0.0
    +) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(by edgeInsets: UIEdgeInsets) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(uniform:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(uniform: CGFloat) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(horizontal:vertical:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(
    +    horizontal: CGFloat = 0.0,
    +    vertical: CGFloat = 0.0
    +) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

    + +

    This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

    +

    Example

    + +

    Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

    +
    func imageElement() -> Element {
    +    if let photo = self.photo {
    +        return Image(image: photo)
    +                .transition(.fade)
    +                .keyed("photo")
    +    } else {
    +        return Image(image: self.placeholder)
    +                .transition(.fade)
    +                .keyed("placeholder")
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func keyed(_ key: AnyHashable) -> Keyed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element appears.

    + +

    Callbacks run in depth-first traversal order, with parents before children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onAppear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element disappears.

    + +

    Callbacks run in depth-first traversal order, with parents before children. There is no +guaranteed order between disappearance callbacks and backing views being removed from their +superviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onDisappear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Opacity element with the provided opacity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func opacity(_ opacity: CGFloat) -> Opacity
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + opacity + + +
    +

    The opacity to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + overlayChild(key:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func overlayChild(key: AnyHashable? = nil) -> Overlay.Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Result Builders +

+
+
+
    +
  • +
    + + + + stackLayoutChild(priority:alignmentGuide:key:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a StackLayout.Child in order to customize StackLayout.Traits and the key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func stackLayoutChild(
    +    priority: StackLayout.Child.Priority = .flexible,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil
    +) -> StackLayout.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + priority + + +
    +

    Controls the amount of extra space distributed to this child during underflow and overflow

    +
    +
    + + alignmentGuide + + +
    +

    Allows for custom alignment of a child along the cross axis.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy.

    +
    +
    +
    +
    +

    Return Value

    +

    A wrapper containing this element with additional layout information for the StackElement.

    +
    +
    +
    +
  • +
  • +
    + + + + stackLayoutChild(priority:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a StackLayout.Child in order to customize the StackLayout.Child.Priority.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func stackLayoutChild(
    +    priority: StackLayout.Child.Priority
    +) -> StackLayout.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + priority + + +
    +

    Controls the amount of extra space distributed to this child during underflow and overflow

    +
    +
    +
    +
    +

    Return Value

    +

    A wrapper containing this element with additional layout information for the StackElement.

    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally modifies the tint adjustment mode of its wrapped element.

    +
    +

    Note

    + When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tintAdjustmentMode(_ tintAdjustmentMode: UIView.TintAdjustmentMode) -> TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transformed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element with the provided 3D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transformed(_ transform: CATransform3D) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + transform + + +
    +

    The 3D transform to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + transformed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element with the provided 2D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transformed(_ transform: CGAffineTransform) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + transform + + +
    +

    The 2D transform to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + translated(translateX:translateY:translateZ:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that translates the receiver in 3D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func translated(
    +    translateX: CGFloat = 0,
    +    translateY: CGFloat = 0,
    +    translateZ: CGFloat = 0
    +) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + transformX + + +
    +

    The X component of the translation.

    +
    +
    + + transformY + + +
    +

    The Y component of the translation.

    +
    +
    + + transformZ + + +
    +

    The Z component of the translation.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + rotated(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that rotates the receiver in 2D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func rotated(by rotationAngle: Measurement<UnitAngle>) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + rotate + + +
    +

    The angle measurement to rotate the receiver by.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + scaled(scaleX:scaleY:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that scales the receiver in 2D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scaled(
    +    scaleX: CGFloat = 1,
    +    scaleY: CGFloat = 1
    +) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + scaleX + + +
    +

    The X axis scale.

    +
    +
    + + scaleY + + +
    +

    The Y axis scale.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + userInteractionEnabled(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally enable user interaction of the wrapped element.

    +
    +

    Note

    + When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func userInteractionEnabled(_ enabled: Bool = true) -> UserInteractionEnabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blockAccessibility(isBlocking:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func blockAccessibility(isBlocking: Bool = true) -> AccessibilityBlocker
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityContainer(identifier:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Acts as an accessibility container for any subviews +where isAccessibilityElement == true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityContainer(identifier: String? = nil) -> Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the receiver in an accessibility element with the provided values.

    + +

    Providing a nil value for any of these parameters will result in no resolved value for that accessibility +parameter—it does not inherit parameters from the wrapped element’s accessibility configuration.

    +
    +

    Important

    + ⚠️ This overrides the accessibility of the contained element and all of its children ⚠️ + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityElement(
    +    label: String?,
    +    value: String?,
    +    traits: Set<AccessibilityElement.Trait>,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    accessibilityFrameSize: CGSize? = nil,
    +    accessibilityFrameCornerStyle: Box.CornerStyle = .square,
    +    customActions: [AccessibilityElement.CustomAction] = [],
    +    customContent: [AccessibilityElement.CustomContent] = []
    +) -> AccessibilityElement
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the receiver in an accessibility element with the provided values.

    +
    +

    Important

    +

    ⚠️ This overrides the accessibility of the contained element and all of its children ⚠️

    + +
    +

    See also

    +

    accessibilityElement

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "accessibilityElement(label:value:traits:hint:identifier:accessibilityFrameSize:﹚")
    +public func accessibility(
    +    label: String? = nil,
    +    value: String? = nil,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    traits: Set<AccessibilityElement.Trait> = [],
    +    accessibilityFrameSize: CGSize? = nil
    +) -> AccessibilityElement
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Trigger +

+
+
+
    +
  • +
    + + + + accessibilityFocus(on:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Enables VoiceOver focus to jump to the wrapped element via the trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityFocus(
    +    on trigger: AccessibilityFocus.Trigger
    +) -> Element
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + on + + +
    +

    A reference-type trigger object that can be used to trigger accessibility focus via the focus() function.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

View implementation +

+
+
+
    +
  • +
    + + + + onLinkTapped(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Handle links opened in any AttributedLabel within this element using the provided closure.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onLinkTapped(_ onTap: @escaping (URL) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the element in a box to provide basic styling.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func box(
    +    background: UIColor = .clear,
    +    corners: Box.CornerStyle = .square,
    +    cornerCurve: Box.CornerCurve = .circular,
    +    borders: Box.BorderStyle = .none,
    +    shadow: Box.ShadowStyle = .none,
    +    clipsContent: Bool = false
    +) -> Box
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + editingMenu(show:with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Allows showing the system’s UIMenuController editing menu upon long press of the wrapped element.

    +
    myElement.editingMenu(show: .onLongPress) {
    +    EditingMenuItem.copying("A String")
    +
    +    EditingMenuItem(.select) {
    +        print("Selected!")
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func editingMenu(
    +    show gesture: EditingMenu.Gesture,
    +    @Builder<EditingMenuItem> with items: () -> [EditingMenuItem]
    +) -> EditingMenu
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scrollable(_:configure:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a ScrollView to allow it to be scrolled +if it takes up more space then is available on screen.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scrollable(
    +    _ contentSize: ScrollView.ContentSize = .fittingHeight,
    +    configure: (inout ScrollView) -> Void = { _ in }
    +) -> ScrollView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tappable(onTap:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element and calls the provided closure when tapped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tappable(onTap: @escaping () -> Void) -> Tappable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transition(onAppear:onDisappear:onLayout:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a transition container to provide an animated transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(
    +    onAppear: VisibilityTransition? = nil,
    +    onDisappear: VisibilityTransition? = nil,
    +    onLayout: LayoutTransition = .inherited
    +) -> TransitionContainer
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + onAppear + + +
    +

    The transition to use when the element appears. By default, no transition.

    +
    +
    + + onDisappear + + +
    +

    The transition to use when the element disappears. By default, no transition.

    +
    +
    + + onLayout + + +
    +

    The transition to use when the element’s layout changes. The default value is +.inherited, which means the element will participate in the same transition as its +nearest ancestor with a specified transition.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + transition(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a transition container to provide an animated transition when its visibility changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(_ onAppearOrDisappear: VisibilityTransition) -> TransitionContainer
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + onAppearOrDisappear + + +
    +

    The transition to use when the element appears or disappears.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/ElementBuilderChild.html b/Protocols/ElementBuilderChild.html new file mode 100644 index 000000000..4b405ac59 --- /dev/null +++ b/Protocols/ElementBuilderChild.html @@ -0,0 +1,681 @@ + + + + ElementBuilderChild Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementBuilderChild

+
+
+ +
public protocol ElementBuilderChild
+ +
+
+

Defines a way for anElement to be implicitly converted into the conforming type (the child of a container). +In practice, this allows us to pass an Element directly into the result builder without manually converting to Child (i.e. Converting Element -> StackLayout.Child.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/EnvironmentKey.html b/Protocols/EnvironmentKey.html new file mode 100644 index 000000000..9552545d2 --- /dev/null +++ b/Protocols/EnvironmentKey.html @@ -0,0 +1,728 @@ + + + + EnvironmentKey Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EnvironmentKey

+
+
+ +
public protocol EnvironmentKey
+ +
+
+

Types conforming to this protocol can be used as keys in an Environment.

+ +

Using a type as the key allows us to strongly type each value, with the +key’s EnvironmentKey.Value associated value.

+

Example

+ +

Usually a key is implemented with an uninhabited type, such an empty enum.

+
enum WidgetCountKey: EnvironmentKey {
+    static let defaultValue: Int = 0
+}
+
+ +

You can write a small extension on Environment to make it easier to use your key.

+
extension Environment {
+    var widgetCount: Int {
+        get { self[WidgetCountKey.self] }
+        set { self[WidgetCountKey.self] = newValue }
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    +

    The type of value stored by this key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Value
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + defaultValue + +
    +
    +
    +
    +
    +
    +

    The default value that will be vended by an Environment for this key if no other value +has been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var defaultValue: Self.Value { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/LegacyLayout.html b/Protocols/LegacyLayout.html new file mode 100644 index 000000000..4c6b25651 --- /dev/null +++ b/Protocols/LegacyLayout.html @@ -0,0 +1,834 @@ + + + + LegacyLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LegacyLayout

+
+
+ +
public protocol LegacyLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    +

    Per-item metadata that is used during the measuring and layout pass.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Traits = ()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:items:) + +
    +
    +
    +
    +
    +
    +

    Computes the size that this layout requires in a layout, given an array of children and +accompanying layout traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint, items: [(traits: Self.Traits, content: Measurable)]) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint in which measuring should occur.

    +
    +
    + + items + + +
    +

    An array of ‘items’, pairs consisting of a traits object and a +Measurable value.

    +
    +
    +
    +
    +

    Return Value

    +

    The measured size for the given array of items.

    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:items:) + +
    +
    +
    +
    +
    +
    +

    Generates layout attributes for the given items.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func layout(size: CGSize, items: [(traits: Self.Traits, content: Measurable)]) -> [LayoutAttributes]
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + size + + +
    +

    The size that layout attributes should be generated within.

    +
    +
    + + items + + +
    +

    An array of ‘items’, pairs consisting of a traits object and a +Measurable value.

    +
    +
    +
    +
    +

    Return Value

    +

    Layout attributes for the given array of items.

    +
    +
    +
    +
  • +
  • +
    + + + + defaultTraits + +
    +
    +
    +
    +
    +
    +

    Returns a default traits object.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var defaultTraits: Self.Traits { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/LegacySingleChildLayout.html b/Protocols/LegacySingleChildLayout.html new file mode 100644 index 000000000..a463b850c --- /dev/null +++ b/Protocols/LegacySingleChildLayout.html @@ -0,0 +1,777 @@ + + + + LegacySingleChildLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LegacySingleChildLayout

+
+
+ +
public protocol LegacySingleChildLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + measure(in:child:) + +
    +
    +
    +
    +
    +
    +

    Computes the size that this layout requires

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint, child: Measurable) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint in which measuring should occur.

    +
    +
    + + child + + +
    +

    A Measurable representing the single child of this layout.

    +
    +
    +
    +
    +

    Return Value

    +

    The measured size.

    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:child:) + +
    +
    +
    +
    +
    +
    +

    Generates layout attributes for the child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func layout(size: CGSize, child: Measurable) -> LayoutAttributes
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + size + + +
    +

    The size that layout attributes should be generated within.

    +
    +
    + + child + + +
    +

    A Measurable representing the single child of this layout.

    +
    +
    +
    +
    +

    Return Value

    +

    Layout attributes for the child of this layout.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/Measurable.html b/Protocols/Measurable.html new file mode 100644 index 000000000..93357c8d3 --- /dev/null +++ b/Protocols/Measurable.html @@ -0,0 +1,704 @@ + + + + Measurable Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Measurable

+
+
+ +
public protocol Measurable
+ +
+
+

Conforming types can calculate the size that they require within a layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + measure(in:) + +
    +
    +
    +
    +
    +
    +

    Measures the required size of the receiver.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + constraint + + +
    +

    The size constraint.

    +
    +
    +
    +
    +

    Return Value

    +

    The layout size needed by the receiver.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/NativeView.html b/Protocols/NativeView.html new file mode 100644 index 000000000..8abb95631 --- /dev/null +++ b/Protocols/NativeView.html @@ -0,0 +1,722 @@ + + + + NativeView Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

NativeView

+
+
+ +
public protocol NativeView
+ +
+
+

Marker protocol used by generic extensions to native views (e.g. UIView).

+ +
+
+ +
+
+
+
+ + +
+ +

Available where Self: UIView +

+
+
+
    +
  • +
    + + + + describe(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the receiving class. +Example:

    +
    let viewDescription = UILabel.describe { config in
    +    config[\.text] = "Hello, world"
    +    config[\.textColor] = UIColor.orange
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func describe(_ configuring: (inout ViewDescription.Configuration<Self>) -> Void) -> ViewDescription
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + configuring + + +
    +

    A closure that is responsible for populating a configuration object.

    +
    +
    +
    +
    +

    Return Value

    +

    The resulting view description.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/ProxyElement.html b/Protocols/ProxyElement.html new file mode 100644 index 000000000..dcb10963d --- /dev/null +++ b/Protocols/ProxyElement.html @@ -0,0 +1,744 @@ + + + + ProxyElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ProxyElement

+
+
+ +
public protocol ProxyElement : Element
+ +
+
+

Custom elements commonly use another element to actually display content. For example, a profile element might +display an image and a few labels inside a Column element. The ProxyElement protocol is provided to make that +task easier.

+ +

Conforming types only need to implement elementRepresentation in order to generate an element that will be +displayed.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Protocols/StackElement.html b/Protocols/StackElement.html new file mode 100644 index 000000000..8d176e8c6 --- /dev/null +++ b/Protocols/StackElement.html @@ -0,0 +1,1098 @@ + + + + StackElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

StackElement

+
+
+ +
public protocol StackElement : Element
+ +
+
+

Conforming types (Row and Column) act as StackLayout powered containers.

+ +

This protocol should only be used by Row and Column elements (you should never add conformance to other custom +types).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)] { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + backingViewDescription(with:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ configure: (inout Self) -> Void)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds a given child element to the stack.

    + +
      +
    • Tag: StackElement.add

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    growPriority: CGFloat = 1.0,
    +    shrinkPriority: CGFloat = 1.0,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + growPriority + + +
    +

    +
    +
    + + shrinkPriority + + +
    +

    +
    +
    + + alignmentGuide + + +
    +

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addFixed(alignmentGuide:key:child:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Convenience method for adding a child with a grow and shrink priority of 0.0.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func addFixed(
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignmentGuide + + +
    +

    A closure that can be used to provide a custom alignment guide for this +child.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addFlexible(alignmentGuide:key:child:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Convenience method for adding a child with a grow and shrink priority of 1.0.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func addFlexible(
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignmentGuide + + +
    +

    A closure that can be used to provide a custom alignment guide for this +child.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/UIViewElement.html b/Protocols/UIViewElement.html new file mode 100644 index 000000000..c05bb3729 --- /dev/null +++ b/Protocols/UIViewElement.html @@ -0,0 +1,893 @@ + + + + UIViewElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIViewElement

+
+
+ +
public protocol UIViewElement : Element
+ +
+
+

An element type which makes it easier to wrap an existing UIView instance that +provides its own sizing via sizeThatFits. An instance of the view is used for +sizing and measurement, so that you do not need to re-implement your own measurement.

+

Note

+ +

The sizing and measurement prototype view is kept alive for the lifetime of the containing application. +Do not pass anything to the initializer of this type that you expect to be quickly released.

+

Example

+ +

If you were implementing a very basic Switch element, your implementation would look something +like this:

+
struct Switch : UIViewElement
+{
+    var isOn : Bool
+
+    typealias UIViewType = UISwitch
+
+    func makeUIView() -> UISwitch {
+        UISwitch()
+    }
+
+    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
+        view.isOn = self.isOn
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + UIViewType + +
    +
    +
    +
    +
    +
    +

    The type of the view associated with the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype UIViewType : UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeUIView() + +
    +
    +
    +
    +
    +
    +

    Create and return a new instance of the provided view type.

    +

    Note

    + +

    Ensure that you do not pass any values to the initializer of your view type +that you cannot also update in updateUIView(_:), as view instances +are reused for sizing and measurement.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeUIView() -> UIViewType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateUIView(_:with:) + +
    +
    +
    +
    +
    +
    +

    Update the view instance with the content from the element. The context provides additional +information, such as whether the update is for the measuring instance.

    +

    Example

    + +

    If you were to implement a simple UIViewElement which wraps a UISwitch, +your update method would look like this:

    +
    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
    +   view.isOn = self.isOn
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func updateUIView(_ view: UIViewType, with context: UIViewElementContext)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size(_:thatFits:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Returns the sizing measurement for the element for the provided +measurement view.

    + +

    You usually do not need to implement this method – the default implementation of +this method simply calls sizeThatFits(_:) on the provided view.

    + +

    The view is fully configured and updated before this method is called – you do not need to +update it in any way.

    +

    When To Override

    + +

    You may want to override this method if you need to mutate the value returned from sizeThatFits(_:), +or if you want to use some other sizing method like systemLayoutSizeFitting(...).

    + +
    +

    Default Implementation

    +
    +

    The default implementation simply forwards to sizeThatFits(_:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func size(_ size: CGSize, thatFits view: UIViewType) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Defer to the reused measurement view to provide the size of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + backingViewDescription(with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Provide the view for the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/URLHandler.html b/Protocols/URLHandler.html new file mode 100644 index 000000000..890115b4c --- /dev/null +++ b/Protocols/URLHandler.html @@ -0,0 +1,683 @@ + + + + URLHandler Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

URLHandler

+
+
+ +
public protocol URLHandler
+ +
+
+

Conform to this protocol to handle links tapped in an AttributedLabel.

+ +

Use the URLHandlerEnvironmentKey or Environment.urlHandler property to override +the link handler in the environment.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + onTap(url:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func onTap(url: URL)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs.html b/Structs.html new file mode 100644 index 000000000..cb2ac6d83 --- /dev/null +++ b/Structs.html @@ -0,0 +1,2075 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AttributedText + +
    +
    +
    +
    +
    +
    +

    AttributedText allows you to apply strongly-typed attributes to strings (much like the AttributedString type +introduced in iOS 15). You can then access the attributedString property to get an attributed string with those +attributes applied.

    + +

    For example:

    +
    var text = AttributedText(string: "Hello, world")
    +// Apply a font to the entire range
    +text.font = .systemFont(ofSize: 20)
    +
    +// Apply a color to part of the string
    +let range = text.string.range(of: "world")!
    +text[range].color = .blue
    +
    +// Render the attributed text
    +let label = AttributedLabel(attributedText: text.attributedString)
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @dynamicMemberLookup
    +public struct AttributedText
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct BlueprintViewRenderMetrics
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The context passing to the backingViewDescription of an Element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ViewDescriptionContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UIViewElementContext + +
    +
    +
    +
    +
    +
    +

    Context object passed into updateUIView.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UIViewElementContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FocusBinding + +
    +
    +
    +
    +
    +
    +

    A two-way binding between a focusable element’s backing view and a FocusState-wrapped +property.

    + +

    Generally you should not need to interact with this type directly. However, you can use focus +bindings to add focus support to custom elements.

    +

    Adding Focus Bindings

    + +

    On a FocusState, call the binding(for:) method to get a binding bound to an optional value, +or binding() to get a binding bound to a boolean.

    + +

    To set up the 2-way binding, there are 2 steps:

    + +
      +
    1. Assign actions to the nested FocusTrigger, so that your backing view is updated when the +FocusState‘s value changes.

    2. +
    3. Call the onFocus and onBlur callbacks when your backing view gains or loses focus, so +that the value of the bound FocusState is updated.

    4. +
    +

    Example

    +
    final class FocusableView: UIView {
    +    var focusBinding: FocusBinding? {
    +        didSet {
    +            oldValue?.trigger.focusAction = nil
    +            oldValue?.trigger.blurAction = nil
    +
    +            guard let focusBinding = focusBinding else { return }
    +
    +            focusBinding.trigger.focusAction = { [weak self] in
    +                self?.becomeFirstResponder()
    +            }
    +            focusBinding.trigger.blurAction = { [weak self] in
    +                self?.resignFirstResponder()
    +            }
    +
    +            if isFirstResponder {
    +                focusBinding.onFocus()
    +            } else {
    +                focusBinding.onBlur()
    +            }
    +        }
    +    }
    +
    +    @discardableResult
    +    override func becomeFirstResponder() -> Bool {
    +        let focused = super.becomeFirstResponder()
    +        if focused {
    +            focusBinding?.onFocus()
    +        }
    +        return focused
    +    }
    +
    +    @discardableResult
    +    override func resignFirstResponder() -> Bool {
    +        let blurred = super.resignFirstResponder()
    +        if blurred {
    +            focusBinding?.onBlur()
    +        }
    +        return blurred
    +    }
    +}
    +
    + +
      +
    • Tag: FocusBinding
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FocusBinding
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FocusState + +
    +
    +
    +
    +
    +
    +

    A property wrapper type that can read and write a value that represents the placement of focus.

    + +

    Use this property wrapper in conjunction with modifiers on elements that support focus, such as +TextField.focused(when:equals:) and TextField.focused(when:), to describe when those elements +should have focus. When focus enters the modified element, the wrapped value of this property +updates to match a given value. Similarly, when focus leaves, the wrapped value of this property +resets to nil or false. Setting this property’s value programmatically has the reverse +effect, causing focus to move to the element associated with the updated value.

    + +

    In the following example of a simple login screen, when the user presses the Sign In button and +one of the fields is still empty, focus moves to that field. Otherwise, the sign-in process +proceeds.

    +
    struct LoginForm: ProxyElement {
    +    enum Field: Hashable {
    +        case username
    +        case password
    +    }
    +
    +    var username: String
    +    var password: String
    +    var handleLogin: () -> Void
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .username)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .password)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            focusedField = .username
    +                        } else if password.isEmpty {
    +                            focusedField = .password
    +                        } else {
    +                            handleLogin()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Sign In")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To allow for cases where focus is completely absent from a view tree, the wrapped value must be +either an optional or a Boolean. Set the focus binding to false or nil as appropriate to +remove focus from all bound fields. You can also use this to remove focus from a TextField +and thereby dismiss the keyboard.

    +

    Auto-Focus

    + +

    To auto-focus a field when it appears, set the value in an onAppear hook.

    +
    struct Example: ProxyElement {
    +    @FocusState var isFocused: Bool
    +
    +    var elementRepresentation: Element {
    +        TextField(text: "")
    +            .focused(when: $isFocused)
    +            .onAppear {
    +                isFocused = true
    +            }
    +    }
    +}
    +
    +

    Avoid Ambiguous Focus Bindings

    + +

    A TextField can have only one focus binding, stored in its focusBinding property. If you apply +the focused modifier multiple times, the last one will overwrite the previous value.

    + +

    On the other hand, binding the same value to two views is ambiguous. In the following example, +two separate fields bind focus to the name value:

    +
    struct Content: ProxyElement {
    +    enum Field: Hashable {
    +        case name
    +        case fullName
    +    }
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .name)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .name) // incorrect re-use of .name
    +            )
    +        }
    +    }
    +}
    +
    + +

    If the user moves focus to either field, the focusedField binding updates to name. However, +if the app programmatically sets the value to name, the last field bound will be chosen.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @propertyWrapper
    +public struct FocusState<Value> where Value : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    +

    An alignment in both axes.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Alignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + HorizontalAlignment + +
    +
    +
    +
    +
    +
    +

    An alignment position along the horizontal axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct HorizontalAlignment : Equatable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VerticalAlignment + +
    +
    +
    +
    +
    +
    +

    An alignment position along the vertical axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct VerticalAlignment : Equatable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AspectRatio + +
    +
    +
    +
    +
    +
    +

    Represents an a proportional relationship between width and height.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    Generic result builder for converting blocks of Child... into [Child].

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @resultBuilder
    +public struct Builder<Child>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Decorate + +
    +
    +
    +
    +
    +
    +

    Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

    + +

    The size and position of the element is determined only by the wrapped +element, the decoration element does not affect the layout at all.

    +

    Example

    + +

    The arrows represent the measured size of the element for layout purposes.

    +
    ┌───────────────────┐     ┌──────┐
    +    Decoration                
    + ┏━━━━━━━━━━━━━━━┓           ┣━━━━━━━━━━┓   
    +                     └─┳────┘             
    +     Wrapped               Wrapped       
    +                                         
    + ┗━━━━━━━━━━━━━━━┛       ┗━━━━━━━━━━━━━━━┛   
    +└───────────────────┘
    +  ◀───────────────▶         ◀───────────────▶
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Decorate : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementDimensions + +
    +
    +
    +
    +
    +
    +

    An element’s size and its alignment guides in its own coordinate space.

    + +

    You can access the size of the element through the width and height properties. You can +access alignment guide values by subscripting with the specific alignment.

    + +

    These dimensions are typically used when setting an alignment guide on a stack, with +StackElement.add(...).

    +

    Example

    +
    // get the alignment guide value for `VerticalAlignment.center`, falling back to the default
    +// value if no alignment guide has been set
    +dimensions[VerticalAlignment.center]
    +
    +// get the alignment guide value for `HorizontalAlignment.trailing`, or `nil` if none has been
    +// set.
    +dimensions[explicit: .trailing]
    +
    +

    See Also

    + +

    StackElement.add()

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ElementDimensions : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Flow + +
    +
    +
    +
    +
    +
    +

    Element which lays out children horizontally, wrapping to another row when there is not enough space.

    + +

    You may control the layout of each row within the flow layout, by providing a LineAlignment, +which controls the horizontal alignment of content within a row when it is smaller than its container, +and via ItemAlignment, which controls the vertical alignment of shorter elements within a row.

    +
    Flow(itemSpacing: 10, lineSpacing: 10) {
    +    OnboardingPill("Food / drink")
    +    OnboardingPill("Retail goods").flowChild(key: "aKey")
    +    OnboardingPill("Grocery / gourmet / alcohol")
    +    OnboardingPill("Beauty / wellness bookings")
    +    OnboardingPill("Healthcare services")
    +    OnboardingPill("Something else")
    +}
    +
    + +

    Below is a diagram showing a simple example of a Flow layout.

    +
    ┌─────────────────────────────────────┐
    + ┌─────────┐┌─────────┐┌────────────┐│
    +     1    ││    2    ││     3      ││
    + └─────────┘└─────────┘└────────────┘│
    + ┌───────┐┌─────┐┌───────────┐       
    +    4   ││  5  ││     6            
    + └───────┘└─────┘└───────────┘       
    +└─────────────────────────────────────┘
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Flow : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GeometryProxy + +
    +
    +
    +
    +
    +
    +

    Contains information about the current layout being measured by GeometryReader

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GeometryProxy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GridRow + +
    +
    +
    +
    +
    +
    +

    Like Row, GridRow displays a list of items in a linear horizontal layout. Unlike Row, GridRow provides +convenience for describing columnar layout.

    + +

    Horizontally, GridRow children are stretched to fill the available space. Vertically, children are aligned +according to the verticalAlignment property.

    + +

    Children may be sized proportionally or absolutely. Proportionally-sized children are granted a proportion of +the total layout space after absolutely-sized children and margins have been subtracted.

    +

    Example:

    +
    GridRow { row in
    +  row.verticalAlignment = .fill
    +  row.spacing = 8.0
    +  row.add(width: .proportional(0.75), child: name)
    +  row.add(width: .proportional(0.25), child: number)
    +  row.add(width: .absolute(100), child: status)
    +}
    +
    +

    Expected layout:

    +
    ┌────────────────────────────┬─┬────────┬─┬──────────────────┐
    +            name              number        status      
    +            (75%)           8  (25%) 8     (100 pts)    
    +                                                        
    +●──────────── 150 ───────────● ●── 50 ──● ●─────── 100 ──────●
    +└────────────────────────────┴─┴────────┴─┴──────────────────┘
    +●──────────────────────────── 316 ───────────────────────────●
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GridRow : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Hidden + +
    +
    +
    +
    +
    +
    +

    Hidden conditionally hides its wrapped element.

    +
    +

    Note

    + When an element is hidden, any elements within the wrapped element will be hidden. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Hidden : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Keyed + +
    +
    +
    +
    +
    +
    +

    Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

    + +

    This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

    +

    Example

    + +

    Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

    +
    func imageElement() -> Element {
    +    if let photo = self.photo {
    +        return Image(image: photo)
    +                .transition(.fade)
    +                .keyed("photo")
    +    } else {
    +        return Image(image: self.placeholder)
    +                .transition(.fade)
    +                .keyed("placeholder")
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Keyed : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutAttributes + +
    +
    +
    +
    +
    +
    +

    Contains layout-related metrics for an element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutAttributes
    +
    extension LayoutAttributes: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutOptions + +
    +
    +
    +
    +
    +
    +

    Configuration options for caffeinated.

    + +

    Generally these are only useful for experimenting with the performance profile of different +element compositions, and you should stick with default.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutOptions : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutSubelement + +
    +
    +
    +
    +
    +
    +

    A proxy that represents one child element of a layout.

    + +

    This type acts as a proxy for a child element in a Layout. Layout protocol methods receive a +LayoutSubelements collection that contains exactly one proxy for each of the child elements +managed by the layout.

    + +

    Use this proxy to get information about the associated element, like its size and traits. You +should also use the proxy to tell its corresponding element where to appear by calling the +proxy’s place(at:anchor:size:) method. Do this once for each subview from your +implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

    +
    +

    Note

    + The LayoutSubelement API, and its documentation, are modeled after SwiftUI’s +LayoutSubview, with major +differences noted. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutSubelement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutWriter + +
    +
    +
    +
    +
    +
    +

    A parent element which allows arbitrary, custom layout and positioning of its children.

    + +

    Instead of creating a custom Element with a custom Layout, you might use +this element to create a customized layout in a more lightweight way.

    +
    LayoutWriter { context, layout in
    +    layout.add(with: myFrame, child: myElement)
    +    layout.add(with: myOtherFrame, child: myOtherElement)
    +
    +    layout.sizing = .unionOfChildren
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutWriter : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LifecycleObserver + +
    +
    +
    +
    +
    +
    +

    Allows element lifecycle callbacks to be inserted anywhere into the element tree.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LifecycleObserver : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Opacity + +
    +
    +
    +
    +
    +
    +

    Changes the opacity of the wrapped element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Opacity : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StackLayout + +
    +
    +
    +
    +
    +
    +

    A layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct StackLayout : Layout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    TintAdjustmentMode conditionally modifies the tint adjustment mode of its wrapped element.

    +
    +

    Note

    + When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TintAdjustmentMode : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Transformed + +
    +
    +
    +
    +
    +
    +

    Changes the transform of the wrapped element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Transformed : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UnitPoint + +
    +
    +
    +
    +
    +
    +

    A normalized point in an element’s coordinate space.

    + +

    Use a unit point to represent a location in an element without having to know the element’s +rendered size. The point stores a value in each dimension that indicates the fraction of the +element’s size in that dimension — measured from the element’s origin — where the point appears. +For example, you can create a unit point that represents the center of any element by using the +value 0.5 for each dimension:

    +
    let unitPoint = UnitPoint(x: 0.5, y: 0.5)
    +
    + +

    To project the unit point into the rendered element’s coordinate space, multiply each component +of the unit point with the corresponding component of the element’s size:

    +
    let projectedPoint = CGPoint(
    +    x: unitPoint.x * size.width,
    +    y: unitPoint.y * size.height
    +)
    +
    + +

    You can perform this calculation yourself if you happen to know an element’s size, but Blueprint +typically does this for you to carry out operations that you request, like when you place a +subelement in a custom layout.

    + +

    You can create custom unit points with explicit values, like the example above, or you can use +one of the built-in unit points, like zero, center, or topTrailing. The built-in +values correspond to the alignment positions of the similarly named, built-in Alignment +types.

    +
    +

    Note

    + A unit point with one or more components outside the range [0, 1] projects to a point +outside of the element. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UnitPoint : Hashable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    UserInteractionEnabled conditionally enables user interaction of its wrapped element.

    +
    +

    Note

    + When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UserInteractionEnabled : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SizeConstraint + +
    +
    +
    +
    +
    +
    +

    Defines the maximum size for a measurement.

    + +

    Currently this constraint type can only handles layout where +the primary (breaking) axis is horizontal (row in CSS-speak).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct SizeConstraint : Hashable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AnimationAttributes + +
    +
    +
    +
    +
    +
    +

    UIView animation configuration values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AnimationAttributes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AccessibilityFocus + +
    +
    +
    +
    +
    +
    +

    Enables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityFocus : Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct URLHandlerEnvironmentKey : EnvironmentKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditingMenu + +
    +
    +
    +
    +
    +
    +

    Allows showing the system’s UIMenuController editing menu.

    + +

    You can show the menu upon tap or long press:

    +
    myElement.editingMenu(show: .onLongPress) {
    +    EditingMenuItem.copying("A String")
    +
    +    EditingMenuItem(.select) {
    +        print("Selected!")
    +    }
    +}
    +
    + +

    You can also show the menu as a result of another element’s onTap closure, +using the trigger-based API:

    +
    EditingMenu { menu in
    +    MyRow(text: "Hello, World") {
    +        menu.show()
    +    }
    +} items: {
    +    EditingMenuItem.copying("A String")
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditingMenu : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditingMenuItem + +
    +
    +
    +
    +
    +
    +

    A single item in an editing menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TextShadow + +
    +
    +
    +
    +
    +
    +

    Describes a shadow that can be applied to text elements, like Label.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextShadow : Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityBlocker.html b/Structs/AccessibilityBlocker.html new file mode 100644 index 000000000..84d45744d --- /dev/null +++ b/Structs/AccessibilityBlocker.html @@ -0,0 +1,805 @@ + + + + AccessibilityBlocker Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityBlocker

+
+
+ +
public struct AccessibilityBlocker : Element
+ +
+
+

Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element whose accessibility information will be blocked.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isBlocking + +
    +
    +
    +
    +
    +
    +

    If the AccessibilityBlocker is currently blocking accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isBlocking: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityBlocker wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    isBlocking: Bool = true,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityContainer.html b/Structs/AccessibilityContainer.html new file mode 100644 index 000000000..8c721ade4 --- /dev/null +++ b/Structs/AccessibilityContainer.html @@ -0,0 +1,812 @@ + + + + AccessibilityContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityContainer

+
+
+ +
public struct AccessibilityContainer : Element
+ +
+
+

Acts as an accessibility container for any accessible subviews.

+ +

Accessible subviews are found using the following algorithm:

+ +

Recurse subviews until a view is found that either

+ +
    +
  • hasisAccessibilityElement set to true or
  • +
+ +

If an accessibility element is found, we add it to the accessibilityElements +and terminate the search down that branch. If a container is found, +the elements returned from the container are added to the accessibilityElements +and the search down that branch is also terminated.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    +

    An optional accessibilityIdentifier to give the container. Defaults to nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityContainer wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(identifier: String? = nil, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityElement.html b/Structs/AccessibilityElement.html new file mode 100644 index 000000000..2beb14905 --- /dev/null +++ b/Structs/AccessibilityElement.html @@ -0,0 +1,1116 @@ + + + + AccessibilityElement Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityElement

+
+
+ +
public struct AccessibilityElement : Element
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + label + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var label: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var hint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var traits: Set<Trait>
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityFrameSize: CGSize?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityFrameCornerStyle: Box.CornerStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityActivate + +
    +
    +
    +
    +
    +
    +

    Used to provide custom behaviour when activated by voiceover. This will override the default behavior of issuing a tap event at the accessibility activation point. +See Accessibility Activate Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityActivate: (() -> Bool)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customActions + +
    +
    +
    +
    +
    +
    +

    An array containing one or more CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customActions: [CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customContent + +
    +
    +
    +
    +
    +
    +

    An array containing one or more CustomContents, defining additional content associated with the element. Assistive technologies, such as VoiceOver, will announce your custom content to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customContent: [CustomContent]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    label: String?,
    +    value: String?,
    +    traits: Set<AccessibilityElement.Trait>,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    accessibilityFrameSize: CGSize? = nil,
    +    accessibilityFrameCornerStyle: Box.CornerStyle = .square,
    +    customActions: [AccessibilityElement.CustomAction] = [],
    +    customContent: [AccessibilityElement.CustomContent] = [],
    +    wrapping element: Element,
    +    configure: (inout Self) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Trait + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Trait
    +
    extension AccessibilityElement.Trait: Hashable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CustomAction + +
    +
    +
    +
    +
    +
    +

    Used to provide additional functionality to assistive technologies beyond your accessible UI.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CustomAction : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CustomContent + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CustomContent
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityElement/CustomAction.html b/Structs/AccessibilityElement/CustomAction.html new file mode 100644 index 000000000..ce2678a84 --- /dev/null +++ b/Structs/AccessibilityElement/CustomAction.html @@ -0,0 +1,839 @@ + + + + CustomAction Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CustomAction

+
+
+ +
public struct CustomAction : Equatable, Hashable
+ +
+
+

Used to provide additional functionality to assistive technologies beyond your accessible UI.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + OnActivation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias OnActivation = () -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    A localized name that discribes the action.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    An image representing the action to be shown with some assistive technologies such as Switch Control.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onActivation + +
    +
    +
    +
    +
    +
    +

    A Callback for when the action is activated. This should return a bool indicating success or failure of the action.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onActivation: OnActivation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, image: UIImage? = nil, onActivation: @escaping OnActivation)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: AccessibilityElement.CustomAction, rhs: AccessibilityElement.CustomAction) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityElement/CustomContent.html b/Structs/AccessibilityElement/CustomContent.html new file mode 100644 index 000000000..bc0d45e7e --- /dev/null +++ b/Structs/AccessibilityElement/CustomContent.html @@ -0,0 +1,811 @@ + + + + CustomContent Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CustomContent

+
+
+ +
public struct CustomContent
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Importance + +
    +
    +
    +
    +
    +
    +

    The importance of the content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Importance : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + label + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var label: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + importance + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var importance: Importance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(label: String, value: String? = nil, importance: Importance = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + axCustomContent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var axCustomContent: AXCustomContent { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityElement/CustomContent/Importance.html b/Structs/AccessibilityElement/CustomContent/Importance.html new file mode 100644 index 000000000..d2d84bfb7 --- /dev/null +++ b/Structs/AccessibilityElement/CustomContent/Importance.html @@ -0,0 +1,709 @@ + + + + Importance Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Importance

+
+
+ +
public enum Importance : Equatable
+ +
+
+

The importance of the content.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    +

    By default custom content is available through the rotor.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case `default`
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + high + +
    +
    +
    +
    +
    +
    +

    In addtion to being available through the rotor, high importance content will announced in the main VoiceOver utterance. +High Importance content is announced follllowing the accessibilityValue but preceding any accessibilityHint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case high
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityElement/Trait.html b/Structs/AccessibilityElement/Trait.html new file mode 100644 index 000000000..994cd92ff --- /dev/null +++ b/Structs/AccessibilityElement/Trait.html @@ -0,0 +1,1204 @@ + + + + Trait Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Trait

+
+
+ +
public enum Trait
+
extension AccessibilityElement.Trait: Hashable, Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + IncrementAction + +
    +
    +
    +
    +
    +
    +

    Used in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control. +See Accessibility Increment Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias IncrementAction = () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + DecrementAction + +
    +
    +
    +
    +
    +
    +

    Used in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control. +See Accessibility Decrement Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias DecrementAction = () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + button + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case button
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case link
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + header + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case header
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + searchField + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case searchField
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selected + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selected
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + playsSound + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case playsSound
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardKey + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case keyboardKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + staticText + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case staticText
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + summaryElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case summaryElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + notEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notEnabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updatesFrequently + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case updatesFrequently
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + startsMediaSession + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case startsMediaSession
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adjustable(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case adjustable(IncrementAction, DecrementAction)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case allowsDirectInteraction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + causesPageTurn + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case causesPageTurn
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tabBar + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tabBar
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: AccessibilityElement.Trait, rhs: AccessibilityElement.Trait) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityFocus.html b/Structs/AccessibilityFocus.html new file mode 100644 index 000000000..5994bd85b --- /dev/null +++ b/Structs/AccessibilityFocus.html @@ -0,0 +1,844 @@ + + + + AccessibilityFocus Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityFocus

+
+
+ +
public struct AccessibilityFocus : Element
+ +
+
+

Enables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element that will have the focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trigger + +
    +
    +
    +
    +
    +
    +

    A object that can be held on to by the caller to manually trigger a focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var trigger: Trigger
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityFocus wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    wrapping wrapped: Element,
    +    trigger: Trigger
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ + +
+ +

Trigger +

+
+
+
    +
  • +
    + + + + Trigger + +
    +
    +
    +
    +
    +
    +

    A trigger that can be used to manually fire an accessibility focus.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class Trigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AccessibilityFocus/Trigger.html b/Structs/AccessibilityFocus/Trigger.html new file mode 100644 index 000000000..8e6e11a55 --- /dev/null +++ b/Structs/AccessibilityFocus/Trigger.html @@ -0,0 +1,796 @@ + + + + Trigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Trigger

+
+
+ +
public final class Trigger
+ +
+
+

A trigger that can be used to manually fire an accessibility focus.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + notificationType + +
    +
    +
    +
    +
    +
    +

    The type of accessibility notification that will be triggered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var notificationType: UIAccessibility.Notification
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    +

    An optional identifier for the trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new trigger for the purpose of changing accessibility focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    notificationType: UIAccessibility.Notification = .layoutChanged,
    +    identifier: AnyHashable? = nil
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + notificationType + + +
    +

    Type of accessibility notification to trigger. Defaults to .layoutChanged. Limited to .layoutChanged or .screenChanged.

    +
    +
    + + identifier + + +
    +

    An optional identifier for the trigger. Defaults to nil.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + focus() + +
    +
    +
    +
    +
    +
    +

    Manually fire the trigger

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focus()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AdaptedEnvironment.html b/Structs/AdaptedEnvironment.html new file mode 100644 index 000000000..4360363d1 --- /dev/null +++ b/Structs/AdaptedEnvironment.html @@ -0,0 +1,947 @@ + + + + AdaptedEnvironment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AdaptedEnvironment

+
+
+ +
public struct AdaptedEnvironment : Element
+ +
+
+

Wraps an element tree with a modified environment.

+ +

By specifying environmental values with this element, all child elements nested +will automatically inherit those values automatically. Values can be changed +anywhere in a sub-tree by inserting another AdaptedEnvironment element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Adapter + +
    +
    +
    +
    +
    +
    +

    Takes in a mutable Environment which can be mutated to add or override values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Adapter = (inout Environment) -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(by:wrapping:) + +
    +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified using the given +configuration block.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    by adapt: @escaping Adapter,
    +    wrapping wrapped: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + by + + +
    +

    A block that will set environmental values.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified for a single key and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Key>(
    +    key: Key.Type,
    +    value: Key.Value,
    +    wrapping child: Element
    +) where Key: EnvironmentKey
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + key + + +
    +

    The environment key to modify.

    +
    +
    + + value + + +
    +

    The new environment value to cascade.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified for a single value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Value>(
    +    keyPath: WritableKeyPath<Environment, Value>,
    +    value: Value,
    +    wrapping child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + keyPath + + +
    +

    The keypath of the environment value to modify.

    +
    +
    + + value + + +
    +

    The new environment value to cascade.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Aligned.html b/Structs/Aligned.html new file mode 100644 index 000000000..376d902d4 --- /dev/null +++ b/Structs/Aligned.html @@ -0,0 +1,922 @@ + + + + Aligned Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Aligned

+
+
+ +
public struct Aligned : Element
+ +
+
+

Aligns a content element within itself. The vertical and horizontal alignment may be set independently.

+ +

When using alignment mode .fill, the content is scaled to the width or height of the Aligned element.

+ +

For other modes, the size of the content element is determined by calling measure(in:) +on the content element – even if that size is larger than the wrapping element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + VerticalAlignment + +
    +
    +
    +
    +
    +
    +

    The possible vertical alignment values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + HorizontalAlignment + +
    +
    +
    +
    +
    +
    +

    The possible horizontal alignment values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element to be aligned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    The vertical alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalAlignment + +
    +
    +
    +
    +
    +
    +

    The horizontal alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalAlignment: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an Aligned with the given content element and alignments.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    vertically verticalAlignment: VerticalAlignment = .center,
    +    horizontally horizontalAlignment: HorizontalAlignment = .center,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + vertically + + +
    +

    The vertical alignment. Defaults to centered.

    +
    +
    + + horizontally + + +
    +

    The horizontal alignment. Defaults to centered.

    +
    +
    + + wrapping + + +
    +

    The content element to be aligned.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Aligned/HorizontalAlignment.html b/Structs/Aligned/HorizontalAlignment.html new file mode 100644 index 000000000..f6c34bfbe --- /dev/null +++ b/Structs/Aligned/HorizontalAlignment.html @@ -0,0 +1,764 @@ + + + + HorizontalAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

HorizontalAlignment

+
+
+ +
public enum HorizontalAlignment
+ +
+
+

The possible horizontal alignment values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the leading edge of the containing element. +In left-to-right languages, this is the left edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leading
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Centers the content horizontally.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the trailing edge of the containing element. +In left-to-right languages, this is the right edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case trailing
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    The content fills the full horizontal width of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Aligned/VerticalAlignment.html b/Structs/Aligned/VerticalAlignment.html new file mode 100644 index 000000000..26bdeec94 --- /dev/null +++ b/Structs/Aligned/VerticalAlignment.html @@ -0,0 +1,762 @@ + + + + VerticalAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VerticalAlignment

+
+
+ +
public enum VerticalAlignment
+ +
+
+

The possible vertical alignment values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the top edge of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Centers the content vertically.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the bottom edge of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    The content fills the full vertical height of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Alignment.html b/Structs/Alignment.html new file mode 100644 index 000000000..772b827d8 --- /dev/null +++ b/Structs/Alignment.html @@ -0,0 +1,978 @@ + + + + Alignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public struct Alignment : Equatable
+ +
+
+

An alignment in both axes.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A guide marking the leading edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the trailing edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A guide marking the top edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeading + +
    +
    +
    +
    +
    +
    +

    A guide marking the top and leading edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topTrailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the top and trailing edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topTrailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeading + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom and leading edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomTrailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom and trailing edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomTrailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    +

    The alignment on the horizontal axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontal: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    +

    The alignment on the vertical axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var vertical: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates an instance with the given horizontal and vertical alignments.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(horizontal: HorizontalAlignment, vertical: VerticalAlignment)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AnimationAttributes.html b/Structs/AnimationAttributes.html new file mode 100644 index 000000000..f317b96c6 --- /dev/null +++ b/Structs/AnimationAttributes.html @@ -0,0 +1,791 @@ + + + + AnimationAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AnimationAttributes

+
+
+ +
public struct AnimationAttributes
+ +
+
+

UIView animation configuration values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + duration + +
    +
    +
    +
    +
    +
    +

    The duration of the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var duration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + curve + +
    +
    +
    +
    +
    +
    +

    The timing curve of the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var curve: UIView.AnimationCurve
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + allowUserInteraction + +
    +
    +
    +
    +
    +
    +

    Whether the view supports user interaction during the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowUserInteraction: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let `default`: `Self`
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    duration: TimeInterval = 0.2,
    +    curve: UIView.AnimationCurve = .easeInOut,
    +    allowUserInteraction: Bool = true
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AspectRatio.html b/Structs/AspectRatio.html new file mode 100644 index 000000000..765793301 --- /dev/null +++ b/Structs/AspectRatio.html @@ -0,0 +1,812 @@ + + + + AspectRatio Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AspectRatio

+
+
+ +
public struct AspectRatio
+ +
+
+

Represents an a proportional relationship between width and height.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + square + +
    +
    +
    +
    +
    +
    +

    A 1:1 aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let square: AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ratio + +
    +
    +
    +
    +
    +
    +

    The width:height ratio value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ratio: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    +

    Initializes with a width & height ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat, height: CGFloat)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + width + + +
    +

    The relative width of the ratio.

    +
    +
    + + height + + +
    +

    The relative height of the ratio.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(ratio:) + +
    +
    +
    +
    +
    +
    +

    Initializes with a specific ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(ratio: CGFloat)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + ratio + + +
    +

    The width:height ratio.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AttributedLabel.html b/Structs/AttributedLabel.html new file mode 100644 index 000000000..f847e67de --- /dev/null +++ b/Structs/AttributedLabel.html @@ -0,0 +1,1215 @@ + + + + AttributedLabel Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedLabel

+
+
+ +
public struct AttributedLabel : Element, Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributedText + +
    +
    +
    +
    +
    +
    +

    The attributed text to render in the label.

    + +

    If you customize the line break mode using an NSParagraphStyle, the mode will be normalized +based on the number of lines allowed. This is because some line break modes are incompatible +with multi-line text rendering in TextKit, which is used to detect where links are in the text. +Some modes also break line height adjustment in single-line labels, so these are also normalized.

    + +

    Specifically:

    + +
      +
    • 1 line labels with a mode of byCharWrapping or byWordWrapping will be normalized to byClipping.
    • +
    • Multiline labels with a mode of byTruncatingHead or byTruncatingMiddle +will be normalized to byTruncatingTail.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributedText: NSAttributedString
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + numberOfLines + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var numberOfLines: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadow + +
    +
    +
    +
    +
    +
    +

    A shadow to display behind the label’s text. Defaults to no shadow.

    +
    +

    Note

    + This shadow is applied using the backing view’s CALayer, and will affect the +entire label. To apply a shadow to only a portion of text, you can instead set +NSAttributedString.Key.shadow on the string, but note that those shadows may be clipped +by the bounds of the backing view. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadow: TextShadow?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textRectOffset + +
    +
    +
    +
    +
    +
    +

    An offset that will be applied to the rect used by drawText(in:).

    + +

    This can be used to adjust the positioning of text within each line’s frame, such as adjusting +the way text is distributed within the line height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textRectOffset: UIOffset
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines if the label should be included when navigating the UI via accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAccessibilityElement: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label reduces the text’s font +size to fit the title string into the label’s bounding rectangle.

    + +

    Normally, the label draws the text with the font you specify in the font property. +If this property is true, and the text in the text property exceeds the label’s bounding rectangle, +the label reduces the font size until the text fits or it has scaled the font down to the minimum +font size. The default value for this property is false.

    + +

    If you change it to true, be sure that you also set an appropriate minimum +font scale by modifying the minimumScaleFactor property.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontSizeToFitWidth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumScaleFactor + +
    +
    +
    +
    +
    +
    +

    The minimum scale factor for the label’s text.

    + +

    If the adjustsFontSizeToFitWidth is true, use this property to specify the +smallest multiplier for the current font size that yields an acceptable +font size for the label’s text.

    + +

    If you specify a value of 0 for this property, the label doesn’t scale the text down. +The default value of this property is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumScaleFactor: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label tightens text before truncating.

    + +

    When the value of this property is true, the label tightens intercharacter spacing +of its text before allowing any truncation to occur. The label determines the +maximum amount of tightening automatically based on the font, current line width, +line break mode, and other relevant information.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +

    The default value of this property is false.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowsDefaultTighteningForTruncation: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the label, these will be merged with any existing traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityHint + +
    +
    +
    +
    +
    +
    +

    A localized string that describes the result of performing an action on the element, when the result is non-obvious.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityHint: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    An array containing one or more AccessibilityElement.CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityCustomActions: [AccessibilityElement.CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linkDetectionTypes + +
    +
    +
    +
    +
    +
    +

    A set of data types to detect and automatically link in the label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkDetectionTypes: Set<LinkDetectionType>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linkAttributes + +
    +
    +
    +
    +
    +
    +

    A set of attributes to apply to links in the string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkAttributes: [NSAttributedString.Key : AnyHashable]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + activeLinkAttributes + +
    +
    +
    +
    +
    +
    +

    A set of attributes to apply to links when they are touched.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var activeLinkAttributes: [NSAttributedString.Key : AnyHashable]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(attributedText: NSAttributedString, configure: (inout `Self`) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ + +
+ +

Models +

+
+
+
    +
  • +
    + + + + LinkDetectionType + +
    +
    +
    +
    +
    +
    +

    Types of data that can be detected and automatically turned into links.

    + +

    Corresponds to NSTextCheckingResult.CheckingType types.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LinkDetectionType : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AttributedLabel/LinkDetectionType.html b/Structs/AttributedLabel/LinkDetectionType.html new file mode 100644 index 000000000..68ddb658f --- /dev/null +++ b/Structs/AttributedLabel/LinkDetectionType.html @@ -0,0 +1,764 @@ + + + + LinkDetectionType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LinkDetectionType

+
+
+ +
public enum LinkDetectionType : Equatable, Hashable
+ +
+
+

Types of data that can be detected and automatically turned into links.

+ +

Corresponds to NSTextCheckingResult.CheckingType types.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + date + +
    +
    +
    +
    +
    +
    +

    Detect date strings. Tapping a date opens the calendar to that date.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case date
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + address + +
    +
    +
    +
    +
    +
    +

    Detect addresses. Tapping the address opens Maps with that address.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case address
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    +

    Detect URLs. Tapping the link opens the URL.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case link
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + phoneNumber + +
    +
    +
    +
    +
    +
    +

    Detect phone numbers. Tapping the phone number prompts the user to call it.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case phoneNumber
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AttributedText.html b/Structs/AttributedText.html new file mode 100644 index 000000000..6abcc42b0 --- /dev/null +++ b/Structs/AttributedText.html @@ -0,0 +1,959 @@ + + + + AttributedText Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedText

+
+
+ +
@dynamicMemberLookup
+public struct AttributedText
+ +
+
+

AttributedText allows you to apply strongly-typed attributes to strings (much like the AttributedString type +introduced in iOS 15). You can then access the attributedString property to get an attributed string with those +attributes applied.

+ +

For example:

+
var text = AttributedText(string: "Hello, world")
+// Apply a font to the entire range
+text.font = .systemFont(ofSize: 20)
+
+// Apply a color to part of the string
+let range = text.string.range(of: "world")!
+text[range].color = .blue
+
+// Render the attributed text
+let label = AttributedLabel(attributedText: text.attributedString)
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    +

    The wrapped string, with no attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let string: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributedString + +
    +
    +
    +
    +
    +
    +

    An NSAttributedString representation of the attributed text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributedString: NSAttributedString { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + runs + +
    +
    +
    +
    +
    +
    +

    An iterable view into segments of the attributed string, each of which indicates where a run of identical +attributes begins or ends.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var runs: [Run] { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Create some AttributedText from a plain string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Create some AttributedText from an attributed string. The attributes are preserved.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ attributedString: NSAttributedString)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + range(of:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func range(of aString: some StringProtocol) -> Range<String.Index>?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Dynamic member getter or setter for any attributes defined on TextAttributeContainer. +Applies the attribute to the entire range of text, for example:

    +
    var text = AttributedText(string: "Hello, world")
    +text.font = .systemFont(ofSize: 20)
    +
    + +

    Note that only attributes applying to the entire range will be returned. For example, if the text +has two different font attributes, then text.font will be nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(dynamicMember keyPath: WritableKeyPath<TextAttributeContainer, Value>) -> Value { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Get or set a TextAttributeContainer for the provided range of text. This allows you to set attributes +for specific ranges using strong types:

    +
    var text = AttributedText(string: "Hello, world")
    +let range = text.string.range(of: "Hello")!
    +text[range].font = .systemFont(ofSize: 20)
    +
    + +

    Note that the returned TextAttributeContainer will only contain attributes that apply to the entire subscript +range. (Setting an attribute will set it across the subscript range regardless of any existing contents).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<R>(range: R) -> TextAttributeContainer where R : RangeExpression, R.Bound == String.Index { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +(_:_:) + +
    +
    +
    +
    +
    +
    +

    Concatenate two pieces of AttributedText together.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func + (lhs: AttributedText, rhs: AttributedText) -> AttributedText
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Run + +
    +
    +
    +
    +
    +
    +

    A Run represents a range of identical attributes in the attributed text.

    + +

    You can access any properties of TextAttributeContainer on this type using dynamic member lookup.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @dynamicMemberLookup
    +public struct Run
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/AttributedText/Run.html b/Structs/AttributedText/Run.html new file mode 100644 index 000000000..586cc18fb --- /dev/null +++ b/Structs/AttributedText/Run.html @@ -0,0 +1,741 @@ + + + + Run Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Run

+
+
+ +
@dynamicMemberLookup
+public struct Run
+ +
+
+

A Run represents a range of identical attributes in the attributed text.

+ +

You can access any properties of TextAttributeContainer on this type using dynamic member lookup.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + range + +
    +
    +
    +
    +
    +
    +

    The range of the run of attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let range: Range<String.Index>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    The attributes that apply to this run.

    + +

    Note that you can access properties of the attribute container directly on the Run itself, since it +implements dynamic member look up.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let attributes: TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Dynamic member getter for the TextAttributeContainer of this run.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(dynamicMember keyPath: KeyPath<TextAttributeContainer, Value>) -> Value { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/BlueprintViewRenderMetrics.html b/Structs/BlueprintViewRenderMetrics.html new file mode 100644 index 000000000..3c3237b9d --- /dev/null +++ b/Structs/BlueprintViewRenderMetrics.html @@ -0,0 +1,788 @@ + + + + BlueprintViewRenderMetrics Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintViewRenderMetrics

+
+
+ +
public struct BlueprintViewRenderMetrics
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    The layout mode used to render the view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutMode: LayoutMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + startTimestamp + +
    +
    +
    +
    +
    +
    +

    The mach time in seconds at which the view render started (from CACurrentMediaTime()).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var startTimestamp: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalDuration + +
    +
    +
    +
    +
    +
    +

    The total time it took to apply a new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var totalDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutDuration + +
    +
    +
    +
    +
    +
    +

    The time it took to lay out and measure the new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + viewUpdateDuration + +
    +
    +
    +
    +
    +
    +

    The time it took to update the on-screen views for the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewUpdateDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box.html b/Structs/Box.html new file mode 100644 index 000000000..de569151c --- /dev/null +++ b/Structs/Box.html @@ -0,0 +1,1038 @@ + + + + Box Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Box

+
+
+ +
public struct Box : Element
+ +
+
+

A simple element that wraps a child element and adds visual styling including +background color.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + backgroundColor + +
    +
    +
    +
    +
    +
    +

    The background color to show in the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var backgroundColor: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cornerStyle + +
    +
    +
    +
    +
    +
    +

    The corner style to apply, eg rounded, capsule, or normal, square corners.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerStyle: CornerStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cornerCurve + +
    +
    +
    +
    +
    +
    +

    How to style the curves when cornerStyle is non-square.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerCurve: CornerCurve
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + borderStyle + +
    +
    +
    +
    +
    +
    +

    The border to apply around the edges of the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderStyle: BorderStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadowStyle + +
    +
    +
    +
    +
    +
    +

    The shadow style to apply to the outside of the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowStyle: ShadowStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + clipsContent + +
    +
    +
    +
    +
    +
    +

    If content placed within the box should be clipped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clipsContent: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    backgroundColor: UIColor = .clear,
    +    cornerStyle: CornerStyle = .square,
    +    cornerCurve: CornerCurve = .circular,
    +    borderStyle: BorderStyle = .none,
    +    shadowStyle: ShadowStyle = .none,
    +    clipsContent: Bool = false,
    +    wrapping element: Element? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CornerStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CornerStyle : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CornerCurve + +
    +
    +
    +
    +
    +
    +

    Specifies the curve style when showing rounded corners on a Box.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CornerCurve : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + BorderStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BorderStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ShadowStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ShadowStyle
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box/BorderStyle.html b/Structs/Box/BorderStyle.html new file mode 100644 index 000000000..c4c4607ad --- /dev/null +++ b/Structs/Box/BorderStyle.html @@ -0,0 +1,705 @@ + + + + BorderStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BorderStyle

+
+
+ +
public enum BorderStyle
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + solid(color:width:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case solid(color: UIColor, width: CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box/CornerCurve.html b/Structs/Box/CornerCurve.html new file mode 100644 index 000000000..108597489 --- /dev/null +++ b/Structs/Box/CornerCurve.html @@ -0,0 +1,711 @@ + + + + CornerCurve Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CornerCurve

+
+
+ +
public enum CornerCurve : Equatable
+ +
+
+

Specifies the curve style when showing rounded corners on a Box.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + circular + +
    +
    +
    +
    +
    +
    +

    Provides a standard-style corner radius as you would see in design tools like Figma.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case circular
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + continuous + +
    +
    +
    +
    +
    +
    +

    Provides an iOS icon-style corner radius.

    +

    Note

    + +

    Only appears on iOS 13 and later. Before iOS 13, circular corners will be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case continuous
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box/CornerStyle.html b/Structs/Box/CornerStyle.html new file mode 100644 index 000000000..dcdd04f18 --- /dev/null +++ b/Structs/Box/CornerStyle.html @@ -0,0 +1,758 @@ + + + + CornerStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CornerStyle

+
+
+ +
public enum CornerStyle : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + square + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case square
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + capsule + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case capsule
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rounded(radius: CGFloat, corners: Corners = .all)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Corners + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Corners : OptionSet, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box/CornerStyle/Corners.html b/Structs/Box/CornerStyle/Corners.html new file mode 100644 index 000000000..2cf304d79 --- /dev/null +++ b/Structs/Box/CornerStyle/Corners.html @@ -0,0 +1,939 @@ + + + + Corners Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Corners

+
+
+ +
public struct Corners : OptionSet, Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt8
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt8)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeft: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topRight: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeft: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomRight: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + all + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let all: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let left: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let right: Corners
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Box/ShadowStyle.html b/Structs/Box/ShadowStyle.html new file mode 100644 index 000000000..f9f8d17b9 --- /dev/null +++ b/Structs/Box/ShadowStyle.html @@ -0,0 +1,705 @@ + + + + ShadowStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ShadowStyle

+
+
+ +
public enum ShadowStyle
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case simple(radius: CGFloat, opacity: CGFloat, offset: CGSize, color: UIColor)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Builder.html b/Structs/Builder.html new file mode 100644 index 000000000..f58284c5f --- /dev/null +++ b/Structs/Builder.html @@ -0,0 +1,946 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
@resultBuilder
+public struct Builder<Child>
+ +
+
+

Generic result builder for converting blocks of Child... into [Child].

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Children = [Child]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildBlock(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildBlock(_ children: Children...) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildOptional(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildOptional(_ children: Children?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildEither(first:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildEither(first: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildEither(second:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildEither(second: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ child: Child) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    This function is disfavored in case a builder wants to offer additional buildExpression functions to support +multiple types in their builders. @_disfavoredOverload allows the compiler to choose the other function when +nil is built, instead of it being ambiguous.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @_disfavoredOverload
    +public static func buildExpression(_ child: Child?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildArray(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildArray(_ components: [Children]) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildArray(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildArray(_ components: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildLimitedAvailability(_ component: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow for an array of Child to be flattened into the overall result.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ children: [Child]) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Button.html b/Structs/Button.html new file mode 100644 index 000000000..a5ce11475 --- /dev/null +++ b/Structs/Button.html @@ -0,0 +1,837 @@ + + + + Button Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Button

+
+
+ +
public struct Button : Element
+ +
+
+

An element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when +highlighted (or disabled), it fades its contents to partial alpha.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onTap + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onTap: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumTappableSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumTappableSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(isEnabled: Bool = true, onTap: @escaping () -> Void = {}, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Centered.html b/Structs/Centered.html new file mode 100644 index 000000000..162c020d9 --- /dev/null +++ b/Structs/Centered.html @@ -0,0 +1,738 @@ + + + + Centered Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Centered

+
+
+ +
public struct Centered : ProxyElement
+ +
+
+

Centers a content element within itself.

+ +

The size of the content element is determined by calling measure(in:) on +the content element – even if that size is larger than the wrapping Centered +element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The content element to be centered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Initializes a Centered element with the given content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ wrapped: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Column.html b/Structs/Column.html new file mode 100644 index 000000000..6bfe6a33d --- /dev/null +++ b/Structs/Column.html @@ -0,0 +1,997 @@ + + + + Column Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Column

+
+
+ +
public struct Column : StackElement
+ +
+
+

Displays a list of items in a linear vertical layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ColumnAlignment + +
    +
    +
    +
    +
    +
    +

    Describes how the column’s children will be horizontally aligned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ColumnAlignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a Column, using result builder syntax. Columns display a list of items in a vertical +stack.

    +
    Column {
    +    Label(text: "Welcome")
    +
    +    TextField(text: username)
    +    TextField(text: password)
    +
    +    Button(
    +        onTap: handleSignIn,
    +        wrapping: Label(text: "Sign In")
    +    )
    +}
    +
    + +

    By default, each item in the column will be stretched or compressed with equal priority in +the event of overflow or underflow. You can control this behavior by adding a +stackLayoutChild modifier to an item.

    +
    Column {
    +    ImportantHeader()
    +        .stackLayoutChild(priority: .fixed)
    +
    +    LessImportantContent()
    +}
    +
    + +

    You can also use this modifier to add keys and alignment guides. See StackElement.add for +more information.

    +

    See Also

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    alignment: ColumnAlignment = .leading,
    +    underflow: StackLayout.UnderflowDistribution = .spaceEvenly,
    +    overflow: StackLayout.OverflowDistribution = .condenseProportionally,
    +    minimumSpacing: CGFloat = 0,
    +    @ElementBuilder<StackLayout.Child> elements: () -> [StackLayout.Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Specifies how children will be aligned horizontally. Default: .leading

    +
    +
    + + underflow + + +
    +

    Determines the layout when there is extra free space available. Default: +.spaceEvenly

    +
    +
    + + overflow + + +
    +

    Determines the layout when there is not enough space to fit all children as +measured. Default: .condenseProportionally

    +
    +
    + + minimumSpacing + + +
    +

    Spacing in between elements. Default: 0

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalUnderflow: StackLayout.UnderflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalOverflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalOverflow: StackLayout.OverflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalAlignment + +
    +
    +
    +
    +
    +
    +

    Specifies how children will be aligned horizontally.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalAlignment: ColumnAlignment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumVerticalSpacing: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Column/ColumnAlignment.html b/Structs/Column/ColumnAlignment.html new file mode 100644 index 000000000..5f780edc7 --- /dev/null +++ b/Structs/Column/ColumnAlignment.html @@ -0,0 +1,793 @@ + + + + ColumnAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ColumnAlignment

+
+
+ +
public enum ColumnAlignment : Equatable
+ +
+
+

Describes how the column’s children will be horizontally aligned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to fit the horizontal size of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Using the specified alignment, children will be aligned relatively to each other, and +then all the contents will be aligned to the column’s bounding box.

    + +

    This case can be used for custom alignments. For common alignments you can use the +existing static instancesleading, center, and trailing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: HorizontalAlignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the leading edge of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Children will be horizontally centered in the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the trailing edge of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ConstrainedAspectRatio.html b/Structs/ConstrainedAspectRatio.html new file mode 100644 index 000000000..5644c8d7c --- /dev/null +++ b/Structs/ConstrainedAspectRatio.html @@ -0,0 +1,886 @@ + + + + ConstrainedAspectRatio Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ConstrainedAspectRatio

+
+
+ +
public struct ConstrainedAspectRatio : Element
+ +
+
+

Constrains the size of the content element to an aspect ratio.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ContentMode + +
    +
    +
    +
    +
    +
    +

    Represents how the content should size itself relative to its parent.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentMode : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The element being constrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectRatio + +
    +
    +
    +
    +
    +
    +

    The target aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var aspectRatio: AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentMode + +
    +
    +
    +
    +
    +
    +

    Whether the aspect ratio should be reached by expanding the content element’s size to fill its parent +or shrinking it to fit.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentMode: ContentMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes with the given properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(aspectRatio: AspectRatio, contentMode: ContentMode = .fitContent, wrapping wrappedElement: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + aspectRatio + + +
    +

    The aspect ratio that the content size should match.

    +
    +
    + + contentMode + + +
    +

    How the content should size itself relative to its parent.

    +
    +
    + + wrapping + + +
    +

    The content element.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ConstrainedAspectRatio/ContentMode.html b/Structs/ConstrainedAspectRatio/ContentMode.html new file mode 100644 index 000000000..f974cbf50 --- /dev/null +++ b/Structs/ConstrainedAspectRatio/ContentMode.html @@ -0,0 +1,789 @@ + + + + ContentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentMode

+
+
+ +
public enum ContentMode : Equatable
+ +
+
+

Represents how the content should size itself relative to its parent.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fillParent + +
    +
    +
    +
    +
    +
    +

    The content will be sized to fill its parent while +maintaining the specified aspect ratio.

    + +

    In legacy layout mode, if the parent is unconstrained in all dimensions, +the content size will be used for measurement and will behave like fitContent. If the +parent is unconstrained in one dimension, the element will fill the constrained +dimension.

    + +

    In caffeinated, if the parent is unconstrained in any dimension, this +element will report a size of infinity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fillParent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fitParent + +
    +
    +
    +
    +
    +
    +

    The content will be sized to fit within its parent while maintaining the specified +aspect ratio.

    + +

    If the parent is unconstrained in one dimension, the element will fit the constrained +dimension.

    + +

    In legacy layout mode, if the parent is unconstrained in all dimensions, +the content size will be used for measurement and will behave like fitContent.

    + +

    In caffeinated layout mode, if the parent is unconstrained in both +dimensions, this element will report a size of infinity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fitParent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fitContent + +
    +
    +
    +
    +
    +
    +

    The content will grow in whichever dimension is needed to maintain the aspect ratio, +while ensuring the content still fits.

    + +

    This mode does not take the parents applied size constraint into account, so the parent +may ultimately layout the element without the constrained aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fitContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shrinkContent + +
    +
    +
    +
    +
    +
    +

    The content will shrink in whichever dimension is needed to maintain the aspect ratio, +meaning it may be smaller in one dimension than the measured size.

    + +

    This mode does not take the parents applied size constraint into account, so the parent +may ultimately layout the element without the constrained aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shrinkContent
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ConstrainedSize.html b/Structs/ConstrainedSize.html new file mode 100644 index 000000000..d3992dde2 --- /dev/null +++ b/Structs/ConstrainedSize.html @@ -0,0 +1,855 @@ + + + + ConstrainedSize Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ConstrainedSize

+
+
+ +
public struct ConstrainedSize : Element
+ +
+
+

Constrains the measured size of the contained element in the ranges specified by the width and height properties.

+ +

There are several constraint types available for each axis. See ConstrainedSize.Constraint for a full list and in-depth +descriptions of each.

+

Notes

+ +

An important note is that the constraints of ConstrainedSize are authoritative during measurement. For example, +if your ConstrainedSize specifies .atLeast(300) for width, and the ConstrainedSize is asked to measure within +a SizeConstraint that is at most 100 points wide, the returned measurement will still be 300 points. The same goes for the +height of the ConstrainedSize.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element whose measurement will be constrained by the ConstrainedSize.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The constraint to place on the width of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Constraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The constraint to place on the height of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var height: Constraint
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ConstrainedSize with the provided constraint options.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    width: Constraint = .unconstrained,
    +    height: Constraint = .unconstrained,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Constraint + +
    +
    +
    +
    +
    +
    +

    The available ways to constrain the measurement of a given axis within a ConstrainedSize element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Constraint : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ConstrainedSize/Constraint.html b/Structs/ConstrainedSize/Constraint.html new file mode 100644 index 000000000..bc742ca01 --- /dev/null +++ b/Structs/ConstrainedSize/Constraint.html @@ -0,0 +1,791 @@ + + + + Constraint Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Constraint

+
+
+ +
public enum Constraint : Equatable
+ +
+
+

The available ways to constrain the measurement of a given axis within a ConstrainedSize element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    +

    There is no constraint for this axis – the natural size of the element will be used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unconstrained
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + atMost(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be no greater than the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atMost(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + atLeast(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be no less than the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atLeast(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + within(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be within the range provided. +If the measured value is below the bottom of the range, the lower value will be used. +If the measured value is above the top of the range, the lower value will be used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case within(ClosedRange<CGFloat>)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + absolute(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be exactly the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case absolute(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Decorate.html b/Structs/Decorate.html new file mode 100644 index 000000000..34b25f962 --- /dev/null +++ b/Structs/Decorate.html @@ -0,0 +1,937 @@ + + + + Decorate Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Decorate

+
+
+ +
public struct Decorate : ProxyElement
+ +
+
+

Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

+ +

The size and position of the element is determined only by the wrapped +element, the decoration element does not affect the layout at all.

+

Example

+ +

The arrows represent the measured size of the element for layout purposes.

+
┌───────────────────┐     ┌──────┐
+    Decoration                
+ ┏━━━━━━━━━━━━━━━┓           ┣━━━━━━━━━━┓   
+                     └─┳────┘             
+     Wrapped               Wrapped       
+                                         
+ ┗━━━━━━━━━━━━━━━┛       ┗━━━━━━━━━━━━━━━┛   
+└───────────────────┘
+  ◀───────────────▶         ◀───────────────▶
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element which provides the sizing and measurement. +The sizing and position of the Decorate element is determined +by this element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoration + +
    +
    +
    +
    +
    +
    +

    The element which is used to draw the decoration. +It does not affect sizing or positioning.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var decoration: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layering + +
    +
    +
    +
    +
    +
    +

    Where the decoration should be positioned in the z-axis: Above or below the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layering: Layering
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    How the decoration should be positioned in respect to the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var position: Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new instance with the provided overflow, background, and wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    layering: Layering,
    +    position: Position,
    +    wrapping: Element,
    +    decoration: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

ProxyElement +

+
+
+
    +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Layering + +
    +
    +
    +
    +
    +
    +

    If the decoration should be positioned above or below the content element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Layering : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Corner + +
    +
    +
    +
    +
    +
    +

    What corner the decoration element should be positioned in.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Corner : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Position + +
    +
    +
    +
    +
    +
    +

    How to position the decoration element relative to the content element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Position
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Decorate/Corner.html b/Structs/Decorate/Corner.html new file mode 100644 index 000000000..d65e7e676 --- /dev/null +++ b/Structs/Decorate/Corner.html @@ -0,0 +1,758 @@ + + + + Corner Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Corner

+
+
+ +
public enum Corner : Equatable
+ +
+
+

What corner the decoration element should be positioned in.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + topLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLeft
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomLeft
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Decorate/Layering.html b/Structs/Decorate/Layering.html new file mode 100644 index 000000000..0ea29e35e --- /dev/null +++ b/Structs/Decorate/Layering.html @@ -0,0 +1,708 @@ + + + + Layering Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Layering

+
+
+ +
public enum Layering : Equatable
+ +
+
+

If the decoration should be positioned above or below the content element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + above + +
    +
    +
    +
    +
    +
    +

    The decoration is displayed above the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case above
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + below + +
    +
    +
    +
    +
    +
    +

    The decoration is displayed below the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case below
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Decorate/Position.html b/Structs/Decorate/Position.html new file mode 100644 index 000000000..595727485 --- /dev/null +++ b/Structs/Decorate/Position.html @@ -0,0 +1,904 @@ + + + + Position Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Position

+
+
+ +
public struct Position
+ +
+
+

How to position the decoration element relative to the content element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + inset(_:) + +
    +
    +
    +
    +
    +
    +

    Insets the decoration element on each edge by the amount specified by +the UIEdgeInsets property.

    + +

    A positive value for an edge expands the decoration outside of that edge, +whereas a negative inset pushes the the decoration inside that edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(_ inset: UIEdgeInsets) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(_:) + +
    +
    +
    +
    +
    +
    +

    Provides a .inset position where the decoration is inset by the +same amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(_ amount: CGFloat) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Provides a .inset position where the decoration is inset by the +horizontal amount on the left and right, and the vertical amount on the top and bottom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(horizontal: CGFloat = 0.0, vertical: CGFloat = 0.0) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Aligns the decoration according the given alignment option, optionally adjusting it with +an alignment guide on either axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func aligned(
    +    to alignment: Alignment,
    +    horizontalGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    verticalGuide: ((ElementDimensions) -> CGFloat)? = nil
    +) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Determines the position of the decoration relative to the decorated +content.

    +
    +
    + + horizontalGuide + + +
    +

    +
    +
    + + verticalGuide + + +
    +

    +
    +
    +
    +
    +

    Return Value

    +

    An aligned position.

    +
    +
    +
    +
  • +
  • +
    + + + + corner(_:_:) + +
    +
    +
    +
    +
    +
    +

    The decoration element is positioned in the given corner of the +content element, optionally offset by the provided amount.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func corner(_ corner: Corner, _ offset: UIOffset = .zero) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    Allows you to provide custom positioning for the decoration, based on the passed context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func custom(_ position: @escaping (PositionContext) -> CGRect) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PositionContext + +
    +
    +
    +
    +
    +
    +

    Information provided to Position closures.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct PositionContext
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Decorate/Position/PositionContext.html b/Structs/Decorate/Position/PositionContext.html new file mode 100644 index 000000000..348584fe5 --- /dev/null +++ b/Structs/Decorate/Position/PositionContext.html @@ -0,0 +1,735 @@ + + + + PositionContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PositionContext

+
+
+ +
public struct PositionContext
+ +
+
+

Information provided to Position closures.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + decorationSize + +
    +
    +
    +
    +
    +
    +

    The size of the decoration being positioned within the decorated content’s bounds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var decorationSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    +

    The size of the content element within the Decorate element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is being rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenu.html b/Structs/EditingMenu.html new file mode 100644 index 000000000..731a5e8df --- /dev/null +++ b/Structs/EditingMenu.html @@ -0,0 +1,920 @@ + + + + EditingMenu Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EditingMenu

+
+
+ +
public struct EditingMenu : Element
+ +
+
+

Allows showing the system’s UIMenuController editing menu.

+ +

You can show the menu upon tap or long press:

+
myElement.editingMenu(show: .onLongPress) {
+    EditingMenuItem.copying("A String")
+
+    EditingMenuItem(.select) {
+        print("Selected!")
+    }
+}
+
+ +

You can also show the menu as a result of another element’s onTap closure, +using the trigger-based API:

+
EditingMenu { menu in
+    MyRow(text: "Hello, World") {
+        menu.show()
+    }
+} items: {
+    EditingMenuItem.copying("A String")
+}
+
+ +
+
+ +
+
+
+ +
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Gesture + +
    +
    +
    +
    +
    +
    +

    The gesture to use to show the menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Gesture
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + MenuTrigger + +
    +
    +
    +
    +
    +
    +

    A trigger that you can use to show the menu based on the result of some other +action firing, such as the onTap or onSelect of another element.

    +
    EditingMenu { menu in
    +    MyRow(text: "Hello, World") {
    +        menu.show()
    +    }
    +} items: {
    +    EditingMenuItem.copying("A String")
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class MenuTrigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenu/Gesture.html b/Structs/EditingMenu/Gesture.html new file mode 100644 index 000000000..4ced98427 --- /dev/null +++ b/Structs/EditingMenu/Gesture.html @@ -0,0 +1,708 @@ + + + + Gesture Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Gesture

+
+
+ +
public enum Gesture
+ +
+
+

The gesture to use to show the menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + onTap + +
    +
    +
    +
    +
    +
    +

    The menu will be shown when the element is tapped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onTap
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onLongPress + +
    +
    +
    +
    +
    +
    +

    The menu will be shown when the element is long pressed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onLongPress
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenu/MenuTrigger.html b/Structs/EditingMenu/MenuTrigger.html new file mode 100644 index 000000000..324b02053 --- /dev/null +++ b/Structs/EditingMenu/MenuTrigger.html @@ -0,0 +1,690 @@ + + + + MenuTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

MenuTrigger

+
+
+ +
public final class MenuTrigger
+ +
+
+

A trigger that you can use to show the menu based on the result of some other +action firing, such as the onTap or onSelect of another element.

+
EditingMenu { menu in
+    MyRow(text: "Hello, World") {
+        menu.show()
+    }
+} items: {
+    EditingMenuItem.copying("A String")
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + show() + +
    +
    +
    +
    +
    +
    +

    Call this method to show the menu.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func show()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenuItem.html b/Structs/EditingMenuItem.html new file mode 100644 index 000000000..c060c31cb --- /dev/null +++ b/Structs/EditingMenuItem.html @@ -0,0 +1,877 @@ + + + + EditingMenuItem Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EditingMenuItem

+
+
+ +
public struct EditingMenuItem
+ +
+
+

A single item in an editing menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + kind + +
    +
    +
    +
    +
    +
    +

    The type of menu item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var kind: Kind
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onSelect + +
    +
    +
    +
    +
    +
    +

    A callback, invoked when the user selects the menu item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onSelect: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(title:onSelect:) + +
    +
    +
    +
    +
    +
    +

    Creates a new menu item of the given kind.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    title: String,
    +    onSelect: @escaping () -> Void
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:onSelect:) + +
    +
    +
    +
    +
    +
    +

    Creates a new menu item of the given kind.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    _ kind: Kind.System,
    +    onSelect: @escaping () -> Void
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given string to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ string: String, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given image to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ image: UIImage, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given url to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ url: URL, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Kind + +
    +
    +
    +
    +
    +
    +

    The menu item types you may place into a menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Kind : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenuItem/Kind.html b/Structs/EditingMenuItem/Kind.html new file mode 100644 index 000000000..574c5eb84 --- /dev/null +++ b/Structs/EditingMenuItem/Kind.html @@ -0,0 +1,738 @@ + + + + Kind Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Kind

+
+
+ +
public enum Kind : Equatable
+ +
+
+

The menu item types you may place into a menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + system(_:) + +
    +
    +
    +
    +
    +
    +

    A standard system item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case system(System)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    A custom item with a custom title.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + System + +
    +
    +
    +
    +
    +
    +

    The system menu item kinds supported by an editing menu.

    + +

    Note – Matches methods from UIResponderStandardEditActions.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum System : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EditingMenuItem/Kind/System.html b/Structs/EditingMenuItem/Kind/System.html new file mode 100644 index 000000000..a56086e3e --- /dev/null +++ b/Structs/EditingMenuItem/Kind/System.html @@ -0,0 +1,1046 @@ + + + + System Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

System

+
+
+ +
public enum System : Equatable
+ +
+
+

The system menu item kinds supported by an editing menu.

+ +

Note – Matches methods from UIResponderStandardEditActions.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + cut + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case cut
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case copy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + paste + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case paste
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delete + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case delete
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + select + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case select
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selectAll + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selectAll
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleBoldface + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleBoldface
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleItalics + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleItalics
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleUnderline + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleUnderline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + increaseSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case increaseSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decreaseSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case decreaseSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + printContent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case printContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndGo + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndGo
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndMatchStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndMatchStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndSearch + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndSearch
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ElementContent.html b/Structs/ElementContent.html new file mode 100644 index 000000000..c36a4f7ad --- /dev/null +++ b/Structs/ElementContent.html @@ -0,0 +1,1427 @@ + + + + ElementContent Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementContent

+
+
+ +
public struct ElementContent
+ +
+
+

Represents the content of an element.

+ +
+
+ +
+
+
+
+ + +
+ +

Measurement & Children +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Measures the required size of this element’s content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint, environment: Environment) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint.

    +
    +
    + + environment + + +
    +

    The environment to measure in.

    +
    +
    +
    +
    +

    Return Value

    +

    The layout size needed by this content.

    +
    +
    +
    +
  • +
  • +
    + + + + childCount + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var childCount: Int { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Layout storage +

+
+
+
    +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    Used to construct elements that have layout and children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Builder<LayoutType> where LayoutType : Layout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given layout and children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<LayoutType: Layout>(
    +    layout: LayoutType,
    +    configure: (inout Builder<LayoutType>) -> Void = { _ in }
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + layout + + +
    +

    The layout to use.

    +
    +
    + + configure + + +
    +

    A closure that configures the layout and adds children to the container.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given element and layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    child: Element,
    +    key: AnyHashable? = nil,
    +    layout: some SingleChildLayout
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + element + + +
    +

    The single child element.

    +
    +
    + + key + + +
    +

    The key to use to unique the element during updates.

    +
    +
    + + layout + + +
    +

    The layout that will be used.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Passthrough storage +

+
+
+
    +
  • +
    + + + + init(child:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given element.

    + +

    The given element will be used for measuring, and it will always fill the extent of the parent element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(child: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + element + + +
    +

    The single child element.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Lazy storage +

+
+
+
    +
  • +
    + + + + init(build:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent that will lazily create its storage during a layout and measurement pass, +based on the Environment passed to the builder closure.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    build builder: @escaping (SizeConstraint, Environment) -> Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + builder + + +
    +

    A closure that provides the content Element based on the provided SizeConstraint +and Environment.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Leaf content +

+
+
+
    +
  • +
    + + + + init(measurable:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided Measurable.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(measurable: Measurable)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measurable + + +
    +

    How to measure the ElementContent.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided measure function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    measureFunction: @escaping (SizeConstraint) -> CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measureFunction + + +
    +

    How to measure the ElementContent in the given SizeConstraint.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided measure function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    measureFunction: @escaping (SizeConstraint, Environment) -> CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measureFunction + + +
    +

    How to measure the ElementContent in the given SizeConstraint and Environment.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intrinsicSize:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that uses the provided intrinsic size for measuring.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intrinsicSize: CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Environment adapters +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given child element, measurement caching key, and environment adapter, +which allows adapting the environment to affect the element, plus elements further down the tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    child: Element,
    +    environment environmentAdapter: @escaping (inout Environment) -> Void
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + child + + +
    +

    The child element to display.

    +
    +
    + + environmentAdapter + + +
    +

    How to adapt the Environment for the child and elements further down the tree.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given child element, measurement caching key, and environment key + value. +which adapts the environment to affect the element, plus elements further down the tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Key>(
    +    child: Element,
    +    key: Key.Type,
    +    value: Key.Value
    +) where Key: EnvironmentKey
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + child + + +
    +

    The child element to display.

    +
    +
    + + key + + +
    +

    The key to set in the Environment.

    +
    +
    + + value + + +
    +

    The value to set in the Environment for the given key.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Nested element measuring +

+
+
+
    +
  • +
    + + + + init(measuring:) + +
    +
    +
    +
    +
    +
    +

    Creates a new ElementContent which uses the provided element to measure its +size, but does not place the element as a child in the final, laid out hierarchy.

    + +

    This is useful if you are placing the element in a nested BlueprintView, for example (eg +to create a stateful element) and just need this element to be correctly sized.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(measuring element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ElementContent/Builder.html b/Structs/ElementContent/Builder.html new file mode 100644 index 000000000..42c78dfff --- /dev/null +++ b/Structs/ElementContent/Builder.html @@ -0,0 +1,713 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
public struct Builder<LayoutType> where LayoutType : Layout
+ +
+
+

Used to construct elements that have layout and children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    +

    The layout object that is ultimately responsible for measuring +and layout tasks.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layout: LayoutType
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds the given child element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    traits: LayoutType.Traits = LayoutType.defaultTraits,
    +    key: AnyHashable? = nil,
    +    element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ElementDimensions.html b/Structs/ElementDimensions.html new file mode 100644 index 000000000..c63e0a7fd --- /dev/null +++ b/Structs/ElementDimensions.html @@ -0,0 +1,838 @@ + + + + ElementDimensions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementDimensions

+
+
+ +
public struct ElementDimensions : Equatable
+ +
+
+

An element’s size and its alignment guides in its own coordinate space.

+ +

You can access the size of the element through the width and height properties. You can +access alignment guide values by subscripting with the specific alignment.

+ +

These dimensions are typically used when setting an alignment guide on a stack, with +StackElement.add(...).

+

Example

+
// get the alignment guide value for `VerticalAlignment.center`, falling back to the default
+// value if no alignment guide has been set
+dimensions[VerticalAlignment.center]
+
+// get the alignment guide value for `HorizontalAlignment.trailing`, or `nil` if none has been
+// set.
+dimensions[explicit: .trailing]
+
+

See Also

+ +

StackElement.add()

+ +
+
+ +
+
+
+
    +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The element’s width

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var width: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The element’s height

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var height: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Accesses the value of the given guide, or the default value of the alignment if this +guide has not been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) subscript(guide: HorizontalAlignment) -> CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Accesses the value of the given guide, or the default value of the alignment if this +guide has not been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) subscript(guide: VerticalAlignment) -> CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(explicit:) + +
    +
    +
    +
    +
    +
    +

    Returns the explicit value of the given alignment guide in this view, or +nil if no such value exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(explicit guide: HorizontalAlignment) -> CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(explicit:) + +
    +
    +
    +
    +
    +
    +

    Returns the explicit value of the given alignment guide in this view, or +nil if no such value exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(explicit guide: VerticalAlignment) -> CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ElementPreview.html b/Structs/ElementPreview.html new file mode 100644 index 000000000..bd7626710 --- /dev/null +++ b/Structs/ElementPreview.html @@ -0,0 +1,919 @@ + + + + ElementPreview Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementPreview

+
+
+ +
@available(iOS 13.0, *)
+public struct ElementPreview : View
+ +
+
+

A SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements +via Xcode’s preview functionality (enable via the Editor > Canvas menu).

+ +

You can leverage ElementPreview by adding something like this to the bottom of the file which contains +your Blueprint element, then as you edit and work on your element, the live preview will update to show the +current state of your element:

+

+struct MyElement : Element {
+   ...
+}
+
+// Add this at the bottom of your element's source file.
+
+#if DEBUG && canImport(SwiftUI) && !arch(i386) && !arch(arm)
+
+import SwiftUI
+
+@available(iOS 13.0, *)
+struct MyElement_Preview: PreviewProvider {
+    static var previews: some View {
+        ElementPreview {
+            MyElement()
+        }
+    }
+}
+
+#endif
+
+
+

Uhhh

+ +

You’re probably asking… +Why the !arch(i386) check above? Turns out, a compiler bug! +SwiftUI is only available on 64 bit devices, but the canImport check erroneously +finds it when building to target iOS 10 devices. Until we drop iOS 10, this part of the check is also required.

+

Details

+ +

It’s important that you keep the PreviewProvider in the same file as the element that you are editing.

+ +

Why? Xcode uses a new feature called “Dynamic Replacement” to re-compile the source file you are editing, +and inject it back into the running app which drives the preview. This only works on the level of a single +file – if your preview and element live in separate files, Xcode needs to recompile your entire module +which will slow down preview updates greatly.

+ +

You can learn more about Xcode previews here: https://nshipster.com/swiftui-previews/

+

Requirements

+ +

You must be running Xcode 11 and Catalina to take advantage of live previews. +They do not work on Mojave. Your selected simulator must also be an iOS 13 device.

+ +
+
+ +
+
+
+
+ + +
+ +

Properties +

+
+
+
    +
  • +
    + + + + ElementProvider + +
    +
    +
    +
    +
    +
    +

    A provider which returns a new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ElementProvider = () -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Initialization +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with several common devices that your users may use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func commonDevices(
    +    named name: String = "",
    +    with provider: @escaping ElementProvider
    +) -> Self
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with the provided preview type. +If you do not pass a preview type, .thatFits is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    named name: String = "",
    +    with previewType: PreviewType = .thatFits(),
    +    with provider: @escaping ElementProvider
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with the provided preview types.

    + +

    You can pass as many preview types as you would like to see your +element rendered in those different environments.

    + +

    If you do not pass a preview type, .thatFits is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    named name: String = "",
    +    with previewTypes: [PreviewType],
    +    with provider: @escaping ElementProvider
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

View +

+
+
+
    +
  • +
    + + + + body + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var body: some View { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PreviewType + +
    +
    +
    +
    +
    +
    +

    The preview type to use to display an element in an Xcode preview.

    + +

    We provide three preview types: A specific device type, a fixed size, and the size that fits the view.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum PreviewType
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ElementPreview/PreviewType.html b/Structs/ElementPreview/PreviewType.html new file mode 100644 index 000000000..cbf37b14d --- /dev/null +++ b/Structs/ElementPreview/PreviewType.html @@ -0,0 +1,795 @@ + + + + PreviewType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PreviewType

+
+
+ +
public enum PreviewType
+ +
+
+

The preview type to use to display an element in an Xcode preview.

+ +

We provide three preview types: A specific device type, a fixed size, and the size that fits the view.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + device(_:) + +
    +
    +
    +
    +
    +
    +

    The preview will be inside the provided device (eg, iPhone X).

    + +

    Note: You can use the provided extension on PreviewDevice +to access devices in a type-safe way, eg: .device(.iPhone7).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case device(PreviewDevice)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fixed(width:height:) + +
    +
    +
    +
    +
    +
    +

    The preview will be the provided size

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed(width: CGFloat, height: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + thatFits(padding:) + +
    +
    +
    +
    +
    +
    +

    The preview will be as large as needed to preview the content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case thatFits(padding: CGFloat = 10.0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: AnyHashable { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func previewView(
    +    with name: String,
    +    for element: Element
    +) -> AnyView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Empty.html b/Structs/Empty.html new file mode 100644 index 000000000..7addaa570 --- /dev/null +++ b/Structs/Empty.html @@ -0,0 +1,732 @@ + + + + Empty Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Empty

+
+
+ +
public struct Empty : Element
+ +
+
+

An empty Element which has no size and draws no content.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/Environment.html b/Structs/Environment.html new file mode 100644 index 000000000..771943ee3 --- /dev/null +++ b/Structs/Environment.html @@ -0,0 +1,1050 @@ + + + + Environment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Environment

+
+
+ +
public struct Environment
+ +
+
+

Environment is a container for values to be passed down an element tree.

+ +

Environment values are not resolved until the tree is being rendered, so they do not need to be +explicitly passed to elements at the time they are created.

+ +

Environment key-value pairs are strongly typed: keys are types conforming to the +EnvironmentKey protocol, and each key’s value is the type of that key’s +EnvironmentKey.Value associated value. Keys must provide a default value.

+

Example

+ +

To set an environment value, so that it will cascade to child elements, use +AdaptedEnvironment. Here, every element in childElement will have access to someValue +via the key MyEnvironmentKey.

+
AdaptedEnvironment(
+    key: MyEnvironmentKey.self,
+    value: someValue,
+    wrapping: childElement
+)
+
+ +

To read an environment value, use EnvironmentReader. If this element were part of the child +element in the previous example, myValue would be set to someValue. If the key had not +been set in an ancestor element, the value would be MyEnvironmentKey.defaultValue.

+
struct MyElement: ProxyElement {
+    var elementRepresentation: Element {
+        return EnvironmentReader { environment -> Element in
+            let myValue = environment[MyEnvironmentKey.self]
+            return SomeElement(using: myValue)
+        }
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + empty + +
    +
    +
    +
    +
    +
    +

    A default “empty” environment, with no values overridden. +Each key will return its default value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let empty: Environment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Gets or sets an environment value by its key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Key>(key: Key.Type) -> Key.Value where Key : EnvironmentKey { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The localised accessibility label elements should use when handling links.

    + +

    Defaults to UIImage(systemName: "link")?.accessibilityLabel.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkAccessibilityLabel: String? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + calendar + +
    +
    +
    +
    +
    +
    +

    The current calendar that elements should use when handling dates.

    + +

    Defaults to Calendar.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var calendar: Calendar { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + displayScale + +
    +
    +
    +
    +
    +
    +

    The display scale of this environment.

    + +

    This value is the number of pixels per point. A value of 1.0 indicates non-Retina screens, +2.0 indicates 2x Retina screens, etc.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var displayScale: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutDirection + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutDirection : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutDirection + +
    +
    +
    +
    +
    +
    +

    The layout direction associated with the current environment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutDirection: LayoutDirection { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locale + +
    +
    +
    +
    +
    +
    +

    The current locale that elements should use.

    + +

    Defaults to Locale.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locale: Locale { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + safeAreaInsets + +
    +
    +
    +
    +
    +
    +

    The insets representing the safe area for content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var safeAreaInsets: UIEdgeInsets { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeZone + +
    +
    +
    +
    +
    +
    +

    The current time zone that elements should use when handling dates.

    + +

    Defaults to TimeZone.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var timeZone: TimeZone { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + windowSize + +
    +
    +
    +
    +
    +
    +

    The size of the window that contains the hosting BlueprintView. +Defaults to nil if the hosting view is not in a window.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var windowSize: CGSize? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    This mode will be inherited by descendant BlueprintViews that do not have an explicit +mode set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var layoutMode: LayoutMode { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + urlHandler + +
    +
    +
    +
    +
    +
    +

    The link handler to use to open links tapped in an AttributedLabel.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var urlHandler: URLHandler { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Environment/LayoutDirection.html b/Structs/Environment/LayoutDirection.html new file mode 100644 index 000000000..340828058 --- /dev/null +++ b/Structs/Environment/LayoutDirection.html @@ -0,0 +1,705 @@ + + + + LayoutDirection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutDirection

+
+
+ +
public enum LayoutDirection : Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + leftToRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leftToRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + rightToLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rightToLeft
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EnvironmentReader.html b/Structs/EnvironmentReader.html new file mode 100644 index 000000000..94ea40e2e --- /dev/null +++ b/Structs/EnvironmentReader.html @@ -0,0 +1,750 @@ + + + + EnvironmentReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EnvironmentReader

+
+
+ +
public struct EnvironmentReader : Element
+ +
+
+

An element that dynamically builds its content based on the environment.

+ +

Use this element to build elements whose contents may change depending on the Environment.

+

Example

+
EnvironmentReader { environment -> Element in
+    MyElement(
+        foo: environment.foo
+    )
+}
+
+
+

Seealso

+ ProxyElement + +
+

Seealso

+ Environment + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/EqualStack.html b/Structs/EqualStack.html new file mode 100644 index 000000000..11e9f4d8d --- /dev/null +++ b/Structs/EqualStack.html @@ -0,0 +1,998 @@ + + + + EqualStack Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EqualStack

+
+
+ +
public struct EqualStack : Element
+ +
+
+

An element that sizes its children equally, stacking them in the primary axis according to +the specified direction and spacing them according to the specified spacing. In the +secondary axis, children are justified to fill the space of the largest child.

+
+

Note

+ A stack measures itself by determining its largest child in each axis, and + in the case of the primary axis, multiplying by children.count (accounting + for spacing as necessary). + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + direction + +
    +
    +
    +
    +
    +
    +

    The direction in which this element will stack its children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var direction: Direction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spacing + +
    +
    +
    +
    +
    +
    +

    The amount of space between children in this element. Defaults to 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements to be laid out. Defaults to an empty array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Element]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    direction: Direction,
    +    configure: (inout EqualStack) -> Void = { _ in }
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + direction + + +
    +

    The direction in which this element will stack its children.

    +
    +
    + + configure + + +
    +

    A closure allowing the element to be further customized. Defaults to a no-op.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaritively build up a stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    direction: Direction,
    +    spacing: CGFloat = 0,
    +    @ElementBuilder<Child> elements: () -> [Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + direction + + +
    +

    Direction of the stack.

    +
    +
    + + children + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(child:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(child: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Direction + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Direction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EqualStack/Child.html b/Structs/EqualStack/Child.html new file mode 100644 index 000000000..f0cfd8b31 --- /dev/null +++ b/Structs/EqualStack/Child.html @@ -0,0 +1,705 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child : ElementBuilderChild
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/EqualStack/Direction.html b/Structs/EqualStack/Direction.html new file mode 100644 index 000000000..1bb59fa98 --- /dev/null +++ b/Structs/EqualStack/Direction.html @@ -0,0 +1,705 @@ + + + + Direction Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Direction

+
+
+ +
public enum Direction
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Flow.html b/Structs/Flow.html new file mode 100644 index 000000000..fbe35e7cf --- /dev/null +++ b/Structs/Flow.html @@ -0,0 +1,995 @@ + + + + Flow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Flow

+
+
+ +
public struct Flow : Element
+ +
+
+

Element which lays out children horizontally, wrapping to another row when there is not enough space.

+ +

You may control the layout of each row within the flow layout, by providing a LineAlignment, +which controls the horizontal alignment of content within a row when it is smaller than its container, +and via ItemAlignment, which controls the vertical alignment of shorter elements within a row.

+
Flow(itemSpacing: 10, lineSpacing: 10) {
+    OnboardingPill("Food / drink")
+    OnboardingPill("Retail goods").flowChild(key: "aKey")
+    OnboardingPill("Grocery / gourmet / alcohol")
+    OnboardingPill("Beauty / wellness bookings")
+    OnboardingPill("Healthcare services")
+    OnboardingPill("Something else")
+}
+
+ +

Below is a diagram showing a simple example of a Flow layout.

+
┌─────────────────────────────────────┐
+ ┌─────────┐┌─────────┐┌────────────┐│
+     1    ││    2    ││     3      ││
+ └─────────┘└─────────┘└────────────┘│
+ ┌───────┐┌─────┐┌───────────┐       
+    4   ││  5  ││     6            
+ └───────┘└─────┘└───────────┘       
+└─────────────────────────────────────┘
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + lineAlignment + +
    +
    +
    +
    +
    +
    +

    How to align each row when there is extra horizontal space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineAlignment: LineAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineSpacing + +
    +
    +
    +
    +
    +
    +

    Space between lines in the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemAlignment + +
    +
    +
    +
    +
    +
    +

    How to align items in a line when there is extra vertical space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemAlignment: ItemAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemSpacing + +
    +
    +
    +
    +
    +
    +

    Space between items within a line.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements of the flow layout to be laid out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new flow layout with the provided parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    lineAlignment: LineAlignment = .leading,
    +    lineSpacing: CGFloat = 0,
    +    itemAlignment: ItemAlignment = .center,
    +    itemSpacing: CGFloat = 0,
    +    @ElementBuilder<Flow.Child> _ children: () -> [Flow.Child]
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineAlignment + +
    +
    +
    +
    +
    +
    +

    How to horizontally align the line when there is extra space.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LineAlignment : CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ItemAlignment + +
    +
    +
    +
    +
    +
    +

    How to vertically align items which there is extra space.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ItemAlignment : CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child placed within the flow layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Flow/Child.html b/Structs/Flow/Child.html new file mode 100644 index 000000000..d9a4f75a3 --- /dev/null +++ b/Structs/Flow/Child.html @@ -0,0 +1,815 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child : ElementBuilderChild
+ +
+
+

A child placed within the flow layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key used to optionally unique the child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    +

    The traits of a child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var traits: Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element representing the child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates a new child item with the given element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:key:) + +
    +
    +
    +
    +
    +
    +

    Creates a new child item with the given element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element, key: AnyHashable? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Traits
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Flow/ItemAlignment.html b/Structs/Flow/ItemAlignment.html new file mode 100644 index 000000000..020a72291 --- /dev/null +++ b/Structs/Flow/ItemAlignment.html @@ -0,0 +1,762 @@ + + + + ItemAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ItemAlignment

+
+
+ +
public enum ItemAlignment : CaseIterable
+ +
+
+

How to vertically align items which there is extra space.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Shorter items are stretched to fill the height of the tallest item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Shorter items are aligned to the top of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Shorter items are vertically aligned within the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Shorter items are aligned to the bottom of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Flow/LineAlignment.html b/Structs/Flow/LineAlignment.html new file mode 100644 index 000000000..9ff60f240 --- /dev/null +++ b/Structs/Flow/LineAlignment.html @@ -0,0 +1,735 @@ + + + + LineAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LineAlignment

+
+
+ +
public enum LineAlignment : CaseIterable
+ +
+
+

How to horizontally align the line when there is extra space.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Items are aligned with the leading edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leading
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Items are centered within the remaining space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Items are aligned with the trailing edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case trailing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/FocusBinding.html b/Structs/FocusBinding.html new file mode 100644 index 000000000..5b339b573 --- /dev/null +++ b/Structs/FocusBinding.html @@ -0,0 +1,829 @@ + + + + FocusBinding Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusBinding

+
+
+ +
public struct FocusBinding
+ +
+
+

A two-way binding between a focusable element’s backing view and a FocusState-wrapped +property.

+ +

Generally you should not need to interact with this type directly. However, you can use focus +bindings to add focus support to custom elements.

+

Adding Focus Bindings

+ +

On a FocusState, call the binding(for:) method to get a binding bound to an optional value, +or binding() to get a binding bound to a boolean.

+ +

To set up the 2-way binding, there are 2 steps:

+ +
    +
  1. Assign actions to the nested FocusTrigger, so that your backing view is updated when the +FocusState‘s value changes.

  2. +
  3. Call the onFocus and onBlur callbacks when your backing view gains or loses focus, so +that the value of the bound FocusState is updated.

  4. +
+

Example

+
final class FocusableView: UIView {
+    var focusBinding: FocusBinding? {
+        didSet {
+            oldValue?.trigger.focusAction = nil
+            oldValue?.trigger.blurAction = nil
+
+            guard let focusBinding = focusBinding else { return }
+
+            focusBinding.trigger.focusAction = { [weak self] in
+                self?.becomeFirstResponder()
+            }
+            focusBinding.trigger.blurAction = { [weak self] in
+                self?.resignFirstResponder()
+            }
+
+            if isFirstResponder {
+                focusBinding.onFocus()
+            } else {
+                focusBinding.onBlur()
+            }
+        }
+    }
+
+    @discardableResult
+    override func becomeFirstResponder() -> Bool {
+        let focused = super.becomeFirstResponder()
+        if focused {
+            focusBinding?.onFocus()
+        }
+        return focused
+    }
+
+    @discardableResult
+    override func resignFirstResponder() -> Bool {
+        let blurred = super.resignFirstResponder()
+        if blurred {
+            focusBinding?.onBlur()
+        }
+        return blurred
+    }
+}
+
+ +
    +
  • Tag: FocusBinding
  • +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + trigger + +
    +
    +
    +
    +
    +
    +

    A trigger, which is responsible for piping focus changes from a FocusState into a backing +view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let trigger: FocusTrigger
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onFocus + +
    +
    +
    +
    +
    +
    +

    A callback to be called by a backing view when it is focused, to pipe changes from a backing +view to a bound FocusState.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onFocus: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onBlur + +
    +
    +
    +
    +
    +
    +

    A callback to be called by a backing view when it loses focus, to pipe changes from a +backing view to a bound FocusState.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onBlur: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(onFocus:onBlur:) + +
    +
    +
    +
    +
    +
    +

    Creates a new binding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(onFocus: @escaping () -> Void, onBlur: @escaping () -> Void)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/FocusState.html b/Structs/FocusState.html new file mode 100644 index 000000000..db30ad466 --- /dev/null +++ b/Structs/FocusState.html @@ -0,0 +1,956 @@ + + + + FocusState Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusState

+
+
+ +
@propertyWrapper
+public struct FocusState<Value> where Value : Hashable
+ +
+
+

A property wrapper type that can read and write a value that represents the placement of focus.

+ +

Use this property wrapper in conjunction with modifiers on elements that support focus, such as +TextField.focused(when:equals:) and TextField.focused(when:), to describe when those elements +should have focus. When focus enters the modified element, the wrapped value of this property +updates to match a given value. Similarly, when focus leaves, the wrapped value of this property +resets to nil or false. Setting this property’s value programmatically has the reverse +effect, causing focus to move to the element associated with the updated value.

+ +

In the following example of a simple login screen, when the user presses the Sign In button and +one of the fields is still empty, focus moves to that field. Otherwise, the sign-in process +proceeds.

+
struct LoginForm: ProxyElement {
+    enum Field: Hashable {
+        case username
+        case password
+    }
+
+    var username: String
+    var password: String
+    var handleLogin: () -> Void
+
+    @FocusState private var focusedField: Field?
+
+    var elementRepresentation: Element {
+        Column { column in
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .username)
+            )
+
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .password)
+            )
+
+            column.add(
+                child: Button(
+                    onTap: {
+                        if username.isEmpty {
+                            focusedField = .username
+                        } else if password.isEmpty {
+                            focusedField = .password
+                        } else {
+                            handleLogin()
+                        }
+                    },
+                    wrapping: Label(text: "Sign In")
+                )
+            )
+        }
+    }
+}
+
+ +

To allow for cases where focus is completely absent from a view tree, the wrapped value must be +either an optional or a Boolean. Set the focus binding to false or nil as appropriate to +remove focus from all bound fields. You can also use this to remove focus from a TextField +and thereby dismiss the keyboard.

+

Auto-Focus

+ +

To auto-focus a field when it appears, set the value in an onAppear hook.

+
struct Example: ProxyElement {
+    @FocusState var isFocused: Bool
+
+    var elementRepresentation: Element {
+        TextField(text: "")
+            .focused(when: $isFocused)
+            .onAppear {
+                isFocused = true
+            }
+    }
+}
+
+

Avoid Ambiguous Focus Bindings

+ +

A TextField can have only one focus binding, stored in its focusBinding property. If you apply +the focused modifier multiple times, the last one will overwrite the previous value.

+ +

On the other hand, binding the same value to two views is ambiguous. In the following example, +two separate fields bind focus to the name value:

+
struct Content: ProxyElement {
+    enum Field: Hashable {
+        case name
+        case fullName
+    }
+
+    @FocusState private var focusedField: Field?
+
+    var elementRepresentation: Element {
+        Column { column in
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .name)
+            )
+
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .name) // incorrect re-use of .name
+            )
+        }
+    }
+}
+
+ +

If the user moves focus to either field, the focusedField binding updates to name. However, +if the app programmatically sets the value to name, the last field bound will be chosen.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Creates a focus state that binds to a Boolean.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init() where Value == Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Creates a focus state that binds to an optional type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<T>() where Value == T?, T : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedValue + +
    +
    +
    +
    +
    +
    +

    The current state value, taking into account whatever bindings might be +in effect due to the current location of focus.

    + +

    When focus is not in any view that is bound to this state, the wrapped +value will be nil (for optional-typed state) or false (for Bool- +typed state).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedValue: Value { get nonmutating set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + projectedValue + +
    +
    +
    +
    +
    +
    +

    A projection of the focus state that can be bound to focusable elements.

    + +

    Use this property wrapper in conjunction with modifiers on elements that support focus, such +as TextField.focused(when:equals) and TextField.focused(when:), to describe when those +elements should have focus.

    + +

    To add focus support to a custom element, use one of the methods on this projection to +retrieve a FocusBinding: binding() for Bool values and binding(for:) for optional +values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var projectedValue: `Self` { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binding(for:) + +
    +
    +
    +
    +
    +
    +

    Gets a focus binding associated with the FocusState being a specific value.

    + +

    You can use this binding to add focus support to a custom element.

    + +

    When the FocusState property is set to this value, the binding’s focus trigger will +fire, and when the property is set to another value, the binding’s blur trigger will fire. +Similarly, calling the onFocus callback will set the FocusState to this value, and the +onBlur callback will set it to nil.

    +

    See Also

    + +

    FocusBinding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func binding<T>(for value: T) -> FocusBinding where Value == T?, T : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binding() + +
    +
    +
    +
    +
    +
    +

    Gets a focus binding associated with the FocusState value being true.

    + +

    You can use this binding to add focus support to a custom element.

    + +

    When the FocusState property is set to true, the binding’s focus trigger will fire, and +when the property is set to false, the binding’s blur trigger will fire. Similarly, +calling the onFocus callback will set the FocusState to true, and the onBlur callback +will set it to false.

    +

    See Also

    + +

    FocusBinding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func binding() -> FocusBinding where Value == Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GeometryProxy.html b/Structs/GeometryProxy.html new file mode 100644 index 000000000..9430ff65f --- /dev/null +++ b/Structs/GeometryProxy.html @@ -0,0 +1,708 @@ + + + + GeometryProxy Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GeometryProxy

+
+
+ +
public struct GeometryProxy
+ +
+
+

Contains information about the current layout being measured by GeometryReader

+ +
+
+ +
+
+
+
    +
  • +
    + + + + constraint + +
    +
    +
    +
    +
    +
    +

    The size constraint of the element being laid out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var constraint: SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(element:in:) + +
    +
    +
    +
    +
    +
    +

    Measure the given element, constrained to the same size as the GeometryProxy itself (unless a constraint is explicitly provided).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(element: Element, in explicit: SizeConstraint? = nil) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GeometryReader.html b/Structs/GeometryReader.html new file mode 100644 index 000000000..4687817b0 --- /dev/null +++ b/Structs/GeometryReader.html @@ -0,0 +1,749 @@ + + + + GeometryReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GeometryReader

+
+
+ +
public struct GeometryReader : Element
+ +
+
+

An element that dynamically builds its content based on the available space.

+ +

Use this element to build elements whose contents may change responsively to +different layouts.

+

Example

+
GeometryReader { (geometry) -> Element in
+    let image: UIImage
+    switch geometry.constraint.width.maximum {
+    case ..<100:
+        image = UIImage(named: "small")!
+    case 100..<500:
+        image = UIImage(named: "medium")!
+    default:
+        image = UIImage(named: "large")!
+    }
+    return Image(image: image)
+}
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/GridRow.html b/Structs/GridRow.html new file mode 100644 index 000000000..fcf9fb4ea --- /dev/null +++ b/Structs/GridRow.html @@ -0,0 +1,1056 @@ + + + + GridRow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GridRow

+
+
+ +
public struct GridRow : Element
+ +
+
+

Like Row, GridRow displays a list of items in a linear horizontal layout. Unlike Row, GridRow provides +convenience for describing columnar layout.

+ +

Horizontally, GridRow children are stretched to fill the available space. Vertically, children are aligned +according to the verticalAlignment property.

+ +

Children may be sized proportionally or absolutely. Proportionally-sized children are granted a proportion of +the total layout space after absolutely-sized children and margins have been subtracted.

+

Example:

+
GridRow { row in
+  row.verticalAlignment = .fill
+  row.spacing = 8.0
+  row.add(width: .proportional(0.75), child: name)
+  row.add(width: .proportional(0.25), child: number)
+  row.add(width: .absolute(100), child: status)
+}
+
+

Expected layout:

+
┌────────────────────────────┬─┬────────┬─┬──────────────────┐
+            name              number        status      
+            (75%)           8  (25%) 8     (100 pts)    
+                                                        
+●──────────── 150 ───────────● ●── 50 ──● ●─────── 100 ──────●
+└────────────────────────────┴─┴────────┴─┴──────────────────┘
+●──────────────────────────── 316 ───────────────────────────●
+
+ +
+
+ +
+
+
+
+ + +
+ +

properties +

+
+
+
    +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    How children are aligned vertically. By default, .fill.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spacing + +
    +
    +
    +
    +
    +
    +

    The space between children. By default, 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements to be laid out. By default, an empty array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

initialization +

+
+
+
    +
  • +
    + + + + init(configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(configure: (inout GridRow) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaritively build up a grid row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    verticalAlignment: Row.RowAlignment = .fill,
    +    spacing: CGFloat = 0,
    +    @ElementBuilder<Child> _ elements: () -> [Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + verticalAlignment + + +
    +

    How children are aligned vertically. By default, .fill.

    +
    +
    + + spacing + + +
    +

    The space between children. By default, 0.

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the row.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

mutations +

+
+
+
    +
  • +
    + + + + add(width:key:child:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(width: Width, key: AnyHashable? = nil, child: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

GridRow+Element +

+
+
+ +
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child of a GridRow.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child
    +
    extension GridRow.Child: ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Width + +
    +
    +
    +
    +
    +
    +

    The sizing and content of a GridRow child.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Width : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GridRow/Child.html b/Structs/GridRow/Child.html new file mode 100644 index 000000000..b97040d79 --- /dev/null +++ b/Structs/GridRow/Child.html @@ -0,0 +1,822 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension GridRow.Child: ElementBuilderChild
+ +
+
+

A child of a GridRow.

+ +
+
+ +
+
+
+
+ + +
+ +

properties +

+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element displayed in the Grid.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Width
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

initialialization +

+
+
+ +
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GridRow/Width.html b/Structs/GridRow/Width.html new file mode 100644 index 000000000..1ac20ed2a --- /dev/null +++ b/Structs/GridRow/Width.html @@ -0,0 +1,719 @@ + + + + Width Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Width

+
+
+ +
public enum Width : Equatable
+ +
+
+

The sizing and content of a GridRow child.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + absolute(_:) + +
    +
    +
    +
    +
    +
    +

    Assign the child a fixed width equal to the payload.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case absolute(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + proportional(_:) + +
    +
    +
    +
    +
    +
    +

    Assign the child a proportional width of the available layout width. Note that proportional children +take proportional shares of the available layout width.

    +

    Example:

    +
    Available layout width: 100
    +Child A: .proportional(1)  -> 25 (100 * 1/4)
    +Child B: .proportional(3) -> 75 (100 * 3/4)
    +
    +

    Example:

    +
    Available layout width: 100
    +Child A: .proportional(0.25)  -> 25 (100 * 1/4)
    +Child B: .proportional(0.75) -> 75 (100 * 3/4)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case proportional(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Hidden.html b/Structs/Hidden.html new file mode 100644 index 000000000..6dfa04771 --- /dev/null +++ b/Structs/Hidden.html @@ -0,0 +1,789 @@ + + + + Hidden Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Hidden

+
+
+ +
public struct Hidden : Element
+ +
+
+

Hidden conditionally hides its wrapped element.

+
+

Note

+ When an element is hidden, any elements within the wrapped element will be hidden. + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/HorizontalAlignment.html b/Structs/HorizontalAlignment.html new file mode 100644 index 000000000..6ad290654 --- /dev/null +++ b/Structs/HorizontalAlignment.html @@ -0,0 +1,816 @@ + + + + HorizontalAlignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

HorizontalAlignment

+
+
+ +
public struct HorizontalAlignment : Equatable, CustomStringConvertible
+ +
+
+

An alignment position along the horizontal axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an instance with the given ID.

    + +

    Note: each instance should have a unique ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ id: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: HorizontalAlignment, rhs: HorizontalAlignment) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A guide marking the leading edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the horizontal center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the trailing edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Image.html b/Structs/Image.html new file mode 100644 index 000000000..db5b17528 --- /dev/null +++ b/Structs/Image.html @@ -0,0 +1,877 @@ + + + + Image Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Image

+
+
+ +
public struct Image : Element
+ +
+
+

Displays an image within an element hierarchy.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to be displayed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintColor + +
    +
    +
    +
    +
    +
    +

    The tint color.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintColor: UIColor?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentMode + +
    +
    +
    +
    +
    +
    +

    The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentMode: ContentMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    iOS 14 added support for Image Descriptions using VoiceOver. This is not always appropriate. +Set this to true to prevent VoiceOver from describing the displayed image.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var blockAccessibilityDescription: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an image element with the given UIImage instance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: UIImage?,
    +    contentMode: ContentMode = .aspectFill,
    +    tintColor: UIColor? = nil,
    +    blockAccessibilityDescription: Bool = false
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentMode + +
    +
    +
    +
    +
    +
    +

    The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentMode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Image/ContentMode.html b/Structs/Image/ContentMode.html new file mode 100644 index 000000000..30999e66a --- /dev/null +++ b/Structs/Image/ContentMode.html @@ -0,0 +1,772 @@ + + + + ContentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentMode

+
+
+ +
public enum ContentMode
+ +
+
+

The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    The image is not scaled, and is simply centered within the Image +element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stretch + +
    +
    +
    +
    +
    +
    +

    The image is stretched to fill the Image element, causing the image +to become distorted if its aspect ratio is different than that of the +containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stretch
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectFit + +
    +
    +
    +
    +
    +
    +

    The image is scaled to touch the edges of the Image element while +maintaining the image’s aspect ratio. If the aspect ratio of the +image is different than that of the element, the image will be +letterboxed or pillarboxed as needed to ensure that the entire +image is visible within the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aspectFit
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectFill + +
    +
    +
    +
    +
    +
    +

    The image is scaled to fill the entire Image element. If the aspect +ratio of the image is different than that of the element, the image +will be cropped to match the element’s aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aspectFill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Inset.html b/Structs/Inset.html new file mode 100644 index 000000000..e409ad472 --- /dev/null +++ b/Structs/Inset.html @@ -0,0 +1,976 @@ + + + + Inset Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Inset

+
+
+ +
public struct Inset : Element
+ +
+
+

Insets a content element within a layout.

+ +

Commonly used to add padding around another element when displayed within a container.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The wrapped element to be inset.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    The amount to inset the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var top: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bottom: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var left: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var right: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    top: CGFloat = 0.0,
    +    bottom: CGFloat = 0.0,
    +    left: CGFloat = 0.0,
    +    right: CGFloat = 0.0,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(uniformInset: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(insets: UIEdgeInsets, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(sideInsets: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(vertical: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Keyed.html b/Structs/Keyed.html new file mode 100644 index 000000000..994fd23de --- /dev/null +++ b/Structs/Keyed.html @@ -0,0 +1,809 @@ + + + + Keyed Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Keyed

+
+
+ +
public struct Keyed : Element
+ +
+
+

Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

+ +

This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

+

Example

+ +

Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

+
func imageElement() -> Element {
+    if let photo = self.photo {
+        return Image(image: photo)
+                .transition(.fade)
+                .keyed("photo")
+    } else {
+        return Image(image: self.placeholder)
+                .transition(.fade)
+                .keyed("placeholder")
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key used to differentiate the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(key:wrapping:) + +
    +
    +
    +
    +
    +
    +

    Creates a new Keyed element with the provided key and wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(key: AnyHashable?, wrapping: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Label.html b/Structs/Label.html new file mode 100644 index 000000000..c40ed4e7f --- /dev/null +++ b/Structs/Label.html @@ -0,0 +1,1159 @@ + + + + Label Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Label

+
+
+ +
public struct Label : ProxyElement
+ +
+
+

Displays text content.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The text to be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alignment: NSTextAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + numberOfLines + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var numberOfLines: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineBreakMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineBreakMode: NSLineBreakMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineHeight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineHeight: LineHeight
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label reduces the text’s font +size to fit the title string into the label’s bounding rectangle.

    + +

    Normally, the label draws the text with the font you specify in the font property. +If this property is true, and the text in the text property exceeds the label’s bounding rectangle, +the label reduces the font size until the text fits or it has scaled the font down to the minimum +font size. The default value for this property is false.

    + +

    If you change it to true, be sure that you also set an appropriate minimum +font scale by modifying the minimumScaleFactor property.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontSizeToFitWidth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumScaleFactor + +
    +
    +
    +
    +
    +
    +

    The minimum scale factor for the label’s text.

    + +

    If the adjustsFontSizeToFitWidth is true, use this property to specify the +smallest multiplier for the current font size that yields an acceptable +font size for the label’s text.

    + +

    If you specify a value of 0 for this property, the label doesn’t scale the text down. +The default value of this property is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumScaleFactor: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label tightens text before truncating.

    + +

    When the value of this property is true, the label tightens intercharacter spacing +of its text before allowing any truncation to occur. The label determines the +maximum amount of tightening automatically based on the font, current line width, +line break mode, and other relevant information.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +

    The default value of this property is false.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowsDefaultTighteningForTruncation: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadow + +
    +
    +
    +
    +
    +
    +

    A shadow to display behind the label’s text. Defaults to no shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadow: TextShadow?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines if the label should be included when navigating the UI via accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAccessibilityElement: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityHint + +
    +
    +
    +
    +
    +
    +

    A localized string that describes the result of performing an action on the element, when the result is non-obvious.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityHint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the label, these will be merged with any existing traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    An array containing one or more AccessibilityElement.CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityCustomActions: [AccessibilityElement.CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String, configure: (inout Label) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineHeight + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LineHeight : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Label/LineHeight.html b/Structs/Label/LineHeight.html new file mode 100644 index 000000000..448cede09 --- /dev/null +++ b/Structs/Label/LineHeight.html @@ -0,0 +1,734 @@ + + + + LineHeight Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LineHeight

+
+
+ +
public enum LineHeight : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Alignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    +

    Use the default line height of the label’s font.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case font
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Use a custom line height and alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(lineHeight: CGFloat, alignment: Alignment = .bottom)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Label/LineHeight/Alignment.html b/Structs/Label/LineHeight/Alignment.html new file mode 100644 index 000000000..6aedb61c7 --- /dev/null +++ b/Structs/Label/LineHeight/Alignment.html @@ -0,0 +1,737 @@ + + + + Alignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public enum Alignment : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Align text to the top of the available line height, with extra space added at the bottom. +This makes line height behave like traditional leading.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Center text within the available line height. This makes line height behave like half-leading, +and matches the model used by CSS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Align text to the bottom of the available line height, with extra space added at the top. +This is the default behavior of UILabel on iOS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutAttributes.html b/Structs/LayoutAttributes.html new file mode 100644 index 000000000..a80814ff0 --- /dev/null +++ b/Structs/LayoutAttributes.html @@ -0,0 +1,1053 @@ + + + + LayoutAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutAttributes

+
+
+ +
public struct LayoutAttributes
+
extension LayoutAttributes: Equatable
+ +
+
+

Contains layout-related metrics for an element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.center.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var center: CGPoint { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.bounds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bounds: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.layer.transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.alpha.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Corresponds to UIView.isUserInteractionEnabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isHidden + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.isHidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isHidden: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.tintAdjustmentMode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(frame: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(size:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(center:bounds:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(center: CGPoint, bounds: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frame + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frame: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + within(_:) + +
    +
    +
    +
    +
    +
    +

    Concatenates layout attributes, moving the receiver from the local +coordinate space of layoutAttributes and into its parent coordinate +space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func within(_ layoutAttributes: LayoutAttributes) -> LayoutAttributes
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + layoutAttributes + + +
    +

    Another layout attributes object representing +a parent coordinate space.

    +
    +
    +
    +
    +

    Return Value

    +

    The resulting combined layout attributes object.

    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: LayoutAttributes, rhs: LayoutAttributes) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutOptions.html b/Structs/LayoutOptions.html new file mode 100644 index 000000000..fc92b204d --- /dev/null +++ b/Structs/LayoutOptions.html @@ -0,0 +1,768 @@ + + + + LayoutOptions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutOptions

+
+
+ +
public struct LayoutOptions : Equatable
+ +
+
+

Configuration options for caffeinated.

+ +

Generally these are only useful for experimenting with the performance profile of different +element compositions, and you should stick with default.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    +

    The default configuration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let `default`: LayoutOptions
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hintRangeBoundaries + +
    +
    +
    +
    +
    +
    +

    Enables aggressive cache hinting along the boundaries of the range between constraints and +measured sizes. Requires elements to conform to the Caffeinated Layout contract for correct +behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var hintRangeBoundaries: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Allows cache misses on finite constraints to deduce a range-based match by searching for a +hit on the unconstrained value for each axis. Requires elements to adhere to the Caffeinated +Layout contract for correct behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var searchUnconstrainedKeys: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(hintRangeBoundaries: Bool, searchUnconstrainedKeys: Bool)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutSubelement.html b/Structs/LayoutSubelement.html new file mode 100644 index 000000000..64ff05980 --- /dev/null +++ b/Structs/LayoutSubelement.html @@ -0,0 +1,1031 @@ + + + + LayoutSubelement Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutSubelement

+
+
+ +
public struct LayoutSubelement
+ +
+
+

A proxy that represents one child element of a layout.

+ +

This type acts as a proxy for a child element in a Layout. Layout protocol methods receive a +LayoutSubelements collection that contains exactly one proxy for each of the child elements +managed by the layout.

+ +

Use this proxy to get information about the associated element, like its size and traits. You +should also use the proxy to tell its corresponding element where to appear by calling the +proxy’s place(at:anchor:size:) method. Do this once for each subview from your +implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

+
+

Note

+ The LayoutSubelement API, and its documentation, are modeled after SwiftUI’s +LayoutSubview, with major +differences noted. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    Optional attributes to apply to this subelement, such as opacity and transforms.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @LayoutSubelement
    +.Storage public var attributes: LayoutSubelement.Attributes { get nonmutating set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    Call this method from your implementation of the Layout protocol’s +placeSubelements(in:subelements:environment:cache:) method for each +subelement arranged by the layout. Provide a position within the container’s bounds where +the subelement should appear, an anchor that indicates which part of the subelement appears +at that point, and a size.

    + +

    To learn the subelement’s preferred size for a given proposal before calling this method, +you can call sizeThatFits(_:) method on the subelement.

    + +

    If you call this method more than once for a subelement, the last call takes precedence. If +you don’t call this method for a subelement, the subelement fills the bounds of its +container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    at position: CGPoint,
    +    anchor: UnitPoint = .topLeading,
    +    size: CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + position + + +
    +

    The place where the anchor of the subelement should appear in its container, +relative to the container’s bounds.

    +
    +
    + + anchor + + +
    +

    The unit point on the subelement that appears at position. You can use a +built-in point, like center, or you can create a custom UnitPoint.

    +
    +
    + + size + + +
    +

    The size of the subelement. In Blueprint, parents choose their children’s size. +You can determine a good size for a subelement by calling sizeThatFits(_:) on it.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + place(in:anchor:) + +
    +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    This is a convenience for calling place(at:anchor:size:) with frame.origin and +frame.size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    in frame: CGRect,
    +    anchor: UnitPoint = .topLeading
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + frame + + +
    +

    The position and size of the subelement. The origin of this frame represents the +place where the anchor of the subelement should appear in its container, relative to the +container’s bounds. In Blueprint, parents choose their children’s size. You can +determine a good size for a subelement by calling sizeThatFits(_:) on it.

    +
    +
    + + anchor + + +
    +

    The unit point on the subelement that appears at position. You can use a +built-in point, like center, or you can create a custom UnitPoint.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + place(filling:) + +
    +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    This is a convenience for calling place(at:anchor:size:) with a position of .zero and +this size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    filling size: CGSize
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Asks the subelement for its size.

    + +

    In Blueprint, elements are ultimately sized by their parents, but you can use this method to +determine the size that a subelement would prefer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sizeThatFits(_ proposal: SizeConstraint) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + proposal + + +
    +

    A proposed size constraint for the subelement.

    +
    +
    +
    +
    +

    Return Value

    +

    The size that the subelement would choose for itself, given the proposal.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Gets the layout traits of the subelement.

    + +

    Use this method to access the layout-specific Traits value for this +subelement.

    +
    +

    Important

    +

    Only call this method with the type of your Layout. For compatibility with +legacy layout, this is the only type of traits supported.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func traits<LayoutType>(
    +    forLayoutType layoutType: LayoutType.Type
    +) -> LayoutType.Traits where LayoutType: Layout
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + layoutType + + +
    +

    The type of layout, which determines the type of the traits.

    +
    +
    +
    +
    +

    Return Value

    +

    The subelements’s layout traits.

    +
    +
    +
    +
  • +
  • +
    + + + + Attributes + +
    +
    +
    +
    +
    +
    +

    Optional additional attributes that can be applied to a subelement.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Attributes
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutSubelement/Attributes.html b/Structs/LayoutSubelement/Attributes.html new file mode 100644 index 000000000..ed8aa062e --- /dev/null +++ b/Structs/LayoutSubelement/Attributes.html @@ -0,0 +1,789 @@ + + + + Attributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Attributes

+
+
+ +
public struct Attributes
+ +
+
+

Optional additional attributes that can be applied to a subelement.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.layer.transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.alpha.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Corresponds to UIView.isUserInteractionEnabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isHidden + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.isHidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isHidden: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.tintAdjustmentMode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter.html b/Structs/LayoutWriter.html new file mode 100644 index 000000000..f08d2c565 --- /dev/null +++ b/Structs/LayoutWriter.html @@ -0,0 +1,938 @@ + + + + LayoutWriter Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutWriter

+
+
+ +
public struct LayoutWriter : Element
+ +
+
+

A parent element which allows arbitrary, custom layout and positioning of its children.

+ +

Instead of creating a custom Element with a custom Layout, you might use +this element to create a customized layout in a more lightweight way.

+
LayoutWriter { context, layout in
+    layout.add(with: myFrame, child: myElement)
+    layout.add(with: myOtherFrame, child: myOtherElement)
+
+    layout.sizing = .unionOfChildren
+}
+
+ +
+
+ +
+
+
+
+ + +
+ +

Initialization +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates a new instance of the LayoutWriter with the custom layout provided by the builder.

    + +

    The parameters to the closure are the Context, which provides information about +the environment and sizing of the layout, and the Builder itself, which you use to +add child elements to the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ build: @escaping Build)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Build + +
    +
    +
    +
    +
    +
    +

    The builder type passed to the LayoutWriter initializer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Build = (Context, inout Builder) -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + build + +
    +
    +
    +
    +
    +
    +

    The builder used to create the custom layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let build: Build
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    The builder is the primary surface area you interact with when using a LayoutWriter.

    + +

    It provides you the ability to manage the sizing and measurement of the final layout, +alongside methods to add and manage the children of the layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Builder
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Context + +
    +
    +
    +
    +
    +
    +

    Provides the relevant information about the context in which the layout is occurring.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Context
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Sizing + +
    +
    +
    +
    +
    +
    +

    Controls the sizing calculation of the custom layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Sizing : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child of the custom layout, providing its frame and element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter/Builder.html b/Structs/LayoutWriter/Builder.html new file mode 100644 index 000000000..df0640038 --- /dev/null +++ b/Structs/LayoutWriter/Builder.html @@ -0,0 +1,825 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
public struct Builder
+ +
+
+

The builder is the primary surface area you interact with when using a LayoutWriter.

+ +

It provides you the ability to manage the sizing and measurement of the final layout, +alongside methods to add and manage the children of the layout.

+ +
+
+ +
+
+
+
+ + +
+ +

Managing Sizing +

+
+
+
    +
  • +
    + + + + sizing + +
    +
    +
    +
    +
    +
    +

    How the size of the layout should be calculated. Defaults to .unionOfChildren, +which means the size will be big enough to contain the frames of all contained children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var sizing: Sizing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Managing Children +

+
+
+
    +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The children of the custom layout, which specifies the child element and its frame.

    +

    Note

    + +

    You rarely need to access this property directly. Instead, add children via +the various provided add(...) methods. However, if you’re map-ing over an array +or other collection of content, using this property directly is useful.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(with:key:child:) + +
    +
    +
    +
    +
    +
    +

    Adds a new child element to the layout with the provided frame and optional key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    with frame: CGRect,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a new child element to the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(_ child: Child)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + modifyEach(using:) + +
    +
    +
    +
    +
    +
    +

    Enumerates each of the children, allowing you to modify them in place, +eg to align them all along a common alignment axis or to set a uniform size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func modifyEach(using change: (inout Child) -> Void)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter/Child.html b/Structs/LayoutWriter/Child.html new file mode 100644 index 000000000..846ef98b4 --- /dev/null +++ b/Structs/LayoutWriter/Child.html @@ -0,0 +1,766 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+ +
+
+

A child of the custom layout, providing its frame and element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + frame + +
    +
    +
    +
    +
    +
    +

    The frame of the element in the coordinate space of the custom layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frame: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key to use to disambiguate this element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element to be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new child element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    frame: CGRect,
    +    key: AnyHashable? = nil,
    +    element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter/Context.html b/Structs/LayoutWriter/Context.html new file mode 100644 index 000000000..433e53d48 --- /dev/null +++ b/Structs/LayoutWriter/Context.html @@ -0,0 +1,739 @@ + + + + Context Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Context

+
+
+ +
public struct Context
+ +
+
+

Provides the relevant information about the context in which the layout is occurring.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size constraint the layout is occurring in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + phase + +
    +
    +
    +
    +
    +
    +

    The phase of the layout current occurring – measurement or layout.

    + +

    You can use this value to vary calculations as needed between phases; eg, to make +an element take up the full available size during the .layout phase, where sizing is known.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var phase: LayoutPhase
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutPhase + +
    +
    +
    +
    +
    +
    +

    The current phase of the layout event: .measurement or .layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutPhase : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter/Context/LayoutPhase.html b/Structs/LayoutWriter/Context/LayoutPhase.html new file mode 100644 index 000000000..471f7313e --- /dev/null +++ b/Structs/LayoutWriter/Context/LayoutPhase.html @@ -0,0 +1,738 @@ + + + + LayoutPhase Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutPhase

+
+
+ +
public enum LayoutPhase : Equatable
+ +
+
+

The current phase of the layout event: .measurement or .layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + measurement + +
    +
    +
    +
    +
    +
    +

    The element is being measured.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case measurement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout(_:) + +
    +
    +
    +
    +
    +
    +

    The element is being laid out with a known size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case layout(CGSize)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the provided value based on if a measurement or layout is occurring.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onMeasure<Value>(
    +    _ onMeasure: () -> Value,
    +    onLayout: (CGSize) -> Value
    +) -> Value
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LayoutWriter/Sizing.html b/Structs/LayoutWriter/Sizing.html new file mode 100644 index 000000000..61b2a3eb0 --- /dev/null +++ b/Structs/LayoutWriter/Sizing.html @@ -0,0 +1,725 @@ + + + + Sizing Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Sizing

+
+
+ +
public enum Sizing : Equatable
+ +
+
+

Controls the sizing calculation of the custom layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unionOfChildren + +
    +
    +
    +
    +
    +
    +

    Ensures that the final size of element is large enough to fit all children, starting from (0,0).

    + +

    Negative origins of rects are not considered in this calculation. If you have the following layout:

    +
     ┌──────┐
    +       ├─────────┐
    +       *********
    + └─┬────┘**┌──────┤
    +   *******      
    +   *******      
    +┌──┴───┐***      
    +      ***      
    +      ***└──────┤
    +└──────┴──────────┘
    +
    + +

    The large rect will be the calculated size / bounds of the layout, starting at (0,0). Any rects with +negative origins will overhang the layout to the top or left, respectively.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unionOfChildren
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fixed(_:) + +
    +
    +
    +
    +
    +
    +

    Fixes the layout size to the provided size. Children are positioned within this size, starting at (0,0) +Any rects with negative origins will overhang the layout to the top or left, respectively.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed(CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LifecycleObserver.html b/Structs/LifecycleObserver.html new file mode 100644 index 000000000..e45e76ab2 --- /dev/null +++ b/Structs/LifecycleObserver.html @@ -0,0 +1,874 @@ + + + + LifecycleObserver Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LifecycleObserver

+
+
+ +
public struct LifecycleObserver : Element
+ +
+
+

Allows element lifecycle callbacks to be inserted anywhere into the element tree.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onAppear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onDisappear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    onAppear: LifecycleCallback? = nil,
    +    onDisappear: LifecycleCallback? = nil,
    +    wrapping: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element appears.

    + +

    Callbacks run in depth-first traversal order, with parents before children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onAppear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element disappears.

    + +

    Callbacks run in depth-first traversal order, with parents before children. There is no +guaranteed order between disappearance callbacks and backing views being removed from their +superviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onDisappear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Opacity.html b/Structs/Opacity.html new file mode 100644 index 000000000..3add4e9e5 --- /dev/null +++ b/Structs/Opacity.html @@ -0,0 +1,821 @@ + + + + Opacity Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Opacity

+
+
+ +
public struct Opacity : Element
+ +
+
+

Changes the opacity of the wrapped element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element whose opacity is being affected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    The opacity of the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an Opacity with the given content element and opacity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    opacity: CGFloat,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + opacity + + +
    +

    The opacity to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Overlay.html b/Structs/Overlay.html new file mode 100644 index 000000000..ec07f9b20 --- /dev/null +++ b/Structs/Overlay.html @@ -0,0 +1,927 @@ + + + + Overlay Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Overlay

+
+
+ +
public struct Overlay : Element
+ +
+
+

Stretches all of its child elements to fill the layout area, stacked on top of each other.

+ +

During a layout pass, measurement is calculated as the max size (in both x and y dimensions) +produced by measuring all of the child elements.

+ +

View-backed descendants will be z-ordered from back to front in the order of this element’s +children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    All elements displayed in the overlay.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new overlay with the provided elements.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    elements: [Element] = [],
    +    configure: (inout Overlay) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(elements:) + +
    +
    +
    +
    +
    +
    +

    Creates a new overlay using a result builder.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    @ElementBuilder<Overlay.Child> elements: () -> [Overlay.Child]
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(_:) + +
    +
    +
    +
    +
    +
    +

    Adds the provided element to the overlay.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "add(child:﹚")
    +public mutating func add(_ element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(key:child:) + +
    +
    +
    +
    +
    +
    +

    Adds the provided element to the overlay, above other children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(key: AnyHashable? = nil, child: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/Overlay/Child.html b/Structs/Overlay/Child.html new file mode 100644 index 000000000..1663353d3 --- /dev/null +++ b/Structs/Overlay/Child.html @@ -0,0 +1,762 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension Overlay.Child: ElementBuilderChild
+ +
+
+

The child of an Overlay.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The child element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    An optional key to disambiguate between view updates

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(element:key:) + +
    +
    +
    +
    +
    +
    +

    Create a new child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(element: Element, key: AnyHashable? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Row.html b/Structs/Row.html new file mode 100644 index 000000000..6ffeec955 --- /dev/null +++ b/Structs/Row.html @@ -0,0 +1,970 @@ + + + + Row Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Row

+
+
+ +
public struct Row : StackElement
+ +
+
+

Displays a list of items in a linear horizontal layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + RowAlignment + +
    +
    +
    +
    +
    +
    +

    Describes how the row’s children will be vertically aligned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RowAlignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaratively build up a stack.

    +
    +

    Note

    + If element is a plain Element, then that Element will be implicitly converted into a StackLayout.Child with default values + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    alignment: RowAlignment = .top,
    +    underflow: StackLayout.UnderflowDistribution = .spaceEvenly,
    +    overflow: StackLayout.OverflowDistribution = .condenseProportionally,
    +    minimumSpacing: CGFloat = 0,
    +    @ElementBuilder<StackLayout.Child> elements: () -> [StackLayout.Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Specifies how children will be aligned vertically. Default: .top

    +
    +
    + + underflow + + +
    +

    Determines the layout when there is extra free space available. Default: .spaceEvenly

    +
    +
    + + overflow + + +
    +

    Determines the layout when there is not enough space to fit all children as measured. Default: .condenseProportionally

    +
    +
    + + minimumSpacing + + +
    +

    Spacing in between elements. Default: 0

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalUnderflow: StackLayout.UnderflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalOverflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalOverflow: StackLayout.OverflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    Specifies how children will be aligned vertically.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: RowAlignment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumHorizontalSpacing: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Row/RowAlignment.html b/Structs/Row/RowAlignment.html new file mode 100644 index 000000000..852db0c4c --- /dev/null +++ b/Structs/Row/RowAlignment.html @@ -0,0 +1,849 @@ + + + + RowAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

RowAlignment

+
+
+ +
public enum RowAlignment : Equatable
+ +
+
+

Describes how the row’s children will be vertically aligned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to fit the vertical size of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Using the specified alignment, children will be aligned relatively to each other, and +then all the contents will be aligned to the row’s bounding box.

    + +

    This case can be used for custom alignments. For common alignments you can use the +existing static instancestop, center, and bottom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: VerticalAlignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the top edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Children will be vertically centered in the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the bottom edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the top edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "top")
    +public static let leading: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the bottom edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "bottom")
    +public static let trailing: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Rule.html b/Structs/Rule.html new file mode 100644 index 000000000..73fc7171b --- /dev/null +++ b/Structs/Rule.html @@ -0,0 +1,889 @@ + + + + Rule Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Rule

+
+
+ +
public struct Rule : ProxyElement
+ +
+
+

A solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length, +suitable for use as a separator.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Orientation + +
    +
    +
    +
    +
    +
    +

    Represents whether the rule is parallel to the x or y axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Orientation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Thickness + +
    +
    +
    +
    +
    +
    +

    Represents the thickness of a rule in the direction perpendicular to its orientation.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Thickness
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + orientation + +
    +
    +
    +
    +
    +
    +

    Whether this rule is horizontal or vertical.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var orientation: Orientation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + thickness + +
    +
    +
    +
    +
    +
    +

    The thickness of this rule in the direction perpendicular to its orientation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var thickness: Thickness
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    +

    The color that the rule should be drawn.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Rule with the given properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(orientation: Orientation, color: UIColor, thickness: Thickness = .hairline)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + orientation + + +
    +

    Whether the rule is horizontal or vertical.

    +
    +
    + + color + + +
    +

    The color that the rule should be drawn.

    +
    +
    + + thickness + + +
    +

    The thickness of the rule in the direction perpendicular to its orientation. +Defaults to a hairline thickness, meaning the thinnest possible line that can be drawn.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Rule/Orientation.html b/Structs/Rule/Orientation.html new file mode 100644 index 000000000..e7e0a850b --- /dev/null +++ b/Structs/Rule/Orientation.html @@ -0,0 +1,708 @@ + + + + Orientation Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Orientation

+
+
+ +
public enum Orientation
+ +
+
+

Represents whether the rule is parallel to the x or y axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule is parallel to the x axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule is parallel to the y axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Rule/Thickness.html b/Structs/Rule/Thickness.html new file mode 100644 index 000000000..a0e61a192 --- /dev/null +++ b/Structs/Rule/Thickness.html @@ -0,0 +1,709 @@ + + + + Thickness Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Thickness

+
+
+ +
public enum Thickness
+ +
+
+

Represents the thickness of a rule in the direction perpendicular to its orientation.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + hairline + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule should be exactly 1 screen pixel thick, +the thinnest possible line that can be drawn.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hairline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + points(_:) + +
    +
    +
    +
    +
    +
    +

    An exact thickness in points.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case points(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView.html b/Structs/ScrollView.html new file mode 100644 index 000000000..389648df3 --- /dev/null +++ b/Structs/ScrollView.html @@ -0,0 +1,1241 @@ + + + + ScrollView Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollView

+
+
+ +
public struct ScrollView : Element
+ +
+
+

Wraps a content element and makes it scrollable.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content to be scrolled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    +

    Determines the sizing behavior of the content within the scroll view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: ContentSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alwaysBounceVertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alwaysBounceVertical: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alwaysBounceHorizontal: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentInset + +
    +
    +
    +
    +
    +
    +

    How much the content of the ScrollView should be inset.

    + +

    Note: When keyboardAdjustmentMode is used, it will also adjust +the on-screen UIScrollViews contentInset.bottom to make space for the keyboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInset: UIEdgeInsets
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + centersUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var centersUnderflow: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showsHorizontalScrollIndicator: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showsVerticalScrollIndicator: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pullToRefreshBehavior + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pullToRefreshBehavior: PullToRefreshBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardDismissMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardDismissMode: UIScrollView.KeyboardDismissMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInsetAdjustmentBehavior: UIScrollView.ContentInsetAdjustmentBehavior
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardAdjustmentMode: KeyboardAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delaysContentTouches + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var delaysContentTouches: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentOffsetTrigger + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentOffsetTrigger: ScrollTrigger?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    _ contentSize: ContentSize = .fittingHeight,
    +    wrapping element: Element,
    +    configure: (inout ScrollView) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum KeyboardAdjustmentMode : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentSize + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentSize : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PullToRefreshBehavior + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum PullToRefreshBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ScrollTrigger + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class ScrollTrigger
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentOffset + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ContentOffset
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/ContentOffset.html b/Structs/ScrollView/ContentOffset.html new file mode 100644 index 000000000..cd9258d62 --- /dev/null +++ b/Structs/ScrollView/ContentOffset.html @@ -0,0 +1,784 @@ + + + + ContentOffset Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentOffset

+
+
+ +
public struct ContentOffset
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ScrollingContext + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ScrollingContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Provider + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Provider = (ScrollingContext) -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: ScrollView.ContentOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: ScrollView.ContentOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(provider:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(provider: @escaping Provider)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/ContentOffset/ScrollingContext.html b/Structs/ScrollView/ContentOffset/ScrollingContext.html new file mode 100644 index 000000000..31dcb4044 --- /dev/null +++ b/Structs/ScrollView/ContentOffset/ScrollingContext.html @@ -0,0 +1,731 @@ + + + + ScrollingContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollingContext

+
+
+ +
public struct ScrollingContext
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scrollViewBounds + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scrollViewBounds: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentInsets + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInsets: UIEdgeInsets
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/ContentSize.html b/Structs/ScrollView/ContentSize.html new file mode 100644 index 000000000..1d815f19a --- /dev/null +++ b/Structs/ScrollView/ContentSize.html @@ -0,0 +1,761 @@ + + + + ContentSize Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentSize

+
+
+ +
public enum ContentSize : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + fittingWidth + +
    +
    +
    +
    +
    +
    +

    The content will fill the height of the scroller, width will be dynamic

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingWidth
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fittingHeight + +
    +
    +
    +
    +
    +
    +

    The content will fill the width of the scroller, height will be dynamic

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingHeight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fittingContent + +
    +
    +
    +
    +
    +
    +

    The content size will be the minimum required to fit the content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    Manually provided content size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/KeyboardAdjustmentMode.html b/Structs/ScrollView/KeyboardAdjustmentMode.html new file mode 100644 index 000000000..5a8e0b4b3 --- /dev/null +++ b/Structs/ScrollView/KeyboardAdjustmentMode.html @@ -0,0 +1,705 @@ + + + + KeyboardAdjustmentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

KeyboardAdjustmentMode

+
+
+ +
public enum KeyboardAdjustmentMode : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adjustsWhenVisible + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case adjustsWhenVisible
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/PullToRefreshBehavior.html b/Structs/ScrollView/PullToRefreshBehavior.html new file mode 100644 index 000000000..2d11fac27 --- /dev/null +++ b/Structs/ScrollView/PullToRefreshBehavior.html @@ -0,0 +1,731 @@ + + + + PullToRefreshBehavior Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PullToRefreshBehavior

+
+
+ +
public enum PullToRefreshBehavior
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + disabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case disabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enabled(action:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case enabled(action: () -> Void)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + refreshing + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case refreshing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ScrollView/ScrollTrigger.html b/Structs/ScrollView/ScrollTrigger.html new file mode 100644 index 000000000..2aacfdfdb --- /dev/null +++ b/Structs/ScrollView/ScrollTrigger.html @@ -0,0 +1,705 @@ + + + + ScrollTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollTrigger

+
+
+ +
public final class ScrollTrigger
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scroll(to:animated:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scroll(to: ContentOffset, animated: Bool)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SegmentedControl.html b/Structs/SegmentedControl.html new file mode 100644 index 000000000..3c30e1ca0 --- /dev/null +++ b/Structs/SegmentedControl.html @@ -0,0 +1,972 @@ + + + + SegmentedControl Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SegmentedControl

+
+
+ +
public struct SegmentedControl : Element, Measurable
+ +
+
+

Allows users to pick from an array of options.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + items + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var items: [Item]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selection + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var selection: Selection
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + roundingScale + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var roundingScale: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(items: [Item] = [], configure: (inout SegmentedControl) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    selection: Selection = .none,
    +    font: UIFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body),
    +    @Builder<Item> itemBuilder: () -> [Item]
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func appendItem(title: String, width: Item.Width = .automatic, onSelect: @escaping () -> Void)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Selection + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Selection
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Item + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Item
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SegmentedControl/Item.html b/Structs/SegmentedControl/Item.html new file mode 100644 index 000000000..e940effe2 --- /dev/null +++ b/Structs/SegmentedControl/Item.html @@ -0,0 +1,758 @@ + + + + Item Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Item

+
+
+ +
public struct Item
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + title + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var title: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Width
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onSelect + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onSelect: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Width + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Width
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SegmentedControl/Item/Width.html b/Structs/SegmentedControl/Item/Width.html new file mode 100644 index 000000000..2effe7c83 --- /dev/null +++ b/Structs/SegmentedControl/Item/Width.html @@ -0,0 +1,705 @@ + + + + Width Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Width

+
+
+ +
public enum Width
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + automatic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case automatic
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + specific(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case specific(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SegmentedControl/Selection.html b/Structs/SegmentedControl/Selection.html new file mode 100644 index 000000000..0b1103df4 --- /dev/null +++ b/Structs/SegmentedControl/Selection.html @@ -0,0 +1,705 @@ + + + + Selection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Selection

+
+
+ +
public enum Selection
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index(Int)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SizeConstraint.html b/Structs/SizeConstraint.html new file mode 100644 index 000000000..8724ab96e --- /dev/null +++ b/Structs/SizeConstraint.html @@ -0,0 +1,1044 @@ + + + + SizeConstraint Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SizeConstraint

+
+
+ +
public struct SizeConstraint : Hashable, CustomStringConvertible
+ +
+
+

Defines the maximum size for a measurement.

+ +

Currently this constraint type can only handles layout where +the primary (breaking) axis is horizontal (row in CSS-speak).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The width constraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @SizeConstraint
    +.UnconstrainedInfiniteAxis public var width: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The height constraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @SizeConstraint
    +.UnconstrainedInfiniteAxis public var height: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: Axis, height: Axis)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

CustomDebugStringConvertible +

+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var unconstrained: SizeConstraint { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(height: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimum: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maximum: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(width:height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(width: CGFloat, height: CGFloat) -> SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(by:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(by insets: UIEdgeInsets) -> SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Axis + +
    +
    +
    +
    +
    +
    +

    Represents a size constraint for a single axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Axis : Hashable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This property wrapper checks the value of atMost cases, and turns it into an +unconstrained axis if the value equals greatestFiniteMagnitude or isInfinite.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @propertyWrapper
    +public struct UnconstrainedInfiniteAxis : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SizeConstraint/Axis.html b/Structs/SizeConstraint/Axis.html new file mode 100644 index 000000000..3a910462a --- /dev/null +++ b/Structs/SizeConstraint/Axis.html @@ -0,0 +1,1080 @@ + + + + Axis Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Axis

+
+
+ +
public enum Axis : Hashable, CustomStringConvertible
+ +
+
+

Represents a size constraint for a single axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + atMost(_:) + +
    +
    +
    +
    +
    +
    +

    The measurement should treat the associated value as the largest +possible size in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atMost(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    +

    The measurement is unconstrained in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unconstrained
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    +

    The maximum magnitude in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maximum: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    +

    The minimum magnitude in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimum: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedValue + +
    +
    +
    +
    +
    +
    +

    The constraint value in this dimension, or nil if this dimension is unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var constrainedValue: CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +(_:_:) + +
    +
    +
    +
    +
    +
    +

    Adds a scalar value to an Axis. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func + (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -(_:_:) + +
    +
    +
    +
    +
    +
    +

    Subtracts a scalar value from an Axis. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func - (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + /(_:_:) + +
    +
    +
    +
    +
    +
    +

    Divides an Axis by a scalar value. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func / (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + *(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiplies an Axis by a scalar value. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func * (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isGreaterThanZero + +
    +
    +
    +
    +
    +
    +

    If the Axis is greater than zero.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isGreaterThanZero: Bool { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Adds a scalar value to an Axis. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func += (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Subtracts a scalar value from an Axis. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func -= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + /=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Divides an Axis by a scalar value. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func /= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + *=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiplies an Axis by a scalar value. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func *= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

CustomDebugStringConvertible +

+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html b/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html new file mode 100644 index 000000000..2cd7ab74e --- /dev/null +++ b/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html @@ -0,0 +1,708 @@ + + + + UnconstrainedInfiniteAxis Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnconstrainedInfiniteAxis

+
+
+ +
@propertyWrapper
+public struct UnconstrainedInfiniteAxis : Equatable, Hashable
+ +
+
+

This property wrapper checks the value of atMost cases, and turns it into an +unconstrained axis if the value equals greatestFiniteMagnitude or isInfinite.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedValue: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(wrappedValue:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(wrappedValue value: Axis)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Spacer.html b/Structs/Spacer.html new file mode 100644 index 000000000..1ba4d190a --- /dev/null +++ b/Structs/Spacer.html @@ -0,0 +1,816 @@ + + + + Spacer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Spacer

+
+
+ +
public struct Spacer : Element
+ +
+
+

An element that does not display anything (it has neither children or a view).

+ +

Spacer simply takes up a specified amount of space within a layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size that this spacer will take in a layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(size:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat = 0.0, height: CGFloat = 0.0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given value for the width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ value: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout.html b/Structs/StackLayout.html new file mode 100644 index 000000000..6aaa0970b --- /dev/null +++ b/Structs/StackLayout.html @@ -0,0 +1,1178 @@ + + + + StackLayout Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

StackLayout

+
+
+ +
public struct StackLayout : Layout
+ +
+
+

A layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultTraits + +
    +
    +
    +
    +
    +
    +

    The default traits for a child contained within a stack layout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var defaultTraits: Traits { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AlignmentGuide + +
    +
    +
    +
    +
    +
    +

    Determines how a stack child will be aligned on the cross axis relative to other children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AlignmentGuide
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    +

    Contains traits that affect the layout of individual children in the stack.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + axis + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var axis: Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + underflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underflow: StackLayout.UnderflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + overflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var overflow: StackLayout.OverflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alignment: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumSpacing + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(axis:alignment:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(axis: Axis, alignment: Alignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:items:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint, items: [(traits: Traits, content: Measurable)]) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:items:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func layout(size: CGSize, items: [(traits: Traits, content: Measurable)]) -> [LayoutAttributes]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Axis + +
    +
    +
    +
    +
    +
    +

    The direction of the stack.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UnderflowDistribution + +
    +
    +
    +
    +
    +
    +

    Determines the on-axis layout when there is extra free space available.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum UnderflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + OverflowDistribution + +
    +
    +
    +
    +
    +
    +

    Determines the on-axis layout when there is not enough space to fit all children as measured.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum OverflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    +

    Determines the cross-axis layout (height for a horizontal stack, width for a vertical stack).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Alignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Layout logic +

+
+
+ +
+
+
+ + +
+ +

Result Builders +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/Alignment.html b/Structs/StackLayout/Alignment.html new file mode 100644 index 000000000..da8179ca2 --- /dev/null +++ b/Structs/StackLayout/Alignment.html @@ -0,0 +1,709 @@ + + + + Alignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public enum Alignment
+ +
+
+

Determines the cross-axis layout (height for a horizontal stack, width for a vertical stack).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to the size of the stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Children will be aligned relatively to each other, and then all the contents will be +aligned to the stack’s bounding box, according to the specified alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/AlignmentGuide.html b/Structs/StackLayout/AlignmentGuide.html new file mode 100644 index 000000000..d5d2061d1 --- /dev/null +++ b/Structs/StackLayout/AlignmentGuide.html @@ -0,0 +1,682 @@ + + + + AlignmentGuide Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AlignmentGuide

+
+
+ +
public struct AlignmentGuide
+ +
+
+

Determines how a stack child will be aligned on the cross axis relative to other children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + computeValue + +
    +
    +
    +
    +
    +
    +

    Returns a value along the stack’s cross axis, in the element’s own coordinate space, +where a child should be aligned relative to the alignment guides of its siblings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var computeValue: (ElementDimensions) -> CGFloat
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/Axis.html b/Structs/StackLayout/Axis.html new file mode 100644 index 000000000..b42bf0d58 --- /dev/null +++ b/Structs/StackLayout/Axis.html @@ -0,0 +1,706 @@ + + + + Axis Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Axis

+
+
+ +
public enum Axis
+ +
+
+

The direction of the stack.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/Child.html b/Structs/StackLayout/Child.html new file mode 100644 index 000000000..6b4321ef4 --- /dev/null +++ b/Structs/StackLayout/Child.html @@ -0,0 +1,859 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension StackLayout.Child: ElementBuilderChild
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let traits: StackLayout.Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Priority + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Priority
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    element: Element,
    +    traits: StackLayout.Traits = .init(),
    +    key: AnyHashable? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    element: Element,
    +    priority: Priority = .flexible,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Result Builders +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/Child/Priority.html b/Structs/StackLayout/Child/Priority.html new file mode 100644 index 000000000..2b0f0917b --- /dev/null +++ b/Structs/StackLayout/Child/Priority.html @@ -0,0 +1,765 @@ + + + + Priority Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Priority

+
+
+ +
public enum Priority
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + fixed + +
    +
    +
    +
    +
    +
    +

    The element has a fixed size, with a grow and shrink priority of 0. +The element will neither grow nor shrink during overflow and underflow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flexible + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, with a grow and shrink priority of 1. +The element will grow during underflow and shrink during overflow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flexible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + grows + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, it will grow if the stack underflows, +but it will not shrink if the stack overflows.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case grows
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shrinks + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, it will shrink if the stack overflows, +but it will not grow if the stack underflows.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shrinks
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/OverflowDistribution.html b/Structs/StackLayout/OverflowDistribution.html new file mode 100644 index 000000000..5be99822c --- /dev/null +++ b/Structs/StackLayout/OverflowDistribution.html @@ -0,0 +1,708 @@ + + + + OverflowDistribution Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

OverflowDistribution

+
+
+ +
public enum OverflowDistribution
+ +
+
+

Determines the on-axis layout when there is not enough space to fit all children as measured.

+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Each child will shrink proportionally to its measured size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case condenseProportionally
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + condenseUniformly + +
    +
    +
    +
    +
    +
    +

    Each child will shrink by the same amount.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case condenseUniformly
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/Traits.html b/Structs/StackLayout/Traits.html new file mode 100644 index 000000000..7154a8fd2 --- /dev/null +++ b/Structs/StackLayout/Traits.html @@ -0,0 +1,786 @@ + + + + Traits Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Traits

+
+
+ +
public struct Traits
+ +
+
+

Contains traits that affect the layout of individual children in the stack.

+ +

See StackElement.add(...) for details.

+

In Xcode

+ +

StackElement.add()

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/StackLayout/UnderflowDistribution.html b/Structs/StackLayout/UnderflowDistribution.html new file mode 100644 index 000000000..bf8beebe1 --- /dev/null +++ b/Structs/StackLayout/UnderflowDistribution.html @@ -0,0 +1,816 @@ + + + + UnderflowDistribution Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderflowDistribution

+
+
+ +
public enum UnderflowDistribution
+ +
+
+

Determines the on-axis layout when there is extra free space available.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + spaceEvenly + +
    +
    +
    +
    +
    +
    +

    Additional space will be evenly divided into the spacing between items.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case spaceEvenly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + growProportionally + +
    +
    +
    +
    +
    +
    +

    Additional space will be divided proportionally by the measured size of each child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case growProportionally
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + growUniformly + +
    +
    +
    +
    +
    +
    +

    Additional space will be distributed uniformly between children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case growUniformly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToStart + +
    +
    +
    +
    +
    +
    +

    Additional space will appear after all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToStart
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToCenter + +
    +
    +
    +
    +
    +
    +

    Additional space will be distributed on either side of all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToCenter
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToEnd + +
    +
    +
    +
    +
    +
    +

    Additional space will be appear before all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToEnd
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Tappable.html b/Structs/Tappable.html new file mode 100644 index 000000000..c84f211bb --- /dev/null +++ b/Structs/Tappable.html @@ -0,0 +1,784 @@ + + + + Tappable Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Tappable

+
+
+ +
public struct Tappable : Element
+ +
+
+

Wraps a content element and calls the provided closure when tapped.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/TextAttributeContainer.html b/Structs/TextAttributeContainer.html new file mode 100644 index 000000000..dde1ca402 --- /dev/null +++ b/Structs/TextAttributeContainer.html @@ -0,0 +1,966 @@ + + + + TextAttributeContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextAttributeContainer

+
+
+ +
public struct TextAttributeContainer
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + empty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let empty: TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Get or set for the given AttributedTextKey.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Key>(key: Key.Type) -> Key.Value? where Key : AttributedTextKey { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Font +

+
+
+
    +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Color +

+
+
+
    +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Tracking +

+
+
+
    +
  • +
    + + + + tracking + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tracking: CGFloat? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Underline +

+
+
+
    +
  • +
    + + + + underlineStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underlineStyle: NSUnderlineStyle? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + underlineColor + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underlineColor: UIColor? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Paragraph style +

+
+
+
    +
  • +
    + + + + paragraphStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var paragraphStyle: NSParagraphStyle? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Link +

+
+
+
    +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var link: URL? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TextField.html b/Structs/TextField.html new file mode 100644 index 000000000..8737a6409 --- /dev/null +++ b/Structs/TextField.html @@ -0,0 +1,1461 @@ + + + + TextField Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextField

+
+
+ +
public struct TextField : Element
+ +
+
+

Displays a text field.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + placeholder + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var placeholder: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onChange + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onChange: ((String) -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + secure + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var secure: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textAlignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textAlignment: NSTextAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textColor + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textColor: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + clearButtonMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clearButtonMode: UITextField.ViewMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardType: UIKeyboardType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardAppearance + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardAppearance: UIKeyboardAppearance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var autocapitalizationType: UITextAutocapitalizationType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + autocorrectionType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var autocorrectionType: UITextAutocorrectionType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spellCheckingType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spellCheckingType: UITextSpellCheckingType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textContentType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textContentType: UITextContentType?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onReturn + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onReturn: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + returnKeyType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var returnKeyType: UIReturnKeyType
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var enablesReturnKeyAutomatically: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focusBinding + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var focusBinding: FocusBinding?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the field, these will be merged with any existing traits. +These traits should relate to the content of the text, for example .header, .link, or .updatesFrequently.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String, configure: (inout TextField) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focused(when:equals:) + +
    +
    +
    +
    +
    +
    +

    Modifies this text field by binding its focus state to the given state value.

    + +

    Use this modifier to cause the text field to receive focus whenever the state equals +the value. Typically, you create an enumeration of fields that may receive focus, bind an +instance of this enumeration, and assign its cases to focusable views.

    + +

    The following example uses the cases of a LoginForm enumeration to bind the focus state of +two TextField elements. A sign-in button validates the fields and sets the bound +focusedField value to any field that requires the user to correct a problem.

    +
    struct LoginForm: ProxyElement {
    +    enum Field: Hashable {
    +        case username
    +        case password
    +    }
    +
    +    var username: String
    +    var password: String
    +    var handleLogin: () -> Void
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .username)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .password)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            focusedField = .username
    +                        } else if password.isEmpty {
    +                            focusedField = .password
    +                        } else {
    +                            handleLogin()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Sign In")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To control focus using a Boolean, use the focused(when:) method instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focused<Value>(
    +    when state: FocusState<Value?>,
    +    equals value: Value
    +) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + state + + +
    +

    The state to bind to.

    +
    +
    + + value + + +
    +

    The value to match against when determining whether the binding should change.

    +
    +
    +
    +
    +

    Return Value

    +

    A modified text field.

    +
    +
    +
    +
  • +
  • +
    + + + + focused(when:) + +
    +
    +
    +
    +
    +
    +

    Modifies this text field by binding its focus state to the given Boolean state value.

    + +

    Use this modifier to cause the text field to receive focus whenever the the condition is +true. You can use this modifier to observe the focus state of a text field, or +programmatically focus or blur the field.

    + +

    In the following example, a single text field accepts a user’s desired username. The text +field binds its focus state to the Boolean value isUsernameFocused. A “Submit” button’s +action checks if the username is empty, and sets isUsernameFocused to true, which causes +focus to return to the text field.

    +
    struct SignupForm: ProxyElement {
    +    var username: String
    +    var onSignUpTapped: () -> Void
    +
    +    @FocusState var isUsernameFocused: Bool
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: username)
    +                    .focused(when: $isUsernameFocused)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            isUsernameFocused = true
    +                        } else {
    +                            onSignUpTapped()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Submit")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To control focus by matching a value, use the focused(when:equals:) method instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focused(when condition: FocusState<Bool>) -> TextField
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + condition + + +
    +

    The state to bind to.

    +
    +
    +
    +
    +

    Return Value

    +

    A modified text field.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TextShadow.html b/Structs/TextShadow.html new file mode 100644 index 000000000..d0bf9cbdc --- /dev/null +++ b/Structs/TextShadow.html @@ -0,0 +1,788 @@ + + + + TextShadow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextShadow

+
+
+ +
public struct TextShadow : Hashable
+ +
+
+

Describes a shadow that can be applied to text elements, like Label.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + radius + +
    +
    +
    +
    +
    +
    +

    The blur radius of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var radius: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    The opacity of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + offset + +
    +
    +
    +
    +
    +
    +

    The offset of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var offset: UIOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    +

    The color of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(radius: CGFloat, opacity: CGFloat, offset: UIOffset, color: UIColor)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TintAdjustmentMode.html b/Structs/TintAdjustmentMode.html new file mode 100644 index 000000000..34135afc2 --- /dev/null +++ b/Structs/TintAdjustmentMode.html @@ -0,0 +1,789 @@ + + + + TintAdjustmentMode Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TintAdjustmentMode

+
+
+ +
public struct TintAdjustmentMode : Element
+ +
+
+

TintAdjustmentMode conditionally modifies the tint adjustment mode of its wrapped element.

+
+

Note

+ When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:wrapping:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ tintAdjustmentMode: UIView.TintAdjustmentMode, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Transformed.html b/Structs/Transformed.html new file mode 100644 index 000000000..21601cbd3 --- /dev/null +++ b/Structs/Transformed.html @@ -0,0 +1,882 @@ + + + + Transformed Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Transformed

+
+
+ +
public struct Transformed : Element
+ +
+
+

Changes the transform of the wrapped element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element whose transform is being affected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    The transform of the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Transformed with the given content element and 3D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    transform: CATransform3D,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + transform + + +
    +

    The 3D transform to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Transformed with the given content element and DD transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    transform: CGAffineTransform,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + transform + + +
    +

    The 2D transform to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TransitionContainer.html b/Structs/TransitionContainer.html new file mode 100644 index 000000000..da778b548 --- /dev/null +++ b/Structs/TransitionContainer.html @@ -0,0 +1,959 @@ + + + + TransitionContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TransitionContainer

+
+
+ +
public struct TransitionContainer : Element
+ +
+
+

Wraps a content element and adds transitions when the element appears, +disappears, or changes layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element is appearing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element is disappearing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element’s layout is changing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The element to which transitions are being applied.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(wrapping:) + +
    +
    +
    +
    +
    +
    +

    Create a transition container wrapping an element.

    + +

    The created container’s default transitions are:

    + + + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Use TransitionContainer(transitioning:﹚, which has better defaults")
    +public init(wrapping element: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + wrapping + + +
    +

    The element to which transitions will be applied.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create a transition container wrapping an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    appearingTransition: VisibilityTransition? = nil,
    +    disappearingTransition: VisibilityTransition? = nil,
    +    layoutTransition: LayoutTransition = .inherited,
    +    transitioning element: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + appearingTransition + + +
    +

    The transition to use when the element appears. By default, no transition.

    +
    +
    + + disappearingTransition + + +
    +

    The transition to use when the element disappears. By default, no transition.

    +
    +
    + + layoutTransition + + +
    +

    The transition to use when the element’s layout changes. The default value is +.inherited, which means the element will participate in the same transition as its +nearest ancestor with a specified transition.

    +
    +
    + + transitioning + + +
    +

    The element to which transitions will be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/UIViewElementContext.html b/Structs/UIViewElementContext.html new file mode 100644 index 000000000..0cc3921b2 --- /dev/null +++ b/Structs/UIViewElementContext.html @@ -0,0 +1,709 @@ + + + + UIViewElementContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIViewElementContext

+
+
+ +
public struct UIViewElementContext
+ +
+
+

Context object passed into updateUIView.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + isMeasuring + +
    +
    +
    +
    +
    +
    +

    This bool indicates whether the view being updated is the static measuring instance. You may +not want to perform certain updates if it is (such as updating field trigger references).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isMeasuring: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/URLHandlerEnvironmentKey.html b/Structs/URLHandlerEnvironmentKey.html new file mode 100644 index 000000000..062413f31 --- /dev/null +++ b/Structs/URLHandlerEnvironmentKey.html @@ -0,0 +1,679 @@ + + + + URLHandlerEnvironmentKey Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

URLHandlerEnvironmentKey

+
+
+ +
public struct URLHandlerEnvironmentKey : EnvironmentKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let defaultValue: URLHandler
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/UnitPoint.html b/Structs/UnitPoint.html new file mode 100644 index 000000000..9f8a32433 --- /dev/null +++ b/Structs/UnitPoint.html @@ -0,0 +1,1036 @@ + + + + UnitPoint Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnitPoint

+
+
+ +
public struct UnitPoint : Hashable
+ +
+
+

A normalized point in an element’s coordinate space.

+ +

Use a unit point to represent a location in an element without having to know the element’s +rendered size. The point stores a value in each dimension that indicates the fraction of the +element’s size in that dimension — measured from the element’s origin — where the point appears. +For example, you can create a unit point that represents the center of any element by using the +value 0.5 for each dimension:

+
let unitPoint = UnitPoint(x: 0.5, y: 0.5)
+
+ +

To project the unit point into the rendered element’s coordinate space, multiply each component +of the unit point with the corresponding component of the element’s size:

+
let projectedPoint = CGPoint(
+    x: unitPoint.x * size.width,
+    y: unitPoint.y * size.height
+)
+
+ +

You can perform this calculation yourself if you happen to know an element’s size, but Blueprint +typically does this for you to carry out operations that you request, like when you place a +subelement in a custom layout.

+ +

You can create custom unit points with explicit values, like the example above, or you can use +one of the built-in unit points, like zero, center, or topTrailing. The built-in +values correspond to the alignment positions of the similarly named, built-in Alignment +types.

+
+

Note

+ A unit point with one or more components outside the range [0, 1] projects to a point +outside of the element. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + x + +
    +
    +
    +
    +
    +
    +

    The normalized distance from the origin to the point in the horizontal direction.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var x: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + y + +
    +
    +
    +
    +
    +
    +

    The normalized distance from the origin to the point in the vertical direction.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var y: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(x:y:) + +
    +
    +
    +
    +
    +
    +

    Creates a unit point with the specified horizontal and vertical offsets.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(x: CGFloat, y: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + zero + +
    +
    +
    +
    +
    +
    +

    The origin of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let zero: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A point that’s centered in an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A point that’s centered vertically on the leading edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A point that’s centered vertically on the trailing edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A point that’s centered horizontally on the top edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A point that’s centered horizontally on the bottom edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeading + +
    +
    +
    +
    +
    +
    +

    A point that’s in the top leading corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topTrailing + +
    +
    +
    +
    +
    +
    +

    A point that’s in the top trailing corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topTrailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeading + +
    +
    +
    +
    +
    +
    +

    A point that’s in the bottom leading corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomTrailing + +
    +
    +
    +
    +
    +
    +

    A point that’s in the bottom trailing corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomTrailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/UserInteractionEnabled.html b/Structs/UserInteractionEnabled.html new file mode 100644 index 000000000..636a89920 --- /dev/null +++ b/Structs/UserInteractionEnabled.html @@ -0,0 +1,789 @@ + + + + UserInteractionEnabled Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UserInteractionEnabled

+
+
+ +
public struct UserInteractionEnabled : Element
+ +
+
+

UserInteractionEnabled conditionally enables user interaction of its wrapped element.

+
+

Note

+ When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/VerticalAlignment.html b/Structs/VerticalAlignment.html new file mode 100644 index 000000000..9399808fa --- /dev/null +++ b/Structs/VerticalAlignment.html @@ -0,0 +1,816 @@ + + + + VerticalAlignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VerticalAlignment

+
+
+ +
public struct VerticalAlignment : Equatable, CustomStringConvertible
+ +
+
+

An alignment position along the vertical axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an instance with the given ID.

    + +

    Note: each instance should have a unique ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ id: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: VerticalAlignment, rhs: VerticalAlignment) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A guide marking the top edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the vertical center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ViewDescription.html b/Structs/ViewDescription.html new file mode 100644 index 000000000..d7ce702ee --- /dev/null +++ b/Structs/ViewDescription.html @@ -0,0 +1,1013 @@ + + + + ViewDescription Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ViewDescription

+
+
+ +
public struct ViewDescription
+ +
+
+

Contains a description of a UIView instance. A description includes +logic to handle all parts of a view lifecycle from instantiation onward.

+ +

View descriptions include:

+ +
    +
  • The view’s class.
  • +
  • How an instance of the view should be instantiated.
  • +
  • How to update a view instance by setting properties appropriately.
  • +
  • Which subview of a view instance should be used as a contain for +additional subviews.
  • +
  • How to animate transitions for appearance, layout changes, and +disappearance.
  • +
  • Hooks to be called during lifecycle events.
  • +
+ +

A view description does not contain a concrete view instance. It simply +contains functionality for creating, updating, and animating view instances.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the given view class.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ viewType: (some UIView).Type)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + viewType + + +
    +

    The class of the described view.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:configuring:) + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the given view class.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<View>(_ type: View.Type, configuring: (inout Configuration<View>) -> Void) where View : UIView
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + viewType + + +
    +

    The class of the described view.

    +
    +
    + + configuring + + +
    +

    A closure that is responsible for populating a configuration object.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + viewType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewType: UIView.Type { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + build() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func build() -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + apply(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func apply(to view: UIView)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentView(in:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func contentView(in view: UIView) -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition? { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FrameRoundingBehavior + +
    +
    +
    +
    +
    +
    +

    The available prioritization options for rounding frames to pixel boundaries.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FrameRoundingBehavior : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Configuration + +
    +
    +
    +
    +
    +
    +

    Represents the configuration of a specific UIView type.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Configuration<View> where View : UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ViewDescription/Configuration.html b/Structs/ViewDescription/Configuration.html new file mode 100644 index 000000000..862aae8a2 --- /dev/null +++ b/Structs/ViewDescription/Configuration.html @@ -0,0 +1,1104 @@ + + + + Configuration Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Configuration

+
+
+ +
public struct Configuration<View> where View : UIView
+ +
+
+

Represents the configuration of a specific UIView type.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Update + +
    +
    +
    +
    +
    +
    +

    A closure that is applied to the native view instance during an update cycle.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Update = (_ view: View) -> Void
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + view + + +
    +

    The native view instance.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + builder + +
    +
    +
    +
    +
    +
    +

    A closure that is responsible for instantiating an instance of the native view. +The default value instantiates the view using init(frame:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var builder: () -> View
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updates + +
    +
    +
    +
    +
    +
    +

    An array of update closures.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var updates: [Update]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentView + +
    +
    +
    +
    +
    +
    +

    A closure that takes a native view instance as the single argument, and +returns a subview of that view into which child views should be added +and managed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentView: (View) -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition to use during layout changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    +

    The transition to use when this view appears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The transition to use when this view disappears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear + +
    +
    +
    +
    +
    +
    +

    A hook to call when the element appears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onAppear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear + +
    +
    +
    +
    +
    +
    +

    A hook to call when the element disappears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onDisappear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frameRoundingBehavior + +
    +
    +
    +
    +
    +
    +

    The prioritization method to use when snapping the native view’s frame to pixel +boundaries.

    + +

    When snapping views to pixel boundaries, Blueprint prioritizes placing frame edges as +close to the correct value as possible. This ensures that flush edges stay flush after +rounding, but can result in frame sizes growing or shrinking by 1 pixel in either axis.

    + +

    Backing views that are particularly sensitive to size changes can opt-in to prioritize +preserving their frame size instead of maximally correct edges. This will guarantee +frame sizes, with the tradeoff that their edges may no longer be flush to other edges as +they were laid out.

    + +

    Generally you should not change this value except in specific circumstances when all +criteria are met:

    + +
      +
    • The backing view is sensitive to frame size, such as a text label.
    • +
    • And the backing view has a transparent background, so that overlapping frames or gaps +between frames are not visible.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frameRoundingBehavior: FrameRoundingBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes a default configuration object.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + apply(_:) + +
    +
    +
    +
    +
    +
    +

    Adds the given update closure to the updates array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func apply(_ update: @escaping Update)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Subscript for values that are not optional. We must represent these values as optional so that we can +return nil from the subscript in the case where no value has been assigned for the given keypath.

    + +

    When getting a value for a keypath:

    + +
      +
    • If a value has previously been assigned, it will be returned.
    • +
    • If no value has been assigned, nil will be returned.
    • +
    + +

    When assigning a value for a keypath:

    + +
      +
    • If a value is provided, it will be applied to the view.
    • +
    • If nil is provided, no value will be applied to the view (any previous assignment will be cleared).
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(keyPath: ReferenceWritableKeyPath<View, Value>) -> Value? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Subscript for values that are optional.

    + +

    When getting a value for a keypath:

    + +
      +
    • If a value has previously been assigned (including nil), it will be returned.
    • +
    • If no value has been assigned, nil will be returned.
    • +
    + +

    When assigning a value for a keypath:

    + +
      +
    • Any provided value will be applied to the view (including nil). This means that there is a difference +between the initial state of a view description (where the view’s property will not be touched), and the +state after nil is assigned. After assigning nil to an optional keypath, view.property = nil will +be called on the next update.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(keyPath: ReferenceWritableKeyPath<View, Value?>) -> Value? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ViewDescription/FrameRoundingBehavior.html b/Structs/ViewDescription/FrameRoundingBehavior.html new file mode 100644 index 000000000..62c3d142a --- /dev/null +++ b/Structs/ViewDescription/FrameRoundingBehavior.html @@ -0,0 +1,708 @@ + + + + FrameRoundingBehavior Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FrameRoundingBehavior

+
+
+ +
public enum FrameRoundingBehavior : Equatable
+ +
+
+

The available prioritization options for rounding frames to pixel boundaries.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + prioritizeEdges + +
    +
    +
    +
    +
    +
    +

    Prioritize preserving frame edge positions

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prioritizeEdges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prioritizeSize + +
    +
    +
    +
    +
    +
    +

    Prioritize preserving frame sizes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prioritizeSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ViewDescriptionContext.html b/Structs/ViewDescriptionContext.html new file mode 100644 index 000000000..35c845a35 --- /dev/null +++ b/Structs/ViewDescriptionContext.html @@ -0,0 +1,762 @@ + + + + ViewDescriptionContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ViewDescriptionContext

+
+
+ +
public struct ViewDescriptionContext
+ +
+
+

The context passing to the backingViewDescription of an Element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    The bounds of this element after layout is complete.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bounds: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subtreeExtent + +
    +
    +
    +
    +
    +
    +

    A rectangle in the local coordinate space that contains any children. +This will be nil if there are no children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var subtreeExtent: CGRect?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(bounds: CGRect, subtreeExtent: CGRect?, environment: Environment)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/VisibilityTransition.html b/Structs/VisibilityTransition.html new file mode 100644 index 000000000..50e7ad302 --- /dev/null +++ b/Structs/VisibilityTransition.html @@ -0,0 +1,842 @@ + + + + VisibilityTransition Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VisibilityTransition

+
+
+ +
public struct VisibilityTransition
+ +
+
+

The transition used when a view is inserted or removed during an update cycle.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    The alpha of the view in the hidden state (initial for appearing, final for disappearing).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    The transform of the view in the hidden state (initial for appearing, final for disappearing).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    The animation attributes that will be used to drive the transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: AnimationAttributes
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(alpha: CGFloat, transform: CATransform3D, attributes: AnimationAttributes = AnimationAttributes())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scale + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that scales in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var scale: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fade + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that fades in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var fade: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scaleAndFade + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that simultaneously scales and fades in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var scaleAndFade: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Typealiases.html b/Typealiases.html new file mode 100644 index 000000000..0c4a9b5ee --- /dev/null +++ b/Typealiases.html @@ -0,0 +1,728 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ElementBuilder + +
    +
    +
    +
    +
    +
    +

    Result builder for working with elements that conform to ElementBuilderChild.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ElementBuilder<Child> = Builder<Child> where Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutSubelements + +
    +
    +
    +
    +
    +
    +

    A collection of proxy values that represent the child elements of a layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LayoutSubelements = [LayoutSubelement]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LifecycleCallback + +
    +
    +
    +
    +
    +
    +

    This is the type used by all lifecycle callback hooks.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LifecycleCallback = () -> Void
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/badge.svg b/badge.svg new file mode 100644 index 000000000..a096feca8 --- /dev/null +++ b/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 100% + + + 100% + + + diff --git a/css/highlight.css b/css/highlight.css new file mode 100644 index 000000000..c170357ce --- /dev/null +++ b/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/css/jazzy.css b/css/jazzy.css new file mode 100644 index 000000000..c7bb9fe22 --- /dev/null +++ b/css/jazzy.css @@ -0,0 +1,404 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docsets/Blueprint.docset/Contents/Info.plist b/docsets/Blueprint.docset/Contents/Info.plist new file mode 100644 index 000000000..6836728c3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.blueprint + CFBundleName + Blueprint + DocSetPlatformFamily + blueprint + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Classes.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 000000000..bd209a22f --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,686 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + FocusTrigger + +
    +
    +
    +
    +
    +
    +

    A trigger for focus and blur actions.

    + +

    This type is meant to be used in conjunction with FocusState; you will usually not create +it directly. For information about adding focus support to a custom element, see FocusBinding.

    + +

    Triggers allow imperative actions to be invoked on backing views, by creating a trigger in a +declarative model before the view is realized, late-binding the actions to a backing view after +that view has been realized, and then invoking the action on the trigger later in response to +some other event.

    +

    See Also

    + +

    FocusBinding

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class FocusTrigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/BlueprintView.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/BlueprintView.html new file mode 100644 index 000000000..4f0f78f80 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/BlueprintView.html @@ -0,0 +1,1234 @@ + + + + BlueprintView Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintView

+
+
+ +
public final class BlueprintView : UIView
+ +
+
+

A view that is responsible for displaying an Element hierarchy.

+ +

A view controller that renders content via Blueprint might look something +like this:

+
final class HelloWorldViewController: UIViewController {
+
+   private var blueprintView = BlueprintView(element: nil)
+
+   override func viewDidLoad() {
+       super.viewDidLoad()
+
+       let rootElement = Label(text: "Hello, world!")
+       blueprintView.element = rootElement
+       view.addSubview(blueprintView)
+    }
+
+    override func viewDidLayoutSubviews() {
+        super.viewDidLayoutSubviews()
+        blueprintView.frame = view.bounds
+    }
+
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    A base environment used when laying out and rendering the element tree.

    + +

    Some keys will be overridden with the traits from the view itself. Eg, windowSize, safeAreaInsets, etc.

    + +

    If this blueprint view is within another blueprint view, the environment of the parent view +will be inherited by this view if automaticallyInheritsEnvironmentFromContainingBlueprintViews +is enabled. In the case of matching keys in both the inherited environment and the provided +environment, the values from this environment will take priority over the inherited environment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    If true, then Blueprint will automatically inherit the Environment from the nearest +parent BlueprintView in the view hierarchy.

    + +

    If false, then only the values from environment will be used to +seed the environment passed to the element hierarchy.

    + +

    This property is recursive – if the nearest parent BlueprintView also sets this property to +true, then you will inherit the Environment from that view’s parent BlueprintView, and so on.

    + +

    Defaults to true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var automaticallyInheritsEnvironmentFromContainingBlueprintViews: Bool { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The root element that is displayed within the view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    We need to invalidateIntrinsicContentSize when bound.size changes for Auto Layout to work correctly.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var bounds: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    An optional explicit layout mode for this view. If nil, this view will inherit the layout +mode of its nearest ancestor or use default if it has no ancestor.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutMode: LayoutMode? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    An optional name to help identify this view

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + metricsDelegate + +
    +
    +
    +
    +
    +
    +

    Provides performance metrics about the duration of layouts, updates, etc.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var metricsDelegate: BlueprintViewMetricsDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Instantiates a view with the given element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public required init(element: Element?, environment: Environment = .empty)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + element + + +
    +

    The root element that will be displayed in the view.

    +
    +
    + + environment + + +
    +

    A base environment to render elements with. Defaults to .empty.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience override init(frame: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within the given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis, eg:

    +
    // Measures with a width of 100, and no height constraint.
    +blueprintView.sizeThatFits(CGSize(width: 100.0, height: 0.0))
    +
    +// Measures with a height of 100, and no width constraint.
    +blueprintView.sizeThatFits(CGSize(width: 0.0, height: 100.0))
    +
    +// Measures unconstrained in both axes.
    +blueprintView.sizeThatFits(.zero)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func sizeThatFits(_ fittingSize: CGSize) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within the given SizeConstraint. +by measuring the current element of the BlueprintView.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sizeThatFits(_ constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within then given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func systemLayoutSizeFitting(
    +    _ targetSize: CGSize
    +) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Measures the size needed to display the view within then given constraining size, +by measuring the current element of the BlueprintView.

    + +

    If you would like to not constrain the measurement in a given axis, +pass 0.0 or .greatestFiniteMagnitude for that axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func systemLayoutSizeFitting(
    +    _ targetSize: CGSize,
    +    withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority,
    +    verticalFittingPriority: UILayoutPriority
    +) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + intrinsicContentSize + +
    +
    +
    +
    +
    +
    +

    For us, this is the same as sizeThatFits, since blueprint does not +contain the same concept of constraints as Autolayout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var intrinsicContentSize: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var semanticContentAttribute: UISemanticContentAttribute { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func safeAreaInsetsDidChange()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutSubviews() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func layoutSubviews()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + didMoveToWindow() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override func didMoveToWindow()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/FocusTrigger.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/FocusTrigger.html new file mode 100644 index 000000000..1138444ab --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Classes/FocusTrigger.html @@ -0,0 +1,800 @@ + + + + FocusTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusTrigger

+
+
+ +
public final class FocusTrigger
+ +
+
+

A trigger for focus and blur actions.

+ +

This type is meant to be used in conjunction with FocusState; you will usually not create +it directly. For information about adding focus support to a custom element, see FocusBinding.

+ +

Triggers allow imperative actions to be invoked on backing views, by creating a trigger in a +declarative model before the view is realized, late-binding the actions to a backing view after +that view has been realized, and then invoking the action on the trigger later in response to +some other event.

+

See Also

+ +

FocusBinding

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Create a new trigger, not yet bound to any view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focusAction + +
    +
    +
    +
    +
    +
    +

    The action to be invoked on focus, which will be set by a backing view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var focusAction: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blurAction + +
    +
    +
    +
    +
    +
    +

    The action to be invoked on blur, which will be set by a backing view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var blurAction: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focus() + +
    +
    +
    +
    +
    +
    +

    Focuses the backing view bound to this trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focus()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blur() + +
    +
    +
    +
    +
    +
    +

    Blurs (removes focus from) the backing view bound to this trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func blur()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Common Elements.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Common Elements.html new file mode 100644 index 000000000..7195c6132 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Common Elements.html @@ -0,0 +1,1523 @@ + + + + Common Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Common Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AccessibilityBlocker + +
    +
    +
    +
    +
    +
    +

    Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityBlocker : Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Acts as an accessibility container for any accessible subviews.

    + +

    Accessible subviews are found using the following algorithm:

    + +

    Recurse subviews until a view is found that either

    + +
      +
    • hasisAccessibilityElement set to true or
    • +
    + +

    If an accessibility element is found, we add it to the accessibilityElements +and terminate the search down that branch. If a container is found, +the elements returned from the container are added to the accessibilityElements +and the search down that branch is also terminated.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityContainer : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AccessibilityElement + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AdaptedEnvironment + +
    +
    +
    +
    +
    +
    +

    Wraps an element tree with a modified environment.

    + +

    By specifying environmental values with this element, all child elements nested +will automatically inherit those values automatically. Values can be changed +anywhere in a sub-tree by inserting another AdaptedEnvironment element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AdaptedEnvironment : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EnvironmentReader + +
    +
    +
    +
    +
    +
    +

    An element that dynamically builds its content based on the environment.

    + +

    Use this element to build elements whose contents may change depending on the Environment.

    +

    Example

    +
    EnvironmentReader { environment -> Element in
    +    MyElement(
    +        foo: environment.foo
    +    )
    +}
    +
    +
    +

    Seealso

    + ProxyElement + +
    +

    Seealso

    + Environment + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EnvironmentReader : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Aligned + +
    +
    +
    +
    +
    +
    +

    Aligns a content element within itself. The vertical and horizontal alignment may be set independently.

    + +

    When using alignment mode .fill, the content is scaled to the width or height of the Aligned element.

    + +

    For other modes, the size of the content element is determined by calling measure(in:) +on the content element – even if that size is larger than the wrapping element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Aligned : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AttributedLabel + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AttributedLabel : Element, Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Box + +
    +
    +
    +
    +
    +
    +

    A simple element that wraps a child element and adds visual styling including +background color.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Box : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Button + +
    +
    +
    +
    +
    +
    +

    An element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when +highlighted (or disabled), it fades its contents to partial alpha.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Button : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Centered + +
    +
    +
    +
    +
    +
    +

    Centers a content element within itself.

    + +

    The size of the content element is determined by calling measure(in:) on +the content element – even if that size is larger than the wrapping Centered +element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Centered : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Column + +
    +
    +
    +
    +
    +
    +

    Displays a list of items in a linear vertical layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Column : StackElement
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Constrains the size of the content element to an aspect ratio.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ConstrainedAspectRatio : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ConstrainedSize + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the contained element in the ranges specified by the width and height properties.

    + +

    There are several constraint types available for each axis. See ConstrainedSize.Constraint for a full list and in-depth +descriptions of each.

    +

    Notes

    + +

    An important note is that the constraints of ConstrainedSize are authoritative during measurement. For example, +if your ConstrainedSize specifies .atLeast(300) for width, and the ConstrainedSize is asked to measure within +a SizeConstraint that is at most 100 points wide, the returned measurement will still be 300 points. The same goes for the +height of the ConstrainedSize.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ConstrainedSize : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Empty + +
    +
    +
    +
    +
    +
    +

    An empty Element which has no size and draws no content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Empty : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EqualStack + +
    +
    +
    +
    +
    +
    +

    An element that sizes its children equally, stacking them in the primary axis according to +the specified direction and spacing them according to the specified spacing. In the +secondary axis, children are justified to fill the space of the largest child.

    +
    +

    Note

    + A stack measures itself by determining its largest child in each axis, and + in the case of the primary axis, multiplying by children.count (accounting + for spacing as necessary). + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EqualStack : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GeometryReader + +
    +
    +
    +
    +
    +
    +

    An element that dynamically builds its content based on the available space.

    + +

    Use this element to build elements whose contents may change responsively to +different layouts.

    +

    Example

    +
    GeometryReader { (geometry) -> Element in
    +    let image: UIImage
    +    switch geometry.constraint.width.maximum {
    +    case ..<100:
    +        image = UIImage(named: "small")!
    +    case 100..<500:
    +        image = UIImage(named: "medium")!
    +    default:
    +        image = UIImage(named: "large")!
    +    }
    +    return Image(image: image)
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GeometryReader : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Image + +
    +
    +
    +
    +
    +
    +

    Displays an image within an element hierarchy.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Image : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Inset + +
    +
    +
    +
    +
    +
    +

    Insets a content element within a layout.

    + +

    Commonly used to add padding around another element when displayed within a container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Inset : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Label + +
    +
    +
    +
    +
    +
    +

    Displays text content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Label : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Overlay + +
    +
    +
    +
    +
    +
    +

    Stretches all of its child elements to fill the layout area, stacked on top of each other.

    + +

    During a layout pass, measurement is calculated as the max size (in both x and y dimensions) +produced by measuring all of the child elements.

    + +

    View-backed descendants will be z-ordered from back to front in the order of this element’s +children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Overlay : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Row + +
    +
    +
    +
    +
    +
    +

    Displays a list of items in a linear horizontal layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Row : StackElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Rule + +
    +
    +
    +
    +
    +
    +

    A solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length, +suitable for use as a separator.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Rule : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ScrollView + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and makes it scrollable.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ScrollView : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SegmentedControl + +
    +
    +
    +
    +
    +
    +

    Allows users to pick from an array of options.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct SegmentedControl : Element, Measurable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Spacer + +
    +
    +
    +
    +
    +
    +

    An element that does not display anything (it has neither children or a view).

    + +

    Spacer simply takes up a specified amount of space within a layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Spacer : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Tappable + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and calls the provided closure when tapped.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Tappable : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TextField + +
    +
    +
    +
    +
    +
    +

    Displays a text field.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextField : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TransitionContainer + +
    +
    +
    +
    +
    +
    +

    Wraps a content element and adds transitions when the element appears, +disappears, or changes layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TransitionContainer : Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Creating Custom Elements.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Creating Custom Elements.html new file mode 100644 index 000000000..23e934baf --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Creating Custom Elements.html @@ -0,0 +1,888 @@ + + + + Creating Custom Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Creating Custom Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Element + +
    +
    +
    +
    +
    +
    +

    Conforming types represent a rectangular content area in a two-dimensional +layout space.

    + +
    + +

    The ultimate purpose of an element is to provide visual content. This can be +done in two ways:

    + +
      +
    • By providing a view description (ViewDescription).

    • +
    • By providing child elements that will be displayed recursively within +the local coordinate space.

    • +
    + +
    + +

    A custom element might look something like this:

    +
    struct MyElement: Element {
    +
    +    var backgroundColor: UIColor = .red
    +
    +    // Returns a single child element.
    +    var content: ElementContent {
    +        return ElementContent(child: Label(text: "😂"))
    +    }
    +
    +    // Providing a view description means that this element will be
    +    // backed by a UIView instance when displayed in a `BlueprintView`.
    +    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
    +        return UIView.describe { config in
    +            config.bind(backgroundColor, to: \.backgroundColor)
    +        }
    +    }
    +
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ProxyElement + +
    +
    +
    +
    +
    +
    +

    Custom elements commonly use another element to actually display content. For example, a profile element might +display an image and a few labels inside a Column element. The ProxyElement protocol is provided to make that +task easier.

    + +

    Conforming types only need to implement elementRepresentation in order to generate an element that will be +displayed.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ProxyElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementContent + +
    +
    +
    +
    +
    +
    +

    Represents the content of an element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ElementContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ViewDescription + +
    +
    +
    +
    +
    +
    +

    Contains a description of a UIView instance. A description includes +logic to handle all parts of a view lifecycle from instantiation onward.

    + +

    View descriptions include:

    + +
      +
    • The view’s class.
    • +
    • How an instance of the view should be instantiated.
    • +
    • How to update a view instance by setting properties appropriately.
    • +
    • Which subview of a view instance should be used as a contain for +additional subviews.
    • +
    • How to animate transitions for appearance, layout changes, and +disappearance.
    • +
    • Hooks to be called during lifecycle events.
    • +
    + +

    A view description does not contain a concrete view instance. It simply +contains functionality for creating, updating, and animating view instances.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ViewDescription
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition used when layout attributes change for a view during an +update cycle.

    + +

    ‘Inherited’ transitions: the ‘inherited’ transition is determined by searching up the tree (not literally, but +this is the resulting behavior). The nearest ancestor that defines an animation will be used, following this +logic:

    + +
      +
    • Ancestors with a layout transition of none will result in no inherited animation for their descendents.
    • +
    • Ancestors in the tree with a layout transition of inherited will be skipped, and the search will continue +up the tree.
    • +
    • Any ancestors in the tree with a layout transition of inheritedWithFallback will be used if they do not +themselves inherit a layout transition from one of their ancestors.
    • +
    • Ancestors with a layout transition of specific will always be used for their descendents inherited +animation.
    • +
    • If no ancestor is found that specifies a layout transition, but the containing BlueprintView has the element +property assigned from within a UIKit animation block, that animation will be used as the inherited animation.
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VisibilityTransition + +
    +
    +
    +
    +
    +
    +

    The transition used when a view is inserted or removed during an update cycle.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct VisibilityTransition
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Displaying Elements.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Displaying Elements.html new file mode 100644 index 000000000..29435f7bf --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Displaying Elements.html @@ -0,0 +1,773 @@ + + + + Displaying Elements Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Displaying Elements

+ +
+
+ +
+
+
+
    +
  • +
    + + + + BlueprintView + +
    +
    +
    +
    +
    +
    +

    A view that is responsible for displaying an Element hierarchy.

    + +

    A view controller that renders content via Blueprint might look something +like this:

    +
    final class HelloWorldViewController: UIViewController {
    +
    +   private var blueprintView = BlueprintView(element: nil)
    +
    +   override func viewDidLoad() {
    +       super.viewDidLoad()
    +
    +       let rootElement = Label(text: "Hello, world!")
    +       blueprintView.element = rootElement
    +       view.addSubview(blueprintView)
    +    }
    +
    +    override func viewDidLayoutSubviews() {
    +        super.viewDidLayoutSubviews()
    +        blueprintView.frame = view.bounds
    +    }
    +
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class BlueprintView : UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementPreview + +
    +
    +
    +
    +
    +
    +

    A SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements +via Xcode’s preview functionality (enable via the Editor > Canvas menu).

    + +

    You can leverage ElementPreview by adding something like this to the bottom of the file which contains +your Blueprint element, then as you edit and work on your element, the live preview will update to show the +current state of your element:

    +
    
    +struct MyElement : Element {
    +   ...
    +}
    +
    +// Add this at the bottom of your element's source file.
    +
    +#if DEBUG && canImport(SwiftUI) && !arch(i386) && !arch(arm)
    +
    +import SwiftUI
    +
    +@available(iOS 13.0, *)
    +struct MyElement_Preview: PreviewProvider {
    +    static var previews: some View {
    +        ElementPreview {
    +            MyElement()
    +        }
    +    }
    +}
    +
    +#endif
    +
    +
    +

    Uhhh

    + +

    You’re probably asking… +Why the !arch(i386) check above? Turns out, a compiler bug! +SwiftUI is only available on 64 bit devices, but the canImport check erroneously +finds it when building to target iOS 10 devices. Until we drop iOS 10, this part of the check is also required.

    +

    Details

    + +

    It’s important that you keep the PreviewProvider in the same file as the element that you are editing.

    + +

    Why? Xcode uses a new feature called “Dynamic Replacement” to re-compile the source file you are editing, +and inject it back into the running app which drives the preview. This only works on the level of a single +file – if your preview and element live in separate files, Xcode needs to recompile your entire module +which will slow down preview updates greatly.

    + +

    You can learn more about Xcode previews here: https://nshipster.com/swiftui-previews/

    +

    Requirements

    + +

    You must be running Xcode 11 and Catalina to take advantage of live previews. +They do not work on Mojave. Your selected simulator must also be an iOS 13 device.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 13.0, *)
    +public struct ElementPreview : View
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 000000000..bc3ce0f45 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,976 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+
+ + +
+ +

Font +

+
+
+ +
+
+
+ + +
+ +

Color +

+
+
+ +
+
+
+ + +
+ +

Tracking +

+
+
+ +
+
+
+ + +
+ +

Underline +

+
+
+ +
+
+
+ + +
+ +

Paragraph style +

+
+
+ +
+
+
+ + +
+ +

Link +

+
+
+
    +
  • +
    + + + + LinkKey + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LinkKey : AttributedTextKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + BlueprintLogging + +
    +
    +
    +
    +
    +
    +

    Namespace for logging config.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BlueprintLogging
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutMode + +
    +
    +
    +
    +
    +
    +

    Controls the layout system that Blueprint uses to lay out elements.

    + +

    Blueprint supports multiple layout systems. Each is expected to produce the same result, but +some may have different performance profiles or special requirements.

    + +

    You can change the layout system used by setting the layoutMode property, but +generally you should use the default option.

    + +

    Changing the default will cause all instances of BlueprintView to be invalidated, and re- +render their contents.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutMode : Equatable
    +
    extension LayoutMode: CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging.html new file mode 100644 index 000000000..d4539c7e2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging.html @@ -0,0 +1,739 @@ + + + + BlueprintLogging Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintLogging

+
+
+ +
public enum BlueprintLogging
+ +
+
+

Namespace for logging config.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Config + +
    +
    +
    +
    +
    +
    +

    Configuration for logging options

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + config + +
    +
    +
    +
    +
    +
    +

    Logging configuration

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var config: Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    If enabled, Blueprint will emit signpost logs. You can view these logs in Instruments to +aid in debugging or performance tuning.

    + +

    Signpost logging is disabled by default.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var isEnabled: Bool { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging/Config.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging/Config.html new file mode 100644 index 000000000..c3d6e688b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/BlueprintLogging/Config.html @@ -0,0 +1,764 @@ + + + + Config Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Config

+
+
+ +
public struct Config
+ +
+
+

Configuration for logging options

+ +
+
+ +
+
+
+
    +
  • +
    + + + + recordElementMeasures + +
    +
    +
    +
    +
    +
    +

    When true, timing data will be logged when measuring each Element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var recordElementMeasures: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(recordElementMeasures: Bool)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lite + +
    +
    +
    +
    +
    +
    +

    Logging configuration that will not record measurement data for all Elements. +This provides a reasonable balance between data collection and performance impact. +This is the default logging configuration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let lite: BlueprintLogging.Config
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verbose + +
    +
    +
    +
    +
    +
    +

    Logging configuration that includes measurement data. +This provides the most granular information, but has a noticeable impact on performance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let verbose: BlueprintLogging.Config
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ColorKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ColorKey.html new file mode 100644 index 000000000..f9d9968df --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ColorKey.html @@ -0,0 +1,705 @@ + + + + ColorKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ColorKey

+
+
+ +
public enum ColorKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/FontKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/FontKey.html new file mode 100644 index 000000000..930a778ec --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/FontKey.html @@ -0,0 +1,705 @@ + + + + FontKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FontKey

+
+
+ +
public enum FontKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutMode.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutMode.html new file mode 100644 index 000000000..b888b9f33 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutMode.html @@ -0,0 +1,826 @@ + + + + LayoutMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutMode

+
+
+ +
public enum LayoutMode : Equatable
+
extension LayoutMode: CustomStringConvertible
+ +
+
+

Controls the layout system that Blueprint uses to lay out elements.

+ +

Blueprint supports multiple layout systems. Each is expected to produce the same result, but +some may have different performance profiles or special requirements.

+ +

You can change the layout system used by setting the layoutMode property, but +generally you should use the default option.

+ +

Changing the default will cause all instances of BlueprintView to be invalidated, and re- +render their contents.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var `default`: `Self` { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + legacy + +
    +
    +
    +
    +
    +
    +

    The “standard” layout system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case legacy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + caffeinated(options:) + +
    +
    +
    +
    +
    +
    +

    A newer layout system with some optimizations made possible by ensuring elements adhere +to a certain contract for behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case caffeinated(options: LayoutOptions = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + caffeinated + +
    +
    +
    +
    +
    +
    +

    A newer layout system with some optimizations made possible by ensuring elements adhere +to a certain contract for behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let caffeinated: LayoutMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the layout mode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutTransition.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutTransition.html new file mode 100644 index 000000000..2896dd116 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LayoutTransition.html @@ -0,0 +1,779 @@ + + + + LayoutTransition Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutTransition

+
+
+ +
public enum LayoutTransition
+ +
+
+

The transition used when layout attributes change for a view during an +update cycle.

+ +

‘Inherited’ transitions: the ‘inherited’ transition is determined by searching up the tree (not literally, but +this is the resulting behavior). The nearest ancestor that defines an animation will be used, following this +logic:

+ +
    +
  • Ancestors with a layout transition of none will result in no inherited animation for their descendents.
  • +
  • Ancestors in the tree with a layout transition of inherited will be skipped, and the search will continue +up the tree.
  • +
  • Any ancestors in the tree with a layout transition of inheritedWithFallback will be used if they do not +themselves inherit a layout transition from one of their ancestors.
  • +
  • Ancestors with a layout transition of specific will always be used for their descendents inherited +animation.
  • +
  • If no ancestor is found that specifies a layout transition, but the containing BlueprintView has the element +property assigned from within a UIKit animation block, that animation will be used as the inherited animation.
  • +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    +

    The view will never animate layout changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + specific(_:) + +
    +
    +
    +
    +
    +
    +

    Layout changes will always animate with the given attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case specific(_: AnimationAttributes = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inherited + +
    +
    +
    +
    +
    +
    +

    The view will only animate layout changes if an inherited transition exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inherited
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The view will animate along with an inherited transition (if present) or the specified fallback attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inheritedWithFallback(_: AnimationAttributes = .default)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LinkKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LinkKey.html new file mode 100644 index 000000000..fcfa01ae3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/LinkKey.html @@ -0,0 +1,705 @@ + + + + LinkKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LinkKey

+
+
+ +
public enum LinkKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = URL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ParagraphStyleKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ParagraphStyleKey.html new file mode 100644 index 000000000..f228059d5 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/ParagraphStyleKey.html @@ -0,0 +1,705 @@ + + + + ParagraphStyleKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ParagraphStyleKey

+
+
+ +
public enum ParagraphStyleKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = NSParagraphStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/TrackingKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/TrackingKey.html new file mode 100644 index 000000000..1ba2df447 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/TrackingKey.html @@ -0,0 +1,705 @@ + + + + TrackingKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TrackingKey

+
+
+ +
public enum TrackingKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineColorKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineColorKey.html new file mode 100644 index 000000000..f946c82f1 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineColorKey.html @@ -0,0 +1,705 @@ + + + + UnderlineColorKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderlineColorKey

+
+
+ +
public enum UnderlineColorKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineStyleKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineStyleKey.html new file mode 100644 index 000000000..69cf23a53 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Enums/UnderlineStyleKey.html @@ -0,0 +1,705 @@ + + + + UnderlineStyleKey Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderlineStyleKey

+
+
+ +
public enum UnderlineStyleKey : AttributedTextKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Value = Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Environment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Environment.html new file mode 100644 index 000000000..98271525c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Environment.html @@ -0,0 +1,752 @@ + + + + Environment Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Environment

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Environment + +
    +
    +
    +
    +
    +
    +

    Environment is a container for values to be passed down an element tree.

    + +

    Environment values are not resolved until the tree is being rendered, so they do not need to be +explicitly passed to elements at the time they are created.

    + +

    Environment key-value pairs are strongly typed: keys are types conforming to the +EnvironmentKey protocol, and each key’s value is the type of that key’s +EnvironmentKey.Value associated value. Keys must provide a default value.

    +

    Example

    + +

    To set an environment value, so that it will cascade to child elements, use +AdaptedEnvironment. Here, every element in childElement will have access to someValue +via the key MyEnvironmentKey.

    +
    AdaptedEnvironment(
    +    key: MyEnvironmentKey.self,
    +    value: someValue,
    +    wrapping: childElement
    +)
    +
    + +

    To read an environment value, use EnvironmentReader. If this element were part of the child +element in the previous example, myValue would be set to someValue. If the key had not +been set in an ancestor element, the value would be MyEnvironmentKey.defaultValue.

    +
    struct MyElement: ProxyElement {
    +    var elementRepresentation: Element {
    +        return EnvironmentReader { environment -> Element in
    +            let myValue = environment[MyEnvironmentKey.self]
    +            return SomeElement(using: myValue)
    +        }
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Environment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EnvironmentKey + +
    +
    +
    +
    +
    +
    +

    Types conforming to this protocol can be used as keys in an Environment.

    + +

    Using a type as the key allows us to strongly type each value, with the +key’s EnvironmentKey.Value associated value.

    +

    Example

    + +

    Usually a key is implemented with an uninhabited type, such an empty enum.

    +
    enum WidgetCountKey: EnvironmentKey {
    +    static let defaultValue: Int = 0
    +}
    +
    + +

    You can write a small extension on Environment to make it easier to use your key.

    +
    extension Environment {
    +    var widgetCount: Int {
    +        get { self[WidgetCountKey.self] }
    +        set { self[WidgetCountKey.self] = newValue }
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol EnvironmentKey
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 000000000..182d5362a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,880 @@ + + + + Extensions Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+ +
+
+
+ +
+
+
+ + +
+ +

Extensions +

+
+
+
    +
  • +
    + + + + UIOffset + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UIOffset: Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/AXCustomContent.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/AXCustomContent.html new file mode 100644 index 000000000..0b5dbc50c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/AXCustomContent.html @@ -0,0 +1,705 @@ + + + + AXCustomContent Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AXCustomContent

+
+
+ +
extension AXCustomContent
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(_ content: AccessibilityElement.CustomContent)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(label: String, value: String?, importance: AXCustomContent.Importance = .default)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/CGSize.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/CGSize.html new file mode 100644 index 000000000..2cf3624dd --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/CGSize.html @@ -0,0 +1,707 @@ + + + + CGSize Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CGSize

+
+
+ +
extension CGSize
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + infinity + +
    +
    +
    +
    +
    +
    +

    A size with infinity in both dimensions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let infinity: CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns a size with infinite dimensions replaced by the values from the given replacement.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replacingInfinity(with replacement: CGSize) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/ElementBuilder.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/ElementBuilder.html new file mode 100644 index 000000000..c1847f420 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/ElementBuilder.html @@ -0,0 +1,814 @@ + + + + ElementBuilder Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementBuilder

+
+
+ +
extension ElementBuilder
+
extension ElementBuilder where Child == Overlay.Child
+
extension ElementBuilder where Child == StackLayout.Child
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow an Element to be implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ element: Element) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow an Optional Element to be unwrapped and implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ child: Element?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow Elements to be implicitly converted into Child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ elements: [Element]) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Available where Child == Overlay.Child +

+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ keyed: Keyed) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Available where Child == StackLayout.Child +

+
+
+
    +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ keyed: Keyed) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html new file mode 100644 index 000000000..d0063e769 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html @@ -0,0 +1,808 @@ + + + + FloatingPoint Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FloatingPoint

+
+
+ +
extension FloatingPoint
+ +
+
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns replacement if self.isInfinite is true, or self if self is finite.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replacingInfinity(with replacement: Self) -> Self
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + round(_:by:) + +
    +
    +
    +
    +
    +
    +

    Rounds this value to the specified scale, where the scale is the number of rounding stops per integer.

    + +

    A rounding scale of 1.0 is standard integer rounding. +A rounding scale of 2.0 rounds to halves (0, 0.5, 1.0, 1.5, 2.0, 2.5., …). +A rounding scale of 3.0 rounds to thirds (0, 1/3, 2/3, 1.0, 4/3, 5/3, 2.0, …).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func round(_ rule: FloatingPointRoundingRule, by scale: Self)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + rule + + +
    +

    the rounding rule

    +
    +
    + + scale + + +
    +

    the rounding scale

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + rounded(_:by:) + +
    +
    +
    +
    +
    +
    +

    Returns this value rounded to the specified scale, where the scale is the number of rounding stops per integer.

    + +

    A rounding scale of 1.0 is standard integer rounding. +A rounding scale of 2.0 rounds to halves (0, 0.5, 1.0, 1.5, 2.0, 2.5., …). +A rounding scale of 3.0 rounds to thirds (0, 1/3, 2/3, 1.0, 4/3, 5/3, 2.0, …).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func rounded(_ rule: FloatingPointRoundingRule, by scale: Self) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + rule + + +
    +

    the rounding rule

    +
    +
    + + scale + + +
    +

    the rounding scale

    +
    +
    +
    +
    +

    Return Value

    +

    The rounded value.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/PreviewDevice.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/PreviewDevice.html new file mode 100644 index 000000000..56cebf0c9 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/PreviewDevice.html @@ -0,0 +1,1263 @@ + + + + PreviewDevice Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PreviewDevice

+
+
+ +
extension PreviewDevice
+ +
+
+

The available devices to be used for previewing elements in an Xcode preview.

+ +

Via https://developer.apple.com/documentation/swiftui/securefield/3289399-previewdevice

+ +
+
+ +
+
+
+
    +
  • +
    + + + + iPhone7 + +
    +
    +
    +
    +
    +
    +

    iPhone 7

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone7: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone7Plus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone7Plus: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone8 + +
    +
    +
    +
    +
    +
    +

    iPhone 8

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone8: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhone8Plus + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhone8Plus: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneSE_1 + +
    +
    +
    +
    +
    +
    +

    iPhone SE

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneSE_1: PreviewDevice { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneSE_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneSE_2: PreviewDevice { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneX + +
    +
    +
    +
    +
    +
    +

    iPhone X

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneX: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXs + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXs: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXsMax + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXsMax: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPhoneXr + +
    +
    +
    +
    +
    +
    +

    iPhone Xr

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPhoneXr: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadMini_4 + +
    +
    +
    +
    +
    +
    +

    iPad Mini

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadMini_4: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadMini_5 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadMini_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadAir_2 + +
    +
    +
    +
    +
    +
    +

    iPad Air

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadAir_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadAir_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadAir_3: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPad_5 + +
    +
    +
    +
    +
    +
    +

    iPad

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPad_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPad_6 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPad_6: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_9_7 + +
    +
    +
    +
    +
    +
    +

    iPad Pro

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_9_7: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_10_5 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_10_5: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_11_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_11_1: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_11_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_11_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_1 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_1: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_2 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_2: PreviewDevice
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + iPadPro_12_9_3 + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var iPadPro_12_9_3: PreviewDevice
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIAccessibilityTraits.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIAccessibilityTraits.html new file mode 100644 index 000000000..e0d376a01 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIAccessibilityTraits.html @@ -0,0 +1,679 @@ + + + + UIAccessibilityTraits Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIAccessibilityTraits

+
+
+ +
extension UIAccessibilityTraits
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIOffset.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIOffset.html new file mode 100644 index 000000000..57dabc867 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Extensions/UIOffset.html @@ -0,0 +1,679 @@ + + + + UIOffset Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIOffset

+
+
+ +
extension UIOffset: Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 000000000..32a219cf8 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,1209 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AttributedTextKey + +
    +
    +
    +
    +
    +
    +

    Define AttributedText keys using this protocol. Keys must have an attribute name +and an associated type for the attribute.

    + +

    After defining a key, enable dynamic member access to it by extending TextAttributeContainer +with a property for getting and setting setting the value. This property should generally be optional, +since the text may not have that property defined.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol AttributedTextKey
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Provides performance information for blueprint layouts and updates.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol BlueprintViewMetricsDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UIViewElement + +
    +
    +
    +
    +
    +
    +

    An element type which makes it easier to wrap an existing UIView instance that +provides its own sizing via sizeThatFits. An instance of the view is used for +sizing and measurement, so that you do not need to re-implement your own measurement.

    +

    Note

    + +

    The sizing and measurement prototype view is kept alive for the lifetime of the containing application. +Do not pass anything to the initializer of this type that you expect to be quickly released.

    +

    Example

    + +

    If you were implementing a very basic Switch element, your implementation would look something +like this:

    +
    struct Switch : UIViewElement
    +{
    +    var isOn : Bool
    +
    +    typealias UIViewType = UISwitch
    +
    +    func makeUIView() -> UISwitch {
    +        UISwitch()
    +    }
    +
    +    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
    +        view.isOn = self.isOn
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol UIViewElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AlignmentID + +
    +
    +
    +
    +
    +
    +

    Types used to identify alignment guides.

    + +

    Types conforming to AlignmentID have a corresponding alignment guide value, +typically declared as a static constant property of HorizontalAlignment or +VerticalAlignment.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol AlignmentID
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementBuilderChild + +
    +
    +
    +
    +
    +
    +

    Defines a way for anElement to be implicitly converted into the conforming type (the child of a container). +In practice, this allows us to pass an Element directly into the result builder without manually converting to Child (i.e. Converting Element -> StackLayout.Child.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Layout + +
    +
    +
    +
    +
    +
    +

    A type that defines the geometry of a collection of elements.

    + +

    You traditionally arrange views in your app’s user interface using built-in layout containers +like Row and Column. If you need more complex layout behavior, you can define a custom +layout container by creating a type that conforms to the Layout protocol and implementing +its required methods:

    + + + +

    You can define a basic layout type with only these two methods (see note below):

    +
    struct BasicLayout: Layout {
    +    func sizeThatFits(
    +        proposal: SizeConstraint,
    +        subelements: Subelements,
    +        cache: inout ()
    +    ) -> CGSize {
    +        // Calculate and return the size of the layout container.
    +    }
    +
    +    func placeSubelements(
    +        in size: CGSize,
    +        subelements: Subelements,
    +        cache: inout ()
    +    ) {
    +        // Tell each subelement where to appear.
    +    }
    +}
    +
    + +

    Add your layout to an element by passing it to the ElementContent initializer +init(layout:configure:). If your layout has parameters that come from the +element, pass them at initialization time. Use the configure block to add your element’s +children to the content.

    +
    struct BasicContainer: Element {
    +    var alignment: Alignment = .center
    +    var children: [Element]
    +
    +    var content: ElementContent {
    +        ElementContent(layout: BasicLayout(alignment: alignment)) { builder in
    +            for child in children {
    +                builder.add(element: child)
    +            }
    +        }
    +    }
    +
    +    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
    +        nil
    +    }
    +}
    +
    + +

    If your layout is specialized for laying out a single subelement, you can use the +SingleChildLayout protocol instead. It has similar methods, but is strongly typed for a +single subelement instead of a collection.

    +
    +

    Note

    + During the transition from Blueprint’s legacy layout system to Caffeinated Layout, the +Layout protocol is composed of two sets of layout methods: LegacyLayout and +CaffeinatedLayout. While this documentation focuses on the newer layout API, you must +currently implement both. Fortunately, the methods are similar, and you may be able to reuse +logic. + +
    +

    Interact with subelements through their proxies

    + +

    To perform layout, you need information about all of your container’s subelements, which are the +child elements that your container arranges. While your layout can’t interact directly with its +subelements, it can access a set of subelement proxies through the +Subelements collection that each protocol method receives as an input +parameter. That type is an alias for the LayoutSubelements collection type, which in turn +contains LayoutSubelement instances that are the subelement proxies.

    + +

    You can get information about each subelement from its proxy, like its dimensions and traits. +This enables you to measure subelements before you commit to placing them. You also assign a +position to each subelement by calling its proxy’s place(at:anchor:size:) +method. Call the method on each subelement from within your implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

    +

    Access layout traits

    + +

    Subelements may have traits that are specific to their container’s layout. The traits are of +the Layout protocol’s associated type Traits, and each subelement can have +a distinct Traits value assigned. You can set this in the configure block of +init(layout:configure:), when you call +add(traits:key:element:). If you do not specify a Traits type for +your layout, it defaults to the void type, ().

    + +

    Containers can choose to condition their behavior according to the traits of their subelements. +For example, the Row and Column types allocate space for their subelements based in part +on the grow and shrink priorities that you set on each child. Your layout container accesses the +traits for a subelement by calling traits(forLayoutType:) on the +LayoutSubelement proxy.

    +
    +

    Note

    + The Layout API, and its documentation, are modeled after SwiftUI’s +Layout, with major differences +noted. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Layout : CaffeinatedLayout, LegacyLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LegacyLayout + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LegacyLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CaffeinatedLayout + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CaffeinatedLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SingleChildLayout + +
    +
    +
    +
    +
    +
    +

    A type that defines the geometry of a single element.

    + +

    For convenience, you can implement this protocol instead of Layout when building a container +that always has a single child element.

    + +

    For more information about writing custom layouts, see Layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SingleChildLayout : CaffeinatedSingleChildLayout, LegacySingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LegacySingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CaffeinatedSingleChildLayout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StackElement + +
    +
    +
    +
    +
    +
    +

    Conforming types (Row and Column) act as StackLayout powered containers.

    + +

    This protocol should only be used by Row and Column elements (you should never add conformance to other custom +types).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol StackElement : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Measurable + +
    +
    +
    +
    +
    +
    +

    Conforming types can calculate the size that they require within a layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Measurable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NativeView + +
    +
    +
    +
    +
    +
    +

    Marker protocol used by generic extensions to native views (e.g. UIView).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NativeView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + URLHandler + +
    +
    +
    +
    +
    +
    +

    Conform to this protocol to handle links tapped in an AttributedLabel.

    + +

    Use the URLHandlerEnvironmentKey or Environment.urlHandler property to override +the link handler in the environment.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol URLHandler
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AlignmentID.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AlignmentID.html new file mode 100644 index 000000000..d2c31d951 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AlignmentID.html @@ -0,0 +1,686 @@ + + + + AlignmentID Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AlignmentID

+
+
+ +
public protocol AlignmentID
+ +
+
+

Types used to identify alignment guides.

+ +

Types conforming to AlignmentID have a corresponding alignment guide value, +typically declared as a static constant property of HorizontalAlignment or +VerticalAlignment.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultValue(in:) + +
    +
    +
    +
    +
    +
    +

    Returns the value of the corresponding guide, in context, when not +otherwise set in context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func defaultValue(in context: ElementDimensions) -> CGFloat
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AttributedTextKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AttributedTextKey.html new file mode 100644 index 000000000..894faf8b2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/AttributedTextKey.html @@ -0,0 +1,711 @@ + + + + AttributedTextKey Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedTextKey

+
+
+ +
public protocol AttributedTextKey
+ +
+
+

Define AttributedText keys using this protocol. Keys must have an attribute name +and an associated type for the attribute.

+ +

After defining a key, enable dynamic member access to it by extending TextAttributeContainer +with a property for getting and setting setting the value. This property should generally be optional, +since the text may not have that property defined.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Value : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var name: NSAttributedString.Key { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/BlueprintViewMetricsDelegate.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/BlueprintViewMetricsDelegate.html new file mode 100644 index 000000000..12b357020 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/BlueprintViewMetricsDelegate.html @@ -0,0 +1,680 @@ + + + + BlueprintViewMetricsDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintViewMetricsDelegate

+
+
+ +
public protocol BlueprintViewMetricsDelegate : AnyObject
+ +
+
+

Provides performance information for blueprint layouts and updates.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedLayout.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedLayout.html new file mode 100644 index 000000000..4800bac7c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedLayout.html @@ -0,0 +1,1065 @@ + + + + CaffeinatedLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CaffeinatedLayout

+
+
+ +
public protocol CaffeinatedLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Subelements + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    typealias Subelements = LayoutSubelements
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Cache + +
    +
    +
    +
    +
    +
    +

    Cached values associated with the layout instance.

    + +

    If you create a cache for your custom layout, you can use a type alias to define this type +as your data storage type. Alternatively, you can refer to the data storage type directly in +all the places where you work with the cache.

    + +

    See makeCache(subelements:environment:) for more information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Cache = Void
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the size of the composite element, given a proposed size constraint and the +container’s subelements.

    + +

    Implement this method to tell your custom layout container’s parent how much space the +container needs for a set of subelements, given a size constraint. The parent might call +this method more than once during a layout pass with different proposed sizes to test the +flexibility of the container.

    + +

    In Blueprint, parents ultimately choose the size of their children, so the actual size that +this container is laid out in may not be a size that was returned from this method.

    +

    Sizing Rules

    + +

    For performance reasons, the layout engine may deduce the measurement of your container for +some constraint values without explicitly calling +sizeThatFits(proposal:subelements:environment:cache:). To ensure that the deduced value +is correct, your layout must follow some ground rules:

    + +
      +
    1. Given one fixed constraint axis, the element’s growth along the other axis should be +monotonic. That is, an element can grow when given a larger constraint, or shrink +when given a smaller constraint, but it should never shrink when given a larger +constraint. When growing on one axis, it is OK to shrink along the other axis, such as a +block of text that re-flows as the width changes.
    2. +
    3. For a constraint axis value a, if an element has a length b that is less than a on +that axis, then the element must return b for all constraint values between a and +b. In other words, growth must follow a stair-step pattern; elements that grow +continuously by calculating a fixed inset of the constraint or a percentage value of the +constraint are forbidden. For example, if an element returns 10 for a constraint of +20, then the element must return 10 for all values in the range [10, 20].
    4. +
    5. If your element has no intrinsic size along an axis, you can represent that in a couple +ways: + +
        +
      • You can return a fixed value representing the minimum size for your element. In this +approach, a containing element is usually responsible for stretching your element to +fill desired space.
      • +
      • You can return a size that entirely fills the constraint proposed. In this approach, +you must return .infinity when the constraint is +unconstrained. Otherwise, your behavior would be in violation +of rule #1.
      • +
    6. +
    + +

    If an element does not adhere to these rules, it may lay out in unexpected and unpredictable +ways.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sizeThatFits(
    +    proposal: SizeConstraint,
    +    subelements: Subelements,
    +    environment: Environment,
    +    cache: inout Cache
    +) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + proposal + + +
    +

    A size constraint for the container. The container’s parent element that calls +this method might call the method more than once with different constraints to learn +more about the container’s flexibility before choosing a size for placement.

    +
    +
    + + subelements + + +
    +

    A collection of proxies that represent the elements that the container +arranges. You can use the proxies in the collection to get information about the +subelements as you determine how much space the container needs to display them.

    +
    +
    + + environment + + +
    +

    The environment of the container. You can use properties from the +environment when calculating the size of this container, as long as you adhere to the +sizing rules.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelements:environment:) for details.

    +
    +
    +
    +
    +

    Return Value

    +

    A size that indicates how much space the container needs to arrange its +subelements.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns positions to each of the layout’s subelements.

    + +

    Blueprint calls your implementation of this method to tell your custom layout container to +place its subelements. From this method, call the +place(at:anchor:size:) method on each item in subelements to tell the +subelements where to appear in the user interface.

    + +

    You can also update the attributes property of each +subelement to set properties like opacity and transforms on each subelement.

    + +

    Be sure that you use computations during placement that are consistent with those in your +implementation of other protocol methods for a given set of inputs. For example, if you add +spacing during placement, make sure your implementation of +sizeThatFits(proposal:subelements:environment:cache:) accounts for the extra space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func placeSubelements(
    +    in size: CGSize,
    +    subelements: Subelements,
    +    environment: Environment,
    +    cache: inout Cache
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + size + + +
    +

    The region that the container’s parent allocates to the container. Place all the +container’s subelements within the region. The size of this region may not match any +size that was returned from a call to +sizeThatFits(proposal:subelements:environment:cache:).

    +
    +
    + + subelements + + +
    +

    A collection of proxies that represent the elements that the container +arranges. Use the proxies in the collection to get information about the subelements and +to tell the subelements where to appear.

    +
    +
    + + environment + + +
    +

    The environment of this container. You can use properties from the +environment to vary the placement of subelements.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelements:environment:) for details.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates and initializes a cache for a layout instance.

    + +

    You can optionally use a cache to preserve calculated values across calls to a layout +container’s methods. Many layout types don’t need a cache, because Blueprint automatically +caches the results of calls into layout methods, such as +sizeThatFits(_:). Rely on the protocol’s default implementation of this +method if you don’t need a cache.

    + +

    However you might find a cache useful when the layout container repeats complex intermediate +calculations across calls to sizeThatFits(proposal:subelements:environment:cache:) and +placeSubelements(in:subelements:environment:cache:). You might be able to improve +performance by calculating values once and storing them in a cache.

    +
    +

    Note

    + A cache’s lifetime is limited to a single render pass, so you cannot use it to store +values across multiple calls to placeSubelements(in:subelements:environment:cache:). A +render pass includes zero, one, or many calls to +sizeThatFits(proposal:subelements:environment:cache:), followed by a single call to +placeSubelements(in:subelements:environment:cache:). + +
    + +

    Only implement a cache if profiling shows that it improves performance.

    +

    Initializing a cache

    + +

    Implement the makeCache(subelements:) method to create a cache. You can add computed +values to the cache right away, using information from the subelements input parameter, or +you can do that later. The methods of the Layout protocol that can access the cache take +the cache as an in-out parameter, which enables you to modify the cache anywhere that you +can read it.

    + +

    You can use any storage type that makes sense for your layout algorithm, but be sure that +you only store data that you derive from the layout and its subelements (lazily, if +possible). For this to work correctly, Blueprint needs to be able to call this method to +recreate the cache without changing the layout result.

    + +

    When you return a cache from this method, you implicitly define a type for your cache. Be +sure to either make the type of the cache parameters on your other Layout protocol +methods match, or use a type alias to define the Cache associated type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeCache(subelements: Subelements, environment: Environment) -> Cache
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + subelements + + +
    +

    A collection of proxy instances that represent the subelements that +the container arranges. You can use the proxies in the collection to get information about +the subelements as you calculate values to store in the cache.

    +
    +
    + + environment + + +
    +

    The environment of this container.

    +
    +
    +
    +
    +

    Return Value

    +

    Storage for calculated data that you share among the methods of your custom +layout container.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedSingleChildLayout.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedSingleChildLayout.html new file mode 100644 index 000000000..7a69d9ae0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/CaffeinatedSingleChildLayout.html @@ -0,0 +1,1018 @@ + + + + CaffeinatedSingleChildLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CaffeinatedSingleChildLayout

+
+
+ +
public protocol CaffeinatedSingleChildLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Subelement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    typealias Subelement = LayoutSubelement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Cache + +
    +
    +
    +
    +
    +
    +

    Cached values associated with the layout instance.

    + +

    If you create a cache for your custom layout, you can use a type alias to define this type +as your data storage type. Alternatively, you can refer to the data storage type directly in +all the places where you work with the cache.

    + +

    See makeCache(subelement:environment:) for more information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Cache = Void
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the size of the element, given a proposed size constraint and the container’s +subelement.

    + +

    Implement this method to tell your custom layout container’s parent how much space the +container needs for a subelement, given a size constraint. The parent might call this method +more than once during a layout pass with different proposed sizes to test the flexibility of +the container.

    + +

    In Blueprint, parents ultimately choose the size of their children, so the actual size that +this container is laid out in may not be a size that was returned from this method.

    + +

    For more information, see +sizeThatFits(proposal:subelements:environment:cache:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sizeThatFits(
    +    proposal: SizeConstraint,
    +    subelement: Subelement,
    +    environment: Environment,
    +    cache: inout Cache
    +) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + proposal + + +
    +

    A size constraint for the container. The container’s parent element that calls +this method might call the method more than once with different constraints to learn +more about the container’s flexibility before choosing a size for placement.

    +
    +
    + + subelement + + +
    +

    A proxy that represents the element that the container arranges. You can use +the proxy to get information about the subelement as you determine how much space the +container needs to display it.

    +
    +
    + + environment + + +
    +

    The environment of the container. You can use properties from the +environment when calculating the size of this container, as long as you adhere to the +sizing rules.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelement:environment:) for details.

    +
    +
    +
    +
    +

    Return Value

    +

    A size that indicates how much space the container needs to arrange its +subelement.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns a position to the layout’s subelement.

    + +

    Blueprint calls your implementation of this method to tell your custom layout container to +place its subelement. From this method, call the place(at:anchor:size:) +method on subelement to tell the subelement where to appear in the user interface.

    + +

    You can also update the attributes property to set +properties like opacity and transforms on the subelement.

    + +

    Be sure that you use computations during placement that are consistent with those in your +implementation of other protocol methods for a given set of inputs. For example, if you add +spacing during placement, make sure your implementation of +sizeThatFits(proposal:subelement:environment:cache:) accounts for the extra space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func placeSubelement(
    +    in size: CGSize,
    +    subelement: Subelement,
    +    environment: Environment,
    +    cache: inout Cache
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + size + + +
    +

    The region that the container’s parent allocates to the container. Place the +container’s subelement within the region. The size of this region may not match any size +that was returned from a call to +sizeThatFits(proposal:subelement:environment:cache:).

    +
    +
    + + subelement + + +
    +

    A proxy that represents the element that the container arranges. Use the +proxy to get information about the subelement and to tell the subelement where to +appear.

    +
    +
    + + environment + + +
    +

    The environment of this container. You can use properties from the +environment to vary the placement of the subelement.

    +
    +
    + + cache + + +
    +

    Optional storage for calculated data that you can share among the methods of your +custom layout container. See makeCache(subelement:environment:) for details.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates and initializes a cache for a layout instance.

    + +

    You can optionally use a cache to preserve calculated values across calls to a layout +container’s methods. Many layout types don’t need a cache, because Blueprint automatically +caches the results of calls into layout methods, such as +sizeThatFits(_:). Rely on the protocol’s default implementation of this +method if you don’t need a cache.

    + +

    However you might find a cache useful when the layout container repeats complex intermediate +calculations across calls to sizeThatFits(proposal:subelement:environment:cache:) and +placeSubelement(in:subelement:environment:cache:). You might be able to improve +performance by calculating values once and storing them in a cache.

    +
    +

    Note

    + A cache’s lifetime is limited to a single render pass, so you cannot use it to store +values across multiple calls to placeSubelement(in:subelement:environment:cache:). A +render pass includes zero, one, or many calls to +sizeThatFits(proposal:subelement:environment:cache:), followed by a single call to +placeSubelement(in:subelement:environment:cache:). + +
    + +

    Only implement a cache if profiling shows that it improves performance.

    + +

    For more information, see makeCache(subelements:environment:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeCache(subelement: Subelement, environment: Environment) -> Cache
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + subelement + + +
    +

    A proxy that represent the subelement that the container arranges. +You can use the proxy to get information about the subelement as you calculate values to +store in the cache.

    +
    +
    + + environment + + +
    +

    The environment of this container.

    +
    +
    +
    +
    +

    Return Value

    +

    Storage for calculated data that you share among the methods of your custom +layout container.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Element.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Element.html new file mode 100644 index 000000000..923e29585 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Element.html @@ -0,0 +1,2992 @@ + + + + Element Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Element

+
+
+ +
public protocol Element
+ +
+
+

Conforming types represent a rectangular content area in a two-dimensional +layout space.

+ +
+ +

The ultimate purpose of an element is to provide visual content. This can be +done in two ways:

+ +
    +
  • By providing a view description (ViewDescription).

  • +
  • By providing child elements that will be displayed recursively within +the local coordinate space.

  • +
+ +
+ +

A custom element might look something like this:

+
struct MyElement: Element {
+
+    var backgroundColor: UIColor = .red
+
+    // Returns a single child element.
+    var content: ElementContent {
+        return ElementContent(child: Label(text: "😂"))
+    }
+
+    // Providing a view description means that this element will be
+    // backed by a UIView instance when displayed in a `BlueprintView`.
+    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription? {
+        return UIView.describe { config in
+            config.bind(backgroundColor, to: \.backgroundColor)
+        }
+    }
+
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    Returns the content of this element.

    + +

    Elements generally fall into two types:

    + +
      +
    • Leaf elements, or elements that have no children. These elements commonly have an intrinsic size, or some +content that can be measured. Leaf elements typically instantiate their content with +ElementContent(measurable:) or similar.
    • +
    • Container elements: these element have one or more children, which are arranged by a layout implementation. +Container elements typically use methods like ElementContent(layout:configure:) to instantiate +their content.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns an (optional) description of the view that should back this element.

    + +

    In Blueprint, elements that are displayed using a live UIView instance are referred to as “view-backed”. +Elements become view-backed by returning a ViewDescription value from this method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + context + + +
    +

    The context this element is rendered in.

    +
    +
    +
    +
    +

    Return Value

    +

    An optional ViewDescription.

    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(key:value:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given environment key and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment<Key>(key: Key.Type, value: Key.Value) -> Element where Key : EnvironmentKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(keyPath:value:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given keypath and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment<Value>(keyPath: WritableKeyPath<Environment, Value>, value: Value) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adaptedEnvironment(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps this element in an AdaptedEnvironment with the given configuration block.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func adaptedEnvironment(by environmentAdapter: @escaping (inout Environment) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aligned(vertically:horizontally:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Aligned element with the provided parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func aligned(
    +    vertically: Aligned.VerticalAlignment = .center,
    +    horizontally: Aligned.HorizontalAlignment = .center
    +) -> Aligned
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + vertically + + +
    +

    The vertical alignment. Defaults to .centered.

    +
    +
    + + horizontally + + +
    +

    The horizontal alignment. Defaults to .centered.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + centered() + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a Centered element to center it within its parent.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func centered() -> Centered
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

If / Else +

+
+
+
    +
  • +
    + + + + if(_:then:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided modify +closure, if the provided boolean is true. Otherwise, the original +element is returned.

    +
    myElement.if(someBoolean) { element in
    +    element.centered()
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`(
    +    _ isTrue: Bool,
    +    then: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + if(_:then:else:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided then +closure if the provided boolean is true. If the provided boolean +is false, the else closure is used

    +
    myElement.if(
    +    someBoolean,
    +    then: { element in
    +          element.aligned(horizontally: .trailing, vertically: .fill)
    +    },
    +    else: { element in
    +        element.aligned(horizontally: .leading, vertically: .fill)
    +    }
    +)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`(
    +    _ isTrue: Bool,
    +    then: (Self) -> Element,
    +    else: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

If Let +

+
+
+
    +
  • +
    + + + + if(let:then:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided modify +closure if the provided value is non-nil. Otherwise, the original +element is returned.

    +
    myElement.if(let: someValue) { value, element in
    +    element.inset(uniform: someValue.padding)
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`<Value>(
    +    `let` value: Value?,
    +    then: (Value, Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + if(let:then:else:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Returns a new element from the provided then +closure if the provided boolean is true. If the provided value +is nil, the else closure is used

    +
    myElement.if(
    +    let: someValue,
    +    then: { value, element in
    +          element.inset(uniform: value.padding)
    +    },
    +    else: { element in
    +        element.inset(uniform: 10)
    +    }
    +)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func `if`<Value>(
    +    `let` value: Value?,
    +    then: (Value, Self) -> Element,
    +    else: (Self) -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Map & Modify +

+
+
+
    +
  • +
    + + + + map(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Creates and returns a new element by passing the +element to the provided map function.

    +
    myElement.map { element in
    +    switch myState {
    +    case .small: element.inset(uniform: 5)
    +    case .medium: element.inset(uniform: 10)
    +    case .large: element.inset(uniform: 15)
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func map(_ map: (Self) -> Element) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + modify(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Creates and returns a new element by passing the +element to the provided modify function, which can edit it.

    +
    myElement.modify { element in
    +    switch myState {
    +    case .small: element.inset = 5
    +    case .medium: element.inset = 10
    +    case .large: element.inset = 15
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func modify(_ modify: (inout Self) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(aspectRatio:contentMode:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the element to the provided aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    aspectRatio: AspectRatio,
    +    contentMode: ConstrainedAspectRatio.ContentMode = .fitContent
    +) -> ConstrainedAspectRatio
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + aspectRatio + + +
    +

    The aspect ratio that the content size should match.

    +
    +
    + + contentMode + + +
    +

    How the content should size itself relative to its parent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(width:height:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    width: ConstrainedSize.Constraint = .unconstrained,
    +    height: ConstrainedSize.Constraint = .unconstrained
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(width:height:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    width: CGFloat,
    +    height: CGFloat
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedTo(size:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrainedTo(
    +    size: CGSize
    +) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrained(to:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Constrains the measured size of the element to the provided SizeConstraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func constrained(to sizeConstraint: SizeConstraint) -> ConstrainedSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decorate(layering:position:with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

    + +

    See the Decorate element for more.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decorate(
    +    layering: Decorate.Layering,
    +    position: Decorate.Position,
    +    with decoration: () -> Element
    +) -> Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flowChild(key:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a Flow.Child to allow customizing the item in the flow layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func flowChild(key: AnyHashable? = nil) -> Flow.Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + gridRowChild(key:width:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a GridRowChild in order to provide meta information that a GridRow can aply to its layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func gridRowChild(key: AnyHashable? = nil, width: GridRow.Width) -> GridRow.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A unique identifier for the child.

    +
    +
    + + width + + +
    +

    The sizing for the element.

    +
    +
    +
    +
    +

    Return Value

    +

    GridRowChild

    +
    +
    +
    +
  • +
  • +
    + + + + hidden(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally hide the wrapped element.

    + +

    Hidden elements still participate in layout. Hiding sets the UIView.isHidden property of the nearest backing view.

    +
    +

    Note

    + When an element is hidden, any elements within the wrapped element will be hidden. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hidden(_ hidden: Bool = true) -> Hidden
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(top:bottom:left:right:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(
    +    top: CGFloat = 0.0,
    +    bottom: CGFloat = 0.0,
    +    left: CGFloat = 0.0,
    +    right: CGFloat = 0.0
    +) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(by edgeInsets: UIEdgeInsets) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(uniform:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(uniform: CGFloat) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(horizontal:vertical:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Insets the element by the given amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(
    +    horizontal: CGFloat = 0.0,
    +    vertical: CGFloat = 0.0
    +) -> Inset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

    + +

    This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

    +

    Example

    + +

    Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

    +
    func imageElement() -> Element {
    +    if let photo = self.photo {
    +        return Image(image: photo)
    +                .transition(.fade)
    +                .keyed("photo")
    +    } else {
    +        return Image(image: self.placeholder)
    +                .transition(.fade)
    +                .keyed("placeholder")
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func keyed(_ key: AnyHashable) -> Keyed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element appears.

    + +

    Callbacks run in depth-first traversal order, with parents before children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onAppear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element disappears.

    + +

    Callbacks run in depth-first traversal order, with parents before children. There is no +guaranteed order between disappearance callbacks and backing views being removed from their +superviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onDisappear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Opacity element with the provided opacity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func opacity(_ opacity: CGFloat) -> Opacity
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + opacity + + +
    +

    The opacity to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + overlayChild(key:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func overlayChild(key: AnyHashable? = nil) -> Overlay.Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Result Builders +

+
+
+
    +
  • +
    + + + + stackLayoutChild(priority:alignmentGuide:key:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a StackLayout.Child in order to customize StackLayout.Traits and the key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func stackLayoutChild(
    +    priority: StackLayout.Child.Priority = .flexible,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil
    +) -> StackLayout.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + priority + + +
    +

    Controls the amount of extra space distributed to this child during underflow and overflow

    +
    +
    + + alignmentGuide + + +
    +

    Allows for custom alignment of a child along the cross axis.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy.

    +
    +
    +
    +
    +

    Return Value

    +

    A wrapper containing this element with additional layout information for the StackElement.

    +
    +
    +
    +
  • +
  • +
    + + + + stackLayoutChild(priority:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps an element with a StackLayout.Child in order to customize the StackLayout.Child.Priority.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func stackLayoutChild(
    +    priority: StackLayout.Child.Priority
    +) -> StackLayout.Child
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + priority + + +
    +

    Controls the amount of extra space distributed to this child during underflow and overflow

    +
    +
    +
    +
    +

    Return Value

    +

    A wrapper containing this element with additional layout information for the StackElement.

    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally modifies the tint adjustment mode of its wrapped element.

    +
    +

    Note

    + When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tintAdjustmentMode(_ tintAdjustmentMode: UIView.TintAdjustmentMode) -> TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transformed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element with the provided 3D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transformed(_ transform: CATransform3D) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + transform + + +
    +

    The 3D transform to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + transformed(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element with the provided 2D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transformed(_ transform: CGAffineTransform) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + transform + + +
    +

    The 2D transform to be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + translated(translateX:translateY:translateZ:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that translates the receiver in 3D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func translated(
    +    translateX: CGFloat = 0,
    +    translateY: CGFloat = 0,
    +    translateZ: CGFloat = 0
    +) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + transformX + + +
    +

    The X component of the translation.

    +
    +
    + + transformY + + +
    +

    The Y component of the translation.

    +
    +
    + + transformZ + + +
    +

    The Z component of the translation.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + rotated(by:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that rotates the receiver in 2D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func rotated(by rotationAngle: Measurement<UnitAngle>) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + rotate + + +
    +

    The angle measurement to rotate the receiver by.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + scaled(scaleX:scaleY:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in an Transformed element that scales the receiver in 2D space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scaled(
    +    scaleX: CGFloat = 1,
    +    scaleY: CGFloat = 1
    +) -> Transformed
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + scaleX + + +
    +

    The X axis scale.

    +
    +
    + + scaleY + + +
    +

    The Y axis scale.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + userInteractionEnabled(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Conditionally enable user interaction of the wrapped element.

    +
    +

    Note

    + When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func userInteractionEnabled(_ enabled: Bool = true) -> UserInteractionEnabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + blockAccessibility(isBlocking:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func blockAccessibility(isBlocking: Bool = true) -> AccessibilityBlocker
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityContainer(identifier:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Acts as an accessibility container for any subviews +where isAccessibilityElement == true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityContainer(identifier: String? = nil) -> Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the receiver in an accessibility element with the provided values.

    + +

    Providing a nil value for any of these parameters will result in no resolved value for that accessibility +parameter—it does not inherit parameters from the wrapped element’s accessibility configuration.

    +
    +

    Important

    + ⚠️ This overrides the accessibility of the contained element and all of its children ⚠️ + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityElement(
    +    label: String?,
    +    value: String?,
    +    traits: Set<AccessibilityElement.Trait>,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    accessibilityFrameSize: CGSize? = nil,
    +    accessibilityFrameCornerStyle: Box.CornerStyle = .square,
    +    customActions: [AccessibilityElement.CustomAction] = [],
    +    customContent: [AccessibilityElement.CustomContent] = []
    +) -> AccessibilityElement
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the receiver in an accessibility element with the provided values.

    +
    +

    Important

    +

    ⚠️ This overrides the accessibility of the contained element and all of its children ⚠️

    + +
    +

    See also

    +

    accessibilityElement

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "accessibilityElement(label:value:traits:hint:identifier:accessibilityFrameSize:﹚")
    +public func accessibility(
    +    label: String? = nil,
    +    value: String? = nil,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    traits: Set<AccessibilityElement.Trait> = [],
    +    accessibilityFrameSize: CGSize? = nil
    +) -> AccessibilityElement
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Trigger +

+
+
+
    +
  • +
    + + + + accessibilityFocus(on:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Enables VoiceOver focus to jump to the wrapped element via the trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func accessibilityFocus(
    +    on trigger: AccessibilityFocus.Trigger
    +) -> Element
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + on + + +
    +

    A reference-type trigger object that can be used to trigger accessibility focus via the focus() function.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

View implementation +

+
+
+
    +
  • +
    + + + + onLinkTapped(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Handle links opened in any AttributedLabel within this element using the provided closure.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onLinkTapped(_ onTap: @escaping (URL) -> Void) -> Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps the element in a box to provide basic styling.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func box(
    +    background: UIColor = .clear,
    +    corners: Box.CornerStyle = .square,
    +    cornerCurve: Box.CornerCurve = .circular,
    +    borders: Box.BorderStyle = .none,
    +    shadow: Box.ShadowStyle = .none,
    +    clipsContent: Bool = false
    +) -> Box
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + editingMenu(show:with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Allows showing the system’s UIMenuController editing menu upon long press of the wrapped element.

    +
    myElement.editingMenu(show: .onLongPress) {
    +    EditingMenuItem.copying("A String")
    +
    +    EditingMenuItem(.select) {
    +        print("Selected!")
    +    }
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func editingMenu(
    +    show gesture: EditingMenu.Gesture,
    +    @Builder<EditingMenuItem> with items: () -> [EditingMenuItem]
    +) -> EditingMenu
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scrollable(_:configure:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a ScrollView to allow it to be scrolled +if it takes up more space then is available on screen.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scrollable(
    +    _ contentSize: ScrollView.ContentSize = .fittingHeight,
    +    configure: (inout ScrollView) -> Void = { _ in }
    +) -> ScrollView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tappable(onTap:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element and calls the provided closure when tapped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tappable(onTap: @escaping () -> Void) -> Tappable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transition(onAppear:onDisappear:onLayout:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a transition container to provide an animated transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(
    +    onAppear: VisibilityTransition? = nil,
    +    onDisappear: VisibilityTransition? = nil,
    +    onLayout: LayoutTransition = .inherited
    +) -> TransitionContainer
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + onAppear + + +
    +

    The transition to use when the element appears. By default, no transition.

    +
    +
    + + onDisappear + + +
    +

    The transition to use when the element disappears. By default, no transition.

    +
    +
    + + onLayout + + +
    +

    The transition to use when the element’s layout changes. The default value is +.inherited, which means the element will participate in the same transition as its +nearest ancestor with a specified transition.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + transition(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Wraps the element in a transition container to provide an animated transition when its visibility changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(_ onAppearOrDisappear: VisibilityTransition) -> TransitionContainer
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + onAppearOrDisappear + + +
    +

    The transition to use when the element appears or disappears.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ElementBuilderChild.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ElementBuilderChild.html new file mode 100644 index 000000000..4b405ac59 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ElementBuilderChild.html @@ -0,0 +1,681 @@ + + + + ElementBuilderChild Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementBuilderChild

+
+
+ +
public protocol ElementBuilderChild
+ +
+
+

Defines a way for anElement to be implicitly converted into the conforming type (the child of a container). +In practice, this allows us to pass an Element directly into the result builder without manually converting to Child (i.e. Converting Element -> StackLayout.Child.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/EnvironmentKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/EnvironmentKey.html new file mode 100644 index 000000000..9552545d2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/EnvironmentKey.html @@ -0,0 +1,728 @@ + + + + EnvironmentKey Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EnvironmentKey

+
+
+ +
public protocol EnvironmentKey
+ +
+
+

Types conforming to this protocol can be used as keys in an Environment.

+ +

Using a type as the key allows us to strongly type each value, with the +key’s EnvironmentKey.Value associated value.

+

Example

+ +

Usually a key is implemented with an uninhabited type, such an empty enum.

+
enum WidgetCountKey: EnvironmentKey {
+    static let defaultValue: Int = 0
+}
+
+ +

You can write a small extension on Environment to make it easier to use your key.

+
extension Environment {
+    var widgetCount: Int {
+        get { self[WidgetCountKey.self] }
+        set { self[WidgetCountKey.self] = newValue }
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Value + +
    +
    +
    +
    +
    +
    +

    The type of value stored by this key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Value
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + defaultValue + +
    +
    +
    +
    +
    +
    +

    The default value that will be vended by an Environment for this key if no other value +has been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var defaultValue: Self.Value { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacyLayout.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacyLayout.html new file mode 100644 index 000000000..4c6b25651 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacyLayout.html @@ -0,0 +1,834 @@ + + + + LegacyLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LegacyLayout

+
+
+ +
public protocol LegacyLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    +

    Per-item metadata that is used during the measuring and layout pass.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Traits = ()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:items:) + +
    +
    +
    +
    +
    +
    +

    Computes the size that this layout requires in a layout, given an array of children and +accompanying layout traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint, items: [(traits: Self.Traits, content: Measurable)]) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint in which measuring should occur.

    +
    +
    + + items + + +
    +

    An array of ‘items’, pairs consisting of a traits object and a +Measurable value.

    +
    +
    +
    +
    +

    Return Value

    +

    The measured size for the given array of items.

    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:items:) + +
    +
    +
    +
    +
    +
    +

    Generates layout attributes for the given items.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func layout(size: CGSize, items: [(traits: Self.Traits, content: Measurable)]) -> [LayoutAttributes]
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + size + + +
    +

    The size that layout attributes should be generated within.

    +
    +
    + + items + + +
    +

    An array of ‘items’, pairs consisting of a traits object and a +Measurable value.

    +
    +
    +
    +
    +

    Return Value

    +

    Layout attributes for the given array of items.

    +
    +
    +
    +
  • +
  • +
    + + + + defaultTraits + +
    +
    +
    +
    +
    +
    +

    Returns a default traits object.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var defaultTraits: Self.Traits { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacySingleChildLayout.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacySingleChildLayout.html new file mode 100644 index 000000000..a463b850c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/LegacySingleChildLayout.html @@ -0,0 +1,777 @@ + + + + LegacySingleChildLayout Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LegacySingleChildLayout

+
+
+ +
public protocol LegacySingleChildLayout
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + measure(in:child:) + +
    +
    +
    +
    +
    +
    +

    Computes the size that this layout requires

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint, child: Measurable) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint in which measuring should occur.

    +
    +
    + + child + + +
    +

    A Measurable representing the single child of this layout.

    +
    +
    +
    +
    +

    Return Value

    +

    The measured size.

    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:child:) + +
    +
    +
    +
    +
    +
    +

    Generates layout attributes for the child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func layout(size: CGSize, child: Measurable) -> LayoutAttributes
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + size + + +
    +

    The size that layout attributes should be generated within.

    +
    +
    + + child + + +
    +

    A Measurable representing the single child of this layout.

    +
    +
    +
    +
    +

    Return Value

    +

    Layout attributes for the child of this layout.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Measurable.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Measurable.html new file mode 100644 index 000000000..93357c8d3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/Measurable.html @@ -0,0 +1,704 @@ + + + + Measurable Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Measurable

+
+
+ +
public protocol Measurable
+ +
+
+

Conforming types can calculate the size that they require within a layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + measure(in:) + +
    +
    +
    +
    +
    +
    +

    Measures the required size of the receiver.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func measure(in constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + constraint + + +
    +

    The size constraint.

    +
    +
    +
    +
    +

    Return Value

    +

    The layout size needed by the receiver.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/NativeView.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/NativeView.html new file mode 100644 index 000000000..8abb95631 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/NativeView.html @@ -0,0 +1,722 @@ + + + + NativeView Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

NativeView

+
+
+ +
public protocol NativeView
+ +
+
+

Marker protocol used by generic extensions to native views (e.g. UIView).

+ +
+
+ +
+
+
+
+ + +
+ +

Available where Self: UIView +

+
+
+
    +
  • +
    + + + + describe(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the receiving class. +Example:

    +
    let viewDescription = UILabel.describe { config in
    +    config[\.text] = "Hello, world"
    +    config[\.textColor] = UIColor.orange
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func describe(_ configuring: (inout ViewDescription.Configuration<Self>) -> Void) -> ViewDescription
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + configuring + + +
    +

    A closure that is responsible for populating a configuration object.

    +
    +
    +
    +
    +

    Return Value

    +

    The resulting view description.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ProxyElement.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ProxyElement.html new file mode 100644 index 000000000..dcb10963d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/ProxyElement.html @@ -0,0 +1,744 @@ + + + + ProxyElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ProxyElement

+
+
+ +
public protocol ProxyElement : Element
+ +
+
+

Custom elements commonly use another element to actually display content. For example, a profile element might +display an image and a few labels inside a Column element. The ProxyElement protocol is provided to make that +task easier.

+ +

Conforming types only need to implement elementRepresentation in order to generate an element that will be +displayed.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/StackElement.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/StackElement.html new file mode 100644 index 000000000..8d176e8c6 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/StackElement.html @@ -0,0 +1,1098 @@ + + + + StackElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

StackElement

+
+
+ +
public protocol StackElement : Element
+ +
+
+

Conforming types (Row and Column) act as StackLayout powered containers.

+ +

This protocol should only be used by Row and Column elements (you should never add conformance to other custom +types).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)] { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + backingViewDescription(with:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ configure: (inout Self) -> Void)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds a given child element to the stack.

    + +
      +
    • Tag: StackElement.add

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    growPriority: CGFloat = 1.0,
    +    shrinkPriority: CGFloat = 1.0,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + growPriority + + +
    +

    +
    +
    + + shrinkPriority + + +
    +

    +
    +
    + + alignmentGuide + + +
    +

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addFixed(alignmentGuide:key:child:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Convenience method for adding a child with a grow and shrink priority of 0.0.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func addFixed(
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignmentGuide + + +
    +

    A closure that can be used to provide a custom alignment guide for this +child.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addFlexible(alignmentGuide:key:child:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Convenience method for adding a child with a grow and shrink priority of 1.0.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func addFlexible(
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignmentGuide + + +
    +

    A closure that can be used to provide a custom alignment guide for this +child.

    +
    +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add to this stack

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/UIViewElement.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/UIViewElement.html new file mode 100644 index 000000000..c05bb3729 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/UIViewElement.html @@ -0,0 +1,893 @@ + + + + UIViewElement Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIViewElement

+
+
+ +
public protocol UIViewElement : Element
+ +
+
+

An element type which makes it easier to wrap an existing UIView instance that +provides its own sizing via sizeThatFits. An instance of the view is used for +sizing and measurement, so that you do not need to re-implement your own measurement.

+

Note

+ +

The sizing and measurement prototype view is kept alive for the lifetime of the containing application. +Do not pass anything to the initializer of this type that you expect to be quickly released.

+

Example

+ +

If you were implementing a very basic Switch element, your implementation would look something +like this:

+
struct Switch : UIViewElement
+{
+    var isOn : Bool
+
+    typealias UIViewType = UISwitch
+
+    func makeUIView() -> UISwitch {
+        UISwitch()
+    }
+
+    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
+        view.isOn = self.isOn
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + UIViewType + +
    +
    +
    +
    +
    +
    +

    The type of the view associated with the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype UIViewType : UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + makeUIView() + +
    +
    +
    +
    +
    +
    +

    Create and return a new instance of the provided view type.

    +

    Note

    + +

    Ensure that you do not pass any values to the initializer of your view type +that you cannot also update in updateUIView(_:), as view instances +are reused for sizing and measurement.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func makeUIView() -> UIViewType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateUIView(_:with:) + +
    +
    +
    +
    +
    +
    +

    Update the view instance with the content from the element. The context provides additional +information, such as whether the update is for the measuring instance.

    +

    Example

    + +

    If you were to implement a simple UIViewElement which wraps a UISwitch, +your update method would look like this:

    +
    func updateUIView(_ view: UISwitch, with context: UIViewElementContext) {
    +   view.isOn = self.isOn
    +}
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func updateUIView(_ view: UIViewType, with context: UIViewElementContext)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + size(_:thatFits:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Returns the sizing measurement for the element for the provided +measurement view.

    + +

    You usually do not need to implement this method – the default implementation of +this method simply calls sizeThatFits(_:) on the provided view.

    + +

    The view is fully configured and updated before this method is called – you do not need to +update it in any way.

    +

    When To Override

    + +

    You may want to override this method if you need to mutate the value returned from sizeThatFits(_:), +or if you want to use some other sizing method like systemLayoutSizeFitting(...).

    + +
    +

    Default Implementation

    +
    +

    The default implementation simply forwards to sizeThatFits(_:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func size(_ size: CGSize, thatFits view: UIViewType) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Defer to the reused measurement view to provide the size of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + backingViewDescription(with:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Provide the view for the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/URLHandler.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/URLHandler.html new file mode 100644 index 000000000..890115b4c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Protocols/URLHandler.html @@ -0,0 +1,683 @@ + + + + URLHandler Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

URLHandler

+
+
+ +
public protocol URLHandler
+ +
+
+

Conform to this protocol to handle links tapped in an AttributedLabel.

+ +

Use the URLHandlerEnvironmentKey or Environment.urlHandler property to override +the link handler in the environment.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + onTap(url:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func onTap(url: URL)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 000000000..cb2ac6d83 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,2075 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + AttributedText + +
    +
    +
    +
    +
    +
    +

    AttributedText allows you to apply strongly-typed attributes to strings (much like the AttributedString type +introduced in iOS 15). You can then access the attributedString property to get an attributed string with those +attributes applied.

    + +

    For example:

    +
    var text = AttributedText(string: "Hello, world")
    +// Apply a font to the entire range
    +text.font = .systemFont(ofSize: 20)
    +
    +// Apply a color to part of the string
    +let range = text.string.range(of: "world")!
    +text[range].color = .blue
    +
    +// Render the attributed text
    +let label = AttributedLabel(attributedText: text.attributedString)
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @dynamicMemberLookup
    +public struct AttributedText
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct BlueprintViewRenderMetrics
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The context passing to the backingViewDescription of an Element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ViewDescriptionContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UIViewElementContext + +
    +
    +
    +
    +
    +
    +

    Context object passed into updateUIView.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UIViewElementContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FocusBinding + +
    +
    +
    +
    +
    +
    +

    A two-way binding between a focusable element’s backing view and a FocusState-wrapped +property.

    + +

    Generally you should not need to interact with this type directly. However, you can use focus +bindings to add focus support to custom elements.

    +

    Adding Focus Bindings

    + +

    On a FocusState, call the binding(for:) method to get a binding bound to an optional value, +or binding() to get a binding bound to a boolean.

    + +

    To set up the 2-way binding, there are 2 steps:

    + +
      +
    1. Assign actions to the nested FocusTrigger, so that your backing view is updated when the +FocusState‘s value changes.

    2. +
    3. Call the onFocus and onBlur callbacks when your backing view gains or loses focus, so +that the value of the bound FocusState is updated.

    4. +
    +

    Example

    +
    final class FocusableView: UIView {
    +    var focusBinding: FocusBinding? {
    +        didSet {
    +            oldValue?.trigger.focusAction = nil
    +            oldValue?.trigger.blurAction = nil
    +
    +            guard let focusBinding = focusBinding else { return }
    +
    +            focusBinding.trigger.focusAction = { [weak self] in
    +                self?.becomeFirstResponder()
    +            }
    +            focusBinding.trigger.blurAction = { [weak self] in
    +                self?.resignFirstResponder()
    +            }
    +
    +            if isFirstResponder {
    +                focusBinding.onFocus()
    +            } else {
    +                focusBinding.onBlur()
    +            }
    +        }
    +    }
    +
    +    @discardableResult
    +    override func becomeFirstResponder() -> Bool {
    +        let focused = super.becomeFirstResponder()
    +        if focused {
    +            focusBinding?.onFocus()
    +        }
    +        return focused
    +    }
    +
    +    @discardableResult
    +    override func resignFirstResponder() -> Bool {
    +        let blurred = super.resignFirstResponder()
    +        if blurred {
    +            focusBinding?.onBlur()
    +        }
    +        return blurred
    +    }
    +}
    +
    + +
      +
    • Tag: FocusBinding
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct FocusBinding
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FocusState + +
    +
    +
    +
    +
    +
    +

    A property wrapper type that can read and write a value that represents the placement of focus.

    + +

    Use this property wrapper in conjunction with modifiers on elements that support focus, such as +TextField.focused(when:equals:) and TextField.focused(when:), to describe when those elements +should have focus. When focus enters the modified element, the wrapped value of this property +updates to match a given value. Similarly, when focus leaves, the wrapped value of this property +resets to nil or false. Setting this property’s value programmatically has the reverse +effect, causing focus to move to the element associated with the updated value.

    + +

    In the following example of a simple login screen, when the user presses the Sign In button and +one of the fields is still empty, focus moves to that field. Otherwise, the sign-in process +proceeds.

    +
    struct LoginForm: ProxyElement {
    +    enum Field: Hashable {
    +        case username
    +        case password
    +    }
    +
    +    var username: String
    +    var password: String
    +    var handleLogin: () -> Void
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .username)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .password)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            focusedField = .username
    +                        } else if password.isEmpty {
    +                            focusedField = .password
    +                        } else {
    +                            handleLogin()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Sign In")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To allow for cases where focus is completely absent from a view tree, the wrapped value must be +either an optional or a Boolean. Set the focus binding to false or nil as appropriate to +remove focus from all bound fields. You can also use this to remove focus from a TextField +and thereby dismiss the keyboard.

    +

    Auto-Focus

    + +

    To auto-focus a field when it appears, set the value in an onAppear hook.

    +
    struct Example: ProxyElement {
    +    @FocusState var isFocused: Bool
    +
    +    var elementRepresentation: Element {
    +        TextField(text: "")
    +            .focused(when: $isFocused)
    +            .onAppear {
    +                isFocused = true
    +            }
    +    }
    +}
    +
    +

    Avoid Ambiguous Focus Bindings

    + +

    A TextField can have only one focus binding, stored in its focusBinding property. If you apply +the focused modifier multiple times, the last one will overwrite the previous value.

    + +

    On the other hand, binding the same value to two views is ambiguous. In the following example, +two separate fields bind focus to the name value:

    +
    struct Content: ProxyElement {
    +    enum Field: Hashable {
    +        case name
    +        case fullName
    +    }
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .name)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .name) // incorrect re-use of .name
    +            )
    +        }
    +    }
    +}
    +
    + +

    If the user moves focus to either field, the focusedField binding updates to name. However, +if the app programmatically sets the value to name, the last field bound will be chosen.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @propertyWrapper
    +public struct FocusState<Value> where Value : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    +

    An alignment in both axes.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Alignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + HorizontalAlignment + +
    +
    +
    +
    +
    +
    +

    An alignment position along the horizontal axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct HorizontalAlignment : Equatable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VerticalAlignment + +
    +
    +
    +
    +
    +
    +

    An alignment position along the vertical axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct VerticalAlignment : Equatable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AspectRatio + +
    +
    +
    +
    +
    +
    +

    Represents an a proportional relationship between width and height.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    Generic result builder for converting blocks of Child... into [Child].

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @resultBuilder
    +public struct Builder<Child>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Decorate + +
    +
    +
    +
    +
    +
    +

    Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

    + +

    The size and position of the element is determined only by the wrapped +element, the decoration element does not affect the layout at all.

    +

    Example

    + +

    The arrows represent the measured size of the element for layout purposes.

    +
    ┌───────────────────┐     ┌──────┐
    +    Decoration                
    + ┏━━━━━━━━━━━━━━━┓           ┣━━━━━━━━━━┓   
    +                     └─┳────┘             
    +     Wrapped               Wrapped       
    +                                         
    + ┗━━━━━━━━━━━━━━━┛       ┗━━━━━━━━━━━━━━━┛   
    +└───────────────────┘
    +  ◀───────────────▶         ◀───────────────▶
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Decorate : ProxyElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ElementDimensions + +
    +
    +
    +
    +
    +
    +

    An element’s size and its alignment guides in its own coordinate space.

    + +

    You can access the size of the element through the width and height properties. You can +access alignment guide values by subscripting with the specific alignment.

    + +

    These dimensions are typically used when setting an alignment guide on a stack, with +StackElement.add(...).

    +

    Example

    +
    // get the alignment guide value for `VerticalAlignment.center`, falling back to the default
    +// value if no alignment guide has been set
    +dimensions[VerticalAlignment.center]
    +
    +// get the alignment guide value for `HorizontalAlignment.trailing`, or `nil` if none has been
    +// set.
    +dimensions[explicit: .trailing]
    +
    +

    See Also

    + +

    StackElement.add()

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ElementDimensions : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Flow + +
    +
    +
    +
    +
    +
    +

    Element which lays out children horizontally, wrapping to another row when there is not enough space.

    + +

    You may control the layout of each row within the flow layout, by providing a LineAlignment, +which controls the horizontal alignment of content within a row when it is smaller than its container, +and via ItemAlignment, which controls the vertical alignment of shorter elements within a row.

    +
    Flow(itemSpacing: 10, lineSpacing: 10) {
    +    OnboardingPill("Food / drink")
    +    OnboardingPill("Retail goods").flowChild(key: "aKey")
    +    OnboardingPill("Grocery / gourmet / alcohol")
    +    OnboardingPill("Beauty / wellness bookings")
    +    OnboardingPill("Healthcare services")
    +    OnboardingPill("Something else")
    +}
    +
    + +

    Below is a diagram showing a simple example of a Flow layout.

    +
    ┌─────────────────────────────────────┐
    + ┌─────────┐┌─────────┐┌────────────┐│
    +     1    ││    2    ││     3      ││
    + └─────────┘└─────────┘└────────────┘│
    + ┌───────┐┌─────┐┌───────────┐       
    +    4   ││  5  ││     6            
    + └───────┘└─────┘└───────────┘       
    +└─────────────────────────────────────┘
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Flow : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GeometryProxy + +
    +
    +
    +
    +
    +
    +

    Contains information about the current layout being measured by GeometryReader

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GeometryProxy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + GridRow + +
    +
    +
    +
    +
    +
    +

    Like Row, GridRow displays a list of items in a linear horizontal layout. Unlike Row, GridRow provides +convenience for describing columnar layout.

    + +

    Horizontally, GridRow children are stretched to fill the available space. Vertically, children are aligned +according to the verticalAlignment property.

    + +

    Children may be sized proportionally or absolutely. Proportionally-sized children are granted a proportion of +the total layout space after absolutely-sized children and margins have been subtracted.

    +

    Example:

    +
    GridRow { row in
    +  row.verticalAlignment = .fill
    +  row.spacing = 8.0
    +  row.add(width: .proportional(0.75), child: name)
    +  row.add(width: .proportional(0.25), child: number)
    +  row.add(width: .absolute(100), child: status)
    +}
    +
    +

    Expected layout:

    +
    ┌────────────────────────────┬─┬────────┬─┬──────────────────┐
    +            name              number        status      
    +            (75%)           8  (25%) 8     (100 pts)    
    +                                                        
    +●──────────── 150 ───────────● ●── 50 ──● ●─────── 100 ──────●
    +└────────────────────────────┴─┴────────┴─┴──────────────────┘
    +●──────────────────────────── 316 ───────────────────────────●
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GridRow : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Hidden + +
    +
    +
    +
    +
    +
    +

    Hidden conditionally hides its wrapped element.

    +
    +

    Note

    + When an element is hidden, any elements within the wrapped element will be hidden. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Hidden : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Keyed + +
    +
    +
    +
    +
    +
    +

    Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

    + +

    This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

    +

    Example

    + +

    Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

    +
    func imageElement() -> Element {
    +    if let photo = self.photo {
    +        return Image(image: photo)
    +                .transition(.fade)
    +                .keyed("photo")
    +    } else {
    +        return Image(image: self.placeholder)
    +                .transition(.fade)
    +                .keyed("placeholder")
    +    }
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Keyed : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutAttributes + +
    +
    +
    +
    +
    +
    +

    Contains layout-related metrics for an element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutAttributes
    +
    extension LayoutAttributes: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutOptions + +
    +
    +
    +
    +
    +
    +

    Configuration options for caffeinated.

    + +

    Generally these are only useful for experimenting with the performance profile of different +element compositions, and you should stick with default.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutOptions : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutSubelement + +
    +
    +
    +
    +
    +
    +

    A proxy that represents one child element of a layout.

    + +

    This type acts as a proxy for a child element in a Layout. Layout protocol methods receive a +LayoutSubelements collection that contains exactly one proxy for each of the child elements +managed by the layout.

    + +

    Use this proxy to get information about the associated element, like its size and traits. You +should also use the proxy to tell its corresponding element where to appear by calling the +proxy’s place(at:anchor:size:) method. Do this once for each subview from your +implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

    +
    +

    Note

    + The LayoutSubelement API, and its documentation, are modeled after SwiftUI’s +LayoutSubview, with major +differences noted. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutSubelement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutWriter + +
    +
    +
    +
    +
    +
    +

    A parent element which allows arbitrary, custom layout and positioning of its children.

    + +

    Instead of creating a custom Element with a custom Layout, you might use +this element to create a customized layout in a more lightweight way.

    +
    LayoutWriter { context, layout in
    +    layout.add(with: myFrame, child: myElement)
    +    layout.add(with: myOtherFrame, child: myOtherElement)
    +
    +    layout.sizing = .unionOfChildren
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LayoutWriter : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LifecycleObserver + +
    +
    +
    +
    +
    +
    +

    Allows element lifecycle callbacks to be inserted anywhere into the element tree.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LifecycleObserver : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Opacity + +
    +
    +
    +
    +
    +
    +

    Changes the opacity of the wrapped element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Opacity : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StackLayout + +
    +
    +
    +
    +
    +
    +

    A layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct StackLayout : Layout
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    TintAdjustmentMode conditionally modifies the tint adjustment mode of its wrapped element.

    +
    +

    Note

    + When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TintAdjustmentMode : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Transformed + +
    +
    +
    +
    +
    +
    +

    Changes the transform of the wrapped element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Transformed : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UnitPoint + +
    +
    +
    +
    +
    +
    +

    A normalized point in an element’s coordinate space.

    + +

    Use a unit point to represent a location in an element without having to know the element’s +rendered size. The point stores a value in each dimension that indicates the fraction of the +element’s size in that dimension — measured from the element’s origin — where the point appears. +For example, you can create a unit point that represents the center of any element by using the +value 0.5 for each dimension:

    +
    let unitPoint = UnitPoint(x: 0.5, y: 0.5)
    +
    + +

    To project the unit point into the rendered element’s coordinate space, multiply each component +of the unit point with the corresponding component of the element’s size:

    +
    let projectedPoint = CGPoint(
    +    x: unitPoint.x * size.width,
    +    y: unitPoint.y * size.height
    +)
    +
    + +

    You can perform this calculation yourself if you happen to know an element’s size, but Blueprint +typically does this for you to carry out operations that you request, like when you place a +subelement in a custom layout.

    + +

    You can create custom unit points with explicit values, like the example above, or you can use +one of the built-in unit points, like zero, center, or topTrailing. The built-in +values correspond to the alignment positions of the similarly named, built-in Alignment +types.

    +
    +

    Note

    + A unit point with one or more components outside the range [0, 1] projects to a point +outside of the element. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UnitPoint : Hashable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    UserInteractionEnabled conditionally enables user interaction of its wrapped element.

    +
    +

    Note

    + When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct UserInteractionEnabled : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SizeConstraint + +
    +
    +
    +
    +
    +
    +

    Defines the maximum size for a measurement.

    + +

    Currently this constraint type can only handles layout where +the primary (breaking) axis is horizontal (row in CSS-speak).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct SizeConstraint : Hashable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AnimationAttributes + +
    +
    +
    +
    +
    +
    +

    UIView animation configuration values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AnimationAttributes
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AccessibilityFocus + +
    +
    +
    +
    +
    +
    +

    Enables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AccessibilityFocus : Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct URLHandlerEnvironmentKey : EnvironmentKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditingMenu + +
    +
    +
    +
    +
    +
    +

    Allows showing the system’s UIMenuController editing menu.

    + +

    You can show the menu upon tap or long press:

    +
    myElement.editingMenu(show: .onLongPress) {
    +    EditingMenuItem.copying("A String")
    +
    +    EditingMenuItem(.select) {
    +        print("Selected!")
    +    }
    +}
    +
    + +

    You can also show the menu as a result of another element’s onTap closure, +using the trigger-based API:

    +
    EditingMenu { menu in
    +    MyRow(text: "Hello, World") {
    +        menu.show()
    +    }
    +} items: {
    +    EditingMenuItem.copying("A String")
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditingMenu : Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EditingMenuItem + +
    +
    +
    +
    +
    +
    +

    A single item in an editing menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TextShadow + +
    +
    +
    +
    +
    +
    +

    Describes a shadow that can be applied to text elements, like Label.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TextShadow : Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityBlocker.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityBlocker.html new file mode 100644 index 000000000..84d45744d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityBlocker.html @@ -0,0 +1,805 @@ + + + + AccessibilityBlocker Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityBlocker

+
+
+ +
public struct AccessibilityBlocker : Element
+ +
+
+

Blocks all accessibility on the element, so that it is +is no longer an accessibility element, and its children are +hidden from the accessibility system.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element whose accessibility information will be blocked.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isBlocking + +
    +
    +
    +
    +
    +
    +

    If the AccessibilityBlocker is currently blocking accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isBlocking: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityBlocker wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    isBlocking: Bool = true,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityContainer.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityContainer.html new file mode 100644 index 000000000..8c721ade4 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityContainer.html @@ -0,0 +1,812 @@ + + + + AccessibilityContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityContainer

+
+
+ +
public struct AccessibilityContainer : Element
+ +
+
+

Acts as an accessibility container for any accessible subviews.

+ +

Accessible subviews are found using the following algorithm:

+ +

Recurse subviews until a view is found that either

+ +
    +
  • hasisAccessibilityElement set to true or
  • +
+ +

If an accessibility element is found, we add it to the accessibilityElements +and terminate the search down that branch. If a container is found, +the elements returned from the container are added to the accessibilityElements +and the search down that branch is also terminated.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    +

    An optional accessibilityIdentifier to give the container. Defaults to nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityContainer wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(identifier: String? = nil, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement.html new file mode 100644 index 000000000..2beb14905 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement.html @@ -0,0 +1,1116 @@ + + + + AccessibilityElement Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityElement

+
+
+ +
public struct AccessibilityElement : Element
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + label + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var label: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hint + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var hint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var traits: Set<Trait>
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityFrameSize: CGSize?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityFrameCornerStyle: Box.CornerStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityActivate + +
    +
    +
    +
    +
    +
    +

    Used to provide custom behaviour when activated by voiceover. This will override the default behavior of issuing a tap event at the accessibility activation point. +See Accessibility Activate Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityActivate: (() -> Bool)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customActions + +
    +
    +
    +
    +
    +
    +

    An array containing one or more CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customActions: [CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customContent + +
    +
    +
    +
    +
    +
    +

    An array containing one or more CustomContents, defining additional content associated with the element. Assistive technologies, such as VoiceOver, will announce your custom content to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customContent: [CustomContent]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    label: String?,
    +    value: String?,
    +    traits: Set<AccessibilityElement.Trait>,
    +    hint: String? = nil,
    +    identifier: String? = nil,
    +    accessibilityFrameSize: CGSize? = nil,
    +    accessibilityFrameCornerStyle: Box.CornerStyle = .square,
    +    customActions: [AccessibilityElement.CustomAction] = [],
    +    customContent: [AccessibilityElement.CustomContent] = [],
    +    wrapping element: Element,
    +    configure: (inout Self) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Trait + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Trait
    +
    extension AccessibilityElement.Trait: Hashable, Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CustomAction + +
    +
    +
    +
    +
    +
    +

    Used to provide additional functionality to assistive technologies beyond your accessible UI.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CustomAction : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CustomContent + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct CustomContent
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomAction.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomAction.html new file mode 100644 index 000000000..ce2678a84 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomAction.html @@ -0,0 +1,839 @@ + + + + CustomAction Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CustomAction

+
+
+ +
public struct CustomAction : Equatable, Hashable
+ +
+
+

Used to provide additional functionality to assistive technologies beyond your accessible UI.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + OnActivation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias OnActivation = () -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    A localized name that discribes the action.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    An image representing the action to be shown with some assistive technologies such as Switch Control.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onActivation + +
    +
    +
    +
    +
    +
    +

    A Callback for when the action is activated. This should return a bool indicating success or failure of the action.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onActivation: OnActivation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, image: UIImage? = nil, onActivation: @escaping OnActivation)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: AccessibilityElement.CustomAction, rhs: AccessibilityElement.CustomAction) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent.html new file mode 100644 index 000000000..bc0d45e7e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent.html @@ -0,0 +1,811 @@ + + + + CustomContent Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CustomContent

+
+
+ +
public struct CustomContent
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Importance + +
    +
    +
    +
    +
    +
    +

    The importance of the content.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Importance : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + label + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var label: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + importance + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var importance: Importance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(label: String, value: String? = nil, importance: Importance = .default)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + axCustomContent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var axCustomContent: AXCustomContent { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent/Importance.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent/Importance.html new file mode 100644 index 000000000..d2d84bfb7 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/CustomContent/Importance.html @@ -0,0 +1,709 @@ + + + + Importance Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Importance

+
+
+ +
public enum Importance : Equatable
+ +
+
+

The importance of the content.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    +

    By default custom content is available through the rotor.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case `default`
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + high + +
    +
    +
    +
    +
    +
    +

    In addtion to being available through the rotor, high importance content will announced in the main VoiceOver utterance. +High Importance content is announced follllowing the accessibilityValue but preceding any accessibilityHint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case high
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/Trait.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/Trait.html new file mode 100644 index 000000000..994cd92ff --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityElement/Trait.html @@ -0,0 +1,1204 @@ + + + + Trait Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Trait

+
+
+ +
public enum Trait
+
extension AccessibilityElement.Trait: Hashable, Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + IncrementAction + +
    +
    +
    +
    +
    +
    +

    Used in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control. +See Accessibility Increment Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias IncrementAction = () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + DecrementAction + +
    +
    +
    +
    +
    +
    +

    Used in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control. +See Accessibility Decrement Documentation for further information.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias DecrementAction = () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + button + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case button
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case link
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + header + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case header
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + searchField + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case searchField
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case image
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selected + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selected
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + playsSound + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case playsSound
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardKey + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case keyboardKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + staticText + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case staticText
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + summaryElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case summaryElement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + notEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notEnabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updatesFrequently + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case updatesFrequently
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + startsMediaSession + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case startsMediaSession
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adjustable(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case adjustable(IncrementAction, DecrementAction)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case allowsDirectInteraction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + causesPageTurn + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case causesPageTurn
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tabBar + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tabBar
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: AccessibilityElement.Trait, rhs: AccessibilityElement.Trait) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hash(into:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hash(into hasher: inout Hasher)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus.html new file mode 100644 index 000000000..5994bd85b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus.html @@ -0,0 +1,844 @@ + + + + AccessibilityFocus Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AccessibilityFocus

+
+
+ +
public struct AccessibilityFocus : Element
+ +
+
+

Enables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element that will have the focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trigger + +
    +
    +
    +
    +
    +
    +

    A object that can be held on to by the caller to manually trigger a focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var trigger: Trigger
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new AccessibilityFocus wrapping the provided element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    wrapping wrapped: Element,
    +    trigger: Trigger
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ + +
+ +

Trigger +

+
+
+
    +
  • +
    + + + + Trigger + +
    +
    +
    +
    +
    +
    +

    A trigger that can be used to manually fire an accessibility focus.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class Trigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus/Trigger.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus/Trigger.html new file mode 100644 index 000000000..8e6e11a55 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AccessibilityFocus/Trigger.html @@ -0,0 +1,796 @@ + + + + Trigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Trigger

+
+
+ +
public final class Trigger
+ +
+
+

A trigger that can be used to manually fire an accessibility focus.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + notificationType + +
    +
    +
    +
    +
    +
    +

    The type of accessibility notification that will be triggered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var notificationType: UIAccessibility.Notification
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    +

    An optional identifier for the trigger.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new trigger for the purpose of changing accessibility focus.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    notificationType: UIAccessibility.Notification = .layoutChanged,
    +    identifier: AnyHashable? = nil
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + notificationType + + +
    +

    Type of accessibility notification to trigger. Defaults to .layoutChanged. Limited to .layoutChanged or .screenChanged.

    +
    +
    + + identifier + + +
    +

    An optional identifier for the trigger. Defaults to nil.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + focus() + +
    +
    +
    +
    +
    +
    +

    Manually fire the trigger

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focus()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AdaptedEnvironment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AdaptedEnvironment.html new file mode 100644 index 000000000..4360363d1 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AdaptedEnvironment.html @@ -0,0 +1,947 @@ + + + + AdaptedEnvironment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AdaptedEnvironment

+
+
+ +
public struct AdaptedEnvironment : Element
+ +
+
+

Wraps an element tree with a modified environment.

+ +

By specifying environmental values with this element, all child elements nested +will automatically inherit those values automatically. Values can be changed +anywhere in a sub-tree by inserting another AdaptedEnvironment element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Adapter + +
    +
    +
    +
    +
    +
    +

    Takes in a mutable Environment which can be mutated to add or override values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Adapter = (inout Environment) -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(by:wrapping:) + +
    +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified using the given +configuration block.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    by adapt: @escaping Adapter,
    +    wrapping wrapped: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + by + + +
    +

    A block that will set environmental values.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified for a single key and value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Key>(
    +    key: Key.Type,
    +    value: Key.Value,
    +    wrapping child: Element
    +) where Key: EnvironmentKey
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + key + + +
    +

    The environment key to modify.

    +
    +
    + + value + + +
    +

    The new environment value to cascade.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wraps an element with an environment that is modified for a single value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Value>(
    +    keyPath: WritableKeyPath<Environment, Value>,
    +    value: Value,
    +    wrapping child: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + keyPath + + +
    +

    The keypath of the environment value to modify.

    +
    +
    + + value + + +
    +

    The new environment value to cascade.

    +
    +
    + + wrapping + + +
    +

    The element to be wrapped.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned.html new file mode 100644 index 000000000..376d902d4 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned.html @@ -0,0 +1,922 @@ + + + + Aligned Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Aligned

+
+
+ +
public struct Aligned : Element
+ +
+
+

Aligns a content element within itself. The vertical and horizontal alignment may be set independently.

+ +

When using alignment mode .fill, the content is scaled to the width or height of the Aligned element.

+ +

For other modes, the size of the content element is determined by calling measure(in:) +on the content element – even if that size is larger than the wrapping element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + VerticalAlignment + +
    +
    +
    +
    +
    +
    +

    The possible vertical alignment values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + HorizontalAlignment + +
    +
    +
    +
    +
    +
    +

    The possible horizontal alignment values.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element to be aligned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    The vertical alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalAlignment + +
    +
    +
    +
    +
    +
    +

    The horizontal alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalAlignment: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an Aligned with the given content element and alignments.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    vertically verticalAlignment: VerticalAlignment = .center,
    +    horizontally horizontalAlignment: HorizontalAlignment = .center,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + vertically + + +
    +

    The vertical alignment. Defaults to centered.

    +
    +
    + + horizontally + + +
    +

    The horizontal alignment. Defaults to centered.

    +
    +
    + + wrapping + + +
    +

    The content element to be aligned.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/HorizontalAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/HorizontalAlignment.html new file mode 100644 index 000000000..f6c34bfbe --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/HorizontalAlignment.html @@ -0,0 +1,764 @@ + + + + HorizontalAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

HorizontalAlignment

+
+
+ +
public enum HorizontalAlignment
+ +
+
+

The possible horizontal alignment values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the leading edge of the containing element. +In left-to-right languages, this is the left edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leading
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Centers the content horizontally.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the trailing edge of the containing element. +In left-to-right languages, this is the right edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case trailing
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    The content fills the full horizontal width of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/VerticalAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/VerticalAlignment.html new file mode 100644 index 000000000..26bdeec94 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Aligned/VerticalAlignment.html @@ -0,0 +1,762 @@ + + + + VerticalAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VerticalAlignment

+
+
+ +
public enum VerticalAlignment
+ +
+
+

The possible vertical alignment values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the top edge of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Centers the content vertically.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Aligns the content to the bottom edge of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    The content fills the full vertical height of the containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Alignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Alignment.html new file mode 100644 index 000000000..772b827d8 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Alignment.html @@ -0,0 +1,978 @@ + + + + Alignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public struct Alignment : Equatable
+ +
+
+

An alignment in both axes.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A guide marking the leading edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the trailing edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A guide marking the top edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeading + +
    +
    +
    +
    +
    +
    +

    A guide marking the top and leading edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topTrailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the top and trailing edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topTrailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeading + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom and leading edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeading: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomTrailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom and trailing edges of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomTrailing: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    +

    The alignment on the horizontal axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontal: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    +

    The alignment on the vertical axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var vertical: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates an instance with the given horizontal and vertical alignments.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(horizontal: HorizontalAlignment, vertical: VerticalAlignment)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AnimationAttributes.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AnimationAttributes.html new file mode 100644 index 000000000..f317b96c6 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AnimationAttributes.html @@ -0,0 +1,791 @@ + + + + AnimationAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AnimationAttributes

+
+
+ +
public struct AnimationAttributes
+ +
+
+

UIView animation configuration values.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + duration + +
    +
    +
    +
    +
    +
    +

    The duration of the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var duration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + curve + +
    +
    +
    +
    +
    +
    +

    The timing curve of the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var curve: UIView.AnimationCurve
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + allowUserInteraction + +
    +
    +
    +
    +
    +
    +

    Whether the view supports user interaction during the animation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowUserInteraction: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let `default`: `Self`
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    duration: TimeInterval = 0.2,
    +    curve: UIView.AnimationCurve = .easeInOut,
    +    allowUserInteraction: Bool = true
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AspectRatio.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AspectRatio.html new file mode 100644 index 000000000..765793301 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AspectRatio.html @@ -0,0 +1,812 @@ + + + + AspectRatio Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AspectRatio

+
+
+ +
public struct AspectRatio
+ +
+
+

Represents an a proportional relationship between width and height.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + square + +
    +
    +
    +
    +
    +
    +

    A 1:1 aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let square: AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ratio + +
    +
    +
    +
    +
    +
    +

    The width:height ratio value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ratio: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    +

    Initializes with a width & height ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat, height: CGFloat)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + width + + +
    +

    The relative width of the ratio.

    +
    +
    + + height + + +
    +

    The relative height of the ratio.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(ratio:) + +
    +
    +
    +
    +
    +
    +

    Initializes with a specific ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(ratio: CGFloat)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + ratio + + +
    +

    The width:height ratio.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel.html new file mode 100644 index 000000000..f847e67de --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel.html @@ -0,0 +1,1215 @@ + + + + AttributedLabel Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedLabel

+
+
+ +
public struct AttributedLabel : Element, Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributedText + +
    +
    +
    +
    +
    +
    +

    The attributed text to render in the label.

    + +

    If you customize the line break mode using an NSParagraphStyle, the mode will be normalized +based on the number of lines allowed. This is because some line break modes are incompatible +with multi-line text rendering in TextKit, which is used to detect where links are in the text. +Some modes also break line height adjustment in single-line labels, so these are also normalized.

    + +

    Specifically:

    + +
      +
    • 1 line labels with a mode of byCharWrapping or byWordWrapping will be normalized to byClipping.
    • +
    • Multiline labels with a mode of byTruncatingHead or byTruncatingMiddle +will be normalized to byTruncatingTail.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributedText: NSAttributedString
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + numberOfLines + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var numberOfLines: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadow + +
    +
    +
    +
    +
    +
    +

    A shadow to display behind the label’s text. Defaults to no shadow.

    +
    +

    Note

    + This shadow is applied using the backing view’s CALayer, and will affect the +entire label. To apply a shadow to only a portion of text, you can instead set +NSAttributedString.Key.shadow on the string, but note that those shadows may be clipped +by the bounds of the backing view. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadow: TextShadow?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textRectOffset + +
    +
    +
    +
    +
    +
    +

    An offset that will be applied to the rect used by drawText(in:).

    + +

    This can be used to adjust the positioning of text within each line’s frame, such as adjusting +the way text is distributed within the line height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textRectOffset: UIOffset
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines if the label should be included when navigating the UI via accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAccessibilityElement: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label reduces the text’s font +size to fit the title string into the label’s bounding rectangle.

    + +

    Normally, the label draws the text with the font you specify in the font property. +If this property is true, and the text in the text property exceeds the label’s bounding rectangle, +the label reduces the font size until the text fits or it has scaled the font down to the minimum +font size. The default value for this property is false.

    + +

    If you change it to true, be sure that you also set an appropriate minimum +font scale by modifying the minimumScaleFactor property.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontSizeToFitWidth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumScaleFactor + +
    +
    +
    +
    +
    +
    +

    The minimum scale factor for the label’s text.

    + +

    If the adjustsFontSizeToFitWidth is true, use this property to specify the +smallest multiplier for the current font size that yields an acceptable +font size for the label’s text.

    + +

    If you specify a value of 0 for this property, the label doesn’t scale the text down. +The default value of this property is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumScaleFactor: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label tightens text before truncating.

    + +

    When the value of this property is true, the label tightens intercharacter spacing +of its text before allowing any truncation to occur. The label determines the +maximum amount of tightening automatically based on the font, current line width, +line break mode, and other relevant information.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +

    The default value of this property is false.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowsDefaultTighteningForTruncation: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the label, these will be merged with any existing traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityHint + +
    +
    +
    +
    +
    +
    +

    A localized string that describes the result of performing an action on the element, when the result is non-obvious.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityHint: String?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    An array containing one or more AccessibilityElement.CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityCustomActions: [AccessibilityElement.CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linkDetectionTypes + +
    +
    +
    +
    +
    +
    +

    A set of data types to detect and automatically link in the label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkDetectionTypes: Set<LinkDetectionType>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linkAttributes + +
    +
    +
    +
    +
    +
    +

    A set of attributes to apply to links in the string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkAttributes: [NSAttributedString.Key : AnyHashable]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + activeLinkAttributes + +
    +
    +
    +
    +
    +
    +

    A set of attributes to apply to links when they are touched.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var activeLinkAttributes: [NSAttributedString.Key : AnyHashable]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(attributedText: NSAttributedString, configure: (inout `Self`) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ + +
+ +

Models +

+
+
+
    +
  • +
    + + + + LinkDetectionType + +
    +
    +
    +
    +
    +
    +

    Types of data that can be detected and automatically turned into links.

    + +

    Corresponds to NSTextCheckingResult.CheckingType types.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LinkDetectionType : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel/LinkDetectionType.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel/LinkDetectionType.html new file mode 100644 index 000000000..68ddb658f --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedLabel/LinkDetectionType.html @@ -0,0 +1,764 @@ + + + + LinkDetectionType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LinkDetectionType

+
+
+ +
public enum LinkDetectionType : Equatable, Hashable
+ +
+
+

Types of data that can be detected and automatically turned into links.

+ +

Corresponds to NSTextCheckingResult.CheckingType types.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + date + +
    +
    +
    +
    +
    +
    +

    Detect date strings. Tapping a date opens the calendar to that date.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case date
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + address + +
    +
    +
    +
    +
    +
    +

    Detect addresses. Tapping the address opens Maps with that address.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case address
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    +

    Detect URLs. Tapping the link opens the URL.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case link
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + phoneNumber + +
    +
    +
    +
    +
    +
    +

    Detect phone numbers. Tapping the phone number prompts the user to call it.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case phoneNumber
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText.html new file mode 100644 index 000000000..6abcc42b0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText.html @@ -0,0 +1,959 @@ + + + + AttributedText Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AttributedText

+
+
+ +
@dynamicMemberLookup
+public struct AttributedText
+ +
+
+

AttributedText allows you to apply strongly-typed attributes to strings (much like the AttributedString type +introduced in iOS 15). You can then access the attributedString property to get an attributed string with those +attributes applied.

+ +

For example:

+
var text = AttributedText(string: "Hello, world")
+// Apply a font to the entire range
+text.font = .systemFont(ofSize: 20)
+
+// Apply a color to part of the string
+let range = text.string.range(of: "world")!
+text[range].color = .blue
+
+// Render the attributed text
+let label = AttributedLabel(attributedText: text.attributedString)
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + string + +
    +
    +
    +
    +
    +
    +

    The wrapped string, with no attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let string: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributedString + +
    +
    +
    +
    +
    +
    +

    An NSAttributedString representation of the attributed text.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributedString: NSAttributedString { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + runs + +
    +
    +
    +
    +
    +
    +

    An iterable view into segments of the attributed string, each of which indicates where a run of identical +attributes begins or ends.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var runs: [Run] { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Create some AttributedText from a plain string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ string: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Create some AttributedText from an attributed string. The attributes are preserved.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ attributedString: NSAttributedString)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + range(of:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func range(of aString: some StringProtocol) -> Range<String.Index>?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Dynamic member getter or setter for any attributes defined on TextAttributeContainer. +Applies the attribute to the entire range of text, for example:

    +
    var text = AttributedText(string: "Hello, world")
    +text.font = .systemFont(ofSize: 20)
    +
    + +

    Note that only attributes applying to the entire range will be returned. For example, if the text +has two different font attributes, then text.font will be nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(dynamicMember keyPath: WritableKeyPath<TextAttributeContainer, Value>) -> Value { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Get or set a TextAttributeContainer for the provided range of text. This allows you to set attributes +for specific ranges using strong types:

    +
    var text = AttributedText(string: "Hello, world")
    +let range = text.string.range(of: "Hello")!
    +text[range].font = .systemFont(ofSize: 20)
    +
    + +

    Note that the returned TextAttributeContainer will only contain attributes that apply to the entire subscript +range. (Setting an attribute will set it across the subscript range regardless of any existing contents).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<R>(range: R) -> TextAttributeContainer where R : RangeExpression, R.Bound == String.Index { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +(_:_:) + +
    +
    +
    +
    +
    +
    +

    Concatenate two pieces of AttributedText together.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func + (lhs: AttributedText, rhs: AttributedText) -> AttributedText
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Run + +
    +
    +
    +
    +
    +
    +

    A Run represents a range of identical attributes in the attributed text.

    + +

    You can access any properties of TextAttributeContainer on this type using dynamic member lookup.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @dynamicMemberLookup
    +public struct Run
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText/Run.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText/Run.html new file mode 100644 index 000000000..586cc18fb --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/AttributedText/Run.html @@ -0,0 +1,741 @@ + + + + Run Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Run

+
+
+ +
@dynamicMemberLookup
+public struct Run
+ +
+
+

A Run represents a range of identical attributes in the attributed text.

+ +

You can access any properties of TextAttributeContainer on this type using dynamic member lookup.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + range + +
    +
    +
    +
    +
    +
    +

    The range of the run of attributes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let range: Range<String.Index>
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    The attributes that apply to this run.

    + +

    Note that you can access properties of the attribute container directly on the Run itself, since it +implements dynamic member look up.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let attributes: TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Dynamic member getter for the TextAttributeContainer of this run.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(dynamicMember keyPath: KeyPath<TextAttributeContainer, Value>) -> Value { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/BlueprintViewRenderMetrics.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/BlueprintViewRenderMetrics.html new file mode 100644 index 000000000..3c3237b9d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/BlueprintViewRenderMetrics.html @@ -0,0 +1,788 @@ + + + + BlueprintViewRenderMetrics Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlueprintViewRenderMetrics

+
+
+ +
public struct BlueprintViewRenderMetrics
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    The layout mode used to render the view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutMode: LayoutMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + startTimestamp + +
    +
    +
    +
    +
    +
    +

    The mach time in seconds at which the view render started (from CACurrentMediaTime()).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var startTimestamp: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + totalDuration + +
    +
    +
    +
    +
    +
    +

    The total time it took to apply a new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var totalDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutDuration + +
    +
    +
    +
    +
    +
    +

    The time it took to lay out and measure the new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + viewUpdateDuration + +
    +
    +
    +
    +
    +
    +

    The time it took to update the on-screen views for the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewUpdateDuration: TimeInterval
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box.html new file mode 100644 index 000000000..de569151c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box.html @@ -0,0 +1,1038 @@ + + + + Box Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Box

+
+
+ +
public struct Box : Element
+ +
+
+

A simple element that wraps a child element and adds visual styling including +background color.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + backgroundColor + +
    +
    +
    +
    +
    +
    +

    The background color to show in the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var backgroundColor: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cornerStyle + +
    +
    +
    +
    +
    +
    +

    The corner style to apply, eg rounded, capsule, or normal, square corners.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerStyle: CornerStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cornerCurve + +
    +
    +
    +
    +
    +
    +

    How to style the curves when cornerStyle is non-square.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerCurve: CornerCurve
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + borderStyle + +
    +
    +
    +
    +
    +
    +

    The border to apply around the edges of the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderStyle: BorderStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadowStyle + +
    +
    +
    +
    +
    +
    +

    The shadow style to apply to the outside of the box.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowStyle: ShadowStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + clipsContent + +
    +
    +
    +
    +
    +
    +

    If content placed within the box should be clipped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clipsContent: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    backgroundColor: UIColor = .clear,
    +    cornerStyle: CornerStyle = .square,
    +    cornerCurve: CornerCurve = .circular,
    +    borderStyle: BorderStyle = .none,
    +    shadowStyle: ShadowStyle = .none,
    +    clipsContent: Bool = false,
    +    wrapping element: Element? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CornerStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CornerStyle : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CornerCurve + +
    +
    +
    +
    +
    +
    +

    Specifies the curve style when showing rounded corners on a Box.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CornerCurve : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + BorderStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BorderStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ShadowStyle + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ShadowStyle
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/BorderStyle.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/BorderStyle.html new file mode 100644 index 000000000..c4c4607ad --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/BorderStyle.html @@ -0,0 +1,705 @@ + + + + BorderStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BorderStyle

+
+
+ +
public enum BorderStyle
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + solid(color:width:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case solid(color: UIColor, width: CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerCurve.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerCurve.html new file mode 100644 index 000000000..108597489 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerCurve.html @@ -0,0 +1,711 @@ + + + + CornerCurve Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CornerCurve

+
+
+ +
public enum CornerCurve : Equatable
+ +
+
+

Specifies the curve style when showing rounded corners on a Box.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + circular + +
    +
    +
    +
    +
    +
    +

    Provides a standard-style corner radius as you would see in design tools like Figma.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case circular
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + continuous + +
    +
    +
    +
    +
    +
    +

    Provides an iOS icon-style corner radius.

    +

    Note

    + +

    Only appears on iOS 13 and later. Before iOS 13, circular corners will be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case continuous
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle.html new file mode 100644 index 000000000..dcdd04f18 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle.html @@ -0,0 +1,758 @@ + + + + CornerStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CornerStyle

+
+
+ +
public enum CornerStyle : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + square + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case square
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + capsule + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case capsule
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rounded(radius: CGFloat, corners: Corners = .all)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Corners + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Corners : OptionSet, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle/Corners.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle/Corners.html new file mode 100644 index 000000000..2cf304d79 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/CornerStyle/Corners.html @@ -0,0 +1,939 @@ + + + + Corners Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Corners

+
+
+ +
public struct Corners : OptionSet, Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt8
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt8)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeft: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topRight: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeft: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomRight: Box.CornerStyle.Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + all + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let all: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let left: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Corners
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let right: Corners
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/ShadowStyle.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/ShadowStyle.html new file mode 100644 index 000000000..f9f8d17b9 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Box/ShadowStyle.html @@ -0,0 +1,705 @@ + + + + ShadowStyle Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ShadowStyle

+
+
+ +
public enum ShadowStyle
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case simple(radius: CGFloat, opacity: CGFloat, offset: CGSize, color: UIColor)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Builder.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Builder.html new file mode 100644 index 000000000..f58284c5f --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Builder.html @@ -0,0 +1,946 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
@resultBuilder
+public struct Builder<Child>
+ +
+
+

Generic result builder for converting blocks of Child... into [Child].

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Children = [Child]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildBlock(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildBlock(_ children: Children...) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildOptional(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildOptional(_ children: Children?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildEither(first:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildEither(first: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildEither(second:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildEither(second: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ child: Child) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    This function is disfavored in case a builder wants to offer additional buildExpression functions to support +multiple types in their builders. @_disfavoredOverload allows the compiler to choose the other function when +nil is built, instead of it being ambiguous.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @_disfavoredOverload
    +public static func buildExpression(_ child: Child?) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildArray(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildArray(_ components: [Children]) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildArray(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildArray(_ components: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildLimitedAvailability(_ component: Children) -> Children
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + buildExpression(_:) + +
    +
    +
    +
    +
    +
    +

    Allow for an array of Child to be flattened into the overall result.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func buildExpression(_ children: [Child]) -> Children
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Button.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Button.html new file mode 100644 index 000000000..a5ce11475 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Button.html @@ -0,0 +1,837 @@ + + + + Button Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Button

+
+
+ +
public struct Button : Element
+ +
+
+

An element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when +highlighted (or disabled), it fades its contents to partial alpha.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onTap + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onTap: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumTappableSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumTappableSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(isEnabled: Bool = true, onTap: @escaping () -> Void = {}, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Centered.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Centered.html new file mode 100644 index 000000000..162c020d9 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Centered.html @@ -0,0 +1,738 @@ + + + + Centered Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Centered

+
+
+ +
public struct Centered : ProxyElement
+ +
+
+

Centers a content element within itself.

+ +

The size of the content element is determined by calling measure(in:) on +the content element – even if that size is larger than the wrapping Centered +element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The content element to be centered.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Initializes a Centered element with the given content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ wrapped: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column.html new file mode 100644 index 000000000..6bfe6a33d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column.html @@ -0,0 +1,997 @@ + + + + Column Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Column

+
+
+ +
public struct Column : StackElement
+ +
+
+

Displays a list of items in a linear vertical layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ColumnAlignment + +
    +
    +
    +
    +
    +
    +

    Describes how the column’s children will be horizontally aligned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ColumnAlignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a Column, using result builder syntax. Columns display a list of items in a vertical +stack.

    +
    Column {
    +    Label(text: "Welcome")
    +
    +    TextField(text: username)
    +    TextField(text: password)
    +
    +    Button(
    +        onTap: handleSignIn,
    +        wrapping: Label(text: "Sign In")
    +    )
    +}
    +
    + +

    By default, each item in the column will be stretched or compressed with equal priority in +the event of overflow or underflow. You can control this behavior by adding a +stackLayoutChild modifier to an item.

    +
    Column {
    +    ImportantHeader()
    +        .stackLayoutChild(priority: .fixed)
    +
    +    LessImportantContent()
    +}
    +
    + +

    You can also use this modifier to add keys and alignment guides. See StackElement.add for +more information.

    +

    See Also

    + +

    StackElement.add()

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    alignment: ColumnAlignment = .leading,
    +    underflow: StackLayout.UnderflowDistribution = .spaceEvenly,
    +    overflow: StackLayout.OverflowDistribution = .condenseProportionally,
    +    minimumSpacing: CGFloat = 0,
    +    @ElementBuilder<StackLayout.Child> elements: () -> [StackLayout.Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Specifies how children will be aligned horizontally. Default: .leading

    +
    +
    + + underflow + + +
    +

    Determines the layout when there is extra free space available. Default: +.spaceEvenly

    +
    +
    + + overflow + + +
    +

    Determines the layout when there is not enough space to fit all children as +measured. Default: .condenseProportionally

    +
    +
    + + minimumSpacing + + +
    +

    Spacing in between elements. Default: 0

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalUnderflow: StackLayout.UnderflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalOverflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalOverflow: StackLayout.OverflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalAlignment + +
    +
    +
    +
    +
    +
    +

    Specifies how children will be aligned horizontally.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalAlignment: ColumnAlignment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumVerticalSpacing: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column/ColumnAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column/ColumnAlignment.html new file mode 100644 index 000000000..5f780edc7 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Column/ColumnAlignment.html @@ -0,0 +1,793 @@ + + + + ColumnAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ColumnAlignment

+
+
+ +
public enum ColumnAlignment : Equatable
+ +
+
+

Describes how the column’s children will be horizontally aligned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to fit the horizontal size of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Using the specified alignment, children will be aligned relatively to each other, and +then all the contents will be aligned to the column’s bounding box.

    + +

    This case can be used for custom alignments. For common alignments you can use the +existing static instancesleading, center, and trailing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: HorizontalAlignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the leading edge of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Children will be horizontally centered in the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the trailing edge of the column.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: Column.ColumnAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio.html new file mode 100644 index 000000000..5644c8d7c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio.html @@ -0,0 +1,886 @@ + + + + ConstrainedAspectRatio Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ConstrainedAspectRatio

+
+
+ +
public struct ConstrainedAspectRatio : Element
+ +
+
+

Constrains the size of the content element to an aspect ratio.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ContentMode + +
    +
    +
    +
    +
    +
    +

    Represents how the content should size itself relative to its parent.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentMode : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The element being constrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectRatio + +
    +
    +
    +
    +
    +
    +

    The target aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var aspectRatio: AspectRatio
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentMode + +
    +
    +
    +
    +
    +
    +

    Whether the aspect ratio should be reached by expanding the content element’s size to fill its parent +or shrinking it to fit.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentMode: ContentMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes with the given properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(aspectRatio: AspectRatio, contentMode: ContentMode = .fitContent, wrapping wrappedElement: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + aspectRatio + + +
    +

    The aspect ratio that the content size should match.

    +
    +
    + + contentMode + + +
    +

    How the content should size itself relative to its parent.

    +
    +
    + + wrapping + + +
    +

    The content element.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio/ContentMode.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio/ContentMode.html new file mode 100644 index 000000000..f974cbf50 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedAspectRatio/ContentMode.html @@ -0,0 +1,789 @@ + + + + ContentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentMode

+
+
+ +
public enum ContentMode : Equatable
+ +
+
+

Represents how the content should size itself relative to its parent.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fillParent + +
    +
    +
    +
    +
    +
    +

    The content will be sized to fill its parent while +maintaining the specified aspect ratio.

    + +

    In legacy layout mode, if the parent is unconstrained in all dimensions, +the content size will be used for measurement and will behave like fitContent. If the +parent is unconstrained in one dimension, the element will fill the constrained +dimension.

    + +

    In caffeinated, if the parent is unconstrained in any dimension, this +element will report a size of infinity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fillParent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fitParent + +
    +
    +
    +
    +
    +
    +

    The content will be sized to fit within its parent while maintaining the specified +aspect ratio.

    + +

    If the parent is unconstrained in one dimension, the element will fit the constrained +dimension.

    + +

    In legacy layout mode, if the parent is unconstrained in all dimensions, +the content size will be used for measurement and will behave like fitContent.

    + +

    In caffeinated layout mode, if the parent is unconstrained in both +dimensions, this element will report a size of infinity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fitParent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fitContent + +
    +
    +
    +
    +
    +
    +

    The content will grow in whichever dimension is needed to maintain the aspect ratio, +while ensuring the content still fits.

    + +

    This mode does not take the parents applied size constraint into account, so the parent +may ultimately layout the element without the constrained aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fitContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shrinkContent + +
    +
    +
    +
    +
    +
    +

    The content will shrink in whichever dimension is needed to maintain the aspect ratio, +meaning it may be smaller in one dimension than the measured size.

    + +

    This mode does not take the parents applied size constraint into account, so the parent +may ultimately layout the element without the constrained aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shrinkContent
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize.html new file mode 100644 index 000000000..d3992dde2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize.html @@ -0,0 +1,855 @@ + + + + ConstrainedSize Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ConstrainedSize

+
+
+ +
public struct ConstrainedSize : Element
+ +
+
+

Constrains the measured size of the contained element in the ranges specified by the width and height properties.

+ +

There are several constraint types available for each axis. See ConstrainedSize.Constraint for a full list and in-depth +descriptions of each.

+

Notes

+ +

An important note is that the constraints of ConstrainedSize are authoritative during measurement. For example, +if your ConstrainedSize specifies .atLeast(300) for width, and the ConstrainedSize is asked to measure within +a SizeConstraint that is at most 100 points wide, the returned measurement will still be 300 points. The same goes for the +height of the ConstrainedSize.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element whose measurement will be constrained by the ConstrainedSize.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The constraint to place on the width of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Constraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The constraint to place on the height of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var height: Constraint
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ConstrainedSize with the provided constraint options.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    width: Constraint = .unconstrained,
    +    height: Constraint = .unconstrained,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Constraint + +
    +
    +
    +
    +
    +
    +

    The available ways to constrain the measurement of a given axis within a ConstrainedSize element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Constraint : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize/Constraint.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize/Constraint.html new file mode 100644 index 000000000..bc742ca01 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ConstrainedSize/Constraint.html @@ -0,0 +1,791 @@ + + + + Constraint Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Constraint

+
+
+ +
public enum Constraint : Equatable
+ +
+
+

The available ways to constrain the measurement of a given axis within a ConstrainedSize element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    +

    There is no constraint for this axis – the natural size of the element will be used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unconstrained
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + atMost(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be no greater than the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atMost(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + atLeast(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be no less than the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atLeast(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + within(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be within the range provided. +If the measured value is below the bottom of the range, the lower value will be used. +If the measured value is above the top of the range, the lower value will be used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case within(ClosedRange<CGFloat>)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + absolute(_:) + +
    +
    +
    +
    +
    +
    +

    The measured size for this axis will be exactly the value provided.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case absolute(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate.html new file mode 100644 index 000000000..34b25f962 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate.html @@ -0,0 +1,937 @@ + + + + Decorate Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Decorate

+
+
+ +
public struct Decorate : ProxyElement
+ +
+
+

Places a decoration element behind or in front of the given wrapped element, +and positions it according to the position parameter.

+ +

The size and position of the element is determined only by the wrapped +element, the decoration element does not affect the layout at all.

+

Example

+ +

The arrows represent the measured size of the element for layout purposes.

+
┌───────────────────┐     ┌──────┐
+    Decoration                
+ ┏━━━━━━━━━━━━━━━┓           ┣━━━━━━━━━━┓   
+                     └─┳────┘             
+     Wrapped               Wrapped       
+                                         
+ ┗━━━━━━━━━━━━━━━┛       ┗━━━━━━━━━━━━━━━┛   
+└───────────────────┘
+  ◀───────────────▶         ◀───────────────▶
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The element which provides the sizing and measurement. +The sizing and position of the Decorate element is determined +by this element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoration + +
    +
    +
    +
    +
    +
    +

    The element which is used to draw the decoration. +It does not affect sizing or positioning.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var decoration: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layering + +
    +
    +
    +
    +
    +
    +

    Where the decoration should be positioned in the z-axis: Above or below the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layering: Layering
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    How the decoration should be positioned in respect to the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var position: Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new instance with the provided overflow, background, and wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    layering: Layering,
    +    position: Position,
    +    wrapping: Element,
    +    decoration: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

ProxyElement +

+
+
+
    +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Layering + +
    +
    +
    +
    +
    +
    +

    If the decoration should be positioned above or below the content element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Layering : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Corner + +
    +
    +
    +
    +
    +
    +

    What corner the decoration element should be positioned in.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Corner : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Position + +
    +
    +
    +
    +
    +
    +

    How to position the decoration element relative to the content element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Position
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Corner.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Corner.html new file mode 100644 index 000000000..d65e7e676 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Corner.html @@ -0,0 +1,758 @@ + + + + Corner Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Corner

+
+
+ +
public enum Corner : Equatable
+ +
+
+

What corner the decoration element should be positioned in.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + topLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topLeft
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomLeft
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Layering.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Layering.html new file mode 100644 index 000000000..0ea29e35e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Layering.html @@ -0,0 +1,708 @@ + + + + Layering Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Layering

+
+
+ +
public enum Layering : Equatable
+ +
+
+

If the decoration should be positioned above or below the content element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + above + +
    +
    +
    +
    +
    +
    +

    The decoration is displayed above the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case above
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + below + +
    +
    +
    +
    +
    +
    +

    The decoration is displayed below the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case below
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position.html new file mode 100644 index 000000000..595727485 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position.html @@ -0,0 +1,904 @@ + + + + Position Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Position

+
+
+ +
public struct Position
+ +
+
+

How to position the decoration element relative to the content element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + inset(_:) + +
    +
    +
    +
    +
    +
    +

    Insets the decoration element on each edge by the amount specified by +the UIEdgeInsets property.

    + +

    A positive value for an edge expands the decoration outside of that edge, +whereas a negative inset pushes the the decoration inside that edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(_ inset: UIEdgeInsets) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(_:) + +
    +
    +
    +
    +
    +
    +

    Provides a .inset position where the decoration is inset by the +same amount on each side.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(_ amount: CGFloat) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Provides a .inset position where the decoration is inset by the +horizontal amount on the left and right, and the vertical amount on the top and bottom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func inset(horizontal: CGFloat = 0.0, vertical: CGFloat = 0.0) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Aligns the decoration according the given alignment option, optionally adjusting it with +an alignment guide on either axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func aligned(
    +    to alignment: Alignment,
    +    horizontalGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    verticalGuide: ((ElementDimensions) -> CGFloat)? = nil
    +) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Determines the position of the decoration relative to the decorated +content.

    +
    +
    + + horizontalGuide + + +
    +

    +
    +
    + + verticalGuide + + +
    +

    +
    +
    +
    +
    +

    Return Value

    +

    An aligned position.

    +
    +
    +
    +
  • +
  • +
    + + + + corner(_:_:) + +
    +
    +
    +
    +
    +
    +

    The decoration element is positioned in the given corner of the +content element, optionally offset by the provided amount.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func corner(_ corner: Corner, _ offset: UIOffset = .zero) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    Allows you to provide custom positioning for the decoration, based on the passed context.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func custom(_ position: @escaping (PositionContext) -> CGRect) -> Decorate.Position
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PositionContext + +
    +
    +
    +
    +
    +
    +

    Information provided to Position closures.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct PositionContext
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position/PositionContext.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position/PositionContext.html new file mode 100644 index 000000000..348584fe5 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Decorate/Position/PositionContext.html @@ -0,0 +1,735 @@ + + + + PositionContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PositionContext

+
+
+ +
public struct PositionContext
+ +
+
+

Information provided to Position closures.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + decorationSize + +
    +
    +
    +
    +
    +
    +

    The size of the decoration being positioned within the decorated content’s bounds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var decorationSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    +

    The size of the content element within the Decorate element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is being rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu.html new file mode 100644 index 000000000..731a5e8df --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu.html @@ -0,0 +1,920 @@ + + + + EditingMenu Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EditingMenu

+
+
+ +
public struct EditingMenu : Element
+ +
+
+

Allows showing the system’s UIMenuController editing menu.

+ +

You can show the menu upon tap or long press:

+
myElement.editingMenu(show: .onLongPress) {
+    EditingMenuItem.copying("A String")
+
+    EditingMenuItem(.select) {
+        print("Selected!")
+    }
+}
+
+ +

You can also show the menu as a result of another element’s onTap closure, +using the trigger-based API:

+
EditingMenu { menu in
+    MyRow(text: "Hello, World") {
+        menu.show()
+    }
+} items: {
+    EditingMenuItem.copying("A String")
+}
+
+ +
+
+ +
+
+
+ +
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Gesture + +
    +
    +
    +
    +
    +
    +

    The gesture to use to show the menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Gesture
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + MenuTrigger + +
    +
    +
    +
    +
    +
    +

    A trigger that you can use to show the menu based on the result of some other +action firing, such as the onTap or onSelect of another element.

    +
    EditingMenu { menu in
    +    MyRow(text: "Hello, World") {
    +        menu.show()
    +    }
    +} items: {
    +    EditingMenuItem.copying("A String")
    +}
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class MenuTrigger
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/Gesture.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/Gesture.html new file mode 100644 index 000000000..4ced98427 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/Gesture.html @@ -0,0 +1,708 @@ + + + + Gesture Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Gesture

+
+
+ +
public enum Gesture
+ +
+
+

The gesture to use to show the menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + onTap + +
    +
    +
    +
    +
    +
    +

    The menu will be shown when the element is tapped.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onTap
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onLongPress + +
    +
    +
    +
    +
    +
    +

    The menu will be shown when the element is long pressed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case onLongPress
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/MenuTrigger.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/MenuTrigger.html new file mode 100644 index 000000000..324b02053 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenu/MenuTrigger.html @@ -0,0 +1,690 @@ + + + + MenuTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

MenuTrigger

+
+
+ +
public final class MenuTrigger
+ +
+
+

A trigger that you can use to show the menu based on the result of some other +action firing, such as the onTap or onSelect of another element.

+
EditingMenu { menu in
+    MyRow(text: "Hello, World") {
+        menu.show()
+    }
+} items: {
+    EditingMenuItem.copying("A String")
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + show() + +
    +
    +
    +
    +
    +
    +

    Call this method to show the menu.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func show()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem.html new file mode 100644 index 000000000..c060c31cb --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem.html @@ -0,0 +1,877 @@ + + + + EditingMenuItem Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EditingMenuItem

+
+
+ +
public struct EditingMenuItem
+ +
+
+

A single item in an editing menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + kind + +
    +
    +
    +
    +
    +
    +

    The type of menu item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var kind: Kind
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onSelect + +
    +
    +
    +
    +
    +
    +

    A callback, invoked when the user selects the menu item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onSelect: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(title:onSelect:) + +
    +
    +
    +
    +
    +
    +

    Creates a new menu item of the given kind.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    title: String,
    +    onSelect: @escaping () -> Void
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:onSelect:) + +
    +
    +
    +
    +
    +
    +

    Creates a new menu item of the given kind.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    _ kind: Kind.System,
    +    onSelect: @escaping () -> Void
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given string to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ string: String, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given image to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ image: UIImage, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copying(_:to:) + +
    +
    +
    +
    +
    +
    +

    A .copy type item, which will copy the given url to the provided pasteboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func copying(_ url: URL, to pasteboard: UIPasteboard? = .general) -> EditingMenuItem
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Kind + +
    +
    +
    +
    +
    +
    +

    The menu item types you may place into a menu.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Kind : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind.html new file mode 100644 index 000000000..574c5eb84 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind.html @@ -0,0 +1,738 @@ + + + + Kind Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Kind

+
+
+ +
public enum Kind : Equatable
+ +
+
+

The menu item types you may place into a menu.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + system(_:) + +
    +
    +
    +
    +
    +
    +

    A standard system item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case system(System)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    A custom item with a custom title.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + System + +
    +
    +
    +
    +
    +
    +

    The system menu item kinds supported by an editing menu.

    + +

    Note – Matches methods from UIResponderStandardEditActions.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum System : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind/System.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind/System.html new file mode 100644 index 000000000..a56086e3e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EditingMenuItem/Kind/System.html @@ -0,0 +1,1046 @@ + + + + System Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

System

+
+
+ +
public enum System : Equatable
+ +
+
+

The system menu item kinds supported by an editing menu.

+ +

Note – Matches methods from UIResponderStandardEditActions.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + cut + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case cut
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + copy + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case copy
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + paste + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case paste
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delete + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case delete
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + select + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case select
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selectAll + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case selectAll
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleBoldface + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleBoldface
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleItalics + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleItalics
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + toggleUnderline + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case toggleUnderline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + increaseSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case increaseSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decreaseSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case decreaseSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + printContent + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case printContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndGo + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndGo
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndMatchStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndMatchStyle
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pasteAndSearch + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pasteAndSearch
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent.html new file mode 100644 index 000000000..c36a4f7ad --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent.html @@ -0,0 +1,1427 @@ + + + + ElementContent Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementContent

+
+
+ +
public struct ElementContent
+ +
+
+

Represents the content of an element.

+ +
+
+ +
+
+
+
+ + +
+ +

Measurement & Children +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Measures the required size of this element’s content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint, environment: Environment) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + constraint + + +
    +

    The size constraint.

    +
    +
    + + environment + + +
    +

    The environment to measure in.

    +
    +
    +
    +
    +

    Return Value

    +

    The layout size needed by this content.

    +
    +
    +
    +
  • +
  • +
    + + + + childCount + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var childCount: Int { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Layout storage +

+
+
+
    +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    Used to construct elements that have layout and children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Builder<LayoutType> where LayoutType : Layout
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given layout and children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<LayoutType: Layout>(
    +    layout: LayoutType,
    +    configure: (inout Builder<LayoutType>) -> Void = { _ in }
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + layout + + +
    +

    The layout to use.

    +
    +
    + + configure + + +
    +

    A closure that configures the layout and adds children to the container.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given element and layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    child: Element,
    +    key: AnyHashable? = nil,
    +    layout: some SingleChildLayout
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + element + + +
    +

    The single child element.

    +
    +
    + + key + + +
    +

    The key to use to unique the element during updates.

    +
    +
    + + layout + + +
    +

    The layout that will be used.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Passthrough storage +

+
+
+
    +
  • +
    + + + + init(child:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given element.

    + +

    The given element will be used for measuring, and it will always fill the extent of the parent element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(child: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + element + + +
    +

    The single child element.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Lazy storage +

+
+
+
    +
  • +
    + + + + init(build:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent that will lazily create its storage during a layout and measurement pass, +based on the Environment passed to the builder closure.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    build builder: @escaping (SizeConstraint, Environment) -> Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + builder + + +
    +

    A closure that provides the content Element based on the provided SizeConstraint +and Environment.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Leaf content +

+
+
+
    +
  • +
    + + + + init(measurable:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided Measurable.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(measurable: Measurable)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measurable + + +
    +

    How to measure the ElementContent.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided measure function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    measureFunction: @escaping (SizeConstraint) -> CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measureFunction + + +
    +

    How to measure the ElementContent in the given SizeConstraint.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that delegates to the provided measure function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    measureFunction: @escaping (SizeConstraint, Environment) -> CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + measureFunction + + +
    +

    How to measure the ElementContent in the given SizeConstraint and Environment.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(intrinsicSize:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with no children that uses the provided intrinsic size for measuring.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(intrinsicSize: CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Environment adapters +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given child element, measurement caching key, and environment adapter, +which allows adapting the environment to affect the element, plus elements further down the tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    child: Element,
    +    environment environmentAdapter: @escaping (inout Environment) -> Void
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + child + + +
    +

    The child element to display.

    +
    +
    + + environmentAdapter + + +
    +

    How to adapt the Environment for the child and elements further down the tree.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a new ElementContent with the given child element, measurement caching key, and environment key + value. +which adapts the environment to affect the element, plus elements further down the tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<Key>(
    +    child: Element,
    +    key: Key.Type,
    +    value: Key.Value
    +) where Key: EnvironmentKey
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + child + + +
    +

    The child element to display.

    +
    +
    + + key + + +
    +

    The key to set in the Environment.

    +
    +
    + + value + + +
    +

    The value to set in the Environment for the given key.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Nested element measuring +

+
+
+
    +
  • +
    + + + + init(measuring:) + +
    +
    +
    +
    +
    +
    +

    Creates a new ElementContent which uses the provided element to measure its +size, but does not place the element as a child in the final, laid out hierarchy.

    + +

    This is useful if you are placing the element in a nested BlueprintView, for example (eg +to create a stateful element) and just need this element to be correctly sized.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(measuring element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent/Builder.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent/Builder.html new file mode 100644 index 000000000..42c78dfff --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementContent/Builder.html @@ -0,0 +1,713 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
public struct Builder<LayoutType> where LayoutType : Layout
+ +
+
+

Used to construct elements that have layout and children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    +

    The layout object that is ultimately responsible for measuring +and layout tasks.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layout: LayoutType
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds the given child element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    traits: LayoutType.Traits = LayoutType.defaultTraits,
    +    key: AnyHashable? = nil,
    +    element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementDimensions.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementDimensions.html new file mode 100644 index 000000000..c63e0a7fd --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementDimensions.html @@ -0,0 +1,838 @@ + + + + ElementDimensions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementDimensions

+
+
+ +
public struct ElementDimensions : Equatable
+ +
+
+

An element’s size and its alignment guides in its own coordinate space.

+ +

You can access the size of the element through the width and height properties. You can +access alignment guide values by subscripting with the specific alignment.

+ +

These dimensions are typically used when setting an alignment guide on a stack, with +StackElement.add(...).

+

Example

+
// get the alignment guide value for `VerticalAlignment.center`, falling back to the default
+// value if no alignment guide has been set
+dimensions[VerticalAlignment.center]
+
+// get the alignment guide value for `HorizontalAlignment.trailing`, or `nil` if none has been
+// set.
+dimensions[explicit: .trailing]
+
+

See Also

+ +

StackElement.add()

+ +
+
+ +
+
+
+
    +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The element’s width

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var width: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The element’s height

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var height: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Accesses the value of the given guide, or the default value of the alignment if this +guide has not been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) subscript(guide: HorizontalAlignment) -> CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Accesses the value of the given guide, or the default value of the alignment if this +guide has not been set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) subscript(guide: VerticalAlignment) -> CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(explicit:) + +
    +
    +
    +
    +
    +
    +

    Returns the explicit value of the given alignment guide in this view, or +nil if no such value exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(explicit guide: HorizontalAlignment) -> CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(explicit:) + +
    +
    +
    +
    +
    +
    +

    Returns the explicit value of the given alignment guide in this view, or +nil if no such value exists.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(explicit guide: VerticalAlignment) -> CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview.html new file mode 100644 index 000000000..bd7626710 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview.html @@ -0,0 +1,919 @@ + + + + ElementPreview Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ElementPreview

+
+
+ +
@available(iOS 13.0, *)
+public struct ElementPreview : View
+ +
+
+

A SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements +via Xcode’s preview functionality (enable via the Editor > Canvas menu).

+ +

You can leverage ElementPreview by adding something like this to the bottom of the file which contains +your Blueprint element, then as you edit and work on your element, the live preview will update to show the +current state of your element:

+

+struct MyElement : Element {
+   ...
+}
+
+// Add this at the bottom of your element's source file.
+
+#if DEBUG && canImport(SwiftUI) && !arch(i386) && !arch(arm)
+
+import SwiftUI
+
+@available(iOS 13.0, *)
+struct MyElement_Preview: PreviewProvider {
+    static var previews: some View {
+        ElementPreview {
+            MyElement()
+        }
+    }
+}
+
+#endif
+
+
+

Uhhh

+ +

You’re probably asking… +Why the !arch(i386) check above? Turns out, a compiler bug! +SwiftUI is only available on 64 bit devices, but the canImport check erroneously +finds it when building to target iOS 10 devices. Until we drop iOS 10, this part of the check is also required.

+

Details

+ +

It’s important that you keep the PreviewProvider in the same file as the element that you are editing.

+ +

Why? Xcode uses a new feature called “Dynamic Replacement” to re-compile the source file you are editing, +and inject it back into the running app which drives the preview. This only works on the level of a single +file – if your preview and element live in separate files, Xcode needs to recompile your entire module +which will slow down preview updates greatly.

+ +

You can learn more about Xcode previews here: https://nshipster.com/swiftui-previews/

+

Requirements

+ +

You must be running Xcode 11 and Catalina to take advantage of live previews. +They do not work on Mojave. Your selected simulator must also be an iOS 13 device.

+ +
+
+ +
+
+
+
+ + +
+ +

Properties +

+
+
+
    +
  • +
    + + + + ElementProvider + +
    +
    +
    +
    +
    +
    +

    A provider which returns a new element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ElementProvider = () -> Element
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Initialization +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with several common devices that your users may use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func commonDevices(
    +    named name: String = "",
    +    with provider: @escaping ElementProvider
    +) -> Self
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with the provided preview type. +If you do not pass a preview type, .thatFits is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    named name: String = "",
    +    with previewType: PreviewType = .thatFits(),
    +    with provider: @escaping ElementProvider
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new ElementPreview with the provided preview types.

    + +

    You can pass as many preview types as you would like to see your +element rendered in those different environments.

    + +

    If you do not pass a preview type, .thatFits is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    named name: String = "",
    +    with previewTypes: [PreviewType],
    +    with provider: @escaping ElementProvider
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

View +

+
+
+
    +
  • +
    + + + + body + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var body: some View { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PreviewType + +
    +
    +
    +
    +
    +
    +

    The preview type to use to display an element in an Xcode preview.

    + +

    We provide three preview types: A specific device type, a fixed size, and the size that fits the view.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum PreviewType
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview/PreviewType.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview/PreviewType.html new file mode 100644 index 000000000..cbf37b14d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ElementPreview/PreviewType.html @@ -0,0 +1,795 @@ + + + + PreviewType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PreviewType

+
+
+ +
public enum PreviewType
+ +
+
+

The preview type to use to display an element in an Xcode preview.

+ +

We provide three preview types: A specific device type, a fixed size, and the size that fits the view.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + device(_:) + +
    +
    +
    +
    +
    +
    +

    The preview will be inside the provided device (eg, iPhone X).

    + +

    Note: You can use the provided extension on PreviewDevice +to access devices in a type-safe way, eg: .device(.iPhone7).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case device(PreviewDevice)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fixed(width:height:) + +
    +
    +
    +
    +
    +
    +

    The preview will be the provided size

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed(width: CGFloat, height: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + thatFits(padding:) + +
    +
    +
    +
    +
    +
    +

    The preview will be as large as needed to preview the content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case thatFits(padding: CGFloat = 10.0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + identifier + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var identifier: AnyHashable { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func previewView(
    +    with name: String,
    +    for element: Element
    +) -> AnyView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Empty.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Empty.html new file mode 100644 index 000000000..7addaa570 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Empty.html @@ -0,0 +1,732 @@ + + + + Empty Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Empty

+
+
+ +
public struct Empty : Element
+ +
+
+

An empty Element which has no size and draws no content.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment.html new file mode 100644 index 000000000..771943ee3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment.html @@ -0,0 +1,1050 @@ + + + + Environment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Environment

+
+
+ +
public struct Environment
+ +
+
+

Environment is a container for values to be passed down an element tree.

+ +

Environment values are not resolved until the tree is being rendered, so they do not need to be +explicitly passed to elements at the time they are created.

+ +

Environment key-value pairs are strongly typed: keys are types conforming to the +EnvironmentKey protocol, and each key’s value is the type of that key’s +EnvironmentKey.Value associated value. Keys must provide a default value.

+

Example

+ +

To set an environment value, so that it will cascade to child elements, use +AdaptedEnvironment. Here, every element in childElement will have access to someValue +via the key MyEnvironmentKey.

+
AdaptedEnvironment(
+    key: MyEnvironmentKey.self,
+    value: someValue,
+    wrapping: childElement
+)
+
+ +

To read an environment value, use EnvironmentReader. If this element were part of the child +element in the previous example, myValue would be set to someValue. If the key had not +been set in an ancestor element, the value would be MyEnvironmentKey.defaultValue.

+
struct MyElement: ProxyElement {
+    var elementRepresentation: Element {
+        return EnvironmentReader { environment -> Element in
+            let myValue = environment[MyEnvironmentKey.self]
+            return SomeElement(using: myValue)
+        }
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + empty + +
    +
    +
    +
    +
    +
    +

    A default “empty” environment, with no values overridden. +Each key will return its default value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let empty: Environment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Gets or sets an environment value by its key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Key>(key: Key.Type) -> Key.Value where Key : EnvironmentKey { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The localised accessibility label elements should use when handling links.

    + +

    Defaults to UIImage(systemName: "link")?.accessibilityLabel.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkAccessibilityLabel: String? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + calendar + +
    +
    +
    +
    +
    +
    +

    The current calendar that elements should use when handling dates.

    + +

    Defaults to Calendar.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var calendar: Calendar { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + displayScale + +
    +
    +
    +
    +
    +
    +

    The display scale of this environment.

    + +

    This value is the number of pixels per point. A value of 1.0 indicates non-Retina screens, +2.0 indicates 2x Retina screens, etc.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var displayScale: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutDirection + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutDirection : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutDirection + +
    +
    +
    +
    +
    +
    +

    The layout direction associated with the current environment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutDirection: LayoutDirection { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locale + +
    +
    +
    +
    +
    +
    +

    The current locale that elements should use.

    + +

    Defaults to Locale.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locale: Locale { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + safeAreaInsets + +
    +
    +
    +
    +
    +
    +

    The insets representing the safe area for content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var safeAreaInsets: UIEdgeInsets { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeZone + +
    +
    +
    +
    +
    +
    +

    The current time zone that elements should use when handling dates.

    + +

    Defaults to TimeZone.current.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var timeZone: TimeZone { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + windowSize + +
    +
    +
    +
    +
    +
    +

    The size of the window that contains the hosting BlueprintView. +Defaults to nil if the hosting view is not in a window.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var windowSize: CGSize? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutMode + +
    +
    +
    +
    +
    +
    +

    This mode will be inherited by descendant BlueprintViews that do not have an explicit +mode set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var layoutMode: LayoutMode { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + urlHandler + +
    +
    +
    +
    +
    +
    +

    The link handler to use to open links tapped in an AttributedLabel.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var urlHandler: URLHandler { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment/LayoutDirection.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment/LayoutDirection.html new file mode 100644 index 000000000..340828058 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Environment/LayoutDirection.html @@ -0,0 +1,705 @@ + + + + LayoutDirection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutDirection

+
+
+ +
public enum LayoutDirection : Hashable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + leftToRight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leftToRight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + rightToLeft + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rightToLeft
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EnvironmentReader.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EnvironmentReader.html new file mode 100644 index 000000000..94ea40e2e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EnvironmentReader.html @@ -0,0 +1,750 @@ + + + + EnvironmentReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EnvironmentReader

+
+
+ +
public struct EnvironmentReader : Element
+ +
+
+

An element that dynamically builds its content based on the environment.

+ +

Use this element to build elements whose contents may change depending on the Environment.

+

Example

+
EnvironmentReader { environment -> Element in
+    MyElement(
+        foo: environment.foo
+    )
+}
+
+
+

Seealso

+ ProxyElement + +
+

Seealso

+ Environment + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack.html new file mode 100644 index 000000000..11e9f4d8d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack.html @@ -0,0 +1,998 @@ + + + + EqualStack Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

EqualStack

+
+
+ +
public struct EqualStack : Element
+ +
+
+

An element that sizes its children equally, stacking them in the primary axis according to +the specified direction and spacing them according to the specified spacing. In the +secondary axis, children are justified to fill the space of the largest child.

+
+

Note

+ A stack measures itself by determining its largest child in each axis, and + in the case of the primary axis, multiplying by children.count (accounting + for spacing as necessary). + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + direction + +
    +
    +
    +
    +
    +
    +

    The direction in which this element will stack its children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var direction: Direction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spacing + +
    +
    +
    +
    +
    +
    +

    The amount of space between children in this element. Defaults to 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements to be laid out. Defaults to an empty array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Element]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    direction: Direction,
    +    configure: (inout EqualStack) -> Void = { _ in }
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + direction + + +
    +

    The direction in which this element will stack its children.

    +
    +
    + + configure + + +
    +

    A closure allowing the element to be further customized. Defaults to a no-op.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaritively build up a stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    direction: Direction,
    +    spacing: CGFloat = 0,
    +    @ElementBuilder<Child> elements: () -> [Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + direction + + +
    +

    Direction of the stack.

    +
    +
    + + children + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(child:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(child: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Direction + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Direction
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Child.html new file mode 100644 index 000000000..f0cfd8b31 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Child.html @@ -0,0 +1,705 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child : ElementBuilderChild
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Direction.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Direction.html new file mode 100644 index 000000000..1bb59fa98 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/EqualStack/Direction.html @@ -0,0 +1,705 @@ + + + + Direction Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Direction

+
+
+ +
public enum Direction
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow.html new file mode 100644 index 000000000..fbe35e7cf --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow.html @@ -0,0 +1,995 @@ + + + + Flow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Flow

+
+
+ +
public struct Flow : Element
+ +
+
+

Element which lays out children horizontally, wrapping to another row when there is not enough space.

+ +

You may control the layout of each row within the flow layout, by providing a LineAlignment, +which controls the horizontal alignment of content within a row when it is smaller than its container, +and via ItemAlignment, which controls the vertical alignment of shorter elements within a row.

+
Flow(itemSpacing: 10, lineSpacing: 10) {
+    OnboardingPill("Food / drink")
+    OnboardingPill("Retail goods").flowChild(key: "aKey")
+    OnboardingPill("Grocery / gourmet / alcohol")
+    OnboardingPill("Beauty / wellness bookings")
+    OnboardingPill("Healthcare services")
+    OnboardingPill("Something else")
+}
+
+ +

Below is a diagram showing a simple example of a Flow layout.

+
┌─────────────────────────────────────┐
+ ┌─────────┐┌─────────┐┌────────────┐│
+     1    ││    2    ││     3      ││
+ └─────────┘└─────────┘└────────────┘│
+ ┌───────┐┌─────┐┌───────────┐       
+    4   ││  5  ││     6            
+ └───────┘└─────┘└───────────┘       
+└─────────────────────────────────────┘
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + lineAlignment + +
    +
    +
    +
    +
    +
    +

    How to align each row when there is extra horizontal space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineAlignment: LineAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineSpacing + +
    +
    +
    +
    +
    +
    +

    Space between lines in the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemAlignment + +
    +
    +
    +
    +
    +
    +

    How to align items in a line when there is extra vertical space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemAlignment: ItemAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemSpacing + +
    +
    +
    +
    +
    +
    +

    Space between items within a line.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements of the flow layout to be laid out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new flow layout with the provided parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    lineAlignment: LineAlignment = .leading,
    +    lineSpacing: CGFloat = 0,
    +    itemAlignment: ItemAlignment = .center,
    +    itemSpacing: CGFloat = 0,
    +    @ElementBuilder<Flow.Child> _ children: () -> [Flow.Child]
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineAlignment + +
    +
    +
    +
    +
    +
    +

    How to horizontally align the line when there is extra space.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LineAlignment : CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ItemAlignment + +
    +
    +
    +
    +
    +
    +

    How to vertically align items which there is extra space.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ItemAlignment : CaseIterable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child placed within the flow layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/Child.html new file mode 100644 index 000000000..d9a4f75a3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/Child.html @@ -0,0 +1,815 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child : ElementBuilderChild
+ +
+
+

A child placed within the flow layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key used to optionally unique the child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    +

    The traits of a child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var traits: Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element representing the child item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates a new child item with the given element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:key:) + +
    +
    +
    +
    +
    +
    +

    Creates a new child item with the given element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element, key: AnyHashable? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Traits
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/ItemAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/ItemAlignment.html new file mode 100644 index 000000000..020a72291 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/ItemAlignment.html @@ -0,0 +1,762 @@ + + + + ItemAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ItemAlignment

+
+
+ +
public enum ItemAlignment : CaseIterable
+ +
+
+

How to vertically align items which there is extra space.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Shorter items are stretched to fill the height of the tallest item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Shorter items are aligned to the top of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Shorter items are vertically aligned within the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Shorter items are aligned to the bottom of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/LineAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/LineAlignment.html new file mode 100644 index 000000000..9ff60f240 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Flow/LineAlignment.html @@ -0,0 +1,735 @@ + + + + LineAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LineAlignment

+
+
+ +
public enum LineAlignment : CaseIterable
+ +
+
+

How to horizontally align the line when there is extra space.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Items are aligned with the leading edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leading
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Items are centered within the remaining space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Items are aligned with the trailing edge.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case trailing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusBinding.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusBinding.html new file mode 100644 index 000000000..5b339b573 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusBinding.html @@ -0,0 +1,829 @@ + + + + FocusBinding Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusBinding

+
+
+ +
public struct FocusBinding
+ +
+
+

A two-way binding between a focusable element’s backing view and a FocusState-wrapped +property.

+ +

Generally you should not need to interact with this type directly. However, you can use focus +bindings to add focus support to custom elements.

+

Adding Focus Bindings

+ +

On a FocusState, call the binding(for:) method to get a binding bound to an optional value, +or binding() to get a binding bound to a boolean.

+ +

To set up the 2-way binding, there are 2 steps:

+ +
    +
  1. Assign actions to the nested FocusTrigger, so that your backing view is updated when the +FocusState‘s value changes.

  2. +
  3. Call the onFocus and onBlur callbacks when your backing view gains or loses focus, so +that the value of the bound FocusState is updated.

  4. +
+

Example

+
final class FocusableView: UIView {
+    var focusBinding: FocusBinding? {
+        didSet {
+            oldValue?.trigger.focusAction = nil
+            oldValue?.trigger.blurAction = nil
+
+            guard let focusBinding = focusBinding else { return }
+
+            focusBinding.trigger.focusAction = { [weak self] in
+                self?.becomeFirstResponder()
+            }
+            focusBinding.trigger.blurAction = { [weak self] in
+                self?.resignFirstResponder()
+            }
+
+            if isFirstResponder {
+                focusBinding.onFocus()
+            } else {
+                focusBinding.onBlur()
+            }
+        }
+    }
+
+    @discardableResult
+    override func becomeFirstResponder() -> Bool {
+        let focused = super.becomeFirstResponder()
+        if focused {
+            focusBinding?.onFocus()
+        }
+        return focused
+    }
+
+    @discardableResult
+    override func resignFirstResponder() -> Bool {
+        let blurred = super.resignFirstResponder()
+        if blurred {
+            focusBinding?.onBlur()
+        }
+        return blurred
+    }
+}
+
+ +
    +
  • Tag: FocusBinding
  • +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + trigger + +
    +
    +
    +
    +
    +
    +

    A trigger, which is responsible for piping focus changes from a FocusState into a backing +view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let trigger: FocusTrigger
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onFocus + +
    +
    +
    +
    +
    +
    +

    A callback to be called by a backing view when it is focused, to pipe changes from a backing +view to a bound FocusState.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onFocus: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onBlur + +
    +
    +
    +
    +
    +
    +

    A callback to be called by a backing view when it loses focus, to pipe changes from a +backing view to a bound FocusState.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onBlur: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(onFocus:onBlur:) + +
    +
    +
    +
    +
    +
    +

    Creates a new binding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(onFocus: @escaping () -> Void, onBlur: @escaping () -> Void)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusState.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusState.html new file mode 100644 index 000000000..db30ad466 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/FocusState.html @@ -0,0 +1,956 @@ + + + + FocusState Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FocusState

+
+
+ +
@propertyWrapper
+public struct FocusState<Value> where Value : Hashable
+ +
+
+

A property wrapper type that can read and write a value that represents the placement of focus.

+ +

Use this property wrapper in conjunction with modifiers on elements that support focus, such as +TextField.focused(when:equals:) and TextField.focused(when:), to describe when those elements +should have focus. When focus enters the modified element, the wrapped value of this property +updates to match a given value. Similarly, when focus leaves, the wrapped value of this property +resets to nil or false. Setting this property’s value programmatically has the reverse +effect, causing focus to move to the element associated with the updated value.

+ +

In the following example of a simple login screen, when the user presses the Sign In button and +one of the fields is still empty, focus moves to that field. Otherwise, the sign-in process +proceeds.

+
struct LoginForm: ProxyElement {
+    enum Field: Hashable {
+        case username
+        case password
+    }
+
+    var username: String
+    var password: String
+    var handleLogin: () -> Void
+
+    @FocusState private var focusedField: Field?
+
+    var elementRepresentation: Element {
+        Column { column in
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .username)
+            )
+
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .password)
+            )
+
+            column.add(
+                child: Button(
+                    onTap: {
+                        if username.isEmpty {
+                            focusedField = .username
+                        } else if password.isEmpty {
+                            focusedField = .password
+                        } else {
+                            handleLogin()
+                        }
+                    },
+                    wrapping: Label(text: "Sign In")
+                )
+            )
+        }
+    }
+}
+
+ +

To allow for cases where focus is completely absent from a view tree, the wrapped value must be +either an optional or a Boolean. Set the focus binding to false or nil as appropriate to +remove focus from all bound fields. You can also use this to remove focus from a TextField +and thereby dismiss the keyboard.

+

Auto-Focus

+ +

To auto-focus a field when it appears, set the value in an onAppear hook.

+
struct Example: ProxyElement {
+    @FocusState var isFocused: Bool
+
+    var elementRepresentation: Element {
+        TextField(text: "")
+            .focused(when: $isFocused)
+            .onAppear {
+                isFocused = true
+            }
+    }
+}
+
+

Avoid Ambiguous Focus Bindings

+ +

A TextField can have only one focus binding, stored in its focusBinding property. If you apply +the focused modifier multiple times, the last one will overwrite the previous value.

+ +

On the other hand, binding the same value to two views is ambiguous. In the following example, +two separate fields bind focus to the name value:

+
struct Content: ProxyElement {
+    enum Field: Hashable {
+        case name
+        case fullName
+    }
+
+    @FocusState private var focusedField: Field?
+
+    var elementRepresentation: Element {
+        Column { column in
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .name)
+            )
+
+            column.add(
+                child: TextField(text: "")
+                    .focused(when: $focusedField, equals: .name) // incorrect re-use of .name
+            )
+        }
+    }
+}
+
+ +

If the user moves focus to either field, the focusedField binding updates to name. However, +if the app programmatically sets the value to name, the last field bound will be chosen.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Creates a focus state that binds to a Boolean.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init() where Value == Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Creates a focus state that binds to an optional type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<T>() where Value == T?, T : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedValue + +
    +
    +
    +
    +
    +
    +

    The current state value, taking into account whatever bindings might be +in effect due to the current location of focus.

    + +

    When focus is not in any view that is bound to this state, the wrapped +value will be nil (for optional-typed state) or false (for Bool- +typed state).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedValue: Value { get nonmutating set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + projectedValue + +
    +
    +
    +
    +
    +
    +

    A projection of the focus state that can be bound to focusable elements.

    + +

    Use this property wrapper in conjunction with modifiers on elements that support focus, such +as TextField.focused(when:equals) and TextField.focused(when:), to describe when those +elements should have focus.

    + +

    To add focus support to a custom element, use one of the methods on this projection to +retrieve a FocusBinding: binding() for Bool values and binding(for:) for optional +values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var projectedValue: `Self` { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binding(for:) + +
    +
    +
    +
    +
    +
    +

    Gets a focus binding associated with the FocusState being a specific value.

    + +

    You can use this binding to add focus support to a custom element.

    + +

    When the FocusState property is set to this value, the binding’s focus trigger will +fire, and when the property is set to another value, the binding’s blur trigger will fire. +Similarly, calling the onFocus callback will set the FocusState to this value, and the +onBlur callback will set it to nil.

    +

    See Also

    + +

    FocusBinding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func binding<T>(for value: T) -> FocusBinding where Value == T?, T : Hashable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binding() + +
    +
    +
    +
    +
    +
    +

    Gets a focus binding associated with the FocusState value being true.

    + +

    You can use this binding to add focus support to a custom element.

    + +

    When the FocusState property is set to true, the binding’s focus trigger will fire, and +when the property is set to false, the binding’s blur trigger will fire. Similarly, +calling the onFocus callback will set the FocusState to true, and the onBlur callback +will set it to false.

    +

    See Also

    + +

    FocusBinding

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func binding() -> FocusBinding where Value == Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryProxy.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryProxy.html new file mode 100644 index 000000000..9430ff65f --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryProxy.html @@ -0,0 +1,708 @@ + + + + GeometryProxy Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GeometryProxy

+
+
+ +
public struct GeometryProxy
+ +
+
+

Contains information about the current layout being measured by GeometryReader

+ +
+
+ +
+
+
+
    +
  • +
    + + + + constraint + +
    +
    +
    +
    +
    +
    +

    The size constraint of the element being laid out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var constraint: SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(element:in:) + +
    +
    +
    +
    +
    +
    +

    Measure the given element, constrained to the same size as the GeometryProxy itself (unless a constraint is explicitly provided).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(element: Element, in explicit: SizeConstraint? = nil) -> CGSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryReader.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryReader.html new file mode 100644 index 000000000..4687817b0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GeometryReader.html @@ -0,0 +1,749 @@ + + + + GeometryReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GeometryReader

+
+
+ +
public struct GeometryReader : Element
+ +
+
+

An element that dynamically builds its content based on the available space.

+ +

Use this element to build elements whose contents may change responsively to +different layouts.

+

Example

+
GeometryReader { (geometry) -> Element in
+    let image: UIImage
+    switch geometry.constraint.width.maximum {
+    case ..<100:
+        image = UIImage(named: "small")!
+    case 100..<500:
+        image = UIImage(named: "medium")!
+    default:
+        image = UIImage(named: "large")!
+    }
+    return Image(image: image)
+}
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow.html new file mode 100644 index 000000000..fcf9fb4ea --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow.html @@ -0,0 +1,1056 @@ + + + + GridRow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GridRow

+
+
+ +
public struct GridRow : Element
+ +
+
+

Like Row, GridRow displays a list of items in a linear horizontal layout. Unlike Row, GridRow provides +convenience for describing columnar layout.

+ +

Horizontally, GridRow children are stretched to fill the available space. Vertically, children are aligned +according to the verticalAlignment property.

+ +

Children may be sized proportionally or absolutely. Proportionally-sized children are granted a proportion of +the total layout space after absolutely-sized children and margins have been subtracted.

+

Example:

+
GridRow { row in
+  row.verticalAlignment = .fill
+  row.spacing = 8.0
+  row.add(width: .proportional(0.75), child: name)
+  row.add(width: .proportional(0.25), child: number)
+  row.add(width: .absolute(100), child: status)
+}
+
+

Expected layout:

+
┌────────────────────────────┬─┬────────┬─┬──────────────────┐
+            name              number        status      
+            (75%)           8  (25%) 8     (100 pts)    
+                                                        
+●──────────── 150 ───────────● ●── 50 ──● ●─────── 100 ──────●
+└────────────────────────────┴─┴────────┴─┴──────────────────┘
+●──────────────────────────── 316 ───────────────────────────●
+
+ +
+
+ +
+
+
+
+ + +
+ +

properties +

+
+
+
    +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    How children are aligned vertically. By default, .fill.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spacing + +
    +
    +
    +
    +
    +
    +

    The space between children. By default, 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The child elements to be laid out. By default, an empty array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

initialization +

+
+
+
    +
  • +
    + + + + init(configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(configure: (inout GridRow) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaritively build up a grid row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    verticalAlignment: Row.RowAlignment = .fill,
    +    spacing: CGFloat = 0,
    +    @ElementBuilder<Child> _ elements: () -> [Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + verticalAlignment + + +
    +

    How children are aligned vertically. By default, .fill.

    +
    +
    + + spacing + + +
    +

    The space between children. By default, 0.

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the row.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

mutations +

+
+
+
    +
  • +
    + + + + add(width:key:child:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(width: Width, key: AnyHashable? = nil, child: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

GridRow+Element +

+
+
+ +
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child of a GridRow.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child
    +
    extension GridRow.Child: ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Width + +
    +
    +
    +
    +
    +
    +

    The sizing and content of a GridRow child.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Width : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Child.html new file mode 100644 index 000000000..b97040d79 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Child.html @@ -0,0 +1,822 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension GridRow.Child: ElementBuilderChild
+ +
+
+

A child of a GridRow.

+ +
+
+ +
+
+
+
+ + +
+ +

properties +

+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element displayed in the Grid.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    A unique identifier for the child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Width
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

initialialization +

+
+
+ +
+
+
+ + +
+ +

child modeling +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Width.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Width.html new file mode 100644 index 000000000..1ac20ed2a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/GridRow/Width.html @@ -0,0 +1,719 @@ + + + + Width Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Width

+
+
+ +
public enum Width : Equatable
+ +
+
+

The sizing and content of a GridRow child.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + absolute(_:) + +
    +
    +
    +
    +
    +
    +

    Assign the child a fixed width equal to the payload.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case absolute(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + proportional(_:) + +
    +
    +
    +
    +
    +
    +

    Assign the child a proportional width of the available layout width. Note that proportional children +take proportional shares of the available layout width.

    +

    Example:

    +
    Available layout width: 100
    +Child A: .proportional(1)  -> 25 (100 * 1/4)
    +Child B: .proportional(3) -> 75 (100 * 3/4)
    +
    +

    Example:

    +
    Available layout width: 100
    +Child A: .proportional(0.25)  -> 25 (100 * 1/4)
    +Child B: .proportional(0.75) -> 75 (100 * 3/4)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case proportional(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Hidden.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Hidden.html new file mode 100644 index 000000000..6dfa04771 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Hidden.html @@ -0,0 +1,789 @@ + + + + Hidden Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Hidden

+
+
+ +
public struct Hidden : Element
+ +
+
+

Hidden conditionally hides its wrapped element.

+
+

Note

+ When an element is hidden, any elements within the wrapped element will be hidden. + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/HorizontalAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/HorizontalAlignment.html new file mode 100644 index 000000000..6ad290654 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/HorizontalAlignment.html @@ -0,0 +1,816 @@ + + + + HorizontalAlignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

HorizontalAlignment

+
+
+ +
public struct HorizontalAlignment : Equatable, CustomStringConvertible
+ +
+
+

An alignment position along the horizontal axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an instance with the given ID.

    + +

    Note: each instance should have a unique ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ id: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: HorizontalAlignment, rhs: HorizontalAlignment) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A guide marking the leading edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the horizontal center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A guide marking the trailing edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: HorizontalAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image.html new file mode 100644 index 000000000..db5b17528 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image.html @@ -0,0 +1,877 @@ + + + + Image Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Image

+
+
+ +
public struct Image : Element
+ +
+
+

Displays an image within an element hierarchy.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    The image to be displayed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintColor + +
    +
    +
    +
    +
    +
    +

    The tint color.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintColor: UIColor?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentMode + +
    +
    +
    +
    +
    +
    +

    The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentMode: ContentMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    iOS 14 added support for Image Descriptions using VoiceOver. This is not always appropriate. +Set this to true to prevent VoiceOver from describing the displayed image.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var blockAccessibilityDescription: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an image element with the given UIImage instance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    image: UIImage?,
    +    contentMode: ContentMode = .aspectFill,
    +    tintColor: UIColor? = nil,
    +    blockAccessibilityDescription: Bool = false
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentMode + +
    +
    +
    +
    +
    +
    +

    The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentMode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image/ContentMode.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image/ContentMode.html new file mode 100644 index 000000000..30999e66a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Image/ContentMode.html @@ -0,0 +1,772 @@ + + + + ContentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentMode

+
+
+ +
public enum ContentMode
+ +
+
+

The content mode determines the layout of the image when its size does +not precisely match the size that the element is assigned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    The image is not scaled, and is simply centered within the Image +element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stretch + +
    +
    +
    +
    +
    +
    +

    The image is stretched to fill the Image element, causing the image +to become distorted if its aspect ratio is different than that of the +containing element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stretch
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectFit + +
    +
    +
    +
    +
    +
    +

    The image is scaled to touch the edges of the Image element while +maintaining the image’s aspect ratio. If the aspect ratio of the +image is different than that of the element, the image will be +letterboxed or pillarboxed as needed to ensure that the entire +image is visible within the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aspectFit
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + aspectFill + +
    +
    +
    +
    +
    +
    +

    The image is scaled to fill the entire Image element. If the aspect +ratio of the image is different than that of the element, the image +will be cropped to match the element’s aspect ratio.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case aspectFill
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Inset.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Inset.html new file mode 100644 index 000000000..e409ad472 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Inset.html @@ -0,0 +1,976 @@ + + + + Inset Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Inset

+
+
+ +
public struct Inset : Element
+ +
+
+

Insets a content element within a layout.

+ +

Commonly used to add padding around another element when displayed within a container.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The wrapped element to be inset.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    The amount to inset the content element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var top: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bottom: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var left: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var right: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    top: CGFloat = 0.0,
    +    bottom: CGFloat = 0.0,
    +    left: CGFloat = 0.0,
    +    right: CGFloat = 0.0,
    +    wrapping element: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(uniformInset: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(insets: UIEdgeInsets, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(sideInsets: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(vertical: CGFloat, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Keyed.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Keyed.html new file mode 100644 index 000000000..994fd23de --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Keyed.html @@ -0,0 +1,809 @@ + + + + Keyed Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Keyed

+
+
+ +
public struct Keyed : Element
+ +
+
+

Keyed allows providing a Hashable value which is used +during view updates to uniquely identify content during the diff process +between the old and new element structure.

+ +

This is useful if you have two elements of the same type at the same depth +in the element hierarchy, and you’d like to differentiate between them, eg +for appearance transition purposes.

+

Example

+ +

Keying the image returned, so that a transition occurs when changing +between a placeholder image and an available photo.

+
func imageElement() -> Element {
+    if let photo = self.photo {
+        return Image(image: photo)
+                .transition(.fade)
+                .keyed("photo")
+    } else {
+        return Image(image: self.placeholder)
+                .transition(.fade)
+                .keyed("placeholder")
+    }
+}
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key used to differentiate the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    +

    The wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(key:wrapping:) + +
    +
    +
    +
    +
    +
    +

    Creates a new Keyed element with the provided key and wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(key: AnyHashable?, wrapping: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label.html new file mode 100644 index 000000000..c40ed4e7f --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label.html @@ -0,0 +1,1159 @@ + + + + Label Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Label

+
+
+ +
public struct Label : ProxyElement
+ +
+
+

Displays text content.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    The text to be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alignment: NSTextAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + numberOfLines + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var numberOfLines: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineBreakMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineBreakMode: NSLineBreakMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + lineHeight + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lineHeight: LineHeight
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label reduces the text’s font +size to fit the title string into the label’s bounding rectangle.

    + +

    Normally, the label draws the text with the font you specify in the font property. +If this property is true, and the text in the text property exceeds the label’s bounding rectangle, +the label reduces the font size until the text fits or it has scaled the font down to the minimum +font size. The default value for this property is false.

    + +

    If you change it to true, be sure that you also set an appropriate minimum +font scale by modifying the minimumScaleFactor property.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var adjustsFontSizeToFitWidth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumScaleFactor + +
    +
    +
    +
    +
    +
    +

    The minimum scale factor for the label’s text.

    + +

    If the adjustsFontSizeToFitWidth is true, use this property to specify the +smallest multiplier for the current font size that yields an acceptable +font size for the label’s text.

    + +

    If you specify a value of 0 for this property, the label doesn’t scale the text down. +The default value of this property is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumScaleFactor: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A Boolean value that determines whether the label tightens text before truncating.

    + +

    When the value of this property is true, the label tightens intercharacter spacing +of its text before allowing any truncation to occur. The label determines the +maximum amount of tightening automatically based on the font, current line width, +line break mode, and other relevant information.

    + +

    This autoshrinking behavior is only intended for use with a single-line label.

    + +

    The default value of this property is false.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var allowsDefaultTighteningForTruncation: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shadow + +
    +
    +
    +
    +
    +
    +

    A shadow to display behind the label’s text. Defaults to no shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadow: TextShadow?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines if the label should be included when navigating the UI via accessibility.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAccessibilityElement: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityHint + +
    +
    +
    +
    +
    +
    +

    A localized string that describes the result of performing an action on the element, when the result is non-obvious.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityHint: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the label, these will be merged with any existing traits.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    An array containing one or more AccessibilityElement.CustomActions, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityCustomActions: [AccessibilityElement.CustomAction]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String, configure: (inout Label) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineHeight + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LineHeight : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight.html new file mode 100644 index 000000000..448cede09 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight.html @@ -0,0 +1,734 @@ + + + + LineHeight Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LineHeight

+
+
+ +
public enum LineHeight : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Alignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    +

    Use the default line height of the label’s font.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case font
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Use a custom line height and alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(lineHeight: CGFloat, alignment: Alignment = .bottom)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight/Alignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight/Alignment.html new file mode 100644 index 000000000..6aedb61c7 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Label/LineHeight/Alignment.html @@ -0,0 +1,737 @@ + + + + Alignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public enum Alignment : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Align text to the top of the available line height, with extra space added at the bottom. +This makes line height behave like traditional leading.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case top
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Center text within the available line height. This makes line height behave like half-leading, +and matches the model used by CSS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case center
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Align text to the bottom of the available line height, with extra space added at the top. +This is the default behavior of UILabel on iOS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottom
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutAttributes.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutAttributes.html new file mode 100644 index 000000000..a80814ff0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutAttributes.html @@ -0,0 +1,1053 @@ + + + + LayoutAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutAttributes

+
+
+ +
public struct LayoutAttributes
+
extension LayoutAttributes: Equatable
+ +
+
+

Contains layout-related metrics for an element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.center.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var center: CGPoint { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.bounds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bounds: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.layer.transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.alpha.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Corresponds to UIView.isUserInteractionEnabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isHidden + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.isHidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isHidden: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.tintAdjustmentMode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(frame: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(size:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(center:bounds:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(center: CGPoint, bounds: CGRect)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frame + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frame: CGRect { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + within(_:) + +
    +
    +
    +
    +
    +
    +

    Concatenates layout attributes, moving the receiver from the local +coordinate space of layoutAttributes and into its parent coordinate +space.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func within(_ layoutAttributes: LayoutAttributes) -> LayoutAttributes
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + layoutAttributes + + +
    +

    Another layout attributes object representing +a parent coordinate space.

    +
    +
    +
    +
    +

    Return Value

    +

    The resulting combined layout attributes object.

    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: LayoutAttributes, rhs: LayoutAttributes) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutOptions.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutOptions.html new file mode 100644 index 000000000..fc92b204d --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutOptions.html @@ -0,0 +1,768 @@ + + + + LayoutOptions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutOptions

+
+
+ +
public struct LayoutOptions : Equatable
+ +
+
+

Configuration options for caffeinated.

+ +

Generally these are only useful for experimenting with the performance profile of different +element compositions, and you should stick with default.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + default + +
    +
    +
    +
    +
    +
    +

    The default configuration.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let `default`: LayoutOptions
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + hintRangeBoundaries + +
    +
    +
    +
    +
    +
    +

    Enables aggressive cache hinting along the boundaries of the range between constraints and +measured sizes. Requires elements to conform to the Caffeinated Layout contract for correct +behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var hintRangeBoundaries: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Allows cache misses on finite constraints to deduce a range-based match by searching for a +hit on the unconstrained value for each axis. Requires elements to adhere to the Caffeinated +Layout contract for correct behavior.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var searchUnconstrainedKeys: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(hintRangeBoundaries: Bool, searchUnconstrainedKeys: Bool)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement.html new file mode 100644 index 000000000..64ff05980 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement.html @@ -0,0 +1,1031 @@ + + + + LayoutSubelement Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutSubelement

+
+
+ +
public struct LayoutSubelement
+ +
+
+

A proxy that represents one child element of a layout.

+ +

This type acts as a proxy for a child element in a Layout. Layout protocol methods receive a +LayoutSubelements collection that contains exactly one proxy for each of the child elements +managed by the layout.

+ +

Use this proxy to get information about the associated element, like its size and traits. You +should also use the proxy to tell its corresponding element where to appear by calling the +proxy’s place(at:anchor:size:) method. Do this once for each subview from your +implementation of the layout’s +placeSubelements(in:subelements:environment:cache:) method.

+
+

Note

+ The LayoutSubelement API, and its documentation, are modeled after SwiftUI’s +LayoutSubview, with major +differences noted. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    Optional attributes to apply to this subelement, such as opacity and transforms.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @LayoutSubelement
    +.Storage public var attributes: LayoutSubelement.Attributes { get nonmutating set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    Call this method from your implementation of the Layout protocol’s +placeSubelements(in:subelements:environment:cache:) method for each +subelement arranged by the layout. Provide a position within the container’s bounds where +the subelement should appear, an anchor that indicates which part of the subelement appears +at that point, and a size.

    + +

    To learn the subelement’s preferred size for a given proposal before calling this method, +you can call sizeThatFits(_:) method on the subelement.

    + +

    If you call this method more than once for a subelement, the last call takes precedence. If +you don’t call this method for a subelement, the subelement fills the bounds of its +container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    at position: CGPoint,
    +    anchor: UnitPoint = .topLeading,
    +    size: CGSize
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + position + + +
    +

    The place where the anchor of the subelement should appear in its container, +relative to the container’s bounds.

    +
    +
    + + anchor + + +
    +

    The unit point on the subelement that appears at position. You can use a +built-in point, like center, or you can create a custom UnitPoint.

    +
    +
    + + size + + +
    +

    The size of the subelement. In Blueprint, parents choose their children’s size. +You can determine a good size for a subelement by calling sizeThatFits(_:) on it.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + place(in:anchor:) + +
    +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    This is a convenience for calling place(at:anchor:size:) with frame.origin and +frame.size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    in frame: CGRect,
    +    anchor: UnitPoint = .topLeading
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + frame + + +
    +

    The position and size of the subelement. The origin of this frame represents the +place where the anchor of the subelement should appear in its container, relative to the +container’s bounds. In Blueprint, parents choose their children’s size. You can +determine a good size for a subelement by calling sizeThatFits(_:) on it.

    +
    +
    + + anchor + + +
    +

    The unit point on the subelement that appears at position. You can use a +built-in point, like center, or you can create a custom UnitPoint.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + place(filling:) + +
    +
    +
    +
    +
    +
    +

    Assigns a position and size to a subelement.

    + +

    This is a convenience for calling place(at:anchor:size:) with a position of .zero and +this size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func place(
    +    filling size: CGSize
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sizeThatFits(_:) + +
    +
    +
    +
    +
    +
    +

    Asks the subelement for its size.

    + +

    In Blueprint, elements are ultimately sized by their parents, but you can use this method to +determine the size that a subelement would prefer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sizeThatFits(_ proposal: SizeConstraint) -> CGSize
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + proposal + + +
    +

    A proposed size constraint for the subelement.

    +
    +
    +
    +
    +

    Return Value

    +

    The size that the subelement would choose for itself, given the proposal.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Gets the layout traits of the subelement.

    + +

    Use this method to access the layout-specific Traits value for this +subelement.

    +
    +

    Important

    +

    Only call this method with the type of your Layout. For compatibility with +legacy layout, this is the only type of traits supported.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func traits<LayoutType>(
    +    forLayoutType layoutType: LayoutType.Type
    +) -> LayoutType.Traits where LayoutType: Layout
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + layoutType + + +
    +

    The type of layout, which determines the type of the traits.

    +
    +
    +
    +
    +

    Return Value

    +

    The subelements’s layout traits.

    +
    +
    +
    +
  • +
  • +
    + + + + Attributes + +
    +
    +
    +
    +
    +
    +

    Optional additional attributes that can be applied to a subelement.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Attributes
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement/Attributes.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement/Attributes.html new file mode 100644 index 000000000..ed8aa062e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutSubelement/Attributes.html @@ -0,0 +1,789 @@ + + + + Attributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Attributes

+
+
+ +
public struct Attributes
+ +
+
+

Optional additional attributes that can be applied to a subelement.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.layer.transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.alpha.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Corresponds to UIView.isUserInteractionEnabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isHidden + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.isHidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isHidden: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    +

    Corresponds to UIView.tintAdjustmentMode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter.html new file mode 100644 index 000000000..f08d2c565 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter.html @@ -0,0 +1,938 @@ + + + + LayoutWriter Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutWriter

+
+
+ +
public struct LayoutWriter : Element
+ +
+
+

A parent element which allows arbitrary, custom layout and positioning of its children.

+ +

Instead of creating a custom Element with a custom Layout, you might use +this element to create a customized layout in a more lightweight way.

+
LayoutWriter { context, layout in
+    layout.add(with: myFrame, child: myElement)
+    layout.add(with: myOtherFrame, child: myOtherElement)
+
+    layout.sizing = .unionOfChildren
+}
+
+ +
+
+ +
+
+
+
+ + +
+ +

Initialization +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates a new instance of the LayoutWriter with the custom layout provided by the builder.

    + +

    The parameters to the closure are the Context, which provides information about +the environment and sizing of the layout, and the Builder itself, which you use to +add child elements to the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ build: @escaping Build)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Build + +
    +
    +
    +
    +
    +
    +

    The builder type passed to the LayoutWriter initializer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Build = (Context, inout Builder) -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + build + +
    +
    +
    +
    +
    +
    +

    The builder used to create the custom layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let build: Build
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+
    +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Builder + +
    +
    +
    +
    +
    +
    +

    The builder is the primary surface area you interact with when using a LayoutWriter.

    + +

    It provides you the ability to manage the sizing and measurement of the final layout, +alongside methods to add and manage the children of the layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Builder
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Context + +
    +
    +
    +
    +
    +
    +

    Provides the relevant information about the context in which the layout is occurring.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Context
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Sizing + +
    +
    +
    +
    +
    +
    +

    Controls the sizing calculation of the custom layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Sizing : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Child + +
    +
    +
    +
    +
    +
    +

    A child of the custom layout, providing its frame and element.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Child
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Builder.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Builder.html new file mode 100644 index 000000000..df0640038 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Builder.html @@ -0,0 +1,825 @@ + + + + Builder Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Builder

+
+
+ +
public struct Builder
+ +
+
+

The builder is the primary surface area you interact with when using a LayoutWriter.

+ +

It provides you the ability to manage the sizing and measurement of the final layout, +alongside methods to add and manage the children of the layout.

+ +
+
+ +
+
+
+
+ + +
+ +

Managing Sizing +

+
+
+
    +
  • +
    + + + + sizing + +
    +
    +
    +
    +
    +
    +

    How the size of the layout should be calculated. Defaults to .unionOfChildren, +which means the size will be big enough to contain the frames of all contained children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var sizing: Sizing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Managing Children +

+
+
+
    +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    The children of the custom layout, which specifies the child element and its frame.

    +

    Note

    + +

    You rarely need to access this property directly. Instead, add children via +the various provided add(...) methods. However, if you’re map-ing over an array +or other collection of content, using this property directly is useful.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(with:key:child:) + +
    +
    +
    +
    +
    +
    +

    Adds a new child element to the layout with the provided frame and optional key.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(
    +    with frame: CGRect,
    +    key: AnyHashable? = nil,
    +    child: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a new child element to the layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(_ child: Child)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + modifyEach(using:) + +
    +
    +
    +
    +
    +
    +

    Enumerates each of the children, allowing you to modify them in place, +eg to align them all along a common alignment axis or to set a uniform size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func modifyEach(using change: (inout Child) -> Void)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Child.html new file mode 100644 index 000000000..846ef98b4 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Child.html @@ -0,0 +1,766 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+ +
+
+

A child of the custom layout, providing its frame and element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + frame + +
    +
    +
    +
    +
    +
    +

    The frame of the element in the coordinate space of the custom layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frame: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    The key to use to disambiguate this element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The element to be displayed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new child element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    frame: CGRect,
    +    key: AnyHashable? = nil,
    +    element: Element
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context.html new file mode 100644 index 000000000..433e53d48 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context.html @@ -0,0 +1,739 @@ + + + + Context Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Context

+
+
+ +
public struct Context
+ +
+
+

Provides the relevant information about the context in which the layout is occurring.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size constraint the layout is occurring in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + phase + +
    +
    +
    +
    +
    +
    +

    The phase of the layout current occurring – measurement or layout.

    + +

    You can use this value to vary calculations as needed between phases; eg, to make +an element take up the full available size during the .layout phase, where sizing is known.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var phase: LayoutPhase
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutPhase + +
    +
    +
    +
    +
    +
    +

    The current phase of the layout event: .measurement or .layout.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LayoutPhase : Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context/LayoutPhase.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context/LayoutPhase.html new file mode 100644 index 000000000..471f7313e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Context/LayoutPhase.html @@ -0,0 +1,738 @@ + + + + LayoutPhase Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LayoutPhase

+
+
+ +
public enum LayoutPhase : Equatable
+ +
+
+

The current phase of the layout event: .measurement or .layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + measurement + +
    +
    +
    +
    +
    +
    +

    The element is being measured.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case measurement
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout(_:) + +
    +
    +
    +
    +
    +
    +

    The element is being laid out with a known size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case layout(CGSize)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the provided value based on if a measurement or layout is occurring.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onMeasure<Value>(
    +    _ onMeasure: () -> Value,
    +    onLayout: (CGSize) -> Value
    +) -> Value
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Sizing.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Sizing.html new file mode 100644 index 000000000..61b2a3eb0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LayoutWriter/Sizing.html @@ -0,0 +1,725 @@ + + + + Sizing Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Sizing

+
+
+ +
public enum Sizing : Equatable
+ +
+
+

Controls the sizing calculation of the custom layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unionOfChildren + +
    +
    +
    +
    +
    +
    +

    Ensures that the final size of element is large enough to fit all children, starting from (0,0).

    + +

    Negative origins of rects are not considered in this calculation. If you have the following layout:

    +
     ┌──────┐
    +       ├─────────┐
    +       *********
    + └─┬────┘**┌──────┤
    +   *******      
    +   *******      
    +┌──┴───┐***      
    +      ***      
    +      ***└──────┤
    +└──────┴──────────┘
    +
    + +

    The large rect will be the calculated size / bounds of the layout, starting at (0,0). Any rects with +negative origins will overhang the layout to the top or left, respectively.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unionOfChildren
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fixed(_:) + +
    +
    +
    +
    +
    +
    +

    Fixes the layout size to the provided size. Children are positioned within this size, starting at (0,0) +Any rects with negative origins will overhang the layout to the top or left, respectively.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed(CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LifecycleObserver.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LifecycleObserver.html new file mode 100644 index 000000000..e45e76ab2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/LifecycleObserver.html @@ -0,0 +1,874 @@ + + + + LifecycleObserver Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LifecycleObserver

+
+
+ +
public struct LifecycleObserver : Element
+ +
+
+

Allows element lifecycle callbacks to be inserted anywhere into the element tree.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrapped + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrapped: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onAppear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onDisappear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    onAppear: LifecycleCallback? = nil,
    +    onDisappear: LifecycleCallback? = nil,
    +    wrapping: Element
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element appears.

    + +

    Callbacks run in depth-first traversal order, with parents before children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onAppear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a hook that will be called when this element disappears.

    + +

    Callbacks run in depth-first traversal order, with parents before children. There is no +guaranteed order between disappearance callbacks and backing views being removed from their +superviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func onDisappear(_ callback: @escaping LifecycleCallback) -> LifecycleObserver
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Opacity.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Opacity.html new file mode 100644 index 000000000..3add4e9e5 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Opacity.html @@ -0,0 +1,821 @@ + + + + Opacity Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Opacity

+
+
+ +
public struct Opacity : Element
+ +
+
+

Changes the opacity of the wrapped element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element whose opacity is being affected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    The opacity of the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an Opacity with the given content element and opacity.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    opacity: CGFloat,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + opacity + + +
    +

    The opacity to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay.html new file mode 100644 index 000000000..ec07f9b20 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay.html @@ -0,0 +1,927 @@ + + + + Overlay Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Overlay

+
+
+ +
public struct Overlay : Element
+ +
+
+

Stretches all of its child elements to fill the layout area, stacked on top of each other.

+ +

During a layout pass, measurement is calculated as the max size (in both x and y dimensions) +produced by measuring all of the child elements.

+ +

View-backed descendants will be z-ordered from back to front in the order of this element’s +children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    +

    All elements displayed in the overlay.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [Child]
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a new overlay with the provided elements.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    elements: [Element] = [],
    +    configure: (inout Overlay) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(elements:) + +
    +
    +
    +
    +
    +
    +

    Creates a new overlay using a result builder.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    @ElementBuilder<Overlay.Child> elements: () -> [Overlay.Child]
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(_:) + +
    +
    +
    +
    +
    +
    +

    Adds the provided element to the overlay.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "add(child:﹚")
    +public mutating func add(_ element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(key:child:) + +
    +
    +
    +
    +
    +
    +

    Adds the provided element to the overlay, above other children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func add(key: AnyHashable? = nil, child: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A key used to disambiguate children between subsequent updates of the view +hierarchy

    +
    +
    + + child + + +
    +

    The child element to add.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Element +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay/Child.html new file mode 100644 index 000000000..1663353d3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Overlay/Child.html @@ -0,0 +1,762 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension Overlay.Child: ElementBuilderChild
+ +
+
+

The child of an Overlay.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    +

    The child element

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    An optional key to disambiguate between view updates

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(element:key:) + +
    +
    +
    +
    +
    +
    +

    Create a new child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(element: Element, key: AnyHashable? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row.html new file mode 100644 index 000000000..6ffeec955 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row.html @@ -0,0 +1,970 @@ + + + + Row Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Row

+
+
+ +
public struct Row : StackElement
+ +
+
+

Displays a list of items in a linear horizontal layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + RowAlignment + +
    +
    +
    +
    +
    +
    +

    Describes how the row’s children will be vertically aligned.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RowAlignment : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + children + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var children: [(element: Element, traits: StackLayout.Traits, key: AnyHashable?)]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var layout: StackLayout { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializer using result builder to declaratively build up a stack.

    +
    +

    Note

    + If element is a plain Element, then that Element will be implicitly converted into a StackLayout.Child with default values + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    alignment: RowAlignment = .top,
    +    underflow: StackLayout.UnderflowDistribution = .spaceEvenly,
    +    overflow: StackLayout.OverflowDistribution = .condenseProportionally,
    +    minimumSpacing: CGFloat = 0,
    +    @ElementBuilder<StackLayout.Child> elements: () -> [StackLayout.Child]
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + +
    + + alignment + + +
    +

    Specifies how children will be aligned vertically. Default: .top

    +
    +
    + + underflow + + +
    +

    Determines the layout when there is extra free space available. Default: .spaceEvenly

    +
    +
    + + overflow + + +
    +

    Determines the layout when there is not enough space to fit all children as measured. Default: .condenseProportionally

    +
    +
    + + minimumSpacing + + +
    +

    Spacing in between elements. Default: 0

    +
    +
    + + elements + + +
    +

    A block containing all elements to be included in the stack.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalUnderflow: StackLayout.UnderflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + horizontalOverflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var horizontalOverflow: StackLayout.OverflowDistribution { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + verticalAlignment + +
    +
    +
    +
    +
    +
    +

    Specifies how children will be aligned vertically.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var verticalAlignment: RowAlignment { get set }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumHorizontalSpacing: CGFloat { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row/RowAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row/RowAlignment.html new file mode 100644 index 000000000..852db0c4c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Row/RowAlignment.html @@ -0,0 +1,849 @@ + + + + RowAlignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

RowAlignment

+
+
+ +
public enum RowAlignment : Equatable
+ +
+
+

Describes how the row’s children will be vertically aligned.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to fit the vertical size of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Using the specified alignment, children will be aligned relatively to each other, and +then all the contents will be aligned to the row’s bounding box.

    + +

    This case can be used for custom alignments. For common alignments you can use the +existing static instancestop, center, and bottom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: VerticalAlignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the top edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    Children will be vertically centered in the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the bottom edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the top edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "top")
    +public static let leading: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Children will be aligned to the bottom edge of the row.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, renamed: "bottom")
    +public static let trailing: Row.RowAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule.html new file mode 100644 index 000000000..73fc7171b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule.html @@ -0,0 +1,889 @@ + + + + Rule Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Rule

+
+
+ +
public struct Rule : ProxyElement
+ +
+
+

A solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length, +suitable for use as a separator.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Orientation + +
    +
    +
    +
    +
    +
    +

    Represents whether the rule is parallel to the x or y axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Orientation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Thickness + +
    +
    +
    +
    +
    +
    +

    Represents the thickness of a rule in the direction perpendicular to its orientation.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Thickness
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + orientation + +
    +
    +
    +
    +
    +
    +

    Whether this rule is horizontal or vertical.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var orientation: Orientation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + thickness + +
    +
    +
    +
    +
    +
    +

    The thickness of this rule in the direction perpendicular to its orientation.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var thickness: Thickness
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    +

    The color that the rule should be drawn.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Rule with the given properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(orientation: Orientation, color: UIColor, thickness: Thickness = .hairline)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + orientation + + +
    +

    Whether the rule is horizontal or vertical.

    +
    +
    + + color + + +
    +

    The color that the rule should be drawn.

    +
    +
    + + thickness + + +
    +

    The thickness of the rule in the direction perpendicular to its orientation. +Defaults to a hairline thickness, meaning the thinnest possible line that can be drawn.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + elementRepresentation + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var elementRepresentation: Element { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Orientation.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Orientation.html new file mode 100644 index 000000000..e7e0a850b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Orientation.html @@ -0,0 +1,708 @@ + + + + Orientation Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Orientation

+
+
+ +
public enum Orientation
+ +
+
+

Represents whether the rule is parallel to the x or y axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule is parallel to the x axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule is parallel to the y axis.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Thickness.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Thickness.html new file mode 100644 index 000000000..a0e61a192 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Rule/Thickness.html @@ -0,0 +1,709 @@ + + + + Thickness Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Thickness

+
+
+ +
public enum Thickness
+ +
+
+

Represents the thickness of a rule in the direction perpendicular to its orientation.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + hairline + +
    +
    +
    +
    +
    +
    +

    Indicates that the rule should be exactly 1 screen pixel thick, +the thinnest possible line that can be drawn.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hairline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + points(_:) + +
    +
    +
    +
    +
    +
    +

    An exact thickness in points.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case points(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView.html new file mode 100644 index 000000000..389648df3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView.html @@ -0,0 +1,1241 @@ + + + + ScrollView Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollView

+
+
+ +
public struct ScrollView : Element
+ +
+
+

Wraps a content element and makes it scrollable.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content to be scrolled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    +

    Determines the sizing behavior of the content within the scroll view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: ContentSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alwaysBounceVertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alwaysBounceVertical: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alwaysBounceHorizontal: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentInset + +
    +
    +
    +
    +
    +
    +

    How much the content of the ScrollView should be inset.

    + +

    Note: When keyboardAdjustmentMode is used, it will also adjust +the on-screen UIScrollViews contentInset.bottom to make space for the keyboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInset: UIEdgeInsets
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + centersUnderflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var centersUnderflow: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showsHorizontalScrollIndicator: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showsVerticalScrollIndicator: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pullToRefreshBehavior + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pullToRefreshBehavior: PullToRefreshBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardDismissMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardDismissMode: UIScrollView.KeyboardDismissMode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInsetAdjustmentBehavior: UIScrollView.ContentInsetAdjustmentBehavior
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardAdjustmentMode: KeyboardAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delaysContentTouches + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var delaysContentTouches: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentOffsetTrigger + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentOffsetTrigger: ScrollTrigger?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    _ contentSize: ContentSize = .fittingHeight,
    +    wrapping element: Element,
    +    configure: (inout ScrollView) -> Void = { _ in }
    +)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum KeyboardAdjustmentMode : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentSize + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContentSize : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PullToRefreshBehavior + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum PullToRefreshBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ScrollTrigger + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class ScrollTrigger
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ContentOffset + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ContentOffset
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset.html new file mode 100644 index 000000000..cd9258d62 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset.html @@ -0,0 +1,784 @@ + + + + ContentOffset Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentOffset

+
+
+ +
public struct ContentOffset
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ScrollingContext + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ScrollingContext
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Provider + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Provider = (ScrollingContext) -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: ScrollView.ContentOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: ScrollView.ContentOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(provider:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(provider: @escaping Provider)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset/ScrollingContext.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset/ScrollingContext.html new file mode 100644 index 000000000..31dcb4044 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentOffset/ScrollingContext.html @@ -0,0 +1,731 @@ + + + + ScrollingContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollingContext

+
+
+ +
public struct ScrollingContext
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + contentSize + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentSize: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scrollViewBounds + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scrollViewBounds: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentInsets + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentInsets: UIEdgeInsets
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentSize.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentSize.html new file mode 100644 index 000000000..1d815f19a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ContentSize.html @@ -0,0 +1,761 @@ + + + + ContentSize Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContentSize

+
+
+ +
public enum ContentSize : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + fittingWidth + +
    +
    +
    +
    +
    +
    +

    The content will fill the height of the scroller, width will be dynamic

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingWidth
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fittingHeight + +
    +
    +
    +
    +
    +
    +

    The content will fill the width of the scroller, height will be dynamic

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingHeight
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fittingContent + +
    +
    +
    +
    +
    +
    +

    The content size will be the minimum required to fit the content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fittingContent
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + custom(_:) + +
    +
    +
    +
    +
    +
    +

    Manually provided content size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case custom(CGSize)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/KeyboardAdjustmentMode.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/KeyboardAdjustmentMode.html new file mode 100644 index 000000000..5a8e0b4b3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/KeyboardAdjustmentMode.html @@ -0,0 +1,705 @@ + + + + KeyboardAdjustmentMode Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

KeyboardAdjustmentMode

+
+
+ +
public enum KeyboardAdjustmentMode : Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + adjustsWhenVisible + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case adjustsWhenVisible
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/PullToRefreshBehavior.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/PullToRefreshBehavior.html new file mode 100644 index 000000000..2d11fac27 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/PullToRefreshBehavior.html @@ -0,0 +1,731 @@ + + + + PullToRefreshBehavior Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

PullToRefreshBehavior

+
+
+ +
public enum PullToRefreshBehavior
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + disabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case disabled
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enabled(action:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case enabled(action: () -> Void)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + refreshing + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case refreshing
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ScrollTrigger.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ScrollTrigger.html new file mode 100644 index 000000000..2aacfdfdb --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ScrollView/ScrollTrigger.html @@ -0,0 +1,705 @@ + + + + ScrollTrigger Class Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ScrollTrigger

+
+
+ +
public final class ScrollTrigger
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scroll(to:animated:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func scroll(to: ContentOffset, animated: Bool)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl.html new file mode 100644 index 000000000..3c30e1ca0 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl.html @@ -0,0 +1,972 @@ + + + + SegmentedControl Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SegmentedControl

+
+
+ +
public struct SegmentedControl : Element, Measurable
+ +
+
+

Allows users to pick from an array of options.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + items + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var items: [Item]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + selection + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var selection: Selection
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + roundingScale + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var roundingScale: CGFloat
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(items: [Item] = [], configure: (inout SegmentedControl) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    selection: Selection = .none,
    +    font: UIFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body),
    +    @Builder<Item> itemBuilder: () -> [Item]
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func appendItem(title: String, width: Item.Width = .automatic, onSelect: @escaping () -> Void)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Selection + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Selection
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Item + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Item
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item.html new file mode 100644 index 000000000..e940effe2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item.html @@ -0,0 +1,758 @@ + + + + Item Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Item

+
+
+ +
public struct Item
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + title + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var title: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var width: Width
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onSelect + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onSelect: () -> Void
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Width + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Width
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item/Width.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item/Width.html new file mode 100644 index 000000000..2effe7c83 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Item/Width.html @@ -0,0 +1,705 @@ + + + + Width Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Width

+
+
+ +
public enum Width
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + automatic + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case automatic
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + specific(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case specific(CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Selection.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Selection.html new file mode 100644 index 000000000..0b1103df4 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SegmentedControl/Selection.html @@ -0,0 +1,705 @@ + + + + Selection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Selection

+
+
+ +
public enum Selection
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + none + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case none
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + index(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case index(Int)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint.html new file mode 100644 index 000000000..8724ab96e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint.html @@ -0,0 +1,1044 @@ + + + + SizeConstraint Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SizeConstraint

+
+
+ +
public struct SizeConstraint : Hashable, CustomStringConvertible
+ +
+
+

Defines the maximum size for a measurement.

+ +

Currently this constraint type can only handles layout where +the primary (breaking) axis is horizontal (row in CSS-speak).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + width + +
    +
    +
    +
    +
    +
    +

    The width constraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @SizeConstraint
    +.UnconstrainedInfiniteAxis public var width: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + height + +
    +
    +
    +
    +
    +
    +

    The height constraint.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @SizeConstraint
    +.UnconstrainedInfiniteAxis public var height: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: Axis, height: Axis)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

CustomDebugStringConvertible +

+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var unconstrained: SizeConstraint { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(height: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimum: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maximum: CGSize { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(width:height:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(width: CGFloat, height: CGFloat) -> SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inset(by:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func inset(by insets: UIEdgeInsets) -> SizeConstraint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Axis + +
    +
    +
    +
    +
    +
    +

    Represents a size constraint for a single axis.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Axis : Hashable, CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This property wrapper checks the value of atMost cases, and turns it into an +unconstrained axis if the value equals greatestFiniteMagnitude or isInfinite.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @propertyWrapper
    +public struct UnconstrainedInfiniteAxis : Equatable, Hashable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/Axis.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/Axis.html new file mode 100644 index 000000000..3a910462a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/Axis.html @@ -0,0 +1,1080 @@ + + + + Axis Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Axis

+
+
+ +
public enum Axis : Hashable, CustomStringConvertible
+ +
+
+

Represents a size constraint for a single axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + atMost(_:) + +
    +
    +
    +
    +
    +
    +

    The measurement should treat the associated value as the largest +possible size in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case atMost(CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + unconstrained + +
    +
    +
    +
    +
    +
    +

    The measurement is unconstrained in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unconstrained
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + maximum + +
    +
    +
    +
    +
    +
    +

    The maximum magnitude in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maximum: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimum + +
    +
    +
    +
    +
    +
    +

    The minimum magnitude in the given dimension.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimum: CGFloat { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + constrainedValue + +
    +
    +
    +
    +
    +
    +

    The constraint value in this dimension, or nil if this dimension is unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var constrainedValue: CGFloat? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +(_:_:) + +
    +
    +
    +
    +
    +
    +

    Adds a scalar value to an Axis. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func + (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -(_:_:) + +
    +
    +
    +
    +
    +
    +

    Subtracts a scalar value from an Axis. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func - (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + /(_:_:) + +
    +
    +
    +
    +
    +
    +

    Divides an Axis by a scalar value. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func / (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + *(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiplies an Axis by a scalar value. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func * (lhs: SizeConstraint.Axis, rhs: CGFloat) -> SizeConstraint.Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isGreaterThanZero + +
    +
    +
    +
    +
    +
    +

    If the Axis is greater than zero.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isGreaterThanZero: Bool { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + +=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Adds a scalar value to an Axis. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func += (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Subtracts a scalar value from an Axis. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func -= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + /=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Divides an Axis by a scalar value. If the Axis is unconstrained the +result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func /= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + *=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Multiplies an Axis by a scalar value. If the Axis is unconstrained +the result will remain unconstrained.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func *= (lhs: inout SizeConstraint.Axis, rhs: CGFloat)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

CustomDebugStringConvertible +

+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html new file mode 100644 index 000000000..2cd7ab74e --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/SizeConstraint/UnconstrainedInfiniteAxis.html @@ -0,0 +1,708 @@ + + + + UnconstrainedInfiniteAxis Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnconstrainedInfiniteAxis

+
+
+ +
@propertyWrapper
+public struct UnconstrainedInfiniteAxis : Equatable, Hashable
+ +
+
+

This property wrapper checks the value of atMost cases, and turns it into an +unconstrained axis if the value equals greatestFiniteMagnitude or isInfinite.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedValue: Axis { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(wrappedValue:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(wrappedValue value: Axis)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Spacer.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Spacer.html new file mode 100644 index 000000000..1ba4d190a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Spacer.html @@ -0,0 +1,816 @@ + + + + Spacer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Spacer

+
+
+ +
public struct Spacer : Element
+ +
+
+

An element that does not display anything (it has neither children or a view).

+ +

Spacer simply takes up a specified amount of space within a layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    The size that this spacer will take in a layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(size:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(size: CGSize)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(width:height:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(width: CGFloat = 0.0, height: CGFloat = 0.0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Initializes a new spacer with the given value for the width and height.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ value: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout.html new file mode 100644 index 000000000..6aaa0970b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout.html @@ -0,0 +1,1178 @@ + + + + StackLayout Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

StackLayout

+
+
+ +
public struct StackLayout : Layout
+ +
+
+

A layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultTraits + +
    +
    +
    +
    +
    +
    +

    The default traits for a child contained within a stack layout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var defaultTraits: Traits { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + AlignmentGuide + +
    +
    +
    +
    +
    +
    +

    Determines how a stack child will be aligned on the cross axis relative to other children.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AlignmentGuide
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Traits + +
    +
    +
    +
    +
    +
    +

    Contains traits that affect the layout of individual children in the stack.

    + +

    See StackElement.add(...) for details.

    +

    In Xcode

    + +

    StackElement.add()

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + axis + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var axis: Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + underflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underflow: StackLayout.UnderflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + overflow + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var overflow: StackLayout.OverflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + alignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alignment: Alignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minimumSpacing + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var minimumSpacing: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(axis:alignment:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(axis: Axis, alignment: Alignment)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + measure(in:items:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func measure(in constraint: SizeConstraint, items: [(traits: Traits, content: Measurable)]) -> CGSize
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layout(size:items:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func layout(size: CGSize, items: [(traits: Traits, content: Measurable)]) -> [LayoutAttributes]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Axis + +
    +
    +
    +
    +
    +
    +

    The direction of the stack.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Axis
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UnderflowDistribution + +
    +
    +
    +
    +
    +
    +

    Determines the on-axis layout when there is extra free space available.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum UnderflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + OverflowDistribution + +
    +
    +
    +
    +
    +
    +

    Determines the on-axis layout when there is not enough space to fit all children as measured.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum OverflowDistribution
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Alignment + +
    +
    +
    +
    +
    +
    +

    Determines the cross-axis layout (height for a horizontal stack, width for a vertical stack).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Alignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Layout logic +

+
+
+ +
+
+
+ + +
+ +

Result Builders +

+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Alignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Alignment.html new file mode 100644 index 000000000..da8179ca2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Alignment.html @@ -0,0 +1,709 @@ + + + + Alignment Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Alignment

+
+
+ +
public enum Alignment
+ +
+
+

Determines the cross-axis layout (height for a horizontal stack, width for a vertical stack).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + fill + +
    +
    +
    +
    +
    +
    +

    Children will be stretched to the size of the stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fill
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + align(to:) + +
    +
    +
    +
    +
    +
    +

    Children will be aligned relatively to each other, and then all the contents will be +aligned to the stack’s bounding box, according to the specified alignment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case align(to: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/AlignmentGuide.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/AlignmentGuide.html new file mode 100644 index 000000000..d5d2061d1 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/AlignmentGuide.html @@ -0,0 +1,682 @@ + + + + AlignmentGuide Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

AlignmentGuide

+
+
+ +
public struct AlignmentGuide
+ +
+
+

Determines how a stack child will be aligned on the cross axis relative to other children.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + computeValue + +
    +
    +
    +
    +
    +
    +

    Returns a value along the stack’s cross axis, in the element’s own coordinate space, +where a child should be aligned relative to the alignment guides of its siblings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var computeValue: (ElementDimensions) -> CGFloat
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Axis.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Axis.html new file mode 100644 index 000000000..b42bf0d58 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Axis.html @@ -0,0 +1,706 @@ + + + + Axis Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Axis

+
+
+ +
public enum Axis
+ +
+
+

The direction of the stack.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + horizontal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case horizontal
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + vertical + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case vertical
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child.html new file mode 100644 index 000000000..6b4321ef4 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child.html @@ -0,0 +1,859 @@ + + + + Child Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Child

+
+
+ +
public struct Child
+
extension StackLayout.Child: ElementBuilderChild
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + element + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let element: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + traits + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let traits: StackLayout.Traits
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let key: AnyHashable?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Priority + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Priority
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    element: Element,
    +    traits: StackLayout.Traits = .init(),
    +    key: AnyHashable? = nil
    +)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    element: Element,
    +    priority: Priority = .flexible,
    +    alignmentGuide: ((ElementDimensions) -> CGFloat)? = nil,
    +    key: AnyHashable? = nil
    +)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Result Builders +

+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ element: Element)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child/Priority.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child/Priority.html new file mode 100644 index 000000000..2b0f0917b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Child/Priority.html @@ -0,0 +1,765 @@ + + + + Priority Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Priority

+
+
+ +
public enum Priority
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + fixed + +
    +
    +
    +
    +
    +
    +

    The element has a fixed size, with a grow and shrink priority of 0. +The element will neither grow nor shrink during overflow and underflow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fixed
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + flexible + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, with a grow and shrink priority of 1. +The element will grow during underflow and shrink during overflow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case flexible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + grows + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, it will grow if the stack underflows, +but it will not shrink if the stack overflows.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case grows
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shrinks + +
    +
    +
    +
    +
    +
    +

    The element has a flexible size, it will shrink if the stack overflows, +but it will not grow if the stack underflows.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case shrinks
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/OverflowDistribution.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/OverflowDistribution.html new file mode 100644 index 000000000..5be99822c --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/OverflowDistribution.html @@ -0,0 +1,708 @@ + + + + OverflowDistribution Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

OverflowDistribution

+
+
+ +
public enum OverflowDistribution
+ +
+
+

Determines the on-axis layout when there is not enough space to fit all children as measured.

+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Each child will shrink proportionally to its measured size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case condenseProportionally
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + condenseUniformly + +
    +
    +
    +
    +
    +
    +

    Each child will shrink by the same amount.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case condenseUniformly
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Traits.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Traits.html new file mode 100644 index 000000000..7154a8fd2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/Traits.html @@ -0,0 +1,786 @@ + + + + Traits Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Traits

+
+
+ +
public struct Traits
+ +
+
+

Contains traits that affect the layout of individual children in the stack.

+ +

See StackElement.add(...) for details.

+

In Xcode

+ +

StackElement.add()

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/UnderflowDistribution.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/UnderflowDistribution.html new file mode 100644 index 000000000..bf8beebe1 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/StackLayout/UnderflowDistribution.html @@ -0,0 +1,816 @@ + + + + UnderflowDistribution Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnderflowDistribution

+
+
+ +
public enum UnderflowDistribution
+ +
+
+

Determines the on-axis layout when there is extra free space available.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + spaceEvenly + +
    +
    +
    +
    +
    +
    +

    Additional space will be evenly divided into the spacing between items.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case spaceEvenly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + growProportionally + +
    +
    +
    +
    +
    +
    +

    Additional space will be divided proportionally by the measured size of each child.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case growProportionally
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + growUniformly + +
    +
    +
    +
    +
    +
    +

    Additional space will be distributed uniformly between children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case growUniformly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToStart + +
    +
    +
    +
    +
    +
    +

    Additional space will appear after all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToStart
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToCenter + +
    +
    +
    +
    +
    +
    +

    Additional space will be distributed on either side of all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToCenter
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + justifyToEnd + +
    +
    +
    +
    +
    +
    +

    Additional space will be appear before all children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case justifyToEnd
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Tappable.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Tappable.html new file mode 100644 index 000000000..c84f211bb --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Tappable.html @@ -0,0 +1,784 @@ + + + + Tappable Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Tappable

+
+
+ +
public struct Tappable : Element
+ +
+
+

Wraps a content element and calls the provided closure when tapped.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextAttributeContainer.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextAttributeContainer.html new file mode 100644 index 000000000..dde1ca402 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextAttributeContainer.html @@ -0,0 +1,966 @@ + + + + TextAttributeContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextAttributeContainer

+
+
+ +
public struct TextAttributeContainer
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + empty + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let empty: TextAttributeContainer
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Get or set for the given AttributedTextKey.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Key>(key: Key.Type) -> Key.Value? where Key : AttributedTextKey { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Font +

+
+
+
    +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Color +

+
+
+
    +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Tracking +

+
+
+
    +
  • +
    + + + + tracking + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tracking: CGFloat? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Underline +

+
+
+
    +
  • +
    + + + + underlineStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underlineStyle: NSUnderlineStyle? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + underlineColor + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var underlineColor: UIColor? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Paragraph style +

+
+
+
    +
  • +
    + + + + paragraphStyle + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var paragraphStyle: NSParagraphStyle? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Link +

+
+
+
    +
  • +
    + + + + link + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var link: URL? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextField.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextField.html new file mode 100644 index 000000000..8737a6409 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextField.html @@ -0,0 +1,1461 @@ + + + + TextField Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextField

+
+
+ +
public struct TextField : Element
+ +
+
+

Displays a text field.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var text: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + placeholder + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var placeholder: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onChange + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onChange: ((String) -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + secure + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var secure: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textAlignment + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textAlignment: NSTextAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + font + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var font: UIFont
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textColor + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textColor: UIColor
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + clearButtonMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var clearButtonMode: UITextField.ViewMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardType: UIKeyboardType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + keyboardAppearance + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keyboardAppearance: UIKeyboardAppearance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var autocapitalizationType: UITextAutocapitalizationType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + autocorrectionType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var autocorrectionType: UITextAutocorrectionType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + spellCheckingType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spellCheckingType: UITextSpellCheckingType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textContentType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var textContentType: UITextContentType?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onReturn + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onReturn: (() -> Void)?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + returnKeyType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var returnKeyType: UIReturnKeyType
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var enablesReturnKeyAutomatically: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focusBinding + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var focusBinding: FocusBinding?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + accessibilityTraits + +
    +
    +
    +
    +
    +
    +

    A set of accessibility traits that should be applied to the field, these will be merged with any existing traits. +These traits should relate to the content of the text, for example .header, .link, or .updatesFrequently.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessibilityTraits: Set<AccessibilityElement.Trait>?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(text:configure:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(text: String, configure: (inout TextField) -> Void = { _ in })
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + focused(when:equals:) + +
    +
    +
    +
    +
    +
    +

    Modifies this text field by binding its focus state to the given state value.

    + +

    Use this modifier to cause the text field to receive focus whenever the state equals +the value. Typically, you create an enumeration of fields that may receive focus, bind an +instance of this enumeration, and assign its cases to focusable views.

    + +

    The following example uses the cases of a LoginForm enumeration to bind the focus state of +two TextField elements. A sign-in button validates the fields and sets the bound +focusedField value to any field that requires the user to correct a problem.

    +
    struct LoginForm: ProxyElement {
    +    enum Field: Hashable {
    +        case username
    +        case password
    +    }
    +
    +    var username: String
    +    var password: String
    +    var handleLogin: () -> Void
    +
    +    @FocusState private var focusedField: Field?
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .username)
    +            )
    +
    +            column.add(
    +                child: TextField(text: "")
    +                    .focused(when: $focusedField, equals: .password)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            focusedField = .username
    +                        } else if password.isEmpty {
    +                            focusedField = .password
    +                        } else {
    +                            handleLogin()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Sign In")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To control focus using a Boolean, use the focused(when:) method instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focused<Value>(
    +    when state: FocusState<Value?>,
    +    equals value: Value
    +) -> Self
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + state + + +
    +

    The state to bind to.

    +
    +
    + + value + + +
    +

    The value to match against when determining whether the binding should change.

    +
    +
    +
    +
    +

    Return Value

    +

    A modified text field.

    +
    +
    +
    +
  • +
  • +
    + + + + focused(when:) + +
    +
    +
    +
    +
    +
    +

    Modifies this text field by binding its focus state to the given Boolean state value.

    + +

    Use this modifier to cause the text field to receive focus whenever the the condition is +true. You can use this modifier to observe the focus state of a text field, or +programmatically focus or blur the field.

    + +

    In the following example, a single text field accepts a user’s desired username. The text +field binds its focus state to the Boolean value isUsernameFocused. A “Submit” button’s +action checks if the username is empty, and sets isUsernameFocused to true, which causes +focus to return to the text field.

    +
    struct SignupForm: ProxyElement {
    +    var username: String
    +    var onSignUpTapped: () -> Void
    +
    +    @FocusState var isUsernameFocused: Bool
    +
    +    var elementRepresentation: Element {
    +        Column { column in
    +            column.add(
    +                child: TextField(text: username)
    +                    .focused(when: $isUsernameFocused)
    +            )
    +
    +            column.add(
    +                child: Button(
    +                    onTap: {
    +                        if username.isEmpty {
    +                            isUsernameFocused = true
    +                        } else {
    +                            onSignUpTapped()
    +                        }
    +                    },
    +                    wrapping: Label(text: "Submit")
    +                )
    +            )
    +        }
    +    }
    +}
    +
    + +

    To control focus by matching a value, use the focused(when:equals:) method instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func focused(when condition: FocusState<Bool>) -> TextField
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + condition + + +
    +

    The state to bind to.

    +
    +
    +
    +
    +

    Return Value

    +

    A modified text field.

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextShadow.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextShadow.html new file mode 100644 index 000000000..d0bf9cbdc --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TextShadow.html @@ -0,0 +1,788 @@ + + + + TextShadow Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TextShadow

+
+
+ +
public struct TextShadow : Hashable
+ +
+
+

Describes a shadow that can be applied to text elements, like Label.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + radius + +
    +
    +
    +
    +
    +
    +

    The blur radius of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var radius: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    The opacity of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + offset + +
    +
    +
    +
    +
    +
    +

    The offset of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var offset: UIOffset
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + color + +
    +
    +
    +
    +
    +
    +

    The color of the shadow.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var color: UIColor
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(radius: CGFloat, opacity: CGFloat, offset: UIOffset, color: UIColor)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TintAdjustmentMode.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TintAdjustmentMode.html new file mode 100644 index 000000000..34135afc2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TintAdjustmentMode.html @@ -0,0 +1,789 @@ + + + + TintAdjustmentMode Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TintAdjustmentMode

+
+
+ +
public struct TintAdjustmentMode : Element
+ +
+
+

TintAdjustmentMode conditionally modifies the tint adjustment mode of its wrapped element.

+
+

Note

+ When a tint adjustment mode is applied, any elements within the wrapped element will adopt the parent’s tint adjustment mode. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + tintAdjustmentMode + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tintAdjustmentMode: UIView.TintAdjustmentMode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:wrapping:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ tintAdjustmentMode: UIView.TintAdjustmentMode, wrapping element: Element)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Transformed.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Transformed.html new file mode 100644 index 000000000..21601cbd3 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/Transformed.html @@ -0,0 +1,882 @@ + + + + Transformed Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Transformed

+
+
+ +
public struct Transformed : Element
+ +
+
+

Changes the transform of the wrapped element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The content element whose transform is being affected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    The transform of the wrapped element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Transformed with the given content element and 3D transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    transform: CATransform3D,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + transform + + +
    +

    The 3D transform to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Transformed with the given content element and DD transform.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    transform: CGAffineTransform,
    +    wrapping wrappedElement: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + transform + + +
    +

    The 2D transform to be applied to the wrapped element.

    +
    +
    + + wrapping + + +
    +

    The content element to be made transparent.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TransitionContainer.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TransitionContainer.html new file mode 100644 index 000000000..da778b548 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/TransitionContainer.html @@ -0,0 +1,959 @@ + + + + TransitionContainer Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TransitionContainer

+
+
+ +
public struct TransitionContainer : Element
+ +
+
+

Wraps a content element and adds transitions when the element appears, +disappears, or changes layout.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element is appearing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element is disappearing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition to apply when the wrapped element’s layout is changing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + wrappedElement + +
    +
    +
    +
    +
    +
    +

    The element to which transitions are being applied.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wrappedElement: Element
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(wrapping:) + +
    +
    +
    +
    +
    +
    +

    Create a transition container wrapping an element.

    + +

    The created container’s default transitions are:

    + + + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Use TransitionContainer(transitioning:﹚, which has better defaults")
    +public init(wrapping element: Element)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + wrapping + + +
    +

    The element to which transitions will be applied.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create a transition container wrapping an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(
    +    appearingTransition: VisibilityTransition? = nil,
    +    disappearingTransition: VisibilityTransition? = nil,
    +    layoutTransition: LayoutTransition = .inherited,
    +    transitioning element: Element
    +)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + appearingTransition + + +
    +

    The transition to use when the element appears. By default, no transition.

    +
    +
    + + disappearingTransition + + +
    +

    The transition to use when the element disappears. By default, no transition.

    +
    +
    + + layoutTransition + + +
    +

    The transition to use when the element’s layout changes. The default value is +.inherited, which means the element will participate in the same transition as its +nearest ancestor with a specified transition.

    +
    +
    + + transitioning + + +
    +

    The element to which transitions will be applied.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var content: ElementContent { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func backingViewDescription(with context: ViewDescriptionContext) -> ViewDescription?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UIViewElementContext.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UIViewElementContext.html new file mode 100644 index 000000000..0cc3921b2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UIViewElementContext.html @@ -0,0 +1,709 @@ + + + + UIViewElementContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UIViewElementContext

+
+
+ +
public struct UIViewElementContext
+ +
+
+

Context object passed into updateUIView.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + isMeasuring + +
    +
    +
    +
    +
    +
    +

    This bool indicates whether the view being updated is the static measuring instance. You may +not want to perform certain updates if it is (such as updating field trigger references).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isMeasuring: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/URLHandlerEnvironmentKey.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/URLHandlerEnvironmentKey.html new file mode 100644 index 000000000..062413f31 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/URLHandlerEnvironmentKey.html @@ -0,0 +1,679 @@ + + + + URLHandlerEnvironmentKey Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

URLHandlerEnvironmentKey

+
+
+ +
public struct URLHandlerEnvironmentKey : EnvironmentKey
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + defaultValue + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let defaultValue: URLHandler
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UnitPoint.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UnitPoint.html new file mode 100644 index 000000000..9f8a32433 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UnitPoint.html @@ -0,0 +1,1036 @@ + + + + UnitPoint Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UnitPoint

+
+
+ +
public struct UnitPoint : Hashable
+ +
+
+

A normalized point in an element’s coordinate space.

+ +

Use a unit point to represent a location in an element without having to know the element’s +rendered size. The point stores a value in each dimension that indicates the fraction of the +element’s size in that dimension — measured from the element’s origin — where the point appears. +For example, you can create a unit point that represents the center of any element by using the +value 0.5 for each dimension:

+
let unitPoint = UnitPoint(x: 0.5, y: 0.5)
+
+ +

To project the unit point into the rendered element’s coordinate space, multiply each component +of the unit point with the corresponding component of the element’s size:

+
let projectedPoint = CGPoint(
+    x: unitPoint.x * size.width,
+    y: unitPoint.y * size.height
+)
+
+ +

You can perform this calculation yourself if you happen to know an element’s size, but Blueprint +typically does this for you to carry out operations that you request, like when you place a +subelement in a custom layout.

+ +

You can create custom unit points with explicit values, like the example above, or you can use +one of the built-in unit points, like zero, center, or topTrailing. The built-in +values correspond to the alignment positions of the similarly named, built-in Alignment +types.

+
+

Note

+ A unit point with one or more components outside the range [0, 1] projects to a point +outside of the element. + +
+ +
+
+ +
+
+
+
    +
  • +
    + + + + x + +
    +
    +
    +
    +
    +
    +

    The normalized distance from the origin to the point in the horizontal direction.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var x: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + y + +
    +
    +
    +
    +
    +
    +

    The normalized distance from the origin to the point in the vertical direction.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var y: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(x:y:) + +
    +
    +
    +
    +
    +
    +

    Creates a unit point with the specified horizontal and vertical offsets.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(x: CGFloat, y: CGFloat)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + zero + +
    +
    +
    +
    +
    +
    +

    The origin of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let zero: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A point that’s centered in an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    A point that’s centered vertically on the leading edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let leading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    A point that’s centered vertically on the trailing edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let trailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A point that’s centered horizontally on the top edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A point that’s centered horizontally on the bottom edge of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topLeading + +
    +
    +
    +
    +
    +
    +

    A point that’s in the top leading corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topLeading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + topTrailing + +
    +
    +
    +
    +
    +
    +

    A point that’s in the top trailing corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let topTrailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomLeading + +
    +
    +
    +
    +
    +
    +

    A point that’s in the bottom leading corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomLeading: UnitPoint
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottomTrailing + +
    +
    +
    +
    +
    +
    +

    A point that’s in the bottom trailing corner of an element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottomTrailing: UnitPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UserInteractionEnabled.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UserInteractionEnabled.html new file mode 100644 index 000000000..636a89920 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/UserInteractionEnabled.html @@ -0,0 +1,789 @@ + + + + UserInteractionEnabled Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

UserInteractionEnabled

+
+
+ +
public struct UserInteractionEnabled : Element
+ +
+
+

UserInteractionEnabled conditionally enables user interaction of its wrapped element.

+
+

Note

+ When user interaction is disabled, any elements within the wrapped element will become non-interactive. + +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VerticalAlignment.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VerticalAlignment.html new file mode 100644 index 000000000..9399808fa --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VerticalAlignment.html @@ -0,0 +1,816 @@ + + + + VerticalAlignment Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VerticalAlignment

+
+
+ +
public struct VerticalAlignment : Equatable, CustomStringConvertible
+ +
+
+

An alignment position along the vertical axis.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an instance with the given ID.

    + +

    Note: each instance should have a unique ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ id: AlignmentID.Type)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: VerticalAlignment, rhs: VerticalAlignment) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + top + +
    +
    +
    +
    +
    +
    +

    A guide marking the top edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let top: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + center + +
    +
    +
    +
    +
    +
    +

    A guide marking the vertical center of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let center: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bottom + +
    +
    +
    +
    +
    +
    +

    A guide marking the bottom edge of the element.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let bottom: VerticalAlignment
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription.html new file mode 100644 index 000000000..d7ce702ee --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription.html @@ -0,0 +1,1013 @@ + + + + ViewDescription Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ViewDescription

+
+
+ +
public struct ViewDescription
+ +
+
+

Contains a description of a UIView instance. A description includes +logic to handle all parts of a view lifecycle from instantiation onward.

+ +

View descriptions include:

+ +
    +
  • The view’s class.
  • +
  • How an instance of the view should be instantiated.
  • +
  • How to update a view instance by setting properties appropriately.
  • +
  • Which subview of a view instance should be used as a contain for +additional subviews.
  • +
  • How to animate transitions for appearance, layout changes, and +disappearance.
  • +
  • Hooks to be called during lifecycle events.
  • +
+ +

A view description does not contain a concrete view instance. It simply +contains functionality for creating, updating, and animating view instances.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the given view class.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ viewType: (some UIView).Type)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + viewType + + +
    +

    The class of the described view.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:configuring:) + +
    +
    +
    +
    +
    +
    +

    Generates a view description for the given view class.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init<View>(_ type: View.Type, configuring: (inout Configuration<View>) -> Void) where View : UIView
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + viewType + + +
    +

    The class of the described view.

    +
    +
    + + configuring + + +
    +

    A closure that is responsible for populating a configuration object.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + viewType + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewType: UIView.Type { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + build() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func build() -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + apply(to:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func apply(to view: UIView)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentView(in:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func contentView(in view: UIView) -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition? { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FrameRoundingBehavior + +
    +
    +
    +
    +
    +
    +

    The available prioritization options for rounding frames to pixel boundaries.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FrameRoundingBehavior : Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Configuration + +
    +
    +
    +
    +
    +
    +

    Represents the configuration of a specific UIView type.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Configuration<View> where View : UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/Configuration.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/Configuration.html new file mode 100644 index 000000000..862aae8a2 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/Configuration.html @@ -0,0 +1,1104 @@ + + + + Configuration Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Configuration

+
+
+ +
public struct Configuration<View> where View : UIView
+ +
+
+

Represents the configuration of a specific UIView type.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Update + +
    +
    +
    +
    +
    +
    +

    A closure that is applied to the native view instance during an update cycle.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias Update = (_ view: View) -> Void
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + view + + +
    +

    The native view instance.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + builder + +
    +
    +
    +
    +
    +
    +

    A closure that is responsible for instantiating an instance of the native view. +The default value instantiates the view using init(frame:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var builder: () -> View
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updates + +
    +
    +
    +
    +
    +
    +

    An array of update closures.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var updates: [Update]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + contentView + +
    +
    +
    +
    +
    +
    +

    A closure that takes a native view instance as the single argument, and +returns a subview of that view into which child views should be added +and managed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentView: (View) -> UIView
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layoutTransition + +
    +
    +
    +
    +
    +
    +

    The transition to use during layout changes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layoutTransition: LayoutTransition
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + appearingTransition + +
    +
    +
    +
    +
    +
    +

    The transition to use when this view appears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var appearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The transition to use when this view disappears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var disappearingTransition: VisibilityTransition?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onAppear + +
    +
    +
    +
    +
    +
    +

    A hook to call when the element appears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onAppear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onDisappear + +
    +
    +
    +
    +
    +
    +

    A hook to call when the element disappears.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var onDisappear: LifecycleCallback?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + frameRoundingBehavior + +
    +
    +
    +
    +
    +
    +

    The prioritization method to use when snapping the native view’s frame to pixel +boundaries.

    + +

    When snapping views to pixel boundaries, Blueprint prioritizes placing frame edges as +close to the correct value as possible. This ensures that flush edges stay flush after +rounding, but can result in frame sizes growing or shrinking by 1 pixel in either axis.

    + +

    Backing views that are particularly sensitive to size changes can opt-in to prioritize +preserving their frame size instead of maximally correct edges. This will guarantee +frame sizes, with the tradeoff that their edges may no longer be flush to other edges as +they were laid out.

    + +

    Generally you should not change this value except in specific circumstances when all +criteria are met:

    + +
      +
    • The backing view is sensitive to frame size, such as a text label.
    • +
    • And the backing view has a transparent background, so that overlapping frames or gaps +between frames are not visible.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var frameRoundingBehavior: FrameRoundingBehavior
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes a default configuration object.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + apply(_:) + +
    +
    +
    +
    +
    +
    +

    Adds the given update closure to the updates array.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func apply(_ update: @escaping Update)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Subscript for values that are not optional. We must represent these values as optional so that we can +return nil from the subscript in the case where no value has been assigned for the given keypath.

    + +

    When getting a value for a keypath:

    + +
      +
    • If a value has previously been assigned, it will be returned.
    • +
    • If no value has been assigned, nil will be returned.
    • +
    + +

    When assigning a value for a keypath:

    + +
      +
    • If a value is provided, it will be applied to the view.
    • +
    • If nil is provided, no value will be applied to the view (any previous assignment will be cleared).
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(keyPath: ReferenceWritableKeyPath<View, Value>) -> Value? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Subscript for values that are optional.

    + +

    When getting a value for a keypath:

    + +
      +
    • If a value has previously been assigned (including nil), it will be returned.
    • +
    • If no value has been assigned, nil will be returned.
    • +
    + +

    When assigning a value for a keypath:

    + +
      +
    • Any provided value will be applied to the view (including nil). This means that there is a difference +between the initial state of a view description (where the view’s property will not be touched), and the +state after nil is assigned. After assigning nil to an optional keypath, view.property = nil will +be called on the next update.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript<Value>(keyPath: ReferenceWritableKeyPath<View, Value?>) -> Value? { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/FrameRoundingBehavior.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/FrameRoundingBehavior.html new file mode 100644 index 000000000..62c3d142a --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescription/FrameRoundingBehavior.html @@ -0,0 +1,708 @@ + + + + FrameRoundingBehavior Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FrameRoundingBehavior

+
+
+ +
public enum FrameRoundingBehavior : Equatable
+ +
+
+

The available prioritization options for rounding frames to pixel boundaries.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + prioritizeEdges + +
    +
    +
    +
    +
    +
    +

    Prioritize preserving frame edge positions

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prioritizeEdges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + prioritizeSize + +
    +
    +
    +
    +
    +
    +

    Prioritize preserving frame sizes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prioritizeSize
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescriptionContext.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescriptionContext.html new file mode 100644 index 000000000..35c845a35 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/ViewDescriptionContext.html @@ -0,0 +1,762 @@ + + + + ViewDescriptionContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ViewDescriptionContext

+
+
+ +
public struct ViewDescriptionContext
+ +
+
+

The context passing to the backingViewDescription of an Element.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + bounds + +
    +
    +
    +
    +
    +
    +

    The bounds of this element after layout is complete.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bounds: CGRect
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + subtreeExtent + +
    +
    +
    +
    +
    +
    +

    A rectangle in the local coordinate space that contains any children. +This will be nil if there are no children.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var subtreeExtent: CGRect?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + environment + +
    +
    +
    +
    +
    +
    +

    The environment the element is rendered in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var environment: Environment
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(bounds: CGRect, subtreeExtent: CGRect?, environment: Environment)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VisibilityTransition.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VisibilityTransition.html new file mode 100644 index 000000000..50e7ad302 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Structs/VisibilityTransition.html @@ -0,0 +1,842 @@ + + + + VisibilityTransition Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

VisibilityTransition

+
+
+ +
public struct VisibilityTransition
+ +
+
+

The transition used when a view is inserted or removed during an update cycle.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + alpha + +
    +
    +
    +
    +
    +
    +

    The alpha of the view in the hidden state (initial for appearing, final for disappearing).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var alpha: CGFloat
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    The transform of the view in the hidden state (initial for appearing, final for disappearing).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    The animation attributes that will be used to drive the transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: AnimationAttributes
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(alpha: CGFloat, transform: CATransform3D, attributes: AnimationAttributes = AnimationAttributes())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scale + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that scales in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var scale: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fade + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that fades in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var fade: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scaleAndFade + +
    +
    +
    +
    +
    +
    +

    Returns a VisibilityTransition that simultaneously scales and fades in and out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var scaleAndFade: VisibilityTransition { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/Typealiases.html b/docsets/Blueprint.docset/Contents/Resources/Documents/Typealiases.html new file mode 100644 index 000000000..0c4a9b5ee --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/Typealiases.html @@ -0,0 +1,728 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ElementBuilder + +
    +
    +
    +
    +
    +
    +

    Result builder for working with elements that conform to ElementBuilderChild.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ElementBuilder<Child> = Builder<Child> where Child : ElementBuilderChild
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LayoutSubelements + +
    +
    +
    +
    +
    +
    +

    A collection of proxy values that represent the child elements of a layout.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LayoutSubelements = [LayoutSubelement]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LifecycleCallback + +
    +
    +
    +
    +
    +
    +

    This is the type used by all lifecycle callback hooks.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias LifecycleCallback = () -> Void
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/css/highlight.css b/docsets/Blueprint.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 000000000..c170357ce --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/css/jazzy.css b/docsets/Blueprint.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 000000000..c7bb9fe22 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,404 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/img/carat.png b/docsets/Blueprint.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/img/dash.png b/docsets/Blueprint.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/index.html b/docsets/Blueprint.docset/Contents/Resources/Documents/index.html new file mode 100644 index 000000000..8d8e1c4c8 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,753 @@ + + + + Blueprint Reference + + + + + + + + + + + + + + + +
+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+ +

Build Status

+

Blueprint

+

Declarative UI construction for iOS, written in Swift

+ +

Blueprint greatly simplifies the task of building and updating views as application state changes.

+ +

We still consider Blueprint experimental (and subject to major breaking API changes), but it has been used within Square’s production iOS apps.

+
let rootElement = Label(text: "Hello from Blueprint!")
+let view = BlueprintView(element: rootElement)
+
+ +

Generated documentation is available at square.github.io/Blueprint

+

Getting Started

+

Swift Package Manager

+ +

SwiftPM compatible

+ +

If you are developing your own package, be sure that Blueprint is included in dependencies +in Package.swift:

+
dependencies: [
+    .package(url: "git@github.com:square/Blueprint.git", from: "0.3.0")
+]
+
+ +

In Xcode 11+, add Blueprint directly as a dependency to your project with +File > Swift Packages > Add Package Dependency.... Provide the git URL when prompted: git@github.com:square/Blueprint.git.

+

Cocoapods

+ +

CocoaPods compatible

+ +

If you use CocoaPods to manage your dependencies, simply add BlueprintUI and BlueprintUICommonControls to your +Podfile:

+
pod 'BlueprintUI'
+pod 'BlueprintUICommonControls'
+
+ +
+
What does this library do?
+ +

Blueprint provides an architecture that allows you to:

+ +
    +
  • Declaratively define a UI hierarchy as pure values (Swift structs and enums).
  • +
  • Display that hierarchy within your application.
  • +
  • Update that hierarchy as application state changes (including animated transitions).
  • +
+
When should I use it?
+ +

Use Blueprint any time you want to display a view hierarchy, but don’t want to manage view lifecycle (hint: managing view lifecycle is a large portion of most conventional UIKit code). There are times when you want to manage view lifecycle (complex animations and transitions are a good example), and for these cases you may want to stick with a conventional approach.

+
How does it interact with UIKit?
+ +

Blueprint is not a replacement for UIKit! From the beginning, Blueprint has been designed as a compliment to all of the powerful tools that come with the platform. You can use Blueprint to manage the display of a single view controller, or of a single view representing a small part of the screen. Likewise, it’s straightforward to host standard views and controls within a blueprint hierarchy, always leaving you with an escape hatch.

+ +
+

Documentation

+

Getting Started

+ +
    +
  1. Hello, World

  2. +
  3. The Element Hierarchy

  4. +
  5. Building Custom Elements

  6. +
  7. Layout

  8. +
+

Reference

+ +
    +
  1. Element

  2. +
  3. BlueprintView

  4. +
  5. ViewDescription

  6. +
  7. Transitions

  8. +
+

Tutorials

+ +

Tutorial setup instructions

+ +
    +
  1. Using Blueprint in a View Controller

  2. +
  3. Building a receipt layout with Blueprint

  4. +
+ +
+

Adding Blueprint to an existing project

+ +

Two modules are provided:

+ +
    +
  • BlueprintUI contains the core architecture and layout types.
  • +
  • BlueprintUICommonControls includes elements representing some common UIKit views and controls.
  • +
+ +

Blueprint is available via CocoaPods. Add it to your Podfile to integrate:

+
target MyTarget do
+    pod 'BlueprintUI'
+    pod 'BlueprintUICommonControls'
+end
+
+ +
+ +

Release instructions

+ +
+ +

Copyright 2019 Square, Inc.

+ +

Licensed under the Apache License, Version 2.0 (the “License”); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at

+ +

http://www.apache.org/licenses/LICENSE-2.0

+ +

Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.

+ +
+
+ + +
+
+ + + diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.js b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 000000000..198441660 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.search.js b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 000000000..359cdbb8b --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/js/jquery.min.js b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 000000000..7f37b5d99 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docsets/Blueprint.docset/Contents/Resources/Documents/js/typeahead.jquery.js new file mode 100644 index 000000000..3a2d2ab03 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/js/typeahead.jquery.js @@ -0,0 +1,1694 @@ +/*! + * typeahead.js 1.3.1 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docsets/Blueprint.docset/Contents/Resources/Documents/search.json b/docsets/Blueprint.docset/Contents/Resources/Documents/search.json new file mode 100644 index 000000000..bd22c5142 --- /dev/null +++ b/docsets/Blueprint.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:11BlueprintUI14ElementBuildera":{"name":"ElementBuilder","abstract":"\u003cp\u003eResult builder for working with elements that conform to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ElementBuilderChild.html\"\u003eElementBuilderChild\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Typealiases.html#/s:11BlueprintUI17LayoutSubelementsa":{"name":"LayoutSubelements","abstract":"\u003cp\u003eA collection of proxy values that represent the child elements of a layout.\u003c/p\u003e"},"Typealiases.html#/s:11BlueprintUI17LifecycleCallbacka":{"name":"LifecycleCallback","abstract":"\u003cp\u003eThis is the type used by all lifecycle callback hooks.\u003c/p\u003e"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6radius14CoreFoundation7CGFloatVvp":{"name":"radius","abstract":"\u003cp\u003eThe blur radius of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV7opacity14CoreFoundation7CGFloatVvp":{"name":"opacity","abstract":"\u003cp\u003eThe opacity of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6offsetSo8UIOffsetVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV5colorSo7UIColorCvp":{"name":"color","abstract":"\u003cp\u003eThe color of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6radius7opacity6offset5colorAC14CoreFoundation7CGFloatV_AJSo8UIOffsetVSo7UIColorCtcfc":{"name":"init(radius:opacity:offset:color:)","parent_name":"TextShadow"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO3cutyA2GmF":{"name":"cut","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO4copyyA2GmF":{"name":"copy","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO5pasteyA2GmF":{"name":"paste","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO6deleteyA2GmF":{"name":"delete","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO6selectyA2GmF":{"name":"select","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO9selectAllyA2GmF":{"name":"selectAll","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO14toggleBoldfaceyA2GmF":{"name":"toggleBoldface","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO13toggleItalicsyA2GmF":{"name":"toggleItalics","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO15toggleUnderlineyA2GmF":{"name":"toggleUnderline","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12increaseSizeyA2GmF":{"name":"increaseSize","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12decreaseSizeyA2GmF":{"name":"decreaseSize","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12printContentyA2GmF":{"name":"printContent","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO10pasteAndGoyA2GmF":{"name":"pasteAndGo","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO18pasteAndMatchStyleyA2GmF":{"name":"pasteAndMatchStyle","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO14pasteAndSearchyA2GmF":{"name":"pasteAndSearch","parent_name":"System"},"Structs/EditingMenuItem/Kind.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6systemyA2E6SystemOcAEmF":{"name":"system(_:)","abstract":"\u003cp\u003eA standard system item.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem/Kind.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6customyAESScAEmF":{"name":"custom(_:)","abstract":"\u003cp\u003eA custom item with a custom title.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem/Kind/System.html":{"name":"System","abstract":"\u003cp\u003eThe system menu item kinds supported by an editing menu.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV4kindAC4KindOvp":{"name":"kind","abstract":"\u003cp\u003eThe type of menu item.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV8onSelectyycvp":{"name":"onSelect","abstract":"\u003cp\u003eA callback, invoked when the user selects the menu item.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV5title8onSelectACSS_yyctcfc":{"name":"init(title:onSelect:)","abstract":"\u003cp\u003eCreates a new menu item of the given kind.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV_8onSelectA2C4KindO6SystemO_yyctcfc":{"name":"init(_:onSelect:)","abstract":"\u003cp\u003eCreates a new menu item of the given kind.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toACSS_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given string to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toACSo7UIImageC_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given image to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toAC10Foundation3URLV_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given url to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem/Kind.html":{"name":"Kind","abstract":"\u003cp\u003eThe menu item types you may place into a menu.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenu/MenuTrigger.html#/s:25BlueprintUICommonControls11EditingMenuV0E7TriggerC4showyyF":{"name":"show()","abstract":"\u003cp\u003eCall this method to show the menu.\u003c/p\u003e","parent_name":"MenuTrigger"},"Structs/EditingMenu/Gesture.html#/s:25BlueprintUICommonControls11EditingMenuV7GestureO5onTapyA2EmF":{"name":"onTap","abstract":"\u003cp\u003eThe menu will be shown when the element is tapped.\u003c/p\u003e","parent_name":"Gesture"},"Structs/EditingMenu/Gesture.html#/s:25BlueprintUICommonControls11EditingMenuV7GestureO11onLongPressyA2EmF":{"name":"onLongPress","abstract":"\u003cp\u003eThe menu will be shown when the element is long pressed.\u003c/p\u003e","parent_name":"Gesture"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe wrapped element to display.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV5itemsSayAA0dE4ItemVGvp":{"name":"items","abstract":"\u003cp\u003eThe editing items to show in the editing menu.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV4show8wrapping4withA2C7GestureO_0A2UI7Element_pSayAA0dE4ItemVGyXEtcfc":{"name":"init(show:wrapping:with:)","abstract":"\u003cp\u003eCreates a new editing menu, wrapping the provided element, and displaying the provided items.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV8wrapping5itemsAC0A2UI7Element_pAC0E7TriggerCXE_SayAA0dE4ItemVGyXEtcfc":{"name":"init(wrapping:items:)","abstract":"\u003cp\u003eCreates a new editing menu, wrapping the provided element, and displaying the provided items.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EditingMenu"},"Structs/EditingMenu/Gesture.html":{"name":"Gesture","abstract":"\u003cp\u003eThe gesture to use to show the menu.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu/MenuTrigger.html":{"name":"MenuTrigger","abstract":"\u003cp\u003eA trigger that you can use to show the menu based on the result of some other","parent_name":"EditingMenu"},"Structs/URLHandlerEnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP12defaultValue0F0QzvpZ":{"name":"defaultValue","parent_name":"URLHandlerEnvironmentKey"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC16notificationTypeSo28UIAccessibilityNotificationsavp":{"name":"notificationType","abstract":"\u003cp\u003eThe type of accessibility notification that will be triggered.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC10identifiers11AnyHashableVSgvp":{"name":"identifier","abstract":"\u003cp\u003eAn optional identifier for the trigger.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC16notificationType10identifierAESo28UIAccessibilityNotificationsa_s11AnyHashableVSgtcfc":{"name":"init(notificationType:identifier:)","abstract":"\u003cp\u003eCreates a new trigger for the purpose of changing accessibility focus.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC5focusyyF":{"name":"focus()","abstract":"\u003cp\u003eManually fire the trigger\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element that will have the focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7triggerAC7TriggerCvp":{"name":"trigger","abstract":"\u003cp\u003eA object that can be held on to by the caller to manually trigger a focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV8wrapping7triggerAC0A2UI7Element_p_AC7TriggerCtcfc":{"name":"init(wrapping:trigger:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityFocus\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus/Trigger.html":{"name":"Trigger","abstract":"\u003cp\u003eA trigger that can be used to manually fire an accessibility focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV8durationSdvp":{"name":"duration","abstract":"\u003cp\u003eThe duration of the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV5curveSo06UIViewC5CurveVvp":{"name":"curve","abstract":"\u003cp\u003eThe timing curve of the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV20allowUserInteractionSbvp":{"name":"allowUserInteraction","abstract":"\u003cp\u003eWhether the view supports user interaction during the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV7defaultACvpZ":{"name":"default","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV8duration5curve20allowUserInteractionACSd_So06UIViewC5CurveVSbtcfc":{"name":"init(duration:curve:allowUserInteraction:)","parent_name":"AnimationAttributes"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html#/s:11BlueprintUI14SizeConstraintV25UnconstrainedInfiniteAxisV12wrappedValueAC0G0Ovp":{"name":"wrappedValue","parent_name":"UnconstrainedInfiniteAxis"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html#/s:11BlueprintUI14SizeConstraintV25UnconstrainedInfiniteAxisV12wrappedValueAeC0G0O_tcfc":{"name":"init(wrappedValue:)","parent_name":"UnconstrainedInfiniteAxis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO6atMostyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atMost(_:)","abstract":"\u003cp\u003eThe measurement should treat the associated value as the largest","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO13unconstrainedyA2EmF":{"name":"unconstrained","abstract":"\u003cp\u003eThe measurement is unconstrained in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO7maximum14CoreFoundation7CGFloatVvp":{"name":"maximum","abstract":"\u003cp\u003eThe maximum magnitude in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO7minimum14CoreFoundation7CGFloatVvp":{"name":"minimum","abstract":"\u003cp\u003eThe minimum magnitude in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO16constrainedValue14CoreFoundation7CGFloatVSgvp":{"name":"constrainedValue","abstract":"\u003cp\u003eThe constraint value in this dimension, or \u003ccode\u003enil\u003c/code\u003e if this dimension is unconstrained.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1poiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"+(_:_:)","abstract":"\u003cp\u003eAdds a scalar value to an Axis. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1soiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"-(_:_:)","abstract":"\u003cp\u003eSubtracts a scalar value from an Axis. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1doiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"/(_:_:)","abstract":"\u003cp\u003eDivides an Axis by a scalar value. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1moiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"*(_:_:)","abstract":"\u003cp\u003eMultiplies an Axis by a scalar value. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO17isGreaterThanZeroSbvp":{"name":"isGreaterThanZero","abstract":"\u003cp\u003eIf the \u003ccode\u003eAxis\u003c/code\u003e is greater than zero.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2peoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"+=(_:_:)","abstract":"\u003cp\u003eAdds a scalar value to an Axis. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2seoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"-=(_:_:)","abstract":"\u003cp\u003eSubtracts a scalar value from an Axis. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2deoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"/=(_:_:)","abstract":"\u003cp\u003eDivides an Axis by a scalar value. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2meoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"*=(_:_:)","abstract":"\u003cp\u003eMultiplies an Axis by a scalar value. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"Axis"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5widthAC4AxisOvp":{"name":"width","abstract":"\u003cp\u003eThe width constraint.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV6heightAC4AxisOvp":{"name":"height","abstract":"\u003cp\u003eThe height constraint.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5width6heightA2C4AxisO_AGtcfc":{"name":"init(width:height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV13unconstrainedACvpZ":{"name":"unconstrained","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintVyACSo6CGSizeVcfc":{"name":"init(_:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5widthAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(width:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV6heightAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV7minimumSo6CGSizeVvp":{"name":"minimum","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV7maximumSo6CGSizeVvp":{"name":"maximum","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5inset5width6heightAC14CoreFoundation7CGFloatV_AItF":{"name":"inset(width:height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5inset2byACSo12UIEdgeInsetsV_tF":{"name":"inset(by:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eRepresents a size constraint for a single axis.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html":{"name":"UnconstrainedInfiniteAxis","abstract":"\u003cp\u003eThis property wrapper checks the value of \u003ccode\u003eatMost\u003c/code\u003e cases, and turns it into an","parent_name":"SizeConstraint"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV02isE0Sbvp":{"name":"isEnabled","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV_8wrappingACSb_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"UserInteractionEnabled"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1x14CoreFoundation7CGFloatVvp":{"name":"x","abstract":"\u003cp\u003eThe normalized distance from the origin to the point in the horizontal direction.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1y14CoreFoundation7CGFloatVvp":{"name":"y","abstract":"\u003cp\u003eThe normalized distance from the origin to the point in the vertical direction.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1x1yAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(x:y:)","abstract":"\u003cp\u003eCreates a unit point with the specified horizontal and vertical offsets.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV4zeroACvpZ":{"name":"zero","abstract":"\u003cp\u003eThe origin of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA point that’s centered in an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA point that’s centered vertically on the leading edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA point that’s centered vertically on the trailing edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA point that’s centered horizontally on the top edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA point that’s centered horizontally on the bottom edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV10topLeadingACvpZ":{"name":"topLeading","abstract":"\u003cp\u003eA point that’s in the top leading corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV11topTrailingACvpZ":{"name":"topTrailing","abstract":"\u003cp\u003eA point that’s in the top trailing corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV13bottomLeadingACvpZ":{"name":"bottomLeading","abstract":"\u003cp\u003eA point that’s in the bottom leading corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV14bottomTrailingACvpZ":{"name":"bottomTrailing","abstract":"\u003cp\u003eA point that’s in the bottom trailing corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element whose transform is being affected.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eThe transform of the wrapped element.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transform8wrappingACSo13CATransform3DV_AA7Element_ptcfc":{"name":"init(transform:wrapping:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eTransformed\u003c/code\u003e with the given content element and 3D transform.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transform8wrappingACSo17CGAffineTransformV_AA7Element_ptcfc":{"name":"init(transform:wrapping:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eTransformed\u003c/code\u003e with the given content element and DD transform.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Transformed"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV04tintdE0So06UIViewcdE0Vvp":{"name":"tintAdjustmentMode","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV_8wrappingACSo06UIViewcdE0V_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TintAdjustmentMode"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO5fixedyA2GmF":{"name":"fixed","abstract":"\u003cp\u003eThe element has a fixed size, with a grow and shrink priority of 0.","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO8flexibleyA2GmF":{"name":"flexible","abstract":"\u003cp\u003eThe element has a flexible size, with a grow and shrink priority of 1.","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO5growsyA2GmF":{"name":"grows","abstract":"\u003cp\u003eThe element has a flexible size, it will grow if the stack underflows,","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO7shrinksyA2GmF":{"name":"shrinks","abstract":"\u003cp\u003eThe element has a flexible size, it will shrink if the stack overflows,","parent_name":"Priority"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7elementAA7Element_pvp":{"name":"element","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV6traitsAC6TraitsVvp":{"name":"traits","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV3keys11AnyHashableVSgvp":{"name":"key","parent_name":"Child"},"Structs/StackLayout/Child/Priority.html":{"name":"Priority","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7element6traits3keyAeA7Element_p_AC6TraitsVs11AnyHashableVSgtcfc":{"name":"init(element:traits:key:)","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7element8priority14alignmentGuide3keyAeA7Element_p_AE8PriorityO14CoreFoundation7CGFloatVAA0K10DimensionsVcSgs11AnyHashableVSgtcfc":{"name":"init(element:priority:alignmentGuide:key:)","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/StackLayout/Alignment.html#/s:11BlueprintUI11StackLayoutV9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to the size of the stack.\u003c/p\u003e","parent_name":"Alignment"},"Structs/StackLayout/Alignment.html#/s:11BlueprintUI11StackLayoutV9AlignmentO5alignyAeA0E2ID_pXp_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eChildren will be aligned relatively to each other, and then all the contents will be","parent_name":"Alignment"},"Structs/StackLayout/OverflowDistribution.html#/s:11BlueprintUI11StackLayoutV20OverflowDistributionO22condenseProportionallyyA2EmF":{"name":"condenseProportionally","abstract":"\u003cp\u003eEach child will shrink proportionally to its measured size.\u003c/p\u003e","parent_name":"OverflowDistribution"},"Structs/StackLayout/OverflowDistribution.html#/s:11BlueprintUI11StackLayoutV20OverflowDistributionO17condenseUniformlyyA2EmF":{"name":"condenseUniformly","abstract":"\u003cp\u003eEach child will shrink by the same amount.\u003c/p\u003e","parent_name":"OverflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO11spaceEvenlyyA2EmF":{"name":"spaceEvenly","abstract":"\u003cp\u003eAdditional space will be evenly divided into the spacing between items.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO18growProportionallyyA2EmF":{"name":"growProportionally","abstract":"\u003cp\u003eAdditional space will be divided proportionally by the measured size of each child.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO13growUniformlyyA2EmF":{"name":"growUniformly","abstract":"\u003cp\u003eAdditional space will be distributed uniformly between children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO14justifyToStartyA2EmF":{"name":"justifyToStart","abstract":"\u003cp\u003eAdditional space will appear after all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO15justifyToCenteryA2EmF":{"name":"justifyToCenter","abstract":"\u003cp\u003eAdditional space will be distributed on either side of all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO12justifyToEndyA2EmF":{"name":"justifyToEnd","abstract":"\u003cp\u003eAdditional space will be appear before all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/Axis.html#/s:11BlueprintUI11StackLayoutV4AxisO10horizontalyA2EmF":{"name":"horizontal","parent_name":"Axis"},"Structs/StackLayout/Axis.html#/s:11BlueprintUI11StackLayoutV4AxisO8verticalyA2EmF":{"name":"vertical","parent_name":"Axis"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV12growPriority14CoreFoundation7CGFloatVvp":{"name":"growPriority","abstract":"\u003cp\u003eControls the amount of extra space distributed to this child during underflow.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV14shrinkPriority14CoreFoundation7CGFloatVvp":{"name":"shrinkPriority","abstract":"\u003cp\u003eControls the amount of space allowed for this child during overflow.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV14alignmentGuideAC09AlignmentG0VSgvp":{"name":"alignmentGuide","abstract":"\u003cp\u003eAllows for custom alignment of a child along the cross axis.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV12growPriority06shrinkG014alignmentGuideAE14CoreFoundation7CGFloatV_AkC09AlignmentJ0VSgtcfc":{"name":"init(growPriority:shrinkPriority:alignmentGuide:)","abstract":"\u003cp\u003eCreates a new set of traits with default values.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/AlignmentGuide.html#/s:11BlueprintUI11StackLayoutV14AlignmentGuideV12computeValuey14CoreFoundation7CGFloatVAA17ElementDimensionsVcvp":{"name":"computeValue","abstract":"\u003cp\u003eReturns a value along the stack\u0026rsquo;s cross axis, in the element\u0026rsquo;s own coordinate space,","parent_name":"AlignmentGuide"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV13defaultTraitsAC0F0VvpZ":{"name":"defaultTraits","abstract":"\u003cp\u003eThe default traits for a child contained within a stack layout\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/AlignmentGuide.html":{"name":"AlignmentGuide","abstract":"\u003cp\u003eDetermines how a stack child will be aligned on the cross axis relative to other children.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/Traits.html":{"name":"Traits","abstract":"\u003cp\u003eContains traits that affect the layout of individual children in the stack.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV4axisAC4AxisOvp":{"name":"axis","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV9underflowAC21UnderflowDistributionOvp":{"name":"underflow","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV8overflowAC20OverflowDistributionOvp":{"name":"overflow","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV9alignmentAC9AlignmentOvp":{"name":"alignment","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV14minimumSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumSpacing","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV4axis9alignmentA2C4AxisO_AC9AlignmentOtcfc":{"name":"init(axis:alignment:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI12LegacyLayoutP7measure2in5itemsSo6CGSizeVAA14SizeConstraintV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"measure(in:items:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI12LegacyLayoutP6layout4size5itemsSayAA0D10AttributesVGSo6CGSizeV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"layout(size:items:)","parent_name":"StackLayout"},"Structs/StackLayout/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eThe direction of the stack.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/UnderflowDistribution.html":{"name":"UnderflowDistribution","abstract":"\u003cp\u003eDetermines the on-axis layout when there is extra free space available.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/OverflowDistribution.html":{"name":"OverflowDistribution","abstract":"\u003cp\u003eDetermines the on-axis layout when there is not enough space to fit all children as measured.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/Alignment.html":{"name":"Alignment","abstract":"\u003cp\u003eDetermines the cross-axis layout (height for a horizontal stack, width for a vertical stack).\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP12sizeThatFits8proposal11subelements11environment5cacheSo6CGSizeVAA14SizeConstraintV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelements:environment:cache:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP16placeSubelements2in11subelements11environment5cacheySo6CGSizeV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"placeSubelements(in:subelements:environment:cache:)","parent_name":"StackLayout"},"Structs/StackLayout/Child.html":{"name":"Child","parent_name":"StackLayout"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element whose opacity is being affected.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV7opacity14CoreFoundation7CGFloatVvp":{"name":"opacity","abstract":"\u003cp\u003eThe opacity of the wrapped element.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV7opacity8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(opacity:wrapping:)","abstract":"\u003cp\u003eInitializes an \u003ccode\u003eOpacity\u003c/code\u003e with the given content element and opacity.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Opacity"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV7wrappedAA7Element_pvp":{"name":"wrapped","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppearyycSgvp":{"name":"onAppear","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV11onDisappearyycSgvp":{"name":"onDisappear","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppear0E9Disappear8wrappingACyycSg_AgA7Element_ptcfc":{"name":"init(onAppear:onDisappear:wrapping:)","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppearyACyycF":{"name":"onAppear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element appears.\u003c/p\u003e","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV11onDisappearyACyycF":{"name":"onDisappear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element disappears.\u003c/p\u003e","parent_name":"LifecycleObserver"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame of the element in the coordinate space of the custom layout.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key to use to disambiguate this element.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element to be displayed.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV5frame3key7elementAESo6CGRectV_s11AnyHashableVSgAA7Element_ptcfc":{"name":"init(frame:key:element:)","abstract":"\u003cp\u003eCreates a new child element.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Sizing.html#/s:11BlueprintUI12LayoutWriterV6SizingO15unionOfChildrenyA2EmF":{"name":"unionOfChildren","abstract":"\u003cp\u003eEnsures that the final size of element is large enough to fit all children, starting from (0,0).\u003c/p\u003e","parent_name":"Sizing"},"Structs/LayoutWriter/Sizing.html#/s:11BlueprintUI12LayoutWriterV6SizingO5fixedyAESo6CGSizeVcAEmF":{"name":"fixed(_:)","abstract":"\u003cp\u003eFixes the layout size to the provided size. Children are positioned within this size, starting at (0,0)","parent_name":"Sizing"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO11measurementyA2GmF":{"name":"measurement","abstract":"\u003cp\u003eThe element is being measured.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO6layoutyAGSo6CGSizeVcAGmF":{"name":"layout(_:)","abstract":"\u003cp\u003eThe element is being laid out with a known size.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO9onMeasure_0gC0xxyXE_xSo6CGSizeVXEtlF":{"name":"onMeasure(_:onLayout:)","abstract":"\u003cp\u003eReturns the provided value based on if a measurement or layout is occurring.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context.html#/s:11BlueprintUI12LayoutWriterV7ContextV4sizeAA14SizeConstraintVvp":{"name":"size","abstract":"\u003cp\u003eThe size constraint the layout is occurring in.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Context.html#/s:11BlueprintUI12LayoutWriterV7ContextV5phaseAE0C5PhaseOvp":{"name":"phase","abstract":"\u003cp\u003eThe phase of the layout current occurring – measurement or layout.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Context/LayoutPhase.html":{"name":"LayoutPhase","abstract":"\u003cp\u003eThe current phase of the layout event: \u003ccode\u003e.measurement\u003c/code\u003e or \u003ccode\u003e.layout\u003c/code\u003e.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV6sizingAC6SizingOvp":{"name":"sizing","abstract":"\u003cp\u003eHow the size of the layout should be calculated. Defaults to \u003ccode\u003e.unionOfChildren\u003c/code\u003e,","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe children of the custom layout, which specifies the child element and its frame.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV3add4with3key5childySo6CGRectV_s11AnyHashableVSgAA7Element_ptF":{"name":"add(with:key:child:)","abstract":"\u003cp\u003eAdds a new child element to the layout with the provided frame and optional key.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV3addyyAC5ChildVF":{"name":"add(_:)","abstract":"\u003cp\u003eAdds a new child element to the layout.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV10modifyEach5usingyyAC5ChildVzXE_tF":{"name":"modifyEach(using:)","abstract":"\u003cp\u003eEnumerates each of the children, allowing you to modify them in place,","parent_name":"Builder"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterVyACyAC7ContextV_AC7BuilderVztccfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates a new instance of the LayoutWriter with the custom layout provided by the builder.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterV5Builda":{"name":"Build","abstract":"\u003cp\u003eThe builder type passed to the \u003ccode\u003eLayoutWriter\u003c/code\u003e initializer.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterV5buildyyAC7ContextV_AC7BuilderVztcvp":{"name":"build","abstract":"\u003cp\u003eThe builder used to create the custom layout.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eThe builder is the primary surface area you interact with when using a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/LayoutWriter.html\"\u003eLayoutWriter\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Context.html":{"name":"Context","abstract":"\u003cp\u003eProvides the relevant information about the context in which the layout is occurring.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Sizing.html":{"name":"Sizing","abstract":"\u003cp\u003eControls the sizing calculation of the custom layout.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child of the custom layout, providing its frame and element.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.layer.transform\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.alpha\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isUserInteractionEnabled\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV8isHiddenSbvp":{"name":"isHidden","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isHidden\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV18tintAdjustmentModeSo010UIViewTintgH0Vvp":{"name":"tintAdjustmentMode","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.tintAdjustmentMode\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV10attributesAC10AttributesVvp":{"name":"attributes","abstract":"\u003cp\u003eOptional attributes to apply to this subelement, such as opacity and transforms.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place2at6anchor4sizeySo7CGPointV_AA9UnitPointVSo6CGSizeVtF":{"name":"place(at:anchor:size:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place2in6anchorySo6CGRectV_AA9UnitPointVtF":{"name":"place(in:anchor:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place7fillingySo6CGSizeV_tF":{"name":"place(filling:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV12sizeThatFitsySo6CGSizeVAA14SizeConstraintVF":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eAsks the subelement for its size.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV6traits03forC4Type6TraitsQzxm_tAA0C0RzlF":{"name":"traits(forLayoutType:)","abstract":"\u003cp\u003eGets the layout traits of the subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement/Attributes.html":{"name":"Attributes","abstract":"\u003cp\u003eOptional additional attributes that can be applied to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV7defaultACvpZ":{"name":"default","abstract":"\u003cp\u003eThe default configuration.\u003c/p\u003e","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV19hintRangeBoundariesSbvp":{"name":"hintRangeBoundaries","abstract":"\u003cp\u003eEnables aggressive cache hinting along the boundaries of the range between constraints and","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV23searchUnconstrainedKeysSbvp":{"name":"searchUnconstrainedKeys","abstract":"\u003cp\u003eAllows cache misses on finite constraints to deduce a range-based match by searching for a","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV19hintRangeBoundaries23searchUnconstrainedKeysACSb_Sbtcfc":{"name":"init(hintRangeBoundaries:searchUnconstrainedKeys:)","parent_name":"LayoutOptions"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6centerSo7CGPointVvp":{"name":"center","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.center\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.bounds\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.layer.transform\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.alpha\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isUserInteractionEnabled\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV8isHiddenSbvp":{"name":"isHidden","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isHidden\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV18tintAdjustmentModeSo010UIViewTintfG0Vvp":{"name":"tintAdjustmentMode","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.tintAdjustmentMode\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesVACycfc":{"name":"init()","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5frameACSo6CGRectV_tcfc":{"name":"init(frame:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV4sizeACSo6CGSizeV_tcfc":{"name":"init(size:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6center6boundsACSo7CGPointV_So6CGRectVtcfc":{"name":"init(center:bounds:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5frameSo6CGRectVvp":{"name":"frame","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6withinyA2CF":{"name":"within(_:)","abstract":"\u003cp\u003eConcatenates layout attributes, moving the receiver from the local","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"LayoutAttributes"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key used to differentiate the element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe wrapped element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV3key8wrappingACs11AnyHashableVSg_AA7Element_ptcfc":{"name":"init(key:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eKeyed\u003c/code\u003e element with the provided key and wrapped element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Keyed"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV02isC0Sbvp":{"name":"isHidden","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV_8wrappingACSb_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Hidden"},"Structs/GridRow/Width.html#/s:11BlueprintUI7GridRowV5WidthO8absoluteyAE14CoreFoundation7CGFloatVcAEmF":{"name":"absolute(_:)","abstract":"\u003cp\u003eAssign the child a fixed width equal to the payload.\u003c/p\u003e","parent_name":"Width"},"Structs/GridRow/Width.html#/s:11BlueprintUI7GridRowV5WidthO12proportionalyAE14CoreFoundation7CGFloatVcAEmF":{"name":"proportional(_:)","abstract":"\u003cp\u003eAssign the child a proportional width of the available layout width. Note that proportional children","parent_name":"Width"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element displayed in the \u003ccode\u003eGrid\u003c/code\u003e.\u003c/p\u003e","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eA unique identifier for the child.\u003c/p\u003e","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV5widthAC5WidthOvp":{"name":"width","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV5width3key7elementAeC5WidthO_s11AnyHashableVSgAA7Element_ptcfc":{"name":"init(width:key:element:)","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV17verticalAlignmentAA0D0V0dF0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eHow children are aligned vertically. By default, \u003ccode\u003e.fill\u003c/code\u003e.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe space between children. By default, 0.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements to be laid out. By default, an empty array.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV9configureACyACzXE_tcfc":{"name":"init(configure:)","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV17verticalAlignment7spacing_AcA0D0V0dF0O_14CoreFoundation7CGFloatVSayAC5ChildVGyXEtcfc":{"name":"init(verticalAlignment:spacing:_:)","abstract":"\u003cp\u003eInitializer using result builder to declaritively build up a grid row.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV3add5width3key5childyAC5WidthO_s11AnyHashableVSgAA7Element_ptF":{"name":"add(width:key:child:)","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"GridRow"},"Structs/GridRow/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child of a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow/Width.html":{"name":"Width","abstract":"\u003cp\u003eThe sizing and content of a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e child.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GeometryProxy.html#/s:11BlueprintUI13GeometryProxyV10constraintAA14SizeConstraintVvp":{"name":"constraint","abstract":"\u003cp\u003eThe size constraint of the element being laid out.\u003c/p\u003e","parent_name":"GeometryProxy"},"Structs/GeometryProxy.html#/s:11BlueprintUI13GeometryProxyV7measure7element2inSo6CGSizeVAA7Element_p_AA14SizeConstraintVSgtF":{"name":"measure(element:in:)","abstract":"\u003cp\u003eMeasure the given element, constrained to the same size as the \u003ccode\u003eGeometryProxy\u003c/code\u003e itself (unless a constraint is explicitly provided).\u003c/p\u003e","parent_name":"GeometryProxy"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key used to optionally unique the child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV6traitsAE6TraitsVvp":{"name":"traits","abstract":"\u003cp\u003eThe traits of a child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element representing the child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates a new child item with the given element.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV_3keyAeA7Element_p_s11AnyHashableVSgtcfc":{"name":"init(_:key:)","abstract":"\u003cp\u003eCreates a new child item with the given element.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV6TraitsV":{"name":"Traits","parent_name":"Child"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eShorter items are stretched to fill the height of the tallest item.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eShorter items are aligned to the top of the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eShorter items are vertically aligned within the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eShorter items are aligned to the bottom of the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO7leadingyA2EmF":{"name":"leading","abstract":"\u003cp\u003eItems are aligned with the leading edge.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eItems are centered within the remaining space.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO8trailingyA2EmF":{"name":"trailing","abstract":"\u003cp\u003eItems are aligned with the trailing edge.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13lineAlignmentAC04LineE0Ovp":{"name":"lineAlignment","abstract":"\u003cp\u003eHow to align each row when there is extra horizontal space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV11lineSpacing14CoreFoundation7CGFloatVvp":{"name":"lineSpacing","abstract":"\u003cp\u003eSpace between lines in the layout.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13itemAlignmentAC04ItemE0Ovp":{"name":"itemAlignment","abstract":"\u003cp\u003eHow to align items in a line when there is extra vertical space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV11itemSpacing14CoreFoundation7CGFloatVvp":{"name":"itemSpacing","abstract":"\u003cp\u003eSpace between items within a line.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements of the flow layout to be laid out.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13lineAlignment0D7Spacing04itemE00gF0_A2C04LineE0O_14CoreFoundation7CGFloatVAC04ItemE0OALSayAC5ChildVGyXEtcfc":{"name":"init(lineAlignment:lineSpacing:itemAlignment:itemSpacing:_:)","abstract":"\u003cp\u003eCreates a new flow layout with the provided parameters.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Flow"},"Structs/Flow/LineAlignment.html":{"name":"LineAlignment","abstract":"\u003cp\u003eHow to horizontally align the line when there is extra space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow/ItemAlignment.html":{"name":"ItemAlignment","abstract":"\u003cp\u003eHow to vertically align items which there is extra space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child placed within the flow layout.\u003c/p\u003e","parent_name":"Flow"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV5width14CoreFoundation7CGFloatVvp":{"name":"width","abstract":"\u003cp\u003eThe element\u0026rsquo;s width\u003c/p\u003e","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV6height14CoreFoundation7CGFloatVvp":{"name":"height","abstract":"\u003cp\u003eThe element\u0026rsquo;s height\u003c/p\u003e","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsVy14CoreFoundation7CGFloatVAA19HorizontalAlignmentVcip":{"name":"subscript(_:)","abstract":"\u003cp\u003eAccesses the value of the given guide, or the default value of the alignment if this","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsVy14CoreFoundation7CGFloatVAA17VerticalAlignmentVcip":{"name":"subscript(_:)","abstract":"\u003cp\u003eAccesses the value of the given guide, or the default value of the alignment if this","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV8explicit14CoreFoundation7CGFloatVSgAA19HorizontalAlignmentV_tcip":{"name":"subscript(explicit:)","abstract":"\u003cp\u003eReturns the explicit value of the given alignment guide in this view, or","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV8explicit14CoreFoundation7CGFloatVSgAA17VerticalAlignmentV_tcip":{"name":"subscript(explicit:)","abstract":"\u003cp\u003eReturns the explicit value of the given alignment guide in this view, or","parent_name":"ElementDimensions"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV14decorationSizeSo6CGSizeVvp":{"name":"decorationSize","abstract":"\u003cp\u003eThe size of the decoration being positioned within the decorated content\u0026rsquo;s bounds.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV11contentSizeSo6CGSizeVvp":{"name":"contentSize","abstract":"\u003cp\u003eThe size of the content element within the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html\"\u003eDecorate\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is being rendered in.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5insetyAESo12UIEdgeInsetsVFZ":{"name":"inset(_:)","abstract":"\u003cp\u003eInsets the decoration element on each edge by the amount specified by","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5insetyAE14CoreFoundation7CGFloatVFZ":{"name":"inset(_:)","abstract":"\u003cp\u003eProvides a \u003ccode\u003e.inset\u003c/code\u003e position where the decoration is inset by the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5inset10horizontal8verticalAE14CoreFoundation7CGFloatV_AKtFZ":{"name":"inset(horizontal:vertical:)","abstract":"\u003cp\u003eProvides a \u003ccode\u003e.inset\u003c/code\u003e position where the decoration is inset by the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV7aligned2to15horizontalGuide08verticalH0AeA9AlignmentV_14CoreFoundation7CGFloatVAA17ElementDimensionsVcSgAQtFZ":{"name":"aligned(to:horizontalGuide:verticalGuide:)","abstract":"\u003cp\u003eAligns the decoration according the given alignment option, optionally adjusting it with","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV6corneryAeC6CornerO_So8UIOffsetVtFZ":{"name":"corner(_:_:)","abstract":"\u003cp\u003eThe decoration element is positioned in the given corner of the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV6customyAESo6CGRectVAE0D7ContextVcFZ":{"name":"custom(_:)","abstract":"\u003cp\u003eAllows you to provide custom positioning for the decoration, based on the passed context.\u003c/p\u003e","parent_name":"Position"},"Structs/Decorate/Position/PositionContext.html":{"name":"PositionContext","abstract":"\u003cp\u003eInformation provided to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate/Position.html\"\u003ePosition\u003c/a\u003e\u003c/code\u003e closures.\u003c/p\u003e","parent_name":"Position"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO7topLeftyA2EmF":{"name":"topLeft","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO8topRightyA2EmF":{"name":"topRight","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO11bottomRightyA2EmF":{"name":"bottomRight","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO10bottomLeftyA2EmF":{"name":"bottomLeft","parent_name":"Corner"},"Structs/Decorate/Layering.html#/s:11BlueprintUI8DecorateV8LayeringO5aboveyA2EmF":{"name":"above","abstract":"\u003cp\u003eThe decoration is displayed above the content element.\u003c/p\u003e","parent_name":"Layering"},"Structs/Decorate/Layering.html#/s:11BlueprintUI8DecorateV8LayeringO5belowyA2EmF":{"name":"below","abstract":"\u003cp\u003eThe decoration is displayed below the content element.\u003c/p\u003e","parent_name":"Layering"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element which provides the sizing and measurement.","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV10decorationAA7Element_pvp":{"name":"decoration","abstract":"\u003cp\u003eThe element which is used to draw the decoration.","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8layeringAC8LayeringOvp":{"name":"layering","abstract":"\u003cp\u003eWhere the decoration should be positioned in the z-axis: Above or below the wrapped element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8positionAC8PositionVvp":{"name":"position","abstract":"\u003cp\u003eHow the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html#/s:11BlueprintUI8DecorateV10decorationAA7Element_pvp\"\u003edecoration\u003c/a\u003e\u003c/code\u003e should be positioned in respect to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html#/s:11BlueprintUI8DecorateV7wrappedAA7Element_pvp\"\u003ewrapped\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8layering8position8wrapping10decorationA2C8LayeringO_AC8PositionVAA7Element_pAaL_ptcfc":{"name":"init(layering:position:wrapping:decoration:)","abstract":"\u003cp\u003eCreates a new instance with the provided overflow, background, and wrapped element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Decorate"},"Structs/Decorate/Layering.html":{"name":"Layering","abstract":"\u003cp\u003eIf the decoration should be positioned above or below the content element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate/Corner.html":{"name":"Corner","abstract":"\u003cp\u003eWhat corner the decoration element should be positioned in.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate/Position.html":{"name":"Position","abstract":"\u003cp\u003eHow to position the decoration element relative to the content element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV8Childrena":{"name":"Children","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildBlockySayxGAEd_tFZ":{"name":"buildBlock(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV13buildOptionalySayxGAESgFZ":{"name":"buildOptional(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV11buildEither5firstSayxGAF_tFZ":{"name":"buildEither(first:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV11buildEither6secondSayxGAF_tFZ":{"name":"buildEither(second:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGxFZ":{"name":"buildExpression(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGxSgFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eThis function is disfavored in case a builder wants to offer additional \u003ccode\u003ebuildExpression\u003c/code\u003e functions to support","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildArrayySayxGSayAEGFZ":{"name":"buildArray(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildArrayySayxGAEFZ":{"name":"buildArray(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV24buildLimitedAvailabilityySayxGAEFZ":{"name":"buildLimitedAvailability(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGAEFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow for an array of \u003ccode\u003eChild\u003c/code\u003e to be flattened into the overall result.\u003c/p\u003e","parent_name":"Builder"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV6squareACvpZ":{"name":"square","abstract":"\u003cp\u003eA 1:1 aspect ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5ratio14CoreFoundation7CGFloatVvp":{"name":"ratio","abstract":"\u003cp\u003eThe width:height ratio value.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5width6heightAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(width:height:)","abstract":"\u003cp\u003eInitializes with a width \u0026amp; height ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5ratioAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(ratio:)","abstract":"\u003cp\u003eInitializes with a specific ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentVyAcA0D2ID_pXpcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates an instance with the given ID.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA guide marking the top edge of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the vertical center of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA guide marking the bottom edge of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentVyAcA0D2ID_pXpcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates an instance with the given ID.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA guide marking the leading edge of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the horizontal center of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA guide marking the trailing edge of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the center of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA guide marking the leading edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA guide marking the trailing edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA guide marking the top edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA guide marking the bottom edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10topLeadingACvpZ":{"name":"topLeading","abstract":"\u003cp\u003eA guide marking the top and leading edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV11topTrailingACvpZ":{"name":"topTrailing","abstract":"\u003cp\u003eA guide marking the top and trailing edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV13bottomLeadingACvpZ":{"name":"bottomLeading","abstract":"\u003cp\u003eA guide marking the bottom and leading edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV14bottomTrailingACvpZ":{"name":"bottomTrailing","abstract":"\u003cp\u003eA guide marking the bottom and trailing edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10horizontalAA010HorizontalC0Vvp":{"name":"horizontal","abstract":"\u003cp\u003eThe alignment on the horizontal axis.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV8verticalAA08VerticalC0Vvp":{"name":"vertical","abstract":"\u003cp\u003eThe alignment on the vertical axis.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10horizontal8verticalAcA010HorizontalC0V_AA08VerticalC0Vtcfc":{"name":"init(horizontal:vertical:)","abstract":"\u003cp\u003eCreates an instance with the given horizontal and vertical alignments.\u003c/p\u003e","parent_name":"Alignment"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateVACySbGycSbRszrlufc":{"name":"init()","abstract":"\u003cp\u003eCreates a focus state that binds to a Boolean.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateVACyqd__SgGycADRszSHRd__lufc":{"name":"init()","abstract":"\u003cp\u003eCreates a focus state that binds to an optional type.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV12wrappedValuexvp":{"name":"wrappedValue","abstract":"\u003cp\u003eThe current state value, taking into account whatever bindings might be","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV14projectedValueACyxGvp":{"name":"projectedValue","abstract":"\u003cp\u003eA projection of the focus state that can be bound to focusable elements.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV7binding3forAA0C7BindingVqd___tqd__SgRszSHRd__lF":{"name":"binding(for:)","abstract":"\u003cp\u003eGets a focus binding associated with the \u003ccode\u003eFocusState\u003c/code\u003e being a specific value.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV7bindingAA0C7BindingVySbRszrlF":{"name":"binding()","abstract":"\u003cp\u003eGets a focus binding associated with the \u003ccode\u003eFocusState\u003c/code\u003e value being \u003ccode\u003etrue\u003c/code\u003e.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV7triggerAA0C7TriggerCvp":{"name":"trigger","abstract":"\u003cp\u003eA trigger, which is responsible for piping focus changes from a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/FocusState.html\"\u003eFocusState\u003c/a\u003e\u003c/code\u003e into a backing","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV02onC0yycvp":{"name":"onFocus","abstract":"\u003cp\u003eA callback to be called by a backing view when it is focused, to pipe changes from a backing","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV6onBluryycvp":{"name":"onBlur","abstract":"\u003cp\u003eA callback to be called by a backing view when it loses focus, to pipe changes from a","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV02onC00E4BlurACyyc_yyctcfc":{"name":"init(onFocus:onBlur:)","abstract":"\u003cp\u003eCreates a new binding\u003c/p\u003e","parent_name":"FocusBinding"},"Structs/UIViewElementContext.html#/s:11BlueprintUI20UIViewElementContextV11isMeasuringSbvp":{"name":"isMeasuring","abstract":"\u003cp\u003eThis bool indicates whether the view being updated is the static measuring instance. You may","parent_name":"UIViewElementContext"},"Structs/UIViewElementContext.html#/s:11BlueprintUI20UIViewElementContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is rendered in.\u003c/p\u003e","parent_name":"UIViewElementContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds of this element after layout is complete.\u003c/p\u003e","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV13subtreeExtentSo6CGRectVSgvp":{"name":"subtreeExtent","abstract":"\u003cp\u003eA rectangle in the local coordinate space that contains any children.","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is rendered in.\u003c/p\u003e","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV6bounds13subtreeExtent11environmentACSo6CGRectV_AHSgAA11EnvironmentVtcfc":{"name":"init(bounds:subtreeExtent:environment:)","parent_name":"ViewDescriptionContext"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV10layoutModeAA06LayoutG0Ovp":{"name":"layoutMode","abstract":"\u003cp\u003eThe layout mode used to render the view.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV14startTimestampSdvp":{"name":"startTimestamp","abstract":"\u003cp\u003eThe mach time in seconds at which the view render started (from \u003ccode\u003eCACurrentMediaTime()\u003c/code\u003e).\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV13totalDurationSdvp":{"name":"totalDuration","abstract":"\u003cp\u003eThe total time it took to apply a new element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV14layoutDurationSdvp":{"name":"layoutDuration","abstract":"\u003cp\u003eThe time it took to lay out and measure the new element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV18viewUpdateDurationSdvp":{"name":"viewUpdateDuration","abstract":"\u003cp\u003eThe time it took to update the on-screen views for the element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV5emptyACvpZ":{"name":"empty","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerVy5ValueQzSgxmcAA010AttributedC3KeyRzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGet or set for the given \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/AttributedTextKey.html\"\u003eAttributedTextKey\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV4fontSo6UIFontCSgvp":{"name":"font","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV5colorSo7UIColorCSgvp":{"name":"color","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV8tracking14CoreFoundation7CGFloatVSgvp":{"name":"tracking","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14underlineStyleSo011NSUnderlineG0VSgvp":{"name":"underlineStyle","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14underlineColorSo7UIColorCSgvp":{"name":"underlineColor","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14paragraphStyleSo011NSParagraphG0CSgvp":{"name":"paragraphStyle","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV4link10Foundation3URLVSgvp":{"name":"link","parent_name":"TextAttributeContainer"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV5rangeSnySS5IndexVGvp":{"name":"range","abstract":"\u003cp\u003eThe range of the run of attributes.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV10attributesAA0D18AttributeContainerVvp":{"name":"attributes","abstract":"\u003cp\u003eThe attributes that apply to this run.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV13dynamicMemberxs7KeyPathCyAA0D18AttributeContainerVxG_tcluip":{"name":"subscript(dynamicMember:)","abstract":"\u003cp\u003eDynamic member getter for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e of this run.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV6stringSSvp":{"name":"string","abstract":"\u003cp\u003eThe wrapped string, with no attributes.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV16attributedStringSo012NSAttributedF0Cvp":{"name":"attributedString","abstract":"\u003cp\u003eAn \u003ccode\u003eNSAttributedString\u003c/code\u003e representation of the attributed text.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV4runsSayAC3RunVGvp":{"name":"runs","abstract":"\u003cp\u003eAn iterable view into segments of the attributed string, each of which indicates where a run of identical","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyACSScfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreate some \u003ccode\u003eAttributedText\u003c/code\u003e from a plain string.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyACSo18NSAttributedStringCcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreate some \u003ccode\u003eAttributedText\u003c/code\u003e from an attributed string. The attributes are preserved.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV5range2ofSnySS5IndexVGSgx_tSyRzlF":{"name":"range(of:)","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV13dynamicMemberxs15WritableKeyPathCyAA0D18AttributeContainerVxG_tcluip":{"name":"subscript(dynamicMember:)","abstract":"\u003cp\u003eDynamic member getter or setter for any attributes defined on \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e.","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyAA0D18AttributeContainerVxcSXRzSS5IndexV5BoundRtzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGet or set a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e for the provided range of text. This allows you to set attributes","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV1poiyA2C_ACtFZ":{"name":"+(_:_:)","abstract":"\u003cp\u003eConcatenate two pieces of \u003ccode\u003eAttributedText\u003c/code\u003e together.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText/Run.html":{"name":"Run","abstract":"\u003cp\u003eA Run represents a range of identical attributes in the attributed text.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html":{"name":"AttributedText","abstract":"\u003cp\u003e\u003ccode\u003eAttributedText\u003c/code\u003e allows you to apply strongly-typed attributes to strings (much like the \u003ccode\u003eAttributedString\u003c/code\u003e type"},"Structs/TextAttributeContainer.html":{"name":"TextAttributeContainer"},"Structs/BlueprintViewRenderMetrics.html":{"name":"BlueprintViewRenderMetrics"},"Structs/ViewDescriptionContext.html":{"name":"ViewDescriptionContext","abstract":"\u003cp\u003eThe context passing to the \u003ccode\u003ebackingViewDescription\u003c/code\u003e of an Element.\u003c/p\u003e"},"Structs/UIViewElementContext.html":{"name":"UIViewElementContext","abstract":"\u003cp\u003eContext object passed into \u003ccode\u003eupdateUIView\u003c/code\u003e.\u003c/p\u003e"},"Structs/FocusBinding.html":{"name":"FocusBinding","abstract":"\u003cp\u003eA two-way binding between a focusable element\u0026rsquo;s backing view and a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/FocusState.html\"\u003eFocusState\u003c/a\u003e\u003c/code\u003e-wrapped"},"Structs/FocusState.html":{"name":"FocusState","abstract":"\u003cp\u003eA property wrapper type that can read and write a value that represents the placement of focus.\u003c/p\u003e"},"Structs/Alignment.html":{"name":"Alignment","abstract":"\u003cp\u003eAn alignment in both axes.\u003c/p\u003e"},"Structs/HorizontalAlignment.html":{"name":"HorizontalAlignment","abstract":"\u003cp\u003eAn alignment position along the horizontal axis.\u003c/p\u003e"},"Structs/VerticalAlignment.html":{"name":"VerticalAlignment","abstract":"\u003cp\u003eAn alignment position along the vertical axis.\u003c/p\u003e"},"Structs/AspectRatio.html":{"name":"AspectRatio","abstract":"\u003cp\u003eRepresents an a proportional relationship between width and height.\u003c/p\u003e"},"Structs/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eGeneric result builder for converting blocks of \u003ccode\u003eChild...\u003c/code\u003e into \u003ccode\u003e[Child]\u003c/code\u003e.\u003c/p\u003e"},"Structs/Decorate.html":{"name":"Decorate","abstract":"\u003cp\u003ePlaces a decoration element behind or in front of the given \u003ccode\u003ewrapped\u003c/code\u003e element,"},"Structs/ElementDimensions.html":{"name":"ElementDimensions","abstract":"\u003cp\u003eAn element’s size and its alignment guides in its own coordinate space.\u003c/p\u003e"},"Structs/Flow.html":{"name":"Flow","abstract":"\u003cp\u003eElement which lays out children horizontally, wrapping to another row when there is not enough space.\u003c/p\u003e"},"Structs/GeometryProxy.html":{"name":"GeometryProxy","abstract":"\u003cp\u003eContains information about the current layout being measured by GeometryReader\u003c/p\u003e"},"Structs/GridRow.html":{"name":"GridRow","abstract":"\u003cp\u003eLike \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Row.html\"\u003eRow\u003c/a\u003e\u003c/code\u003e, \u003ccode\u003eGridRow\u003c/code\u003e displays a list of items in a linear horizontal layout. Unlike \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Row.html\"\u003eRow\u003c/a\u003e\u003c/code\u003e, \u003ccode\u003eGridRow\u003c/code\u003e provides"},"Structs/Hidden.html":{"name":"Hidden","abstract":"\u003cp\u003e\u003ccode\u003eHidden\u003c/code\u003e conditionally hides its wrapped element.\u003c/p\u003e"},"Structs/Keyed.html":{"name":"Keyed","abstract":"\u003cp\u003e\u003ccode\u003eKeyed\u003c/code\u003e allows providing a \u003ccode\u003eHashable\u003c/code\u003e value which is used"},"Structs/LayoutAttributes.html":{"name":"LayoutAttributes","abstract":"\u003cp\u003eContains layout-related metrics for an element.\u003c/p\u003e"},"Structs/LayoutOptions.html":{"name":"LayoutOptions","abstract":"\u003cp\u003eConfiguration options for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedACvpZ\"\u003ecaffeinated\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Structs/LayoutSubelement.html":{"name":"LayoutSubelement","abstract":"\u003cp\u003eA proxy that represents one child element of a layout.\u003c/p\u003e"},"Structs/LayoutWriter.html":{"name":"LayoutWriter","abstract":"\u003cp\u003eA parent element which allows arbitrary, custom layout and positioning of its children.\u003c/p\u003e"},"Structs/LifecycleObserver.html":{"name":"LifecycleObserver","abstract":"\u003cp\u003eAllows element lifecycle callbacks to be inserted anywhere into the element tree.\u003c/p\u003e"},"Structs/Opacity.html":{"name":"Opacity","abstract":"\u003cp\u003eChanges the opacity of the wrapped element.\u003c/p\u003e"},"Structs/StackLayout.html":{"name":"StackLayout","abstract":"\u003cp\u003eA layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.\u003c/p\u003e"},"Structs/TintAdjustmentMode.html":{"name":"TintAdjustmentMode","abstract":"\u003cp\u003e\u003ccode\u003eTintAdjustmentMode\u003c/code\u003e conditionally modifies the tint adjustment mode of its wrapped element.\u003c/p\u003e"},"Structs/Transformed.html":{"name":"Transformed","abstract":"\u003cp\u003eChanges the transform of the wrapped element.\u003c/p\u003e"},"Structs/UnitPoint.html":{"name":"UnitPoint","abstract":"\u003cp\u003eA normalized point in an element\u0026rsquo;s coordinate space.\u003c/p\u003e"},"Structs/UserInteractionEnabled.html":{"name":"UserInteractionEnabled","abstract":"\u003cp\u003e\u003ccode\u003eUserInteractionEnabled\u003c/code\u003e conditionally enables user interaction of its wrapped element.\u003c/p\u003e"},"Structs/SizeConstraint.html":{"name":"SizeConstraint","abstract":"\u003cp\u003eDefines the maximum size for a measurement.\u003c/p\u003e"},"Structs/AnimationAttributes.html":{"name":"AnimationAttributes","abstract":"\u003cp\u003eUIView animation configuration values.\u003c/p\u003e"},"Structs/AccessibilityFocus.html":{"name":"AccessibilityFocus","abstract":"\u003cp\u003eEnables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.\u003c/p\u003e"},"Structs/URLHandlerEnvironmentKey.html":{"name":"URLHandlerEnvironmentKey"},"Structs/EditingMenu.html":{"name":"EditingMenu","abstract":"\u003cp\u003eAllows showing the system\u0026rsquo;s \u003ccode\u003eUIMenuController\u003c/code\u003e editing menu.\u003c/p\u003e"},"Structs/EditingMenuItem.html":{"name":"EditingMenuItem","abstract":"\u003cp\u003eA single item in an editing menu.\u003c/p\u003e"},"Structs/TextShadow.html":{"name":"TextShadow","abstract":"\u003cp\u003eDescribes a shadow that can be applied to text elements, like \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Label.html\"\u003eLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Protocols/URLHandler.html#/s:25BlueprintUICommonControls10URLHandlerP5onTap3urly10Foundation3URLV_tF":{"name":"onTap(url:)","parent_name":"URLHandler"},"Protocols/NativeView.html#/s:11BlueprintUI10NativeViewPAASo6UIViewCRbzrlE8describeyAA0D11DescriptionVyAH13ConfigurationVy_xGzXEFZ":{"name":"describe(_:)","abstract":"\u003cp\u003eGenerates a view description for the receiving class.","parent_name":"NativeView"},"Protocols/Measurable.html#/s:11BlueprintUI10MeasurableP7measure2inSo6CGSizeVAA14SizeConstraintV_tF":{"name":"measure(in:)","abstract":"\u003cp\u003eMeasures the required size of the receiver.\u003c/p\u003e","parent_name":"Measurable"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPxycfc":{"name":"init()","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementP6layoutAA0C6LayoutVvp":{"name":"layout","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementP8childrenSayAA0D0_p7element_AA0C6LayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAEyxyxzXEcfc":{"name":"init(_:)","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE3add12growPriority06shrinkG014alignmentGuide3key5childy14CoreFoundation7CGFloatV_A2lA0D10DimensionsVcSgs11AnyHashableVSgAA0D0_ptF":{"name":"add(growPriority:shrinkPriority:alignmentGuide:key:child:)","abstract":"\u003cp\u003eAdds a given child element to the stack.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE8addFixed14alignmentGuide3key5childy14CoreFoundation7CGFloatVAA0D10DimensionsVcSg_s11AnyHashableVSgAA0D0_ptF":{"name":"addFixed(alignmentGuide:key:child:)","abstract":"\u003cp\u003eConvenience method for adding a child with a grow and shrink priority of 0.0.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE11addFlexible14alignmentGuide3key5childy14CoreFoundation7CGFloatVAA0D10DimensionsVcSg_s11AnyHashableVSgAA0D0_ptF":{"name":"addFlexible(alignmentGuide:key:child:)","abstract":"\u003cp\u003eConvenience method for adding a child with a grow and shrink priority of 1.0.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP10Subelementa":{"name":"Subelement","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP5CacheQa":{"name":"Cache","abstract":"\u003cp\u003eCached values associated with the layout instance.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP12sizeThatFits8proposal10subelement11environment5cacheSo6CGSizeVAA14SizeConstraintV_AA0F10SubelementVAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelement:environment:cache:)","abstract":"\u003cp\u003eReturns the size of the element, given a proposed size constraint and the container\u0026rsquo;s","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP15placeSubelement2in10subelement11environment5cacheySo6CGSizeV_AA0fH0VAA11EnvironmentV5CacheQzztF":{"name":"placeSubelement(in:subelement:environment:cache:)","abstract":"\u003cp\u003eAssigns a position to the layout’s subelement.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP9makeCache10subelement11environment0H0QzAA0F10SubelementV_AA11EnvironmentVtF":{"name":"makeCache(subelement:environment:)","abstract":"\u003cp\u003eCreates and initializes a cache for a layout instance.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/LegacySingleChildLayout.html#/s:11BlueprintUI23LegacySingleChildLayoutP7measure2in5childSo6CGSizeVAA14SizeConstraintV_AA10Measurable_ptF":{"name":"measure(in:child:)","abstract":"\u003cp\u003eComputes the size that this layout requires\u003c/p\u003e","parent_name":"LegacySingleChildLayout"},"Protocols/LegacySingleChildLayout.html#/s:11BlueprintUI23LegacySingleChildLayoutP6layout4size5childAA0F10AttributesVSo6CGSizeV_AA10Measurable_ptF":{"name":"layout(size:child:)","abstract":"\u003cp\u003eGenerates layout attributes for the child.\u003c/p\u003e","parent_name":"LegacySingleChildLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP11Subelementsa":{"name":"Subelements","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP5CacheQa":{"name":"Cache","abstract":"\u003cp\u003eCached values associated with the layout instance.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP12sizeThatFits8proposal11subelements11environment5cacheSo6CGSizeVAA14SizeConstraintV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelements:environment:cache:)","abstract":"\u003cp\u003eReturns the size of the composite element, given a proposed size constraint and the","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP16placeSubelements2in11subelements11environment5cacheySo6CGSizeV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"placeSubelements(in:subelements:environment:cache:)","abstract":"\u003cp\u003eAssigns positions to each of the layout’s subelements.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP9makeCache11subelements11environment0F0QzSayAA0D10SubelementVG_AA11EnvironmentVtF":{"name":"makeCache(subelements:environment:)","abstract":"\u003cp\u003eCreates and initializes a cache for a layout instance.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP6TraitsQa":{"name":"Traits","abstract":"\u003cp\u003ePer-item metadata that is used during the measuring and layout pass.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP7measure2in5itemsSo6CGSizeVAA14SizeConstraintV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"measure(in:items:)","abstract":"\u003cp\u003eComputes the size that this layout requires in a layout, given an array of children and","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP6layout4size5itemsSayAA0D10AttributesVGSo6CGSizeV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"layout(size:items:)","abstract":"\u003cp\u003eGenerates layout attributes for the given items.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP13defaultTraits0F0QzvpZ":{"name":"defaultTraits","abstract":"\u003cp\u003eReturns a default traits object.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/ElementBuilderChild.html#/s:11BlueprintUI19ElementBuilderChildPyxAA0C0_pcfc":{"name":"init(_:)","parent_name":"ElementBuilderChild"},"Protocols/AlignmentID.html#/s:11BlueprintUI11AlignmentIDP12defaultValue2in14CoreFoundation7CGFloatVAA17ElementDimensionsV_tFZ":{"name":"defaultValue(in:)","abstract":"\u003cp\u003eReturns the value of the corresponding guide, in \u003ccode\u003econtext\u003c/code\u003e, when not","parent_name":"AlignmentID"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP0C4TypeQa":{"name":"UIViewType","abstract":"\u003cp\u003eThe type of the view associated with the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP04makeC00C4TypeQzyF":{"name":"makeUIView()","abstract":"\u003cp\u003eCreate and return a new instance of the provided view type.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP06updateC0_4withy0C4TypeQz_AA0cD7ContextVtF":{"name":"updateUIView(_:with:)","abstract":"\u003cp\u003eUpdate the view instance with the content from the element. The context provides additional","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP4size_8thatFitsSo6CGSizeVAG_0C4TypeQztF":{"name":"size(_:thatFits:)","abstract":"\u003cp\u003eReturns the sizing measurement for the element for the provided","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementPAAE7contentAA0D7ContentVvp":{"name":"content","abstract":"\u003cp\u003eDefer to the reused measurement view to provide the size of the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementPAAE22backingViewDescription4withAA0fG0VSgAA0fG7ContextV_tF":{"name":"backingViewDescription(with:)","abstract":"\u003cp\u003eProvide the view for the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/BlueprintViewMetricsDelegate.html#/s:11BlueprintUI0A19ViewMetricsDelegateP09blueprintC0_19completedRenderWithyAA0aC0C_AA0achD0VtF":{"name":"blueprintView(_:completedRenderWith:)","parent_name":"BlueprintViewMetricsDelegate"},"Protocols/AttributedTextKey.html#/s:11BlueprintUI17AttributedTextKeyP5ValueQa":{"name":"Value","parent_name":"AttributedTextKey"},"Protocols/AttributedTextKey.html#/s:11BlueprintUI17AttributedTextKeyP4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"AttributedTextKey"},"Protocols/AttributedTextKey.html":{"name":"AttributedTextKey","abstract":"\u003cp\u003eDefine \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedText.html\"\u003eAttributedText\u003c/a\u003e\u003c/code\u003e keys using this protocol. Keys must have an attribute name"},"Protocols/BlueprintViewMetricsDelegate.html":{"name":"BlueprintViewMetricsDelegate","abstract":"\u003cp\u003eProvides performance information for blueprint layouts and updates.\u003c/p\u003e"},"Protocols/UIViewElement.html":{"name":"UIViewElement","abstract":"\u003cp\u003eAn element type which makes it easier to wrap an existing \u003ccode\u003eUIView\u003c/code\u003e instance that"},"Protocols/AlignmentID.html":{"name":"AlignmentID","abstract":"\u003cp\u003eTypes used to identify alignment guides.\u003c/p\u003e"},"Protocols/ElementBuilderChild.html":{"name":"ElementBuilderChild","abstract":"\u003cp\u003eDefines a way for an\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e to be implicitly converted into the conforming type (the child of a container)."},"Protocols.html#/s:11BlueprintUI6LayoutP":{"name":"Layout","abstract":"\u003cp\u003eA type that defines the geometry of a collection of elements.\u003c/p\u003e"},"Protocols/LegacyLayout.html":{"name":"LegacyLayout"},"Protocols/CaffeinatedLayout.html":{"name":"CaffeinatedLayout"},"Protocols.html#/s:11BlueprintUI17SingleChildLayoutP":{"name":"SingleChildLayout","abstract":"\u003cp\u003eA type that defines the geometry of a single element.\u003c/p\u003e"},"Protocols/LegacySingleChildLayout.html":{"name":"LegacySingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html":{"name":"CaffeinatedSingleChildLayout"},"Protocols/StackElement.html":{"name":"StackElement","abstract":"\u003cp\u003eConforming types (Row and Column) act as StackLayout powered containers.\u003c/p\u003e"},"Protocols/Measurable.html":{"name":"Measurable","abstract":"\u003cp\u003eConforming types can calculate the size that they require within a layout.\u003c/p\u003e"},"Protocols/NativeView.html":{"name":"NativeView","abstract":"\u003cp\u003eMarker protocol used by generic extensions to native views (e.g. \u003ccode\u003eUIView\u003c/code\u003e).\u003c/p\u003e"},"Protocols/URLHandler.html":{"name":"URLHandler","abstract":"\u003cp\u003eConform to this protocol to handle links tapped in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Extensions/UIOffset.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"UIOffset"},"Extensions/AXCustomContent.html#/s:So15AXCustomContentC25BlueprintUICommonControlsEyAbC20AccessibilityElementV06CustomB0Vcfc":{"name":"init(_:)","parent_name":"AXCustomContent"},"Extensions/AXCustomContent.html#/s:So15AXCustomContentC25BlueprintUICommonControlsE5label5value10importanceABSS_SSSgSo0aB10ImportanceVtcfc":{"name":"init(label:value:importance:)","parent_name":"AXCustomContent"},"Extensions/UIAccessibilityTraits.html#/s:So21UIAccessibilityTraitsa25BlueprintUICommonControlsE4withABShyAC20AccessibilityElementV5TraitOG_tcfc":{"name":"init(with:)","parent_name":"UIAccessibilityTraits"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGAA0D0_pFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow an Element to be implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGAA0D0_pSgFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow an Optional Element to be unwrapped and implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGSayAA0D0_pGFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow Elements to be implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A7OverlayV5ChildVRszlE15buildExpressionySayAGGAA5KeyedVFZ":{"name":"buildExpression(_:)","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A11StackLayoutV5ChildVRszlE15buildExpressionySayAGGAA5KeyedVFZ":{"name":"buildExpression(_:)","parent_name":"ElementBuilder"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE17replacingInfinity4withxx_tF":{"name":"replacingInfinity(with:)","abstract":"\u003cp\u003eReturns \u003ccode\u003ereplacement\u003c/code\u003e if \u003ccode\u003eself.isInfinite\u003c/code\u003e is \u003ccode\u003etrue\u003c/code\u003e, or \u003ccode\u003eself\u003c/code\u003e if \u003ccode\u003eself\u003c/code\u003e is finite.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE5round_2byys25FloatingPointRoundingRuleO_xtF":{"name":"round(_:by:)","abstract":"\u003cp\u003eRounds this value to the specified scale, where the scale is the number of rounding stops per integer.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE7rounded_2byxs25FloatingPointRoundingRuleO_xtF":{"name":"rounded(_:by:)","abstract":"\u003cp\u003eReturns this value rounded to the specified scale, where the scale is the number of rounding stops per integer.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/CGSize.html#/s:So6CGSizeV11BlueprintUIE8infinityABvpZ":{"name":"infinity","abstract":"\u003cp\u003eA size with \u003ccode\u003einfinity\u003c/code\u003e in both dimensions.\u003c/p\u003e","parent_name":"CGSize"},"Extensions/CGSize.html#/s:So6CGSizeV11BlueprintUIE17replacingInfinity4withA2B_tF":{"name":"replacingInfinity(with:)","abstract":"\u003cp\u003eReturns a size with infinite dimensions replaced by the values from the given replacement.\u003c/p\u003e","parent_name":"CGSize"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhone7ACvpZ":{"name":"iPhone7","abstract":"\u003cp\u003eiPhone 7\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhone7PlusACvpZ":{"name":"iPhone7Plus","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhone8ACvpZ":{"name":"iPhone8","abstract":"\u003cp\u003eiPhone 8\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhone8PlusACvpZ":{"name":"iPhone8Plus","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPhoneSE_1ACvpZ":{"name":"iPhoneSE_1","abstract":"\u003cp\u003eiPhone SE\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPhoneSE_2ACvpZ":{"name":"iPhoneSE_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhoneXACvpZ":{"name":"iPhoneX","abstract":"\u003cp\u003eiPhone X\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E8iPhoneXsACvpZ":{"name":"iPhoneXs","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhoneXsMaxACvpZ":{"name":"iPhoneXsMax","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E8iPhoneXrACvpZ":{"name":"iPhoneXr","abstract":"\u003cp\u003eiPhone Xr\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPadMini_4ACvpZ":{"name":"iPadMini_4","abstract":"\u003cp\u003eiPad Mini\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPadMini_5ACvpZ":{"name":"iPadMini_5","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E9iPadAir_2ACvpZ":{"name":"iPadAir_2","abstract":"\u003cp\u003eiPad Air\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E9iPadAir_3ACvpZ":{"name":"iPadAir_3","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E6iPad_5ACvpZ":{"name":"iPad_5","abstract":"\u003cp\u003eiPad\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E6iPad_6ACvpZ":{"name":"iPad_6","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPadPro_9_7ACvpZ":{"name":"iPadPro_9_7","abstract":"\u003cp\u003eiPad Pro\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_10_5ACvpZ":{"name":"iPadPro_10_5","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_11_1ACvpZ":{"name":"iPadPro_11_1","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_11_2ACvpZ":{"name":"iPadPro_11_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_1ACvpZ":{"name":"iPadPro_12_9_1","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_2ACvpZ":{"name":"iPadPro_12_9_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_3ACvpZ":{"name":"iPadPro_12_9_3","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html":{"name":"PreviewDevice","abstract":"\u003cp\u003eThe available devices to be used for previewing elements in an Xcode preview.\u003c/p\u003e"},"Extensions/CGSize.html":{"name":"CGSize"},"Extensions/FloatingPoint.html":{"name":"FloatingPoint"},"Extensions/ElementBuilder.html":{"name":"ElementBuilder"},"Extensions.html#/c:objc(cs)UIView":{"name":"UIView"},"Extensions/UIAccessibilityTraits.html":{"name":"UIAccessibilityTraits"},"Extensions/AXCustomContent.html":{"name":"AXCustomContent"},"Extensions/UIOffset.html":{"name":"UIOffset"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO7defaultACvpZ":{"name":"default","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO6legacyyA2CmF":{"name":"legacy","abstract":"\u003cp\u003eThe \u0026ldquo;standard\u0026rdquo; layout system.\u003c/p\u003e","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedyAcA0C7OptionsV_tcACmF":{"name":"caffeinated(options:)","abstract":"\u003cp\u003eA newer layout system with some optimizations made possible by ensuring elements adhere","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedACvpZ":{"name":"caffeinated","abstract":"\u003cp\u003eA newer layout system with some optimizations made possible by ensuring elements adhere","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO4nameSSvp":{"name":"name","abstract":"\u003cp\u003eThe name of the layout mode.\u003c/p\u003e","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"LayoutMode"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV21recordElementMeasuresSbvp":{"name":"recordElementMeasures","abstract":"\u003cp\u003eWhen \u003ccode\u003etrue\u003c/code\u003e, timing data will be logged when measuring each \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV21recordElementMeasuresAESb_tcfc":{"name":"init(recordElementMeasures:)","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV4liteAEvpZ":{"name":"lite","abstract":"\u003cp\u003eLogging configuration that will not record measurement data for all \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003es.","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV7verboseAEvpZ":{"name":"verbose","abstract":"\u003cp\u003eLogging configuration that includes measurement data.","parent_name":"Config"},"Enums/BlueprintLogging/Config.html":{"name":"Config","abstract":"\u003cp\u003eConfiguration for logging options\u003c/p\u003e","parent_name":"BlueprintLogging"},"Enums/BlueprintLogging.html#/s:11BlueprintUI0A7LoggingO6configAC6ConfigVvpZ":{"name":"config","abstract":"\u003cp\u003eLogging configuration\u003c/p\u003e","parent_name":"BlueprintLogging"},"Enums/BlueprintLogging.html#/s:11BlueprintUI0A7LoggingO9isEnabledSbvpZ":{"name":"isEnabled","abstract":"\u003cp\u003eIf enabled, Blueprint will emit signpost logs. You can view these logs in Instruments to","parent_name":"BlueprintLogging"},"Enums/LinkKey.html#/s:11BlueprintUI7LinkKeyO5Valuea":{"name":"Value","parent_name":"LinkKey"},"Enums/LinkKey.html#/s:11BlueprintUI7LinkKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"LinkKey"},"Enums/ParagraphStyleKey.html#/s:11BlueprintUI17ParagraphStyleKeyO5Valuea":{"name":"Value","parent_name":"ParagraphStyleKey"},"Enums/ParagraphStyleKey.html#/s:11BlueprintUI17ParagraphStyleKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"ParagraphStyleKey"},"Enums/UnderlineColorKey.html#/s:11BlueprintUI17UnderlineColorKeyO5Valuea":{"name":"Value","parent_name":"UnderlineColorKey"},"Enums/UnderlineColorKey.html#/s:11BlueprintUI17UnderlineColorKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"UnderlineColorKey"},"Enums/UnderlineStyleKey.html#/s:11BlueprintUI17UnderlineStyleKeyO5Valuea":{"name":"Value","parent_name":"UnderlineStyleKey"},"Enums/UnderlineStyleKey.html#/s:11BlueprintUI17UnderlineStyleKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"UnderlineStyleKey"},"Enums/TrackingKey.html#/s:11BlueprintUI11TrackingKeyO5Valuea":{"name":"Value","parent_name":"TrackingKey"},"Enums/TrackingKey.html#/s:11BlueprintUI11TrackingKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"TrackingKey"},"Enums/ColorKey.html#/s:11BlueprintUI8ColorKeyO5Valuea":{"name":"Value","parent_name":"ColorKey"},"Enums/ColorKey.html#/s:11BlueprintUI8ColorKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"ColorKey"},"Enums/FontKey.html#/s:11BlueprintUI7FontKeyO5Valuea":{"name":"Value","parent_name":"FontKey"},"Enums/FontKey.html#/s:11BlueprintUI7FontKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"FontKey"},"Enums/FontKey.html":{"name":"FontKey"},"Enums/ColorKey.html":{"name":"ColorKey"},"Enums/TrackingKey.html":{"name":"TrackingKey"},"Enums/UnderlineStyleKey.html":{"name":"UnderlineStyleKey"},"Enums/UnderlineColorKey.html":{"name":"UnderlineColorKey"},"Enums/ParagraphStyleKey.html":{"name":"ParagraphStyleKey"},"Enums/LinkKey.html":{"name":"LinkKey"},"Enums/BlueprintLogging.html":{"name":"BlueprintLogging","abstract":"\u003cp\u003eNamespace for logging config.\u003c/p\u003e"},"Enums/LayoutMode.html":{"name":"LayoutMode","abstract":"\u003cp\u003eControls the layout system that Blueprint uses to lay out elements.\u003c/p\u003e"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerCACycfc":{"name":"init()","abstract":"\u003cp\u003eCreate a new trigger, not yet bound to any view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC11focusActionyycSgvp":{"name":"focusAction","abstract":"\u003cp\u003eThe action to be invoked on focus, which will be set by a backing view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC10blurActionyycSgvp":{"name":"blurAction","abstract":"\u003cp\u003eThe action to be invoked on blur, which will be set by a backing view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC5focusyyF":{"name":"focus()","abstract":"\u003cp\u003eFocuses the backing view bound to this trigger.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC4bluryyF":{"name":"blur()","abstract":"\u003cp\u003eBlurs (removes focus from) the backing view bound to this trigger.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html":{"name":"FocusTrigger","abstract":"\u003cp\u003eA trigger for focus and blur actions.\u003c/p\u003e"},"Protocols/EnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP5ValueQa":{"name":"Value","abstract":"\u003cp\u003eThe type of value stored by this key.\u003c/p\u003e","parent_name":"EnvironmentKey"},"Protocols/EnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP12defaultValue0F0QzvpZ":{"name":"defaultValue","abstract":"\u003cp\u003eThe default value that will be vended by an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e for this key if no other value","parent_name":"EnvironmentKey"},"Structs/Environment/LayoutDirection.html#/s:11BlueprintUI11EnvironmentV15LayoutDirectionO11leftToRightyA2EmF":{"name":"leftToRight","parent_name":"LayoutDirection"},"Structs/Environment/LayoutDirection.html#/s:11BlueprintUI11EnvironmentV15LayoutDirectionO11rightToLeftyA2EmF":{"name":"rightToLeft","parent_name":"LayoutDirection"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV5emptyACvpZ":{"name":"empty","abstract":"\u003cp\u003eA default \u0026ldquo;empty\u0026rdquo; environment, with no values overridden.","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentVy5ValueQzxmcAA0C3KeyRzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGets or sets an environment value by its key.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV22linkAccessibilityLabelSSSgvp":{"name":"linkAccessibilityLabel","abstract":"\u003cp\u003eThe localised accessibility label elements should use when handling links.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV8calendar10Foundation8CalendarVvp":{"name":"calendar","abstract":"\u003cp\u003eThe current calendar that elements should use when handling dates.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV12displayScale14CoreFoundation7CGFloatVvp":{"name":"displayScale","abstract":"\u003cp\u003eThe display scale of this environment.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment/LayoutDirection.html":{"name":"LayoutDirection","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV15layoutDirectionAC06LayoutE0Ovp":{"name":"layoutDirection","abstract":"\u003cp\u003eThe layout direction associated with the current environment.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV6locale10Foundation6LocaleVvp":{"name":"locale","abstract":"\u003cp\u003eThe current locale that elements should use.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV14safeAreaInsetsSo06UIEdgeF0Vvp":{"name":"safeAreaInsets","abstract":"\u003cp\u003eThe insets representing the safe area for content.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV8timeZone10Foundation04TimeE0Vvp":{"name":"timeZone","abstract":"\u003cp\u003eThe current time zone that elements should use when handling dates.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV10windowSizeSo6CGSizeVSgvp":{"name":"windowSize","abstract":"\u003cp\u003eThe size of the window that contains the hosting \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/BlueprintView.html\"\u003eBlueprintView\u003c/a\u003e\u003c/code\u003e.","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV10layoutModeAA06LayoutE0Ovp":{"name":"layoutMode","abstract":"\u003cp\u003eThis mode will be inherited by descendant BlueprintViews that do not have an explicit","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV0A16UICommonControlsE10urlHandlerAD10URLHandler_pvp":{"name":"urlHandler","abstract":"\u003cp\u003eThe link handler to use to open links tapped in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html":{"name":"Environment","abstract":"\u003cp\u003eEnvironment is a container for values to be passed down an element tree.\u003c/p\u003e"},"Protocols/EnvironmentKey.html":{"name":"EnvironmentKey","abstract":"\u003cp\u003eTypes conforming to this protocol can be used as keys in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV09appearingD00A2UI010VisibilityD0VSgvp":{"name":"appearingTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element is appearing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV012disappearingD00A2UI010VisibilityD0VSgvp":{"name":"disappearingTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element is disappearing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV06layoutD00A2UI06LayoutD0Ovp":{"name":"layoutTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element\u0026rsquo;s layout is changing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV14wrappedElement0A2UI0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe element to which transitions are being applied.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV8wrappingAC0A2UI7Element_p_tcfc":{"name":"init(wrapping:)","abstract":"\u003cp\u003eCreate a transition container wrapping an element.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV09appearingD0012disappearingD006layoutD013transitioningAC0A2UI010VisibilityD0VSg_AkH06LayoutD0OAH7Element_ptcfc":{"name":"init(appearingTransition:disappearingTransition:layoutTransition:transitioning:)","abstract":"\u003cp\u003eCreate a transition container wrapping an element.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TransitionContainer"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4textSSvp":{"name":"text","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV11placeholderSSvp":{"name":"placeholder","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV8onChangeySScSgvp":{"name":"onChange","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV6secureSbvp":{"name":"secure","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV9isEnabledSbvp":{"name":"isEnabled","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV13textAlignmentSo06NSTextG0Vvp":{"name":"textAlignment","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4fontSo6UIFontCvp":{"name":"font","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV9textColorSo7UIColorCvp":{"name":"textColor","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV15clearButtonModeSo06UITexte4ViewH0Vvp":{"name":"clearButtonMode","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV12keyboardTypeSo010UIKeyboardG0Vvp":{"name":"keyboardType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV18keyboardAppearanceSo010UIKeyboardG0Vvp":{"name":"keyboardAppearance","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV22autocapitalizationTypeSo024UITextAutocapitalizationG0Vvp":{"name":"autocapitalizationType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV18autocorrectionTypeSo020UITextAutocorrectionG0Vvp":{"name":"autocorrectionType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV17spellCheckingTypeSo011UITextSpellgH0Vvp":{"name":"spellCheckingType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV15textContentTypeSo06UITextgH0aSgvp":{"name":"textContentType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV8onReturnyycSgvp":{"name":"onReturn","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV13returnKeyTypeSo08UIReturngH0Vvp":{"name":"returnKeyType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV29enablesReturnKeyAutomaticallySbvp":{"name":"enablesReturnKeyAutomatically","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV12focusBinding0A2UI05FocusG0VSgvp":{"name":"focusBinding","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the field, these will be merged with any existing traits.","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4text9configureACSS_yACzXEtcfc":{"name":"init(text:configure:)","parent_name":"TextField"},"Structs/TextField.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TextField"},"Structs/TextField.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV7focused4when6equalsAC0A2UI10FocusStateVyxSgG_xtSHRzlF":{"name":"focused(when:equals:)","abstract":"\u003cp\u003eModifies this text field by binding its focus state to the given state value.\u003c/p\u003e","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV7focused4whenAC0A2UI10FocusStateVySbG_tF":{"name":"focused(when:)","abstract":"\u003cp\u003eModifies this text field by binding its focus state to the given Boolean state value.\u003c/p\u003e","parent_name":"TextField"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV14wrappedElement0A2UI0F0_pvp":{"name":"wrappedElement","parent_name":"Tappable"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV5onTapyycvp":{"name":"onTap","parent_name":"Tappable"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV5onTap8wrappingACyyc_0A2UI7Element_ptcfc":{"name":"init(onTap:wrapping:)","parent_name":"Tappable"},"Structs/Tappable.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Tappable"},"Structs/Tappable.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Tappable"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV4sizeSo6CGSizeVvp":{"name":"size","abstract":"\u003cp\u003eThe size that this spacer will take in a layout.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV4sizeACSo6CGSizeV_tcfc":{"name":"init(size:)","abstract":"\u003cp\u003eInitializes a new spacer with the given size.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV5width6heightAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(width:height:)","abstract":"\u003cp\u003eInitializes a new spacer with the given width and height.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerVyAC14CoreFoundation7CGFloatVcfc":{"name":"init(_:)","abstract":"\u003cp\u003eInitializes a new spacer with the given value for the width and height.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Spacer"},"Structs/SegmentedControl/Item/Width.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5WidthO9automaticyA2GmF":{"name":"automatic","parent_name":"Width"},"Structs/SegmentedControl/Item/Width.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5WidthO8specificyAG14CoreFoundation7CGFloatVcAGmF":{"name":"specific(_:)","parent_name":"Width"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5titleSSvp":{"name":"title","parent_name":"Item"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5widthAE5WidthOvp":{"name":"width","parent_name":"Item"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV8onSelectyycvp":{"name":"onSelect","parent_name":"Item"},"Structs/SegmentedControl/Item/Width.html":{"name":"Width","parent_name":"Item"},"Structs/SegmentedControl/Selection.html#/s:25BlueprintUICommonControls16SegmentedControlV9SelectionO4noneyA2EmF":{"name":"none","parent_name":"Selection"},"Structs/SegmentedControl/Selection.html#/s:25BlueprintUICommonControls16SegmentedControlV9SelectionO5indexyAESicAEmF":{"name":"index(_:)","parent_name":"Selection"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV5itemsSayAC4ItemVGvp":{"name":"items","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV9selectionAC9SelectionOvp":{"name":"selection","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV4fontSo6UIFontCvp":{"name":"font","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV13roundingScale14CoreFoundation7CGFloatVvp":{"name":"roundingScale","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV5items9configureACSayAC4ItemVG_yACzXEtcfc":{"name":"init(items:configure:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV9selection4font11itemBuilderA2C9SelectionO_So6UIFontCSayAC4ItemVGyXEtcfc":{"name":"init(selection:font:itemBuilder:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV10appendItem5title5width8onSelectySS_AC0G0V5WidthOyyctF":{"name":"appendItem(title:width:onSelect:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI10MeasurableP7measure2inSo6CGSizeVAA14SizeConstraintV_tF":{"name":"measure(in:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl/Selection.html":{"name":"Selection","parent_name":"SegmentedControl"},"Structs/SegmentedControl/Item.html":{"name":"Item","parent_name":"SegmentedControl"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV11contentSizeSo6CGSizeVvp":{"name":"contentSize","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV06scrollE6BoundsSo6CGRectVvp":{"name":"scrollViewBounds","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV13contentInsetsSo06UIEdgeK0Vvp":{"name":"contentInsets","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html":{"name":"ScrollingContext","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV8Providera":{"name":"Provider","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV3topAEvpZ":{"name":"top","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV6bottomAEvpZ":{"name":"bottom","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV8providerAESo7CGPointVAE16ScrollingContextVc_tcfc":{"name":"init(provider:)","parent_name":"ContentOffset"},"Structs/ScrollView/ScrollTrigger.html#/s:25BlueprintUICommonControls10ScrollViewV0D7TriggerCAEycfc":{"name":"init()","parent_name":"ScrollTrigger"},"Structs/ScrollView/ScrollTrigger.html#/s:25BlueprintUICommonControls10ScrollViewV0D7TriggerC6scroll2to8animatedyAC13ContentOffsetV_SbtF":{"name":"scroll(to:animated:)","parent_name":"ScrollTrigger"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO8disabledyA2EmF":{"name":"disabled","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO7enabledyAEyyc_tcAEmF":{"name":"enabled(action:)","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO10refreshingyA2EmF":{"name":"refreshing","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO12fittingWidthyA2EmF":{"name":"fittingWidth","abstract":"\u003cp\u003eThe content will fill the height of the scroller, width will be dynamic\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO13fittingHeightyA2EmF":{"name":"fittingHeight","abstract":"\u003cp\u003eThe content will fill the width of the scroller, height will be dynamic\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO07fittingF0yA2EmF":{"name":"fittingContent","abstract":"\u003cp\u003eThe content size will be the minimum required to fit the content.\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO6customyAESo6CGSizeVcAEmF":{"name":"custom(_:)","abstract":"\u003cp\u003eManually provided content size.\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/KeyboardAdjustmentMode.html#/s:25BlueprintUICommonControls10ScrollViewV22KeyboardAdjustmentModeO4noneyA2EmF":{"name":"none","parent_name":"KeyboardAdjustmentMode"},"Structs/ScrollView/KeyboardAdjustmentMode.html#/s:25BlueprintUICommonControls10ScrollViewV22KeyboardAdjustmentModeO18adjustsWhenVisibleyA2EmF":{"name":"adjustsWhenVisible","parent_name":"KeyboardAdjustmentMode"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV14wrappedElement0A2UI0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content to be scrolled.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV11contentSizeAC07ContentG0Ovp":{"name":"contentSize","abstract":"\u003cp\u003eDetermines the sizing behavior of the content within the scroll view.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20alwaysBounceVerticalSbvp":{"name":"alwaysBounceVertical","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV22alwaysBounceHorizontalSbvp":{"name":"alwaysBounceHorizontal","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV12contentInsetSo12UIEdgeInsetsVvp":{"name":"contentInset","abstract":"\u003cp\u003eHow much the content of the \u003ccode\u003eScrollView\u003c/code\u003e should be inset.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV16centersUnderflowSbvp":{"name":"centersUnderflow","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV015showsHorizontalD9IndicatorSbvp":{"name":"showsHorizontalScrollIndicator","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV013showsVerticalD9IndicatorSbvp":{"name":"showsVerticalScrollIndicator","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV21pullToRefreshBehaviorAC04PullghI0Ovp":{"name":"pullToRefreshBehavior","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV19keyboardDismissModeSo08UIScrolle8KeyboardgH0Vvp":{"name":"keyboardDismissMode","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV30contentInsetAdjustmentBehaviorSo08UIScrolle7ContentghI0Vvp":{"name":"contentInsetAdjustmentBehavior","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV22keyboardAdjustmentModeAC08KeyboardgH0Ovp":{"name":"keyboardAdjustmentMode","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20delaysContentTouchesSbvp":{"name":"delaysContentTouches","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20contentOffsetTriggerAC0dH0CSgvp":{"name":"contentOffsetTrigger","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV_8wrapping9configureA2C11ContentSizeO_0A2UI7Element_pyACzXEtcfc":{"name":"init(_:wrapping:configure:)","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ScrollView"},"Structs/ScrollView/KeyboardAdjustmentMode.html":{"name":"KeyboardAdjustmentMode","parent_name":"ScrollView"},"Structs/ScrollView/ContentSize.html":{"name":"ContentSize","parent_name":"ScrollView"},"Structs/ScrollView/PullToRefreshBehavior.html":{"name":"PullToRefreshBehavior","parent_name":"ScrollView"},"Structs/ScrollView/ScrollTrigger.html":{"name":"ScrollTrigger","parent_name":"ScrollView"},"Structs/ScrollView/ContentOffset.html":{"name":"ContentOffset","parent_name":"ScrollView"},"Structs/Rule/Thickness.html#/s:25BlueprintUICommonControls4RuleV9ThicknessO8hairlineyA2EmF":{"name":"hairline","abstract":"\u003cp\u003eIndicates that the rule should be exactly 1 screen pixel thick,","parent_name":"Thickness"},"Structs/Rule/Thickness.html#/s:25BlueprintUICommonControls4RuleV9ThicknessO6pointsyAE14CoreFoundation7CGFloatVcAEmF":{"name":"points(_:)","abstract":"\u003cp\u003eAn exact thickness in points.\u003c/p\u003e","parent_name":"Thickness"},"Structs/Rule/Orientation.html#/s:25BlueprintUICommonControls4RuleV11OrientationO10horizontalyA2EmF":{"name":"horizontal","abstract":"\u003cp\u003eIndicates that the rule is parallel to the x axis.\u003c/p\u003e","parent_name":"Orientation"},"Structs/Rule/Orientation.html#/s:25BlueprintUICommonControls4RuleV11OrientationO8verticalyA2EmF":{"name":"vertical","abstract":"\u003cp\u003eIndicates that the rule is parallel to the y axis.\u003c/p\u003e","parent_name":"Orientation"},"Structs/Rule/Orientation.html":{"name":"Orientation","abstract":"\u003cp\u003eRepresents whether the rule is parallel to the x or y axis.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule/Thickness.html":{"name":"Thickness","abstract":"\u003cp\u003eRepresents the thickness of a rule in the direction perpendicular to its orientation.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV11orientationAC11OrientationOvp":{"name":"orientation","abstract":"\u003cp\u003eWhether this rule is horizontal or vertical.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV9thicknessAC9ThicknessOvp":{"name":"thickness","abstract":"\u003cp\u003eThe thickness of this rule in the direction perpendicular to its orientation.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV5colorSo7UIColorCvp":{"name":"color","abstract":"\u003cp\u003eThe color that the rule should be drawn.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV11orientation5color9thicknessA2C11OrientationO_So7UIColorCAC9ThicknessOtcfc":{"name":"init(orientation:color:thickness:)","abstract":"\u003cp\u003eInitializes a Rule with the given properties.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Rule"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to fit the vertical size of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO5alignyAeA08VerticalD0V_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eUsing the specified alignment, children will be aligned relatively to each other, and","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO3topAEvpZ":{"name":"top","abstract":"\u003cp\u003eChildren will be aligned to the top edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO6centerAEvpZ":{"name":"center","abstract":"\u003cp\u003eChildren will be vertically centered in the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO6bottomAEvpZ":{"name":"bottom","abstract":"\u003cp\u003eChildren will be aligned to the bottom edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO7leadingAEvpZ":{"name":"leading","abstract":"\u003cp\u003eChildren will be aligned to the top edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO8trailingAEvpZ":{"name":"trailing","abstract":"\u003cp\u003eChildren will be aligned to the bottom edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html":{"name":"RowAlignment","abstract":"\u003cp\u003eDescribes how the row\u0026rsquo;s children will be vertically aligned.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV8childrenSayAA7Element_p7element_AA11StackLayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV6layoutAA11StackLayoutVvp":{"name":"layout","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowVACycfc":{"name":"init()","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV9alignment9underflow8overflow14minimumSpacing8elementsA2C0C9AlignmentO_AA11StackLayoutV21UnderflowDistributionOAL08OverflowN0O14CoreFoundation7CGFloatVSayAL5ChildVGyXEtcfc":{"name":"init(alignment:underflow:overflow:minimumSpacing:elements:)","abstract":"\u003cp\u003eInitializer using result builder to declaratively build up a stack.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV19horizontalUnderflowAA11StackLayoutV0E12DistributionOvp":{"name":"horizontalUnderflow","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV18horizontalOverflowAA11StackLayoutV0E12DistributionOvp":{"name":"horizontalOverflow","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV17verticalAlignmentAC0cE0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eSpecifies how children will be aligned vertically.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV24minimumHorizontalSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumHorizontalSpacing","parent_name":"Row"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe child element\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eAn optional key to disambiguate between view updates\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV7element3keyAeA7Element_p_s11AnyHashableVSgtcfc":{"name":"init(element:key:)","abstract":"\u003cp\u003eCreate a new child.\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eAll elements displayed in the overlay.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8elements9configureACSayAA7Element_pG_yACzXEtcfc":{"name":"init(elements:configure:)","abstract":"\u003cp\u003eCreates a new overlay with the provided elements.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8elementsACSayAC5ChildVGyXE_tcfc":{"name":"init(elements:)","abstract":"\u003cp\u003eCreates a new overlay using a result builder.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV3addyyAA7Element_pF":{"name":"add(_:)","abstract":"\u003cp\u003eAdds the provided element to the overlay.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV3add3key5childys11AnyHashableVSg_AA7Element_ptF":{"name":"add(key:child:)","abstract":"\u003cp\u003eAdds the provided element to the overlay, above other children.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Overlay"},"Structs/Overlay/Child.html":{"name":"Child","abstract":"\u003cp\u003eThe child of an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Overlay.html\"\u003eOverlay\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO3topyA2GmF":{"name":"top","abstract":"\u003cp\u003eAlign text to the top of the available line height, with extra space added at the bottom.","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO6centeryA2GmF":{"name":"center","abstract":"\u003cp\u003eCenter text within the available line height. This makes line height behave like half-leading,","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO6bottomyA2GmF":{"name":"bottom","abstract":"\u003cp\u003eAlign text to the bottom of the available line height, with extra space added at the top.","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html":{"name":"Alignment","parent_name":"LineHeight"},"Structs/Label/LineHeight.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO4fontyA2EmF":{"name":"font","abstract":"\u003cp\u003eUse the default line height of the label\u0026rsquo;s font.\u003c/p\u003e","parent_name":"LineHeight"},"Structs/Label/LineHeight.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO6customyAE14CoreFoundation7CGFloatV_AE9AlignmentOtcAEmF":{"name":"custom(lineHeight:alignment:)","abstract":"\u003cp\u003eUse a custom line height and alignment.\u003c/p\u003e","parent_name":"LineHeight"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4textSSvp":{"name":"text","abstract":"\u003cp\u003eThe text to be displayed.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4fontSo6UIFontCvp":{"name":"font","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV5colorSo7UIColorCvp":{"name":"color","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV9alignmentSo15NSTextAlignmentVvp":{"name":"alignment","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV13numberOfLinesSivp":{"name":"numberOfLines","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV13lineBreakModeSo06NSLinefG0Vvp":{"name":"lineBreakMode","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV10lineHeightAC04LineF0Ovp":{"name":"lineHeight","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV25adjustsFontSizeToFitWidthSbvp":{"name":"adjustsFontSizeToFitWidth","abstract":"\u003cp\u003eA Boolean value that determines whether the label reduces the text’s font","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV18minimumScaleFactor14CoreFoundation7CGFloatVvp":{"name":"minimumScaleFactor","abstract":"\u003cp\u003eThe minimum scale factor for the label’s text.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV36allowsDefaultTighteningForTruncationSbvp":{"name":"allowsDefaultTighteningForTruncation","abstract":"\u003cp\u003eA Boolean value that determines whether the label tightens text before truncating.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV6shadowAA10TextShadowVSgvp":{"name":"shadow","abstract":"\u003cp\u003eA shadow to display behind the label\u0026rsquo;s text. Defaults to no shadow.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV22isAccessibilityElementSbvp":{"name":"isAccessibilityElement","abstract":"\u003cp\u003eDetermines if the label should be included when navigating the UI via accessibility.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV17accessibilityHintSSSgvp":{"name":"accessibilityHint","abstract":"\u003cp\u003eA localized string that describes the result of performing an action on the element, when the result is non-obvious.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the label, these will be merged with any existing traits.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV26accessibilityCustomActionsSayAA20AccessibilityElementV0F6ActionVGvp":{"name":"accessibilityCustomActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eAccessibilityElement.CustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4text9configureACSS_yACzXEtcfc":{"name":"init(text:configure:)","parent_name":"Label"},"Structs/Label.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Label"},"Structs/Label/LineHeight.html":{"name":"LineHeight","parent_name":"Label"},"Structs/Inset.html#/s:11BlueprintUI5InsetV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe wrapped element to be inset.\u003c/p\u003e","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV3top14CoreFoundation7CGFloatVvp":{"name":"top","abstract":"\u003cp\u003eThe amount to inset the content element.\u003c/p\u003e","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV6bottom14CoreFoundation7CGFloatVvp":{"name":"bottom","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV4left14CoreFoundation7CGFloatVvp":{"name":"left","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV5right14CoreFoundation7CGFloatVvp":{"name":"right","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV3top6bottom4left5right8wrappingAC14CoreFoundation7CGFloatV_A3kA7Element_ptcfc":{"name":"init(top:bottom:left:right:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV07uniformC08wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(uniformInset:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV6insets8wrappingACSo12UIEdgeInsetsV_AA7Element_ptcfc":{"name":"init(insets:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV10sideInsets8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(sideInsets:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV8vertical8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(vertical:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Inset"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eThe image is not scaled, and is simply centered within the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO7stretchyA2EmF":{"name":"stretch","abstract":"\u003cp\u003eThe image is stretched to fill the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element, causing the image","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO9aspectFityA2EmF":{"name":"aspectFit","abstract":"\u003cp\u003eThe image is scaled to touch the edges of the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element while","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO10aspectFillyA2EmF":{"name":"aspectFill","abstract":"\u003cp\u003eThe image is scaled to fill the entire \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element. If the aspect","parent_name":"ContentMode"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV5imageSo7UIImageCSgvp":{"name":"image","abstract":"\u003cp\u003eThe image to be displayed\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"\u003cp\u003eThe tint color.\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV11contentModeAC07ContentF0Ovp":{"name":"contentMode","abstract":"\u003cp\u003eThe content mode determines the layout of the image when its size does","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV29blockAccessibilityDescriptionSbvp":{"name":"blockAccessibilityDescription","abstract":"\u003cp\u003eiOS 14 added support for Image Descriptions using VoiceOver. This is not always appropriate.","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV5image11contentMode9tintColor29blockAccessibilityDescriptionACSo7UIImageCSg_AC07ContentG0OSo7UIColorCSgSbtcfc":{"name":"init(image:contentMode:tintColor:blockAccessibilityDescription:)","abstract":"\u003cp\u003eInitializes an image element with the given \u003ccode\u003eUIImage\u003c/code\u003e instance.\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Image"},"Structs/Image.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Image"},"Structs/Image/ContentMode.html":{"name":"ContentMode","abstract":"\u003cp\u003eThe content mode determines the layout of the image when its size does","parent_name":"Image"},"Structs/GeometryReader.html#/s:11BlueprintUI14GeometryReaderV21elementRepresentationAcA7Element_pAA0C5ProxyVc_tcfc":{"name":"init(elementRepresentation:)","parent_name":"GeometryReader"},"Structs/GeometryReader.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"GeometryReader"},"Structs/GeometryReader.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"GeometryReader"},"Structs/EqualStack/Child.html#/s:11BlueprintUI10EqualStackV5ChildV7elementAA7Element_pvp":{"name":"element","parent_name":"Child"},"Structs/EqualStack/Child.html#/s:11BlueprintUI10EqualStackV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/EqualStack/Direction.html#/s:11BlueprintUI10EqualStackV9DirectionO8verticalyA2EmF":{"name":"vertical","parent_name":"Direction"},"Structs/EqualStack/Direction.html#/s:11BlueprintUI10EqualStackV9DirectionO10horizontalyA2EmF":{"name":"horizontal","parent_name":"Direction"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9directionAC9DirectionOvp":{"name":"direction","abstract":"\u003cp\u003eThe direction in which this element will stack its children.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe amount of space between children in this element. Defaults to 0.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV8childrenSayAA7Element_pGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements to be laid out. Defaults to an empty array.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9direction9configureA2C9DirectionO_yACzXEtcfc":{"name":"init(direction:configure:)","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9direction7spacing8elementsA2C9DirectionO_14CoreFoundation7CGFloatVSayAC5ChildVGyXEtcfc":{"name":"init(direction:spacing:elements:)","abstract":"\u003cp\u003eInitializer using result builder to declaritively build up a stack.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV3add5childyAA7Element_p_tF":{"name":"add(child:)","parent_name":"EqualStack"},"Structs/EqualStack/Direction.html":{"name":"Direction","parent_name":"EqualStack"},"Structs/EqualStack/Child.html":{"name":"Child","parent_name":"EqualStack"},"Structs/Empty.html#/s:11BlueprintUI5EmptyVACycfc":{"name":"init()","parent_name":"Empty"},"Structs/Empty.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Empty"},"Structs/Empty.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Empty"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO13unconstrainedyA2EmF":{"name":"unconstrained","abstract":"\u003cp\u003eThere is no constraint for this axis – the natural size of the element will be used.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO6atMostyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atMost(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eno greater\u003c/strong\u003e than the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO7atLeastyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atLeast(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eno less\u003c/strong\u003e than the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO6withinyAESNy14CoreFoundation7CGFloatVGcAEmF":{"name":"within(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003ewithin\u003c/strong\u003e the range provided.","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO8absoluteyAE14CoreFoundation7CGFloatVcAEmF":{"name":"absolute(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eexactly\u003c/strong\u003e the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element whose measurement will be constrained by the \u003ccode\u003eConstrainedSize\u003c/code\u003e.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV5widthAC10ConstraintOvp":{"name":"width","abstract":"\u003cp\u003eThe constraint to place on the width of the element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV6heightAC10ConstraintOvp":{"name":"height","abstract":"\u003cp\u003eThe constraint to place on the height of the element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV5width6height8wrappingA2C10ConstraintO_AhA7Element_ptcfc":{"name":"init(width:height:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eConstrainedSize\u003c/code\u003e with the provided constraint options.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize/Constraint.html":{"name":"Constraint","abstract":"\u003cp\u003eThe available ways to constrain the measurement of a given axis within a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ConstrainedSize.html\"\u003eConstrainedSize\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO10fillParentyA2EmF":{"name":"fillParent","abstract":"\u003cp\u003eThe content will be sized to fill its parent while","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO9fitParentyA2EmF":{"name":"fitParent","abstract":"\u003cp\u003eThe content will be sized to fit within its parent while maintaining the specified","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO03fitF0yA2EmF":{"name":"fitContent","abstract":"\u003cp\u003eThe content will grow in whichever dimension is needed to maintain the aspect ratio,","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO06shrinkF0yA2EmF":{"name":"shrinkContent","abstract":"\u003cp\u003eThe content will shrink in whichever dimension is needed to maintain the aspect ratio,","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html":{"name":"ContentMode","abstract":"\u003cp\u003eRepresents how the content should size itself relative to its parent.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe element being constrained.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV06aspectE0AA0dE0Vvp":{"name":"aspectRatio","abstract":"\u003cp\u003eThe target aspect ratio.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV11contentModeAC07ContentG0Ovp":{"name":"contentMode","abstract":"\u003cp\u003eWhether the aspect ratio should be reached by expanding the content element\u0026rsquo;s size to fill its parent","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV06aspectE011contentMode8wrappingAcA0dE0V_AC07ContentH0OAA7Element_ptcfc":{"name":"init(aspectRatio:contentMode:wrapping:)","abstract":"\u003cp\u003eInitializes with the given properties.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ConstrainedAspectRatio"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to fit the horizontal size of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO5alignyAeA010HorizontalD0V_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eUsing the specified alignment, children will be aligned relatively to each other, and","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO7leadingAEvpZ":{"name":"leading","abstract":"\u003cp\u003eChildren will be aligned to the leading edge of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO6centerAEvpZ":{"name":"center","abstract":"\u003cp\u003eChildren will be horizontally centered in the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO8trailingAEvpZ":{"name":"trailing","abstract":"\u003cp\u003eChildren will be aligned to the trailing edge of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html":{"name":"ColumnAlignment","abstract":"\u003cp\u003eDescribes how the column\u0026rsquo;s children will be horizontally aligned.\u003c/p\u003e","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV8childrenSayAA7Element_p7element_AA11StackLayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV6layoutAA11StackLayoutVvp":{"name":"layout","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnVACycfc":{"name":"init()","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV9alignment9underflow8overflow14minimumSpacing8elementsA2C0C9AlignmentO_AA11StackLayoutV21UnderflowDistributionOAL08OverflowN0O14CoreFoundation7CGFloatVSayAL5ChildVGyXEtcfc":{"name":"init(alignment:underflow:overflow:minimumSpacing:elements:)","abstract":"\u003cp\u003eCreates a Column, using result builder syntax. Columns display a list of items in a vertical","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV17verticalUnderflowAA11StackLayoutV0E12DistributionOvp":{"name":"verticalUnderflow","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV16verticalOverflowAA11StackLayoutV0E12DistributionOvp":{"name":"verticalOverflow","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV19horizontalAlignmentAC0cE0Ovp":{"name":"horizontalAlignment","abstract":"\u003cp\u003eSpecifies how children will be aligned horizontally.\u003c/p\u003e","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV22minimumVerticalSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumVerticalSpacing","parent_name":"Column"},"Structs/Centered.html#/s:11BlueprintUI8CenteredV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe content element to be centered.\u003c/p\u003e","parent_name":"Centered"},"Structs/Centered.html#/s:11BlueprintUI8CenteredVyAcA7Element_pcfc":{"name":"init(_:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eCentered\u003c/code\u003e element with the given content element.\u003c/p\u003e","parent_name":"Centered"},"Structs/Centered.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Centered"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV14wrappedElement0A2UI0F0_pvp":{"name":"wrappedElement","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV9isEnabledSbvp":{"name":"isEnabled","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV5onTapyycvp":{"name":"onTap","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV19minimumTappableSizeSo6CGSizeVvp":{"name":"minimumTappableSize","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV9isEnabled5onTap8wrappingACSb_yyc0A2UI7Element_ptcfc":{"name":"init(isEnabled:onTap:wrapping:)","parent_name":"Button"},"Structs/Button.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Button"},"Structs/Button.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Button"},"Structs/Box/ShadowStyle.html#/s:25BlueprintUICommonControls3BoxV11ShadowStyleO4noneyA2EmF":{"name":"none","parent_name":"ShadowStyle"},"Structs/Box/ShadowStyle.html#/s:25BlueprintUICommonControls3BoxV11ShadowStyleO6simpleyAE14CoreFoundation7CGFloatV_AISo6CGSizeVSo7UIColorCtcAEmF":{"name":"simple(radius:opacity:offset:color:)","parent_name":"ShadowStyle"},"Structs/Box/BorderStyle.html#/s:25BlueprintUICommonControls3BoxV11BorderStyleO4noneyA2EmF":{"name":"none","parent_name":"BorderStyle"},"Structs/Box/BorderStyle.html#/s:25BlueprintUICommonControls3BoxV11BorderStyleO5solidyAESo7UIColorC_14CoreFoundation7CGFloatVtcAEmF":{"name":"solid(color:width:)","parent_name":"BorderStyle"},"Structs/Box/CornerCurve.html#/s:25BlueprintUICommonControls3BoxV11CornerCurveO8circularyA2EmF":{"name":"circular","abstract":"\u003cp\u003eProvides a standard-style corner radius as you would see in design tools like Figma.\u003c/p\u003e","parent_name":"CornerCurve"},"Structs/Box/CornerCurve.html#/s:25BlueprintUICommonControls3BoxV11CornerCurveO10continuousyA2EmF":{"name":"continuous","abstract":"\u003cp\u003eProvides an iOS icon-style corner radius.\u003c/p\u003e","parent_name":"CornerCurve"},"Structs/Box/CornerStyle/Corners.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:s9OptionSetP8rawValuex03RawD0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV7topLeftAGvpZ":{"name":"topLeft","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV8topRightAGvpZ":{"name":"topRight","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV10bottomLeftAGvpZ":{"name":"bottomLeft","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV11bottomRightAGvpZ":{"name":"bottomRight","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV3allAGvpZ":{"name":"all","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV3topAGvpZ":{"name":"top","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV4leftAGvpZ":{"name":"left","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV6bottomAGvpZ":{"name":"bottom","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV5rightAGvpZ":{"name":"right","parent_name":"Corners"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO6squareyA2EmF":{"name":"square","parent_name":"CornerStyle"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7capsuleyA2EmF":{"name":"capsule","parent_name":"CornerStyle"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7roundedyAE14CoreFoundation7CGFloatV_AE7CornersVtcAEmF":{"name":"rounded(radius:corners:)","parent_name":"CornerStyle"},"Structs/Box/CornerStyle/Corners.html":{"name":"Corners","parent_name":"CornerStyle"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV15backgroundColorSo7UIColorCvp":{"name":"backgroundColor","abstract":"\u003cp\u003eThe background color to show in the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerStyleAC06CornerF0Ovp":{"name":"cornerStyle","abstract":"\u003cp\u003eThe corner style to apply, eg rounded, capsule, or normal, square corners.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerCurveAC06CornerF0Ovp":{"name":"cornerCurve","abstract":"\u003cp\u003eHow to style the curves when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerStyleAC06CornerF0Ovp\"\u003ecornerStyle\u003c/a\u003e\u003c/code\u003e is non-square.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11borderStyleAC06BorderF0Ovp":{"name":"borderStyle","abstract":"\u003cp\u003eThe border to apply around the edges of the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11shadowStyleAC06ShadowF0Ovp":{"name":"shadowStyle","abstract":"\u003cp\u003eThe shadow style to apply to the outside of the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV12clipsContentSbvp":{"name":"clipsContent","abstract":"\u003cp\u003eIf content placed within the box should be clipped.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV14wrappedElement0A2UI0F0_pSgvp":{"name":"wrappedElement","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV15backgroundColor11cornerStyle0G5Curve06borderH006shadowH012clipsContent8wrappingACSo7UIColorC_AC06CornerH0OAC0pI0OAC06BorderH0OAC06ShadowH0OSb0A2UI7Element_pSgtcfc":{"name":"init(backgroundColor:cornerStyle:cornerCurve:borderStyle:shadowStyle:clipsContent:wrapping:)","parent_name":"Box"},"Structs/Box.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Box"},"Structs/Box.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Box"},"Structs/Box/CornerStyle.html":{"name":"CornerStyle","parent_name":"Box"},"Structs/Box/CornerCurve.html":{"name":"CornerCurve","abstract":"\u003cp\u003eSpecifies the curve style when showing rounded corners on a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Box.html\"\u003eBox\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Box"},"Structs/Box/BorderStyle.html":{"name":"BorderStyle","parent_name":"Box"},"Structs/Box/ShadowStyle.html":{"name":"ShadowStyle","parent_name":"Box"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO4dateyA2EmF":{"name":"date","abstract":"\u003cp\u003eDetect date strings. Tapping a date opens the calendar to that date.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO7addressyA2EmF":{"name":"address","abstract":"\u003cp\u003eDetect addresses. Tapping the address opens Maps with that address.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO4linkyA2EmF":{"name":"link","abstract":"\u003cp\u003eDetect URLs. Tapping the link opens the URL.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO11phoneNumberyA2EmF":{"name":"phoneNumber","abstract":"\u003cp\u003eDetect phone numbers. Tapping the phone number prompts the user to call it.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14attributedTextSo18NSAttributedStringCvp":{"name":"attributedText","abstract":"\u003cp\u003eThe attributed text to render in the label.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV13numberOfLinesSivp":{"name":"numberOfLines","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV6shadowAA10TextShadowVSgvp":{"name":"shadow","abstract":"\u003cp\u003eA shadow to display behind the label\u0026rsquo;s text. Defaults to no shadow.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14textRectOffsetSo8UIOffsetVvp":{"name":"textRectOffset","abstract":"\u003cp\u003eAn offset that will be applied to the rect used by \u003ccode\u003edrawText(in:)\u003c/code\u003e.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV22isAccessibilityElementSbvp":{"name":"isAccessibilityElement","abstract":"\u003cp\u003eDetermines if the label should be included when navigating the UI via accessibility.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV25adjustsFontSizeToFitWidthSbvp":{"name":"adjustsFontSizeToFitWidth","abstract":"\u003cp\u003eA Boolean value that determines whether the label reduces the text’s font","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV18minimumScaleFactor14CoreFoundation7CGFloatVvp":{"name":"minimumScaleFactor","abstract":"\u003cp\u003eThe minimum scale factor for the label’s text.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV36allowsDefaultTighteningForTruncationSbvp":{"name":"allowsDefaultTighteningForTruncation","abstract":"\u003cp\u003eA Boolean value that determines whether the label tightens text before truncating.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the label, these will be merged with any existing traits.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV17accessibilityHintSSSgvp":{"name":"accessibilityHint","abstract":"\u003cp\u003eA localized string that describes the result of performing an action on the element, when the result is non-obvious.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV26accessibilityCustomActionsSayAA20AccessibilityElementV0G6ActionVGvp":{"name":"accessibilityCustomActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eAccessibilityElement.CustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV18linkDetectionTypesShyAC04LinkG4TypeOGvp":{"name":"linkDetectionTypes","abstract":"\u003cp\u003eA set of data types to detect and automatically link in the label.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14linkAttributesSDySo21NSAttributedStringKeyas11AnyHashableVGvp":{"name":"linkAttributes","abstract":"\u003cp\u003eA set of attributes to apply to links in the string.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV20activeLinkAttributesSDySo21NSAttributedStringKeyas11AnyHashableVGvp":{"name":"activeLinkAttributes","abstract":"\u003cp\u003eA set of attributes to apply to links when they are touched.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14attributedText9configureACSo18NSAttributedStringC_yACzXEtcfc":{"name":"init(attributedText:configure:)","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AttributedLabel"},"Structs/AttributedLabel/LinkDetectionType.html":{"name":"LinkDetectionType","abstract":"\u003cp\u003eTypes of data that can be detected and automatically turned into links.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO7leadingyA2EmF":{"name":"leading","abstract":"\u003cp\u003eAligns the content to the leading edge of the containing element.","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eCenters the content horizontally.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO8trailingyA2EmF":{"name":"trailing","abstract":"\u003cp\u003eAligns the content to the trailing edge of the containing element.","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eThe content fills the full horizontal width of the containing element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eAligns the content to the top edge of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eCenters the content vertically.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eAligns the content to the bottom edge of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eThe content fills the full vertical height of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html":{"name":"VerticalAlignment","abstract":"\u003cp\u003eThe possible vertical alignment values.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned/HorizontalAlignment.html":{"name":"HorizontalAlignment","abstract":"\u003cp\u003eThe possible horizontal alignment values.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element to be aligned.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV17verticalAlignmentAC08VerticalE0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eThe vertical alignment.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV19horizontalAlignmentAC010HorizontalE0Ovp":{"name":"horizontalAlignment","abstract":"\u003cp\u003eThe horizontal alignment.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV10vertically12horizontally8wrappingA2C17VerticalAlignmentO_AC010HorizontalH0OAA7Element_ptcfc":{"name":"init(vertically:horizontally:wrapping:)","abstract":"\u003cp\u003eInitializes an \u003ccode\u003eAligned\u003c/code\u003e with the given content element and alignments.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Aligned"},"Structs/EnvironmentReader.html#/s:11BlueprintUI17EnvironmentReaderV21elementRepresentationAcA7Element_pAA0C0Vc_tcfc":{"name":"init(elementRepresentation:)","parent_name":"EnvironmentReader"},"Structs/EnvironmentReader.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EnvironmentReader"},"Structs/EnvironmentReader.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EnvironmentReader"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV7Adaptera":{"name":"Adapter","abstract":"\u003cp\u003eTakes in a mutable \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e which can be mutated to add or override values.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV2by8wrappingACyAA0D0Vzc_AA7Element_ptcfc":{"name":"init(by:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified using the given","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV3key5value8wrappingACxm_5ValueQzAA7Element_ptcAA0D3KeyRzlufc":{"name":"init(key:value:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified for a single key and value.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV7keyPath5value8wrappingACs011WritableKeyF0CyAA0D0VxG_xAA7Element_ptclufc":{"name":"init(keyPath:value:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified for a single value.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AdaptedEnvironment"},"Structs/AccessibilityElement/CustomContent/Importance.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10ImportanceO7defaultyA2GmF":{"name":"default","abstract":"\u003cp\u003eBy default custom content is available through the rotor.\u003c/p\u003e","parent_name":"Importance"},"Structs/AccessibilityElement/CustomContent/Importance.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10ImportanceO4highyA2GmF":{"name":"high","abstract":"\u003cp\u003eIn addtion to being available through the rotor, high importance content will announced in the main VoiceOver utterance.","parent_name":"Importance"},"Structs/AccessibilityElement/CustomContent/Importance.html":{"name":"Importance","abstract":"\u003cp\u003eThe importance of the content.\u003c/p\u003e","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5labelSSvp":{"name":"label","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5valueSSSgvp":{"name":"value","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10importanceAE10ImportanceOvp":{"name":"importance","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5label5value10importanceAESS_SSSgAE10ImportanceOtcfc":{"name":"init(label:value:importance:)","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV02axfG0So08AXCustomG0Cvp":{"name":"axCustomContent","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV12OnActivationa":{"name":"OnActivation","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV4nameSSvp":{"name":"name","abstract":"\u003cp\u003eA localized name that discribes the action.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV5imageSo7UIImageCSgvp":{"name":"image","abstract":"\u003cp\u003eAn image representing the action to be shown with some assistive technologies such as Switch Control.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV12onActivationSbycvp":{"name":"onActivation","abstract":"\u003cp\u003eA Callback for when the action is activated. This should return a \u003ccode\u003ebool\u003c/code\u003e indicating success or failure of the action.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV4name5image12onActivationAESS_So7UIImageCSgSbyctcfc":{"name":"init(name:image:onActivation:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO15IncrementActiona":{"name":"IncrementAction","abstract":"\u003cp\u003eUsed in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control.","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO15DecrementActiona":{"name":"DecrementAction","abstract":"\u003cp\u003eUsed in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control.","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6buttonyA2EmF":{"name":"button","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO4linkyA2EmF":{"name":"link","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6headeryA2EmF":{"name":"header","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO11searchFieldyA2EmF":{"name":"searchField","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO5imageyA2EmF":{"name":"image","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO8selectedyA2EmF":{"name":"selected","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10playsSoundyA2EmF":{"name":"playsSound","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO11keyboardKeyyA2EmF":{"name":"keyboardKey","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10staticTextyA2EmF":{"name":"staticText","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO07summaryE0yA2EmF":{"name":"summaryElement","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10notEnabledyA2EmF":{"name":"notEnabled","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO17updatesFrequentlyyA2EmF":{"name":"updatesFrequently","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO18startsMediaSessionyA2EmF":{"name":"startsMediaSession","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10adjustableyAEyyc_yyctcAEmF":{"name":"adjustable(_:_:)","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO23allowsDirectInteractionyA2EmF":{"name":"allowsDirectInteraction","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO14causesPageTurnyA2EmF":{"name":"causesPageTurn","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6tabBaryA2EmF":{"name":"tabBar","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Trait"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5labelSSSgvp":{"name":"label","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5valueSSSgvp":{"name":"value","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV4hintSSSgvp":{"name":"hint","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV10identifierSSSgvp":{"name":"identifier","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV6traitsShyAC5TraitOGvp":{"name":"traits","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV22accessibilityFrameSizeSo6CGSizeVSgvp":{"name":"accessibilityFrameSize","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV29accessibilityFrameCornerStyleAA3BoxV0hI0Ovp":{"name":"accessibilityFrameCornerStyle","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV07wrappedE00A2UI0E0_pvp":{"name":"wrappedElement","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV21accessibilityActivateSbycSgvp":{"name":"accessibilityActivate","abstract":"\u003cp\u003eUsed to provide custom behaviour when activated by voiceover. This will override the default behavior of issuing a tap event at the accessibility activation point.","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV13customActionsSayAC12CustomActionVGvp":{"name":"customActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eCustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV13customContentSayAC06CustomG0VGvp":{"name":"customContent","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomContent.html\"\u003eCustomContent\u003c/a\u003e\u003c/code\u003es, defining additional content associated with the element. Assistive technologies, such as VoiceOver, will announce your custom content to the user at appropriate times.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5label5value6traits4hint10identifier22accessibilityFrameSize0kL11CornerStyle13customActions0P7Content8wrapping9configureACSSSg_AOShyAC5TraitOGA2OSo6CGSizeVSgAA3BoxV0nO0OSayAC12CustomActionVGSayAC0xR0VG0A2UI0E0_pyACzXEtcfc":{"name":"init(label:value:traits:hint:identifier:accessibilityFrameSize:accessibilityFrameCornerStyle:customActions:customContent:wrapping:configure:)","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/Trait.html":{"name":"Trait","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/CustomAction.html":{"name":"CustomAction","abstract":"\u003cp\u003eUsed to provide additional functionality to assistive technologies beyond your accessible UI.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/CustomContent.html":{"name":"CustomContent","parent_name":"AccessibilityElement"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV10identifierSSSgvp":{"name":"identifier","abstract":"\u003cp\u003eAn optional \u003ccode\u003eaccessibilityIdentifier\u003c/code\u003e to give the container. Defaults to \u003ccode\u003enil\u003c/code\u003e.\u003c/p\u003e","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV7wrapped0A2UI7Element_pvp":{"name":"wrapped","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV10identifier8wrappingACSSSg_0A2UI7Element_ptcfc":{"name":"init(identifier:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityContainer\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityContainer"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element whose accessibility information will be blocked.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV10isBlockingSbvp":{"name":"isBlocking","abstract":"\u003cp\u003eIf the \u003ccode\u003eAccessibilityBlocker\u003c/code\u003e is currently blocking accessibility.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV10isBlocking8wrappingACSb_0A2UI7Element_ptcfc":{"name":"init(isBlocking:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityBlocker\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html":{"name":"AccessibilityBlocker","abstract":"\u003cp\u003eBlocks all accessibility on the element, so that it is"},"Structs/AccessibilityContainer.html":{"name":"AccessibilityContainer","abstract":"\u003cp\u003eActs as an accessibility container for any accessible subviews.\u003c/p\u003e"},"Structs/AccessibilityElement.html":{"name":"AccessibilityElement"},"Structs/AdaptedEnvironment.html":{"name":"AdaptedEnvironment","abstract":"\u003cp\u003eWraps an element tree with a modified environment.\u003c/p\u003e"},"Structs/EnvironmentReader.html":{"name":"EnvironmentReader","abstract":"\u003cp\u003eAn element that dynamically builds its content based on the environment.\u003c/p\u003e"},"Structs/Aligned.html":{"name":"Aligned","abstract":"\u003cp\u003eAligns a content element within itself. The vertical and horizontal alignment may be set independently.\u003c/p\u003e"},"Structs/AttributedLabel.html":{"name":"AttributedLabel"},"Structs/Box.html":{"name":"Box","abstract":"\u003cp\u003eA simple element that wraps a child element and adds visual styling including"},"Structs/Button.html":{"name":"Button","abstract":"\u003cp\u003eAn element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when"},"Structs/Centered.html":{"name":"Centered","abstract":"\u003cp\u003eCenters a content element within itself.\u003c/p\u003e"},"Structs/Column.html":{"name":"Column","abstract":"\u003cp\u003eDisplays a list of items in a linear vertical layout.\u003c/p\u003e"},"Structs/ConstrainedAspectRatio.html":{"name":"ConstrainedAspectRatio","abstract":"\u003cp\u003eConstrains the size of the content element to an aspect ratio.\u003c/p\u003e"},"Structs/ConstrainedSize.html":{"name":"ConstrainedSize","abstract":"\u003cp\u003eConstrains the measured size of the contained element in the ranges specified by the \u003ccode\u003ewidth\u003c/code\u003e and \u003ccode\u003eheight\u003c/code\u003e properties.\u003c/p\u003e"},"Structs/Empty.html":{"name":"Empty","abstract":"\u003cp\u003eAn empty \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e which has no size and draws no content.\u003c/p\u003e"},"Structs/EqualStack.html":{"name":"EqualStack","abstract":"\u003cp\u003eAn element that sizes its children equally, stacking them in the primary axis according to"},"Structs/GeometryReader.html":{"name":"GeometryReader","abstract":"\u003cp\u003eAn element that dynamically builds its content based on the available space.\u003c/p\u003e"},"Structs/Image.html":{"name":"Image","abstract":"\u003cp\u003eDisplays an image within an element hierarchy.\u003c/p\u003e"},"Structs/Inset.html":{"name":"Inset","abstract":"\u003cp\u003eInsets a content element within a layout.\u003c/p\u003e"},"Structs/Label.html":{"name":"Label","abstract":"\u003cp\u003eDisplays text content.\u003c/p\u003e"},"Structs/Overlay.html":{"name":"Overlay","abstract":"\u003cp\u003eStretches all of its child elements to fill the layout area, stacked on top of each other.\u003c/p\u003e"},"Structs/Row.html":{"name":"Row","abstract":"\u003cp\u003eDisplays a list of items in a linear horizontal layout.\u003c/p\u003e"},"Structs/Rule.html":{"name":"Rule","abstract":"\u003cp\u003eA solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length,"},"Structs/ScrollView.html":{"name":"ScrollView","abstract":"\u003cp\u003eWraps a content element and makes it scrollable.\u003c/p\u003e"},"Structs/SegmentedControl.html":{"name":"SegmentedControl","abstract":"\u003cp\u003eAllows users to pick from an array of options.\u003c/p\u003e"},"Structs/Spacer.html":{"name":"Spacer","abstract":"\u003cp\u003eAn element that does not display anything (it has neither children or a view).\u003c/p\u003e"},"Structs/Tappable.html":{"name":"Tappable","abstract":"\u003cp\u003eWraps a content element and calls the provided closure when tapped.\u003c/p\u003e"},"Structs/TextField.html":{"name":"TextField","abstract":"\u003cp\u003eDisplays a text field.\u003c/p\u003e"},"Structs/TransitionContainer.html":{"name":"TransitionContainer","abstract":"\u003cp\u003eWraps a content element and adds transitions when the element appears,"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO6deviceyAE05SwiftB00D6DeviceVcAEmF":{"name":"device(_:)","abstract":"\u003cp\u003eThe preview will be inside the provided device (eg, iPhone X).\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO5fixedyAE14CoreFoundation7CGFloatV_AItcAEmF":{"name":"fixed(width:height:)","abstract":"\u003cp\u003eThe preview will be the provided size\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO8thatFitsyAE14CoreFoundation7CGFloatV_tcAEmF":{"name":"thatFits(padding:)","abstract":"\u003cp\u003eThe preview will be as large as needed to preview the content.\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO10identifiers11AnyHashableVvp":{"name":"identifier","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO11previewView4with3for05SwiftB003AnyG0VSS_AA0C0_ptF":{"name":"previewView(with:for:)","parent_name":"PreviewType"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV0C8Providera":{"name":"ElementProvider","abstract":"\u003cp\u003eA provider which returns a new element.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV13commonDevices5named4withACSS_AA0C0_pyctFZ":{"name":"commonDevices(named:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with several common devices that your users may use.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV5named4withAeCSS_AC0D4TypeOAA0C0_pyctcfc":{"name":"init(named:with:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with the provided preview type.","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV5named4withAeCSS_SayAC0D4TypeOGAA0C0_pyctcfc":{"name":"init(named:with:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with the provided preview types.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:7SwiftUI4ViewP4body4BodyQzvp":{"name":"body","parent_name":"ElementPreview"},"Structs/ElementPreview/PreviewType.html":{"name":"PreviewType","abstract":"\u003cp\u003eThe preview type to use to display an element in an Xcode preview.\u003c/p\u003e","parent_name":"ElementPreview"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eA base environment used when laying out and rendering the element tree.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC046automaticallyInheritsEnvironmentFromContainingA5ViewsSbvp":{"name":"automaticallyInheritsEnvironmentFromContainingBlueprintViews","abstract":"\u003cp\u003eIf \u003ccode\u003etrue\u003c/code\u003e, then Blueprint will automatically inherit the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e from the nearest","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC7elementAA7Element_pSgvp":{"name":"element","abstract":"\u003cp\u003eThe root element that is displayed within the view.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)bounds":{"name":"bounds","abstract":"\u003cp\u003eWe need to invalidateIntrinsicContentSize when \u003ccode\u003ebound.size\u003c/code\u003e changes for Auto Layout to work correctly.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC10layoutModeAA06LayoutE0OSgvp":{"name":"layoutMode","abstract":"\u003cp\u003eAn optional explicit layout mode for this view. If \u003ccode\u003enil\u003c/code\u003e, this view will inherit the layout","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC4nameSSSgvp":{"name":"name","abstract":"\u003cp\u003eAn optional name to help identify this view\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC15metricsDelegateAA0ac7MetricsE0_pSgvp":{"name":"metricsDelegate","abstract":"\u003cp\u003eProvides performance metrics about the duration of layouts, updates, etc.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC7element11environmentAcA7Element_pSg_AA11EnvironmentVtcfc":{"name":"init(element:environment:)","abstract":"\u003cp\u003eInstantiates a view with the given element\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)initWithFrame:":{"name":"init(frame:)","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)sizeThatFits:":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within the given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC12sizeThatFitsySo6CGSizeVAA14SizeConstraintVF":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within the given \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SizeConstraint.html\"\u003eSizeConstraint\u003c/a\u003e\u003c/code\u003e.","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)systemLayoutSizeFittingSize:":{"name":"systemLayoutSizeFitting(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within then given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:":{"name":"systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within then given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)intrinsicContentSize":{"name":"intrinsicContentSize","abstract":"\u003cp\u003eFor us, this is the same as \u003ccode\u003esizeThatFits\u003c/code\u003e, since blueprint does not","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)semanticContentAttribute":{"name":"semanticContentAttribute","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)safeAreaInsetsDidChange":{"name":"safeAreaInsetsDidChange()","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)layoutSubviews":{"name":"layoutSubviews()","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)didMoveToWindow":{"name":"didMoveToWindow()","parent_name":"BlueprintView"},"Classes/BlueprintView.html":{"name":"BlueprintView","abstract":"\u003cp\u003eA view that is responsible for displaying an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e hierarchy.\u003c/p\u003e"},"Structs/ElementPreview.html":{"name":"ElementPreview","abstract":"\u003cp\u003eA SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eThe alpha of the view in the hidden state (initial for appearing, final for disappearing).\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eThe transform of the view in the hidden state (initial for appearing, final for disappearing).\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV10attributesAA19AnimationAttributesVvp":{"name":"attributes","abstract":"\u003cp\u003eThe animation attributes that will be used to drive the transition.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5alpha9transform10attributesAC14CoreFoundation7CGFloatV_So13CATransform3DVAA19AnimationAttributesVtcfc":{"name":"init(alpha:transform:attributes:)","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5scaleACvpZ":{"name":"scale","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that scales in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV4fadeACvpZ":{"name":"fade","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that fades in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV12scaleAndFadeACvpZ":{"name":"scaleAndFade","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that simultaneously scales and fades in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO4noneyA2CmF":{"name":"none","abstract":"\u003cp\u003eThe view will never animate layout changes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO8specificyAcA19AnimationAttributesVcACmF":{"name":"specific(_:)","abstract":"\u003cp\u003eLayout changes will always animate with the given attributes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO9inheritedyA2CmF":{"name":"inherited","abstract":"\u003cp\u003eThe view will only animate layout changes if an inherited transition exists.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO21inheritedWithFallbackyAcA19AnimationAttributesVcACmF":{"name":"inheritedWithFallback(_:)","abstract":"\u003cp\u003eThe view will animate along with an inherited transition (if present) or the specified fallback attributes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV6Updatea":{"name":"Update","abstract":"\u003cp\u003eA closure that is applied to the native view instance during an update cycle.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7builderxycvp":{"name":"builder","abstract":"\u003cp\u003eA closure that is responsible for instantiating an instance of the native view.","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7updatesSayyxcGvp":{"name":"updates","abstract":"\u003cp\u003eAn array of update closures.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV07contentC0ySo6UIViewCxcvp":{"name":"contentView","abstract":"\u003cp\u003eA closure that takes a native view instance as the single argument, and","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV16layoutTransitionAA06LayoutG0Ovp":{"name":"layoutTransition","abstract":"\u003cp\u003eThe transition to use during layout changes.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV19appearingTransitionAA010VisibilityG0VSgvp":{"name":"appearingTransition","abstract":"\u003cp\u003eThe transition to use when this view appears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV22disappearingTransitionAA010VisibilityG0VSgvp":{"name":"disappearingTransition","abstract":"\u003cp\u003eThe transition to use when this view disappears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV8onAppearyycSgvp":{"name":"onAppear","abstract":"\u003cp\u003eA hook to call when the element appears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV11onDisappearyycSgvp":{"name":"onDisappear","abstract":"\u003cp\u003eA hook to call when the element disappears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV21frameRoundingBehaviorAC05FramegH0Ovp":{"name":"frameRoundingBehavior","abstract":"\u003cp\u003eThe prioritization method to use when snapping the native view\u0026rsquo;s frame to pixel","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVAEy_xGycfc":{"name":"init()","abstract":"\u003cp\u003eInitializes a default configuration object.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV5applyyyyxcF":{"name":"apply(_:)","abstract":"\u003cp\u003eAdds the given update closure to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7updatesSayyxcGvp\"\u003eupdates\u003c/a\u003e\u003c/code\u003e array.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVyqd__Sgs24ReferenceWritableKeyPathCyxqd__Gcluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eSubscript for values that are not optional. We must represent these values as optional so that we can","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVyqd__Sgs24ReferenceWritableKeyPathCyxAFGcluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eSubscript for values that are optional.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/FrameRoundingBehavior.html#/s:11BlueprintUI15ViewDescriptionV21FrameRoundingBehaviorO15prioritizeEdgesyA2EmF":{"name":"prioritizeEdges","abstract":"\u003cp\u003ePrioritize preserving frame edge positions\u003c/p\u003e","parent_name":"FrameRoundingBehavior"},"Structs/ViewDescription/FrameRoundingBehavior.html#/s:11BlueprintUI15ViewDescriptionV21FrameRoundingBehaviorO14prioritizeSizeyA2EmF":{"name":"prioritizeSize","abstract":"\u003cp\u003ePrioritize preserving frame sizes\u003c/p\u003e","parent_name":"FrameRoundingBehavior"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionVyACxmcSo6UIViewCRbzlufc":{"name":"init(_:)","abstract":"\u003cp\u003eGenerates a view description for the given view class.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV_11configuringACxm_yAC13ConfigurationVy_xGzXEtcSo6UIViewCRbzlufc":{"name":"init(_:configuring:)","abstract":"\u003cp\u003eGenerates a view description for the given view class.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV8viewTypeSo6UIViewCmvp":{"name":"viewType","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV5buildSo6UIViewCyF":{"name":"build()","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV5apply2toySo6UIViewC_tF":{"name":"apply(to:)","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV07contentC02inSo6UIViewCAG_tF":{"name":"contentView(in:)","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV16layoutTransitionAA06LayoutF0Ovp":{"name":"layoutTransition","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV19appearingTransitionAA010VisibilityF0VSgvp":{"name":"appearingTransition","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV22disappearingTransitionAA010VisibilityF0VSgvp":{"name":"disappearingTransition","parent_name":"ViewDescription"},"Structs/ViewDescription/FrameRoundingBehavior.html":{"name":"FrameRoundingBehavior","abstract":"\u003cp\u003eThe available prioritization options for rounding frames to pixel boundaries.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription/Configuration.html":{"name":"Configuration","abstract":"\u003cp\u003eRepresents the configuration of a specific UIView type.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ElementContent/Builder.html#/s:11BlueprintUI14ElementContentV7BuilderV6layoutxvp":{"name":"layout","abstract":"\u003cp\u003eThe layout object that is ultimately responsible for measuring","parent_name":"Builder"},"Structs/ElementContent/Builder.html#/s:11BlueprintUI14ElementContentV7BuilderV3add6traits3key7elementy6TraitsQz_s11AnyHashableVSgAA0C0_ptF":{"name":"add(traits:key:element:)","abstract":"\u003cp\u003eAdds the given child element.\u003c/p\u003e","parent_name":"Builder"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV7measure2in11environmentSo6CGSizeVAA14SizeConstraintV_AA11EnvironmentVtF":{"name":"measure(in:environment:)","abstract":"\u003cp\u003eMeasures the required size of this element\u0026rsquo;s content.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV10childCountSivp":{"name":"childCount","parent_name":"ElementContent"},"Structs/ElementContent/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eUsed to construct elements that have layout and children.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV6layout9configureACx_yAC7BuilderVy_xGzXEtcAA6LayoutRzlufc":{"name":"init(layout:configure:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given layout and children.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child3key6layoutAcA0C0_p_s11AnyHashableVSgxtcAA17SingleChildLayoutRzlufc":{"name":"init(child:key:layout:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given element and layout.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5childAcA0C0_p_tcfc":{"name":"init(child:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given element.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5buildAcA0C0_pAA14SizeConstraintV_AA11EnvironmentVtc_tcfc":{"name":"init(build:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e that will lazily create its storage during a layout and measurement pass,","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV10measurableAcA10Measurable_p_tcfc":{"name":"init(measurable:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Measurable.html\"\u003eMeasurable\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV15measureFunctionACSo6CGSizeVAA14SizeConstraintVc_tcfc":{"name":"init(measureFunction:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided measure function.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV15measureFunctionACSo6CGSizeVAA14SizeConstraintV_AA11EnvironmentVtc_tcfc":{"name":"init(measureFunction:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided measure function.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV13intrinsicSizeACSo6CGSizeV_tcfc":{"name":"init(intrinsicSize:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that uses the provided intrinsic size for measuring.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child11environmentAcA0C0_p_yAA11EnvironmentVzctcfc":{"name":"init(child:environment:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given child element, measurement caching key, and environment adapter,","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child3key5valueAcA0C0_p_xm5ValueQztcAA14EnvironmentKeyRzlufc":{"name":"init(child:key:value:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given child element, measurement caching key, and environment key + value.","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV9measuringAcA0C0_p_tcfc":{"name":"init(measuring:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementContent\u003c/code\u003e which uses the provided element to measure its","parent_name":"ElementContent"},"Protocols/ProxyElement.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","abstract":"\u003cp\u003eReturns an element that represents the entire content of this element.\u003c/p\u003e","parent_name":"ProxyElement"},"Protocols/ProxyElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ProxyElement"},"Protocols/ProxyElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ProxyElement"},"Protocols/Element.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","abstract":"\u003cp\u003eReturns the content of this element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","abstract":"\u003cp\u003eReturns an (optional) description of the view that should back this element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment3key5valueAaB_pqd__m_5ValueQyd__tAA0E3KeyRd__lF":{"name":"adaptedEnvironment(key:value:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given environment key and value.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment7keyPath5valueAaB_ps011WritableKeyG0CyAA0E0Vqd__G_qd__tlF":{"name":"adaptedEnvironment(keyPath:value:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given keypath and value.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment2byAaB_pyAA0E0Vzc_tF":{"name":"adaptedEnvironment(by:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given configuration block.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7aligned10vertically12horizontallyAA7AlignedVAH17VerticalAlignmentO_AH010HorizontalI0OtF":{"name":"aligned(vertically:horizontally:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Aligned.html\"\u003eAligned\u003c/a\u003e\u003c/code\u003e element with the provided parameters.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8centeredAA8CenteredVyF":{"name":"centered()","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Centered.html\"\u003eCentered\u003c/a\u003e\u003c/code\u003e element to center it within its parent.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if_4thenAaB_pSb_AaB_pxXEtF":{"name":"if(_:then:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003emodify\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if_4then4elseAaB_pSb_AaB_pxXEAaB_pxXEtF":{"name":"if(_:then:else:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003ethen\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if3let4thenAaB_pqd__Sg_AaB_pqd___xtXEtlF":{"name":"if(let:then:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003emodify\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if3let4then4elseAaB_pqd__Sg_AaB_pqd___xtXEAaB_pxXEtlF":{"name":"if(let:then:else:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003ethen\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE3mapyAaB_pAaB_pxXEF":{"name":"map(_:)","abstract":"\u003cp\u003eCreates and returns a new element by passing the","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6modifyyAaB_pyxzXEF":{"name":"modify(_:)","abstract":"\u003cp\u003eCreates and returns a new element by passing the","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo11aspectRatio11contentModeAA017ConstrainedAspectG0VAA0kG0V_AH07ContentI0OtF":{"name":"constrainedTo(aspectRatio:contentMode:)","abstract":"\u003cp\u003eConstrains the element to the provided aspect ratio.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo5width6heightAA15ConstrainedSizeVAH10ConstraintO_AJtF":{"name":"constrainedTo(width:height:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided width and height.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo5width6heightAA15ConstrainedSizeV14CoreFoundation7CGFloatV_AKtF":{"name":"constrainedTo(width:height:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided width and height.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo4sizeAA15ConstrainedSizeVSo6CGSizeV_tF":{"name":"constrainedTo(size:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided size.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11constrained2toAA15ConstrainedSizeVAA0G10ConstraintV_tF":{"name":"constrained(to:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SizeConstraint.html\"\u003eSizeConstraint\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8decorate8layering8position4withAaB_pAA8DecorateV8LayeringO_AI8PositionVAaB_pyXEtF":{"name":"decorate(layering:position:with:)","abstract":"\u003cp\u003ePlaces a decoration element behind or in front of the given \u003ccode\u003ewrapped\u003c/code\u003e element,","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE9flowChild3keyAA4FlowV0E0Vs11AnyHashableVSg_tF":{"name":"flowChild(key:)","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Flow/Child.html\"\u003eFlow.Child\u003c/a\u003e\u003c/code\u003e to allow customizing the item in the flow layout.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE12gridRowChild3key5widthAA04GridE0V0F0Vs11AnyHashableVSg_AH5WidthOtF":{"name":"gridRowChild(key:width:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003eGridRowChild\u003c/code\u003e in order to provide meta information that a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e can aply to its layout.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6hiddenyAA6HiddenVSbF":{"name":"hidden(_:)","abstract":"\u003cp\u003eConditionally hide the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset3top6bottom4left5rightAA5InsetV14CoreFoundation7CGFloatV_A3MtF":{"name":"inset(top:bottom:left:right:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset2byAA5InsetVSo12UIEdgeInsetsV_tF":{"name":"inset(by:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset7uniformAA5InsetV14CoreFoundation7CGFloatV_tF":{"name":"inset(uniform:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset10horizontal8verticalAA5InsetV14CoreFoundation7CGFloatV_AKtF":{"name":"inset(horizontal:vertical:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5keyedyAA5KeyedVs11AnyHashableVF":{"name":"keyed(_:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Keyed.html\"\u003eKeyed\u003c/a\u003e\u003c/code\u003e allows providing a \u003ccode\u003eHashable\u003c/code\u003e value which is used","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8onAppearyAA17LifecycleObserverVyycF":{"name":"onAppear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element appears.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11onDisappearyAA17LifecycleObserverVyycF":{"name":"onDisappear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element disappears.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7opacityyAA7OpacityV14CoreFoundation7CGFloatVF":{"name":"opacity(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Opacity.html\"\u003eOpacity\u003c/a\u003e\u003c/code\u003e element with the provided opacity.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE12overlayChild3keyAA7OverlayV0E0Vs11AnyHashableVSg_tF":{"name":"overlayChild(key:)","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE16stackLayoutChild8priority14alignmentGuide3keyAA05StackE0V0F0VAK8PriorityO_14CoreFoundation7CGFloatVAA0C10DimensionsVcSgs11AnyHashableVSgtF":{"name":"stackLayoutChild(priority:alignmentGuide:key:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child.html\"\u003eStackLayout.Child\u003c/a\u003e\u003c/code\u003e in order to customize \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Traits.html\"\u003eStackLayout.Traits\u003c/a\u003e\u003c/code\u003e and the key.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE16stackLayoutChild8priorityAA05StackE0V0F0VAI8PriorityO_tF":{"name":"stackLayoutChild(priority:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child.html\"\u003eStackLayout.Child\u003c/a\u003e\u003c/code\u003e in order to customize the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child/Priority.html\"\u003eStackLayout.Child.Priority\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18tintAdjustmentModeyAA04TinteF0VSo06UIViewgeF0VF":{"name":"tintAdjustmentMode(_:)","abstract":"\u003cp\u003eConditionally modifies the tint adjustment mode of its wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11transformedyAA11TransformedVSo13CATransform3DVF":{"name":"transformed(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element with the provided 3D transform.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11transformedyAA11TransformedVSo17CGAffineTransformVF":{"name":"transformed(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element with the provided 2D transform.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE10translated10translateX0E1Y0E1ZAA11TransformedV14CoreFoundation7CGFloatV_A2LtF":{"name":"translated(translateX:translateY:translateZ:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that translates the receiver in 3D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7rotated2byAA11TransformedV10Foundation11MeasurementVySo11NSUnitAngleCG_tF":{"name":"rotated(by:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that rotates the receiver in 2D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6scaled6scaleX0E1YAA11TransformedV14CoreFoundation7CGFloatV_AKtF":{"name":"scaled(scaleX:scaleY:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that scales the receiver in 2D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE22userInteractionEnabledyAA04UsereF0VSbF":{"name":"userInteractionEnabled(_:)","abstract":"\u003cp\u003eConditionally enable user interaction of the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE18blockAccessibility10isBlockingAD0G7BlockerVSb_tF":{"name":"blockAccessibility(isBlocking:)","abstract":"\u003cp\u003eBlocks all accessibility on the element, so that it is","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE22accessibilityContainer10identifierAaB_pSSSg_tF":{"name":"accessibilityContainer(identifier:)","abstract":"\u003cp\u003eActs as an accessibility container for any subviews","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE013accessibilityC05label5value6traits4hint10identifier0F9FrameSize0fL11CornerStyle13customActions0P7ContentAD013AccessibilityC0VSSSg_AQShyAP5TraitOGA2QSo6CGSizeVSgAD3BoxV0nO0OSayAP12CustomActionVGSayAP0wR0VGtF":{"name":"accessibilityElement(label:value:traits:hint:identifier:accessibilityFrameSize:accessibilityFrameCornerStyle:customActions:customContent:)","abstract":"\u003cp\u003eWraps the receiver in an accessibility element with the provided values.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE13accessibility5label5value4hint10identifier6traits0F9FrameSizeAD013AccessibilityC0VSSSg_A3NShyAM5TraitOGSo6CGSizeVSgtF":{"name":"accessibility(label:value:hint:identifier:traits:accessibilityFrameSize:)","abstract":"\u003cp\u003eWraps the receiver in an accessibility element with the provided values.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE18accessibilityFocus2onAaB_pAD013AccessibilityG0V7TriggerC_tF":{"name":"accessibilityFocus(on:)","abstract":"\u003cp\u003eEnables VoiceOver focus to jump to the wrapped element via the trigger.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE12onLinkTappedyAaB_py10Foundation3URLVcF":{"name":"onLinkTapped(_:)","abstract":"\u003cp\u003eHandle links opened in any \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e within this element using the provided closure.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE3box10background7corners11cornerCurve7borders6shadow12clipsContentAD3BoxVSo7UIColorC_AM11CornerStyleOAM0qJ0OAM06BorderR0OAM06ShadowR0OSbtF":{"name":"box(background:corners:cornerCurve:borders:shadow:clipsContent:)","abstract":"\u003cp\u003eWraps the element in a box to provide basic styling.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE11editingMenu4show4withAD07EditingG0VAI7GestureO_SayAD0jG4ItemVGyXEtF":{"name":"editingMenu(show:with:)","abstract":"\u003cp\u003eAllows showing the system\u0026rsquo;s \u003ccode\u003eUIMenuController\u003c/code\u003e editing menu upon long press of the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10scrollable_9configureAD10ScrollViewVAH11ContentSizeO_yAHzXEtF":{"name":"scrollable(_:configure:)","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ScrollView.html\"\u003eScrollView\u003c/a\u003e\u003c/code\u003e to allow it to be scrolled","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE8tappable5onTapAD8TappableVyyc_tF":{"name":"tappable(onTap:)","abstract":"\u003cp\u003eWraps the element and calls the provided closure when tapped.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10transition8onAppear0G9Disappear0G6LayoutAD19TransitionContainerVAA010VisibilityK0VSg_AmA0jK0OtF":{"name":"transition(onAppear:onDisappear:onLayout:)","abstract":"\u003cp\u003eWraps the element in a transition container to provide an animated transition.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10transitionyAD19TransitionContainerVAA010VisibilityG0VF":{"name":"transition(_:)","abstract":"\u003cp\u003eWraps the element in a transition container to provide an animated transition when its visibility changes.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html":{"name":"Element","abstract":"\u003cp\u003eConforming types represent a rectangular content area in a two-dimensional"},"Protocols/ProxyElement.html":{"name":"ProxyElement","abstract":"\u003cp\u003eCustom elements commonly use another element to actually display content. For example, a profile element might"},"Structs/ElementContent.html":{"name":"ElementContent","abstract":"\u003cp\u003eRepresents the content of an element.\u003c/p\u003e"},"Structs/ViewDescription.html":{"name":"ViewDescription","abstract":"\u003cp\u003eContains a \u003cem\u003edescription\u003c/em\u003e of a UIView instance. A description includes"},"Enums/LayoutTransition.html":{"name":"LayoutTransition","abstract":"\u003cp\u003eThe transition used when layout attributes change for a view during an"},"Structs/VisibilityTransition.html":{"name":"VisibilityTransition","abstract":"\u003cp\u003eThe transition used when a view is inserted or removed during an update cycle.\u003c/p\u003e"},"Creating%20Custom%20Elements.html":{"name":"Creating Custom Elements"},"Displaying%20Elements.html":{"name":"Displaying Elements"},"Common%20Elements.html":{"name":"Common Elements"},"Environment.html":{"name":"Environment"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Extensions.html":{"name":"Extensions","abstract":"\u003cp\u003eThe following extensions are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"},"Typealiases.html":{"name":"Type Aliases","abstract":"\u003cp\u003eThe following type aliases are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docsets/Blueprint.docset/Contents/Resources/docSet.dsidx b/docsets/Blueprint.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..9ba41a769c46511ecf71dc9ef3505ea32e31bef3 GIT binary patch literal 331776 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 literal 0 HcmV?d00001 diff --git a/docsets/Blueprint.tgz b/docsets/Blueprint.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ae01b7e00bee16c26fd88c6a2df8c3e5a1758a7c GIT binary patch literal 923970 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

r;v2e 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�~Ul)$>IZUi;@yc#&k~tu@MpKAV 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

#F$Ulhg> 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ˁLY{yRd@v4NnLi`V=@Np^#JSud8 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�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�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∾;0e$n*1iI7EtjY_vhr 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

9J40;R)HT;AO>kcZIq*_;w*B?&g(89 zNQXrNG1H^*e*Ug7Eb;e&*_2|WyR%nZYZsK^S1wyol5u>Da1U^I(zz}>kI<`ZY-~NA z?0j@*T+ru9Sy*4Y2~B@`;yNkcp` zs~4$?7m39e$X>8t+_^r``K%u?7I^mTWq)$PJXPq;XXO@^{e3j$89i4Cp3zJX|8o4S zI4I+5zcUE{_hobP zT!B8nE4LDnN;Z0H%&2>*Kl#$ns-FH6k)F%qn6Jh$D@at z3!%`YOh_CotfX4*K?A8b}9ZlZyF`6GC=%xKUi)Scc^ zlu5V*@g7J1M6-IBam_K<`#dcpPv7#S<;>ZQPZ;B#IKf;sM^U+N8>4NT1L_mgqK1}p z5N>V3cSMCT5xwMBlN%Z}Edz=_5H76-hiFl%>>en&QLqv%`?glvyH!Xk-?ay(?}99U zi*0@Hp<5k&T_1BCemsUf6tO=8Ga9ZW%#I`WV#U26_Zlm|&qn0mer z4JmgMTy{2xwX!;jQZHXs1c5r#e|$amf%?bwnE$WqF>*F|Cd5B1V`>+tNNG zW!3{=^@ydvT7qMheK$Pf_Y7+VU!i)wp~P^NT#+u#_W|hmsEav;CMYZ|9<2X z7idzXc`~ft-`V$Bm4BBWzu;o4?Ln~o7uok{khOl!*Dre;XD#V)EEz|MRQxnVkHm$N;j)Q*|lY;$B1`Q9QzG@Da3F z>K>9s5sc_`VF;?Sj-*e0`^oIArcT&zJ2jZ6U~LuqzY!C!Q-8-qo&=+q|N1f5$)&_y zA+5qSS@De-#Ucw5T=|PwA>=ig!eX)ozeDD~JO(qpqu?C|gyZkUcFCdbNGi4Lq9Oz! z75%qx6j!LxT>SozQ15fY|AR9yz5B<1PrY00c&PVRNcj7{+jU7q#sJN$r@g72k;DS+ z@4{&v>)HG$+lRsCg8{NY{?YF;m4VYP&H7`ftQ2CRKUqrk6BWCul75FK7^v+wHfC9^ z`rgPeH^H00sm`+NRi{r7AUVuvZM}}x+9Oc9D&o0d;Me^m`w!}z;BP1-*za+@FXXQh1;aUL2O38a6q70opOa8_&sQ+seTgBS25VUQnVKy zvCZZP z2^>c%18UlqE?nRklSkP-ThM?@{mC@wpAeUf*?2>jeIn-VzQK=qR>44exNgQ%*6`Xej2Ro zK6>JrqvSLSK9Fc7(H9iB+XjTacOJc{JSD;=0PMs+u7q4Xp}7SM!f>>(4E|p+(dqJq;%-xbV1(PPY(-u91 z!v^czCs4g9JSSK<@4{dHef@rLpMl{R9X(>}cPxBs*#4Maf~a{e-yQ$h_XsFW}oBT2z`fVZ_Bpn`x^W z;$aC}72J8hRE`k-uu&zQFm+i(t@%L*Pszp*)EoX4;IhkeU|MKz7vV7exOOfW7b8g7 zHi?dQ-;ZL>F>cbdLdXElQDBQ^}b6tBjxjZ;IBSpBI z-KhnfdfenJ5kGH`Trb??pLJY7b!i6dw^qgMPr{jsDI52;n*+rN`P?V8&V=P1Y?bx! zW`*Sj`mf53B-SLfy}wj*%BB?>5wEVsbo5ouv*I6@ zU_`#T!cZGeyDtHQQu;X&b;>U4?PAl`alf$lY1}009X4-un3k->t1mqnN^R4p9x1sW zDkeOb7O+|#L>n0C=8^or-83{z+FN70H?g|3T>a;NCcHNPCl6)U=)33E@)RAbe@6V6 z+|d|rf4M(-u>me@S_SI2cRJH^Z}rQt?u|Pu-s|}A+gzzd=^N%wbMRP~v%+@|&lmM7 z!s!UKMsCI8KL;IUWsAMEBHV#Dj)eemG1YXEWswhi%-`NlQ1};S;xyZJvG(G$xxPBQ zY|<}XyyVvC<|PCJ6C0L2{3R0ROo8PAa?Lt9h9{^PS^XDfX{grBcbkO`?YyL`e5Gb= z-xT8HykfLN{nN9nQ&u%<7ZyLa9H%3#U38x_3_B}M%cq~~-BlX>#o1vuXT4JU78|_}6Z=s*Vv$+1)DW5ev*Q#l8y+?E6U&t5(DQDb(6yAs7(8BO+9 zmh~Mh@4L;_d>v?R5`=XHr^0?UNnbTM(;v>Lt7#Tkm-;FGe9vK1=rg@TFmxK?GSmiB z8I;HS!Tl;ycHJWu&AK`_YL-P6x3_hdU?K68oMg7)u$MF$0yB6hFxXQ?NQ7?PUo@0URX26V2G-~h za_z;)ER)@K?CVgDQNqk?=|*Ma;wqVqY(9k28*x@P&_k*4wl2PL-j=!la@w0*?!yzf zeSo>H646F{lKUXLd#EvG=)7S)s6)l@F2|X9pTS?Pd*U&m_*e8_r6NX&c5j|C0-rdG=|@CO>A33xq;^yCbe zruMFk_2D~-&IDV``wMC_Ho0(dWr5AjbDx5K`0`X_x!Oer!-g&Q{@5Cel|eIGZ&n=V zSDHuhC+d~*=! zH1rM{&Rp*Jk;|l1`XusA9=&M~tDOJn?3~_-Hs=DPQEOfD3CG|DRhWWv8}I!jX?YWa z7KCYjFHP1UqIpxVYjv-bfu4H}LM;BM|pNIC|0N%by zPLCWhl5Q@QnY223W>B!_d{sP0n}};Z$IJ6iO>${jBuY#6WZ3t_wO974sKjXVF;Eza zW_0pMh^c-Bqed&|sJrCL(9aFrGHm`8DiL_>VCkh{M9lBd24OFT`^kl)Xyr{3OaImk1DAR^;T5pP{%X=P9UN+ zuV~@!dMJi*65Bl{b7$&$n;QPUzp{++bYA4KAiQD00uFfklh;mr`S3B++Odzvsn1&u zFttGT=-I72e#+l)xmKTplhxX$T0QWAa=dCER~YQq+^_x_=zz}W1M7g;gScLF#>QhI{+s^JebR4s!mdX9uxFFIsgv@H%#zK4rAZ zgfM`8(Z}oyyp64hcbrE~Wf}2$!+q-VY~0ZQx2+3;*VaXQXM6iG0AKL06ZbvxF6-F_ z{#tz=JEnI#5Pd3zof-s}(Id~JT|SPs+P?7Huj;?%`+19ZKmRg3c@OLxFh=l?p}bNT zGQmu^>MovcSt3kmDtu-wf|0D^;xi-UgvKoNa061i829pV-?@)5clrAJ(2aR+_Hn8= z4saL%Qw4njOY@d-`S8K>Q)bR}`m3p8@GccFRT!84F;$!!XAicMAT5Xrpptc}b7eXQ z8y)|FE)K!{)joEHZrZkH|EOq^xoqtS{tS|%UqlZ)-1>hpJ3g~%UQ1$FS>Tos2P9yuv@y?dG{U)@6qz~&^4{?@yoRzC%2weA+B zbT&|aGtj&9n7$T;4RRRvi!0&T+DKDc^}+?>tciZGD}`0C47t3T+1n*84Vs-L0dqB= zFc!pwescO{LAMBT3``V;r?x!)urK`u0yz8yWaKyJ(K?x&bfWI>)c?^|Y)0F&72jFK zCBJJbs6^o$l_1)Wrc=|%1FZ)ZI~s!|l=0)QAhpy{2I3@0BBAEp6Ix1#yR2G>%L77} zMsoRVQ$^z-eRRd%>h0XMK)&w!T?4y*RPSSfT|Y8)r0GREd3;FxT>o9Odjv>fA2@0u zJ>^dKzYG>Wrsj{1Sir0waC0Wf3Ua+P<-KK5t@1cxgZ_y3TSGYpWp!d#0Pc@$N{(1h zmK9Ts2k~1&xmXi46ZU$x^c@H$Yl#JX4YMieaXt_oO*kscd92NiOqZ?a_Kp&7+OgX}KC%jeA)c4iwqP~_cezB8Z(S+oU7 zx=yBxyDv?t-lM47>sE+?+o*Z`wFW>9Iy`h3Vo)(OdX{lbu{O(`m* zRcuN11Op!Jogq1;sC3L54hwP6YKiV415Af9Vf3- zIP#n?N9@!`NFr8hgi~>h?`Ko8d}H>^PF&>N!-nj>FCK}KvB8_wW)p_Om?w4ug!BEW z{eSlS?7m+Tk6)1dTb-mpuB)w8*)=Md9PWf#1dSIc$SiN1DIGfVcXHsBGPbyjtd56$ z;h~!Pt;lkHzcSbqap_@b)c_1=5Z>IXP^BSpsRU`8nXarYP=?v}M&M>fNKKawB3g8j zqBY!=AE^8<2_`%L2!8$PbOjdonCHI`T8uR8#zZhAAU)j5)nG;Bz{Ai zg!d~e7R2zQ@p{5LoX!+?hCG&wDc%@V0PcjjA!d zWLCy~M|gahmzpW(`9Tbjpnkb?)aiO_=C_XW7~!zU6L_I%$NH;rO%Zlcdp{ku^}s|V z8bR#!&iLTGktF=UV>7vI@r47yFG$$InwYVc(B+Dnx0!O_j%@AU4c>dm`+gZ0?1Nxm zuZuuOH{d$-PDzN8`0_>FfwjH};JrGTi*?Al%o5S^LoMwHJZ zWWcB&k`1Y7QLL;Bk+-}bPusF4O9U!Q65UR@6A@eB12(qa?@>QD+v~cJusd8cP+-&# ztu{mv>10`y;3KZcXA@KWLQYBLZ=<{pt=*c4We9B8vwjp!A-?rp^%>BXz)Is6tH}vZ zM|N?`05&^JFyT>A{tr^zpkO>XVd)o%z?;m(R1*f9N|BbvBo)Xxj)Lc&*svNnX!YfV z1EjhI?N^^P4gZHjW+wztykyPvNu^!B=u>- zjkj!I7d0);55(k@Z~T!CCQ_YR%Fq2;z$pBO=;GwB0tV9W0>%VTz-atkz)<~Nz!3O< zi7r3^(FLA1S%lVa-r_UvPTNkPxkh-$xbQEMyZ4@hPJen3IX4P?&Frs2QpP2foXo zebU5mkpriP2()EQQ-OM$(Dg_`Q&?9c88mYsCN1Q(f5=7hD1nq#(eec^LUgBP3)xP}Tx_a|L&Mo7uO^JB^xVjWMLgvXC zRrdP#Au@c%NXFBQ^L8bDB<08W(wUm`k|q-`u{1J;l=DkX7MRn^OYxbq&J4;vCFYo)y8M`xLeJyR9B@*RcaCnn z4frz;7K~O2*M88SJ@I_4$+Jp(o$hNPXK4o=LpaG;(RH` z!6p2YIZFJ)7+~iB`2oA3CS#mxyCcA;rFMG8$H+9~UtF#G0+%5eaANCvxjpbgj_`qc z<-iwe=8Zp>f-NlZqd5wKl3c+7p)&-t7;p3pF(NI?TS*R<*#ssIV+MQw3AP#RW71#-#GdVlu73 z6A9&Wo=8Dq3yd27&Dn#V*&_Jw}@j3T5JDswP;;$Is7g;OFkz*-a$`bY>N%#-WGr1 zUbJOv!4-t4)8PHgD3vR z4zQztV+R}Bm)+ofdNDDFFtO_DCkiwwt%TKT?P-X9eyZjbKmXxpWQY4F?7*eCovNin zNN%=ogMEWr;$q|_NWeRzG9p>+7Vr(c^?trkJZqU>UHfr5h51X0Zokjgtnygm@aU{1 z&v_znTDJxWy`R-;5h{)!bJ^0~3J`CVr=d_h*j$~ZJ{EpV|I-SYYyIa|$ilVdEVkGj zuUq@t+G&O4%jsFWf%l<>xwreWi6byw_)p3A?0)Pjef6wu&Dc>$Ey_?hYe!8ask5E1 zn1hhf1@VL2xQcgYwD(gdemc_n)6>?%wsDi)D|3HjY60)RTQLnf2K!2j1L7MS>5WVT|psYQ{MV#+V1x1&j4uh5T@4{$6-eD)sS?tu8(-SV#W`y`Sqa|_Gglhnsx0KY zmZ=pQ0b{8QZhzRH!*o4_-*p%zs+=t^GQW2h2VW^ahnp#*ngtt;nlg9#TNy+PD1-E? z6)=bJdzbp6_NBekUh)~b5e3R1L@zZ!8KjCO@5p$$gW`7?B<*iy5QMwG${-&HNas+O z-r*N5hyE^uaFzX|4ALX35eAe&yjcHM2H7DZ-hDP%8jXQD>`Rggoi6gw4d>~&#~;de zjE+gf{meGyF8)&HVG_Mb;qu;TASlV!FiO2v`3IfW-(>^%w7+Eo>g<2X2G*?E1eAYx z8nITL8!WX91|LiWn*Nn~S#1&(%MTSEH|{~C^`~`5UfUqe2=~M*CTcN4f3-pORhW|T zN6!1B!0>AAxGDJ3!Mjp*1u>1BHy_a6HY@u9gg`ooT_&7Q;I!aia8pwrt)|Hd?^G@C zFla;1`HeMMSlN!&UP~=P4a7YUP7R7#9)$J z4oGW|0DAI}+@B_h&WG!;P(t}epb2th$dj5M-19oJuyO)_^+KcIuPBq-8UkV$4mvCV zamoCQG}0)!M;%vC4azB0<~NvxD9X!aI$1D0XdQ` z^%39-I4b|n74(h0as|reKuG=tKA_<5#&wYL_xx(u%bLgrLR9I;7jA4V*-GIfA{k2){w^+X zEUAyqJg*k4Oal5?C{@~$<4sg@9OP|I$hPw#IpKa&5>Hx8+HO@!mp8|B1FoY+)W3HG z4F3y9fEJ5>auhn)2t0(9>MNzOmQ9x{oM)n8Y7Ya7(?PFDQYL2te7#J)B>qUIVUghD zIAHZaLib4oWb3OF=fnq%fs#q+O3nGHR5h^f`}O3x4Z=Zq!qv*C_wR%^fg%B52yme> z{m=XW>6nugm8TQU<>^G>G#ugN)T3%Zg7XAMg+vto}u3GuU$t9ZwwqoAvM zKXc13#a2ra7M3aPT2NkAD!044v^iPpl}ysl5fl6%#z>sC6I(}`!n3yU_gIP!JPe`m z2JZ9VnoeZ<ecxCunc&4gSzefYfiv8Z8>G$Z*H63IL~p!YYR(wOlUP2Z8*zZsA*g(xT4x%?qBft5di4A3VY2AK89# zzL#FaLd~p8h`Bu-_CNb7`yZS^7QMAl)SY?$+*$r1J&Z;$7T1Ap=eC>C7AW$& zqy7c!SO25P9}aor!c<}&cvi5mt$REwwePCtD@wxCp5}>DN!CYKPKN@D2ueg)OOw}E zqq54pny)ZfLxD2T3P%H|3ywKT5ovOeZR3@3VtFeLKn%ilfSNz-!Cy81`oVJ@>|^$U zATEpeV-xH(`hsbzExn&T-DmASFCPp$f!f9}OceMUy^PUVTc}ymuOw6TO{`G8E8j>O zuk>(cOT5L$t{UgBe#PoBr$2LEGTWVXZSbTo`yOjEz$h!D;^>xZZ8Y622C>AK zjo%LbNaohZCsHCa^alwGC37<-9pgbFz0M|y#qRCCdxy*pS@f}MvT*o;+ND|VQ~1cN$L0^2wu+&o zIt1@_n`bNg_ZBvhHiF=mJEKVsgxx!92!-`;+n-hg5lVF_OP^@fp1ekLvq%UFV4;JSUi1<@3}@}QZ{6&A$ZZ_-)xFwO?D_Je*7SRi ztRkwf=XtD|o)oR^__%$-;rCu9Z7q_MdfFzD z=?P1!!}KlEhZUWzx}(L#C)G}>e6@BzcX2o0@8GZjeWZO5(CYs~0AP_xnLY1sEH~aC zC2889-L60Xe6)SpPDgm)b${a5@`uWzW_$()`2@$_zs$jS`gN=fhn}!H8tAJnV>>-Q zQ-$t9X?Jm!;K1j+<#?%h$<*3^RK`rmi$Q^xeF=!u)D6hHj;yINgJecbROfrR+_Hs- z^rws@bUisUeoj=7yixyk_4$TSaOKMhWh?KR0oHTtt^e%-2X0ouV;e|*kqUPD>TcEo zVB+V`Av`)GxOc99w(aB6xeKSgepx#mD|oTpUY~vFY`*9i;>_YFJp18v{W5l%+a8Ei z{_Nex>T@sHbT~Ba?S1*Y4qQfCdyrl{Ub?qKPhJ)Np!jn(3@c}f(#XL-lVKKD27L?h ztKBF~GsLPF_1C2lL9G0CS> zZBwFQ#gZ+R;#B2|OD}Hp-QPu+Q1t3)2Aq&*f)387pkF=HDLiIw5}=fmuvZ#Dv}PLJ zwGtk<(G*W_)#&FSAWvi*!sR7OXvSng7ZQy7PLR8KX384=(p_Cf^`G!TN^nvG;?QjqMxfRER#EX>vT@_i?phw%cqZSlw+B(<qTnnc#7H%|813YFF?FsjBk+_=;%2NcRozXDM}c8Jdoh_7n=@ zti*vy3F$|;Nf(Z4J?ubWkMBUVLooT~$`PzQ2?WUnL%s4?d7N`yl(UsjiN>`eyBPA% z_B)&$3A34+f0&SPNOw*~IPUOM!J53y_d6A*+2k^j?0K%dWjZrm9O+UUmC3Q-#{7~7 z(?~VLgjP?zu9bOn1Kc8(bJmQ7N0EwF_&xToA0m5TM`fN6o|||#g!?uEn=-QeYC}i} z88_MwSRN$Ngugq|Mh<54IjEQc5;|xbl*9Rp6AB&gE^bblnGCbCRQ1zGjXS#sMmPg3 zO3hIZGyzJL4fW);?lF&mpBtdAeO{kvm27XDhj~aQID`)nQg^?G0dss!t`u78m_xK* zCGBC}t)*4E&wZNT$<{qYv?Mm-E_J>yl>EK+4jsMcMiO+OG=!aaZIgZ4*Or}wKO4CC zF(DrjG-7fx!pz(yeqS2XOPRKX7VcXSv%%sT=SuRz>lz;|9JSFY{NT-(01P_y^sm|U z{uU-H6Y`!}-y$T*u_c7{qNN;$h@qTl-+*c%jKVA%}O0SVz5XR3X}wn zaYl|a#P-hawgm(BZgvf0wc61I*cfjWaIH6oQHq;J1IXv=FOfIAGm1S&Pr#rEQQQyW zGU)5UkeO*{(gL0A=lTbWr0fL7LjZv#E(VOkY4RwL6PY*4N@akZcVCcMV*WLnnJMa6 z>?l)de%W|GDKrbf;9ns=IV23KdB1H973^r9BTg@`#a0M2gu{ay7>Mh5B-Fe*6&HeJ z9^3G1WZORF$tZy~aQlQ4QcnMv$S^|#$caK<#sov)j7o1qzQWPGH*a7`h|LE4{oquQ z=HJ9V0YW*r0^V=!k<&3!kON+%U3njBG_KY2>tp6mjuJ44qR>z_^1S+Eg}xMTQ1dlS zT((e1;78oqvEAVQS|@inHi4J=kpFcmQwsV1EJR}o>d58}j|MaAZGrtAIe9*cq{tMq z4G?Mrm(B1@w(p|q<%(}@h@wj??M8EqykxNZ|(=IB{4>rXkHb9K4@rQ6=yzedO(eDGE5UL z($6rvTt`Ri5&7BpFBhpFSuDFJmv-t?XO?|><$dNbeCprukHnN&aQVqq5X=wDnX8i2 ze^!zu`TJ&+Dz{dDgj3atEpkL1C@!E*PeRMGPg z=Dm+>Jm5;~2@Ub_K!VHCLBjxD4FN{-dc2$HUPtmICEolzkGJ8zuo_(k+;OZ-DXy9p zPnksl8+6Rd04BI#hK+I(sv`p# z=$64iQm8jZ&Ux=pp3d4;Et!dau6Omq?)SS)NCz=}Mp%!~K_6IWIeS@JR1y{PJ+md6 z%s?5%&LuYJn#Z_koLyupv_k|ji~gY3Jts}Y^eK80+;YM$i_i6nM=DqBFdP9izm9gS zR<#fg%J?8acYoLJbKce`+%6X6G}H#+d+S&{zJ88|RdNddVME;U1=qNDII81~4on-? zx;@=aw?i{+X-C*RanI7_nH8e2puMLWrwnS7us0oE*Zmax56-Wk0IHdIuFWtRiODr| z6#D33Z56POC&zRjel>^TD2Kdm{`C!~nMi83J^L+5$l=!q?U=cDnYL6-=l7LT(tVue z#1IfT3J;kLWO>T=o3kSTC?EiU0`?{A>^ai#RL#IX-gudcT51Hy@vzt`z>h~08Qq@i zr~~{sW|bq=D=0u`P`x&8OtXEJ#N9YM3h?7_-P0w}Gq_-2j+aXuS2otV06z|o9m-{O zY8Zk}sAI7Y?Bm^Xl@#C#BuD`Jc=+OCA$5GdplXGUoM{f|xs@=ajGE?v2}y_=QZ#bUW#$OsauP*x2uZ^Cect-p6Y-0=#GT5qOg#1X8oz zOhV0daQ#d8e$! zfRL6frR1Rg%8z&XAYvL9zT|&~gshvfg$PIfz2gq{XUDy{hUs<3U11+qcM&_vpRH(} zP{k5{L8z9epkl}s1X!D`mrM|yOAiKdQpZLPBNi$n`m(3vV4lNflt0PhM}~-dOB5#} z?hle33Gm~~pFGCfm{5sYUOoM2?x}U~ORdevacAnqek*I-@G&OfBDz`D_fkvjauEE^ z>re|cC`vZb$eOu0&_>H7Sq_T5Zf3hOr zw&7Av3Q|KXHDs4U(3kIAiVeW@s4MZVUBMlSh6AayHiY`S3bw1E!g^96&3jA7Sno{^ zO^t8nP~X3)%o!0V!W9v_v}(b)LK=>gH{Qq-=Smke;M%Ac#MlMO@!Xd&cW~M4c^j4* zKWV=5xZ^%7zKN7;5E8kupmM@KwS-2Zda>2h!*Z3lhbjI3?1;5=u-F+JYLGy=v)-q1 z?~H3txOBLVq<0RVq}AFsH{o0ZYJ4QNN(;>WbHL$)rC_M{ zZMvlX4Wpu8lpJe|YS8T@Zci4%m>*a6>e;Reb|Kg)#@=F+!fGuY!7btf<*d)X|7wcd z?I~~Om>blxpnORtZ(+*)+#LQBV{~<&Ywj~s7jCQmGOtw7WB4JC9r}`zu0f_#do|hM zf|`>{!C6jWsDO$3h#I$m0nf600JPoh7qp4wgYOZ6D=QNvU!NvCTQSF$92-#J%Vk0j z+T2Vr>mIm*T1xJoEIKWY2W5nWL4H(2o|O9yj{Q2Tn3Rf%S-FUI>f@ee>K={y6+yhn zw(X2CQhpl7U^o!tlEs&3P^k#n0HI$_HcgmBGWi}JkAS6OAgn#iI-w%BT;X z6tGHz9F*ehx10I= zhS74EH#tvI3XOwO*@Dye#j}uyF^u#co%do)Ig}mQ{0-q-s&f>Cb<}7N%UhKcyl@w7 z+v25uT4mHFlm+hB4T*FxESGD3-K8ao^5tr1@mc*J)$QZE&1D$7*1 z99j5227k(QoKyX>eQu@mlfJk>b4SI!!Tr3i@G?~KY`w|RZE%S?=y5-HOK8)i_z~}` zM>za_7175=9)snP2v7TF91lWu6^hMEf=?Uks>lVcd3au@Zr57(+{>h2x$PHqbMaz= z-_q%6Ce{D?K}S#EPLoPr=r9;vcJqW*oyv-jh?oh@Isdj(+aOU}jI$<-?mHoXTO_ns zX_7G1i+#MiqaWI}y7q#)s%w)>()%Hw(=Ww~#I1ElNkHknw08aVkzv21wUv~RsD}l2 zIrkH075n8U0Kj{^5W|k~{H5Cdi{ab)Q=j{FC}%#Hhqot|@7lo|JhOE-5Tsgtv!9!U zONlWT!dnr=XJ5tPhWdWeQK_?e>XH=ePoziH_^s4Ka=EI!N3%)F&!;``_Kft{m?tCB1b z`z_70Y3KqDKE0?NO{9JV>M5d&DR@WNeo@86*gCk!H74mcKZOz0klNH<<@MHE3MyJd zS1f+hg$Ag|M(59`A5;jdI&;o)P1`0tU|bMfg#AqRyb(J*Q-NzRFoW>&L%;LoMsRI0 ztFv}~J(t}@2mubuE7`N+t$C^Uae#oZz5=JYfGE_BT79^3<5^^lg@QHI0Y3M_!{+$8 zqBQ9f6`bt5!J>tHZ;_!g29b9UlA0QOp0r(fzzm4Te z`hQn!OK<;<Gx#b!knr()Z-ZL5-0oQiGRwr$%sDz>ftr2oCTSD#*cjdk`oXN>&? zl4s;alHa_qdCeydD9<|2p(z`fG)zDMO>$cNy@X)MNEGGW*Rw7}|((l=4QuQ!c%s^lskqE-Hwnqb0r} zS$TOm%In~_GmgZ_O6*4*czp{2uA0Oo_Ec%)?-vmW75jA}d+l%8$9Ymt-xfwn&MnWF z0xe}0T9XWXEb@nmr?JudZQMt{Vt9NUhImAch5HZS&gYMr0sGP~!L-b;(s6$F6@te# zdaHoArE)i16C0%=Wgf`CoyGoV*ptL*Ks|cp>kTw4dO+8Bw&2;3*Ol*HSq^{S1q6WaQ{|~el=%$6a4iQXIAY&`iz=WDIHm);cf3ntA7m@yE`b=-3G7zV*kpE59kBJplOjPKJ12x3@RfSx_?qM$96@X11 zBF#aGd^&^_A&WhaRLftT-3SS^hN{@4SRTO)1QwtMs3%irBg3ckygbA2KbNd4%6|&o zw^sq*;obSE;wz2&*r<^rf3g1h8{h z-f2(&#m!iB@cXPA5fqe4DX~ zR2fixS`ZLvxP3Gjg(Q;9cDH}RA`_jsZ69fVHP80Pk7Nx}173AXrnq-OpCM0`z8OVX zc+gqdYM?jT@Ln2n@^Dt+m;j(%GgU*eoODwbFvUYt+IcxNlxPNJ=up%PDz8!`e)cIw zaw%ip9Dqu0b5ZP?fP-MiCr%+yE{5To3hLt|ybxzH2ATx~F1jHd&PMoP_+`tX&p+0lffp#Zt&qVlqnQUv=& znZv&i|FK;Y*HCnVg9$s=tJ1R9SIT7b`6%3#wr`Yuw+VO@?vSK+Bvp^Rx0w3bg~E~$ zvDKMUm#!rCG&8PC6^^6;=Rz+{+s~RSH(#PoeYLreJ3e` zh~mKdb-)0r5V+NiR|&a!YUP)usf^y0I8<%aA;<=WPYzsxUskF+s~s)AqsWNISnBQn z_VSO(D*JL~SwxW4^}rHkIvHdfHjO~LbrQn5d2E@azzPXeJH$i-5XhlmG!K0WSUiqhq^ zv9zoCabD2pAlOr8I%kzE=of|u9FxQ5f_9G=<_AsEX}i(l69N6_W$fqHfTSq{W5vF< zAlNE*50F&s3sU}od% z@j0tA#i$GLdP!@q8gG=Bm#&2c02?5RjB`mw_xOG}TZ?*p#}k1w>uXKj3>*nPI~!-LxP#=90DYVZ z=GXabz>rpam~gj$B^&l{rNIDCSO!o`^WGpeKq9>Gph^nR$7!iyk}f~VY1&;)a8~@> zCn^PX0O;djDl83|ex8x)%PTvSseZ?Dji^wJOOOCHAwim3o39OsL#EC0?O!_bEKc_Z zroPkQ^Yt$YM-BG@%G8@Pp-``&`Wh4;o;lmhufhzmiw}F;IH-sP$~;vTQCw<=C-ER8 zeipqKu*!4$%0 zsR8P64Y@i)tvSXGEoM(}#uS%}q;4p&^16g-GXq>H-#-uyUdjnagpa-0H<)V^;0Z9}p;1(j+!BQC@_AHF%sUQjH}Awt zEhM}nY`hQJa0xW_4B-@-cA$4sZ74gOS7sf=LSCdZ6!%3b+G(KQ+bba+vF$yn(dH>a z-xa?TUtxBwn0sEZCkF!k>2CD*09ftSgv|m5-0+tZU2Dez%d4a7P9oFRP8mMi*W0TkWjB zOMYJz-!~VY+Se(iMpLLKz>=k7LKp$cxS${F(zW9B{cmezRa*T@ATFMxMMhE+qwZb> z`)8~BDzCY{4}2F_ule$@{ zE4e()JrLOm$54?9eH&2cf7WBZ32%H3BVVkZ6!F5KS;0xjcKqgiV9Ru8+1)|y3TNb5^_8s&LXp7n_Vz>;Tg|&O#JoKe^F53E!ds@U zCP`jrecpm|Mt*|wa}b1DlJb4 z9qLFa59wNjTxi=2Gp7liCBBKLmyWBF-J%x zGJuQQYqQGBD=X$IR;(H9I=xVystz|(1NB)SQIU&oJ(oq?P%O&g0S!f4$=YgVV7Lj> zMkx&-Xd4}E{wNhtT&EW|Zujko)3Z{0s2hPn<0}wQ)Fu{tfSd5?NsiA*R;YZlN=lWX zq4ug&C)e6iUH2Mf+_3clo%@)dM?;>;mb-e+$nPfi{r{ z?p~lK4~QA^8;H~n@aTfASc>rM<(wizTJS-++1&e?*?2s#;64PbTs$oO1Srn5j8NT2 z1vxjV^)^>rAGPL{mmVfX`n`*QUdGM4J=Qm=@)nz-;6~{)@+7^{6E~J-hUNrYvdlwG zbHit($U6G$>T{-tI2(l>(^ooYo>^eDHM$i>u9a`diq!EB>sZh^O^X={-k5&N%;&J~ zVWZedGMxR6n>SOmv+@izwzx=Kg|r0qqHxE{Y<8FN+dzW`rN~N`F+k|K&MMk%n&PV| z94*iK6Il&BSwH9nD`NFReuG4os$LltLi7~@1V)Rmk9OZpKK3yz@7F1>7N0c^B0jQJ zDL*XW0ey-+D!N8;a7xRRqb+8nO2YQHmwE?SzbZBpE%&`7WoaZW?QPEkH=7$*?P`u$ z*-rJ~iGkEIW;u7=uNBK0uzVxF9&hJ}hBd0r21CW#f zfhJEMN4S@MB;{O}x>J;l^z~*EaPL7sG8wiK6tPF>1vq93;vBs~H6Df!uf5E- z1m5-4KwxCA3~Sja9HDmI_3Wmx?h9V*yPAA9xg#Z%}n$wa*(P5?o+ilgRAq^U^Bt6q+4 z22G{cafP&9X(sP=y@$bui1U9FV=-jLCSEtP*4jefc{rDNJh;jZ_5% zY^;uLT&Fasb6S)dmD-o?9j62qkY6q^MicFb1=ok0=&@)cCWQAah%>6baX4R#^?&-B)QG6SnUw=xwh`X z5PkPJFK63dl-^`g^o#UVk$=it7xsL7%z=fAgksW`QgVU1%Jt9a6H4|9`v%mmaS|4Z zD5n>RC~n-uGQoSo+v3$@>7^F!(TI}}4-}3Lhfa$VhnGUJyBl+hZR1D>SYcChsP!|h zv~1ef1d{C$%I^omKUR%%wj(>mE^;W0fXSzXc=ux%!ren}oQKbqc zM(=_D^~Qe`n0W=wp(|6w^!FGS<5xU>1Ke}D3)INwkFk%pGyVHwEI7zO-&mXBhvCv! z?1wGn*Oyy{MzZ<}Z4uI`@FmwX{S(R__?W)$1luHiwuJMJQaOIoG`i6u^^2CXhp|_z zaOmq`7K6*y@Y!1JV{UA!Ap1hJ%)e{XB-EqZS~`Xzu)oq43|juJFx)?tnHgIw;9-C(}M2u3SjM$l2l4b@Ng`m|q(zS3D`gzem08;|&3RhLi0v4fAX8Dg{gdTMcsgO_3zyl(X}<-#g$7 zo-CV%AQd1U{Sh+^Wh`$qN;%>}a+bC=LR_5u{G9}oVvCamaRZmrH=9Bv@aOp@_a*mN z_rBJBQGZk5UqXGK;H!$Bw3*;JsoGOJw#FG;dH2GFr*W`{0*!EkL~G$!*vMGep_gDHxN*6eBj`Y$r6MnLY_C;S>^_X(naQ8M*kD2 zb-FYF)fUO7g!?yD>wgbwo!8T=UK`yvd!&`Wmm@!e{bpPL{q_}iN%ZSL(dt99F4!y{ z#%%Wje5$8sn5X#TAs}^)2@ydD^Pb@$Fj7V*Ab%s;Hmp~qOvKdHU1ovs?cQnUihTcl z{fPJ?p$7EAv9#>g#IgjK{`@DZ^>7s{66tXX(Krp{0BsMRh2j9ikkg8T0#LNJ1u7YD z6?Z!AZUPjo8@L{i2QTP&nM*IXks^zhTj-j2OPMjeWXdm=THLbh7gxY?y)f?le&||L z(W(URKt>8_FLCpn1bcA^BOQG3U}_i`G2asM_rHCUPt&>wNLrsY;>dJ6%!Db9vpC7b zNAOO}+ul@~XGeRboQ)7`65Sz)bu8q^Ua~sxd3rer)rDFNdSD!R`Y)ZhrtTEw3;T^a z1+nq7+Go*4X~JuW`4FW!GC+-KTs<=FJ>M(#)MIe)*2QDok+CTzUB5uaT|og}nuS%e z$)yHp85)Z1ANLRLnSZvZ$&N9})v3t}u~F&@qzUixFL9XK#ptJ|6y-_$d2odA{T4rI zfwZpjN1*~1RO8Crt7j%PKN>v#x#TV+j2YviF=LQuiZ-u=(kgM*Hf0tTm`TlbjbM~9 zcbhZgPI}qCz|$H7mJijk^eSJ%55?d7Qux(EoazKjWj*1SpFkZFefBZb>TgHRR8^WV z0d+byaQw|o$rl%PZ)Hg@^tO=F#k-<|)QjwB)5CoD3=7ebztUJ2&{(rkc77~xFEoE4 zE^MZ0?G#s*X51Z_c_otu7=P`ZD08#_z^(jaZ6uUzM)4|pY@Y62_-r~&YiVH>F&{By zEazuXK?lEj+OPAu!W~H^vZlW_aj+UXX>A2USrD~fjC>MT!qLf-43~D>OLZ@q7+(q&!ILoK^dix;o09g>D~#vHxI82I(BRMRVLI zDuWD*w&g5-+E2s8>d3A{dHQ>h+STv+A@i8a(j7$X=tUw82vR&j`y)jAC#|TP zE8+uzK5it>tc=lFFTLE=yuj?mCzHQ&smsZ2bC!kHGD`~!`P{fD3!dH20nn@rXPv(+x;$b;1V&W^LG@5u{4lpj8{C=|@YO=L8OIz9w}n z@Y$(@Z=*v?BFbjpME>zvI&RO|_Hh+Wk2v;?DnR6Q7plQ54r%@$qFM{V#T77wAZZs9 zqS0V>^9X;TTCtKD{@pY<&W9gb^o`O3UUkamWN*P>(H|8-`Qcd$j##K)rr>8;Ut?lw z=5#5rK%xruqQ3__=By(CK9eWG4IsjurhV2-oG)v?ZuzoR;ui(SC?y_?8D%Puwf5i; z<31!k)P%n`rx&+7HmC&tej|V=LlV%R!Z!%6_BGIH$Cjwgtk-Xrj+X@4T2a~?*!5qj zEqBf6jt8IXYfm{0742V;9$&!J%EscsFaVW%vejq zMi~xf2Oy*f3OE}8Cmhjp7yW{0BsHY46j154*E!bH!ua2iTfwuzR?bvI7A(b$z`?0N z<&;1ckgiGJ)uw-fC2Mk2BqmQ32?8cSSWOlc&jPAEEO{-}CG!>{LY^a2QTVux2C!f| z&;UXTzN#;sU5Zw;=5h78FHGU0!2ff8D?SiDYIOXsDA#Yi*(H6J_z%!C{qRz{Dc5Z# zUoWu2nku``M?g&{EEZf+CmuEnd{d|DaE+#msxCH14t+34+NC`<_qcFoubZCB$D%Ikg9%mPPx2Q;zf=aKy|mxK)^~fO zeSxozwTBkN>u}vbrp$;1FO*jRNa};Fp4aoPPB5)9Gl3To&kB{l;ft{Vp2#wEyfGQT=EFU;`{ ze#S|a@8jP*wpTrzir7&|$NW93oA^go=OirPCW+mzckhDSQhzY+7=dk9-) zS!5vMc!5t~t(~61RO@}S1K_^fp{TZZOOC&^I(KK;G~JF&Hs|Ft)lQH?Ll>#7I9y6! zm0+7>pczN6R83+VXXd1HAxRAd1h?P`^$E`BE&Y@$ACt13?wqMz*-cq0a$gL;k;AT+ zv}QemwU=L>!d6~+A|q5@kqm{UnIBn0q4^C6gX*iMsXA@pO7#47usd94-5Ew%sA_NI zB&lMh17I8HM%I=V4#-MNEFE#b#&#aJ#v-;l@hUeYFhlzUgamkFk3;EPShEIXy{ z6!Y4><2@8J|C!cK;{xOIPffrVvt8rbI9?=QNwH~j$vCO-5nKDYzPi(bP4@s-vmT!3 zHu_ROJ8-c4vx>n~GYc1vJ7Z79p!*^ekTCB3kSiN8D4fFE-gTR`#*xUtz)U%Ak6V>zvV-vR%rAAA1u)>=QX zY%PNWPjjaTT;83Yb;+;pl4=rOEBT-cg0ovlJ9@z5*6O>?Wz{}~+bvm2L6iCX{`BPH z3DTC2ch_sVpQv+^h5s)4gNUmVCIq@T<{X%l6cuPHmHctYne~Y#Q|>`VL=A7;jDY-EIs{Yg&5+r^6m;2 ziXr(a)7NHmztq6EzkSp5W$~i(Ez*hk@Z$9D!4wwHxjTlYcJgk=^3EoGiu7=_y=~}U zs3ngoa7h&7VZh1kdF&~karC!?*$ppnZ~Q+F=3J_>eztBjP>zit-rX5c_nA>erlsGb>SZ&Cy2Wmw?{ZAo@L>ok{I_!%VW(wVrcQaYb1;A zbDs@U>~b&Qlan8iSJ^r11n{*c?}u$QP|FhBpfQz9R_V+Pyar-zpJy{|$LHC+-J}*L$Tr%j@p(1}sic%;Hx-dsA3m?Nr+06O z&>*?T2|mO_#aMv$ER11gRk<6P8S>@BDYX;kmJhg99oU-01A0n|t2fGN`wsb1sTql+ ze4+)Icdrj+P9qtB1PxuuHgbDEGZ5~#N{ngLWz@I)JlWYZc{MdtXB`ftH6I#6nImB^6UhcU$wX! zr<~JQt`?K7f(6YEN4EM3Ab`|hz9KjzYI7SQMxsYa`A+N{ybzYsCrOIaG8pJoOrsn7 zhWYn0Y#$MWZJ6WoTTLQ4Ol1q=P7hsQp4`8L!WVwj06E&m%u_+^+tY)4#2-cHbjYJ)~&OfWo?8H7}8|Zdm*$lsyl+Js)?En%)!kvxde`*T859i+V5!}R+Zd6Iv?H(Jnpwc0#DyS2nZ_EPd8~eel=iP*Q!BH)y zc2$T|qf3&oVXDOhy{?_nB#9UGI;(YCkk?*Vse=u@PFX-CTS!8MJeAZbUB=G~l8#I8 z3A@C0mPx%enE<`6A9Zc#g8iyIe2AL3vQr=- zGZ__kD>8!N%k&aTAe{-e5&%BU2mgL96;w*yxtOkRDuY7el&>;Q7xZN zSAp5D!7Q8zGM`U*6-_T15d?{$Y}8x3S6JCsSarOmVWSKOW#9wL4gq#G{EJ{*?_(4i z;YdnU;b*yN)HB)N!Ax9*9oh(#0r@8r-ZAF3@X_H)Qfdk1mmQX6L!?6F)l0x|ruFA= zCJV5-3Sc<%mR6!BXB&zhFq}!lkS-TI2N=$rs3=~6)q7j=TB=JDEytaI$$}ygijqmL z7WSdGYLxVr}p*(6h z2*wn4YTC)>r@B!z2{pWhIyNY3nuu4Pk#w?W!#A3?dzWQGLuHDN&pi_pZY>GgDqvuK zEtISP``AWIUE+5~_Eyh9C*gP0&AI>-6hnZzaU~{7xZhue0ibRK1ecwC#U6`6By?H3 z;wy5TwbFov6p%6+WCxlM0B#tx-fOQFPJgJ{HIx16$f)+}cjbvJ4x2RCUsGlwLLsJt zk|`CIw}6708n##+Ypr*PPo1XKrTSCU97qnpISgg$>4Sol(tpntg!U<9`7@ah8kpEv+;TLq$KA6YxI4_W)l$5LUzihBKoG1aSew znIm7xY1A8K2+zvhCofys{)KF6H5OeT^Nc`AH9z>mRH+0CFC_+>0jt6uZE8YYp zM@k}4O9cfcr{hCr?98^t1btFkT^FM4Kp=iqVQ{?B)HBd#<$F+?7RlCE=g1*!F@!x! z3XR7516S8v*|V!0jtqF=o+i3vVQv3EuV!0bC&&2+#<7sImsbVuuIZMnBMH=> zf4h@ey`zQ2*5qrELk1 z_qw^{%#uyGY_Edm9|qUEBU>ZQfPR*cp@PYBkR-iVecN^6=kBh%Usk=8adEh9bmalB zeKnD3SAbpk`)#b1Y0Ee}6LQ2k@ z{XoelOw$yI-5@pEk~(q)8{NB~%pq~-v6w=>e>zCYutC^r+fpll)%?QfHuhV}9S6?o zehhX#GSjOe7y9U1X<|BV%}=t9@AHhI?%vzlY25Spob8>@tSFn&H@kewWG% z?-a9P3_O{^Vb=es4|!|%t<5@2n63wQ7h8T{b+F;;5%`z~H{xf{e7aag)T<25UeWk- zt~Hao>Aq`%#B&ZeLP5Dy)pi`PgIygE{E)R|s9EhO!Gbp4@}|au+~2)ASX$ny*%`lZ z)>!|vsC&-MjIy~zRhPJt^HL8chB^mSamn{Eg3H!ohOW55$g0p|6(y`q*06(aJym^v z-oj4JzR*UTo#IFBIPBh<1}?^b;wB!%GMdKnF+a%c(+!J@UxK-q@U>>6TPAoV-kfXr ziJB|-+_lMGqSWap_jhyb8rYJ%;{@XB6~}c{9MKJGXz>1&n&q;PvCb7x5`rTBmY&$d>UABYgNa| zsGhL|XS5dXG%Y-QQ=v7SyC0|}z9GLyw(AsADbO4H9B?#m4_?a8QbTj=xclAK>@;s@ z`J*ij<_f$?8jDn=q)X{mx}`jAyyd}$CR<&H@Nr1Ey1Q_REYrkE<9Sax`q!B4^g`Qe z-7UDME_mQoW9w$KENpgd4UgGtJ&7b(RH&z-g43gRx(M)H%tPVD1J6bTxRS->4)K++ zUxY7|(zi`uCDc%+IXCB$lpYJx*%R8}8STK)AIJ1}w+WacZ01j-^-+I9I%dvGFP|Hz zt(_`+N_^T+s+M)T8oKcvQTu8P&$$l2#Ij7l*qVU~#z0!?5TXhB>~bb0ZX~@M{~7gf zi;_`rk)2Xp?03(VPSpy-UhC(r_pY9fR7wu_C_{htJsQNud`4n{=@_p(;O=f@`%&zY zpF)kAc<1`2wzn%+4xLQdya`n)mSU{a!DaS*j50nMOcr3Sh)}CLzHW?r$U>89+9VoO+#o&!;IA0 z_#-$SxMuu9mBwMC6vsg)UDf&5eWxfU1Y4+;E#~To#;;_bzO&)^xyv}-PAX-fGYR5%5~CXB~LcP{Y5?aT_Uh+ ze=4uFPdyIeH`JO{`?iB)h1-_Jy=PjQ4Uvu$PvHIa*aXpZE6quqlDTu!l*OHcRg8vC zJ6H5^$en}F#*n&`A~u&G$FlgxJmaPGjkFFpo8{E?t#f({q|>_YCzF`- zHr9DdkV*>+Cn5$%o`=9_Oq+?hKNX_U5|*^gc6-7Vzve87RIGPLT8(e3qP1CON?XUi z$-3S#2S6u!KMf-Jd;`I~9%0Sf5kLp36l-GI@N~;Ln{j39vI0|%1F_J8A)@(SRARm3 z?G;w)ik&^LkvO#yqY{4Pa1?9Eu(jc8SjCfqn$qy=qlp752fwgpXTE&8?!o2QimYtr zhmwL#vO`K~hNnCwlgHJ15JH)C_v9IFj?K2i#+iTh==t;^7Gi>HJB>GmNNi=da=UZk(=LdtzG5)w%-? zz|H>XMhBX+r7$(kQGMU~YheTD5OXMdu6xMF1h{={EU>S{J&tUgHf8K_I+yQGe%Qa@ zbv%W&uDbo6^YpD=nqndd8RdlDFJhitnCbt~@vHGgFX`U}N&3j_>+QvQFoV)BPQjvuCG#JqK6E zjk@Jr1y8_=Q2NljC*H|yhhjTfAT|nssIT+3*ol^wpv;*khiGk;g&1 zP@Nd@m50~vFxv%s);@lRhd{{Ep?Y|P`q-{~TMXZ#fHB-9iY~jn4;Fc4;%8eY`~;}S z{4l)=kE+Sdl7#gAa5A`uN?8+|WkgSv@Q=K~*N<$ht(5iK(ua+e0eKT8D$Z2u9E(jt zcEfibl@&aF4K^zc9;wTC_kHZot4nX+qMGPrSPe&9FS#LWI4wuo7L zm#y!7I4*Nfhm0gbfM~E84;}vp*W)){%-*>0!41yRcAyRko~(%be$uV>I_ofpI+Z z+%)-H_0;epo3vQiZo?n0#S3SU2l@c9PTcdOh6K=DEB=2uw+3yY`z7Slx-}op z+o8RfE`!Yfvvo@V=s#PxKvl&5d+S!$2Ab!;lxorACa1i^6AZ#yerJ|qcV+8Z<5<3V z0eo9L&vIx!)`y|s^|vyj$@4-`ClhjL3#Vzl`QM&LKP$BvoUXgoosmyE>`lu$SCjt| zM-RG1I(l5U^H-Kb=U^ZhYLU!P5(+V_9>I41BT*c<{e-&mjbEGs|KSYdB;R1E*D|1d zdymBiD(_By_*Z%zJocGhE2hDR#MHdEVA*`slP>O81=%BPh5T3bTRXV_qJDcX^Y{Ag zc>WHX>X6{(#Z7#8r$zSwJT@%5=i$P{Uh9&s%Yp`dQCJ`ug*+oWos=1UTrzNo&0qD~ z&CmL+8F+XX{>YIXXr1zBeht-@f>V@KNCI-~Hhl)&ku9~yy#&g9lf3M+EBtu?n14LU% zKd$6IMO#-5|E%Fo%MG=a5K&3l@MK7pp$`z0C#69|UC0!?rCEzXKwtW**xt3^-MQaz zDK;1USOEGW)2sPXJMxc4?<{V7(~L2xgaP=dQlXydC_WY@%P)m* zrd2y~(2r*WMOH!R2GE&zdgjr7B#hJ==w9Ftoa z5%7C)Q1072?Aa1LAL{pNF9~s0>~(iV4ihCD^b`9BI3`o@PjJloKY?R1ssFFQF;Vzt znEGEM#1MvR@{{uU_%mQwihm+4 z(OoFOsO%qPKZ43PD6xJN z1|c`&k|G3&8?4nOY=(OY2cJ#f+88twBL+3>MAV&OQlok< zolzgQaO@mbQ~^f>o^UeB%Szm5e@2X+E_IL-r|GVQ$9opQgQ0^byUkTWP z90DL0EHt$kQ_>aK&rgL;{|(^yf+cd5`njO(vJU=JiC+{lg(QFYt0*I2$>@b$jN6dZ zP&3Nzm{#0wf2RcG<0(6c6uDP_JZr~?DxkOZstIwUPOs+(13wm;g|e^klA}**5F!sd3W?QN6 z4Dp#o)z6tlJt^b--S$OwRzS@X`5(G3m0#9D))?Pr_yyIFuTdJdDRrM{YO8)o9f^}> zTk0BvR164k5v`HoYGK z#VfjVWELV17Ff|Bc0o*f8oxM2%kgZcZGQx!qXIwSq4748P=K_c$`RZIe*9Du*O+sN z2!o)A1fobxRk7IEpY?)HwZCC66zc=NHHxX`n7*hT$mj)#zR0bqaJxMPmNx-#)tF9X zcq-&6NnqLwVDhLc99J$`5I92bnT5waC7e6(q38O&5@7dB%+Y)z-fMX3n2AeGz2XcH zKVhM0XUE{;o~ac12@@g}IDn9Ge#Vr;8yW#1K;7=BfrIp10RQeoQ~U=vCYrm`XV!I& zCp$0rqmCIDdqqLD4XKBUxW%h6B&*1moZyh;TLjM6AaJJ!94elDsb}qyI*h1i8(n>W zdjrnH|Adew7pnhz4cLA%H=VS6B7n``9*8zn^9HFwn%_G*G>k+PP;%ZIPF>`~`Yvu` z2}PE#Wt)-DuEmNWKzhnf6Ie@xnm7xT;Jp=B1v_Gsy0%5vP<{4;4pS3u)_GteH*O@$ zwIkgZ*yaQat)f+>V1G|>a4P#&#{BIUt~?YzR>~H1w%aQIw_n8}!oXh-!=)zfEj`3lLx+g?_#Km9A+5*!m<4vs&xKHCVecA= z%k#N6Wq)qp=tRea*r*G@z|aG<(N0eg0UE~cHhs)GSmu7 zm~nv@5`$X+o8g3fedpWF6@blfD%~U5U*1fBWL&>Jb5L>MfX?2!G!?KJj^Com=Zg`Q$<;V1q9%Y!#)L+^NEWHcwbXf>6v{KtM~RZERS% z+TZy1M{E&a!hw)Cn{3VmmJJz2H|fxKNhJ9Me6Q;85DhFgNr(iG8v}s$c%UG=Hba}_ zLlUI<0}vd*z(L6v^4d(-`Gu-Y%z?PVJCijO)4X6wlnHjEI7zlSC5KuOLz|09q5*Ej zJ1soFYP0*Q6@_E{VU<=^H+yPTYy#wv5w(JFbA;JD_wO<2{WwAkf z#f5XXdKS~dJ4y_CI|Guvzt-#ZmA%dqow$|7N(l^Al!e8fzLNcDb~eFNVZDi-_h!#k zmjzb=bp4y|k?F`w*_F$XV7Ww8D8xtey%~_9&Cie31V*4Srn>b{Z#(BEy1W)(kk)5+ zAc(q5Fz%8=5-7ib>KpAG{HmCW4+mxw^?g30iy!cUWh^x~E=dcV{v9pvX2@o^o(v`H zx& ziroxg&DIHj2?k6Fw!g?d*PmSzHAwuR1NYvvx%9Z~nNVD@ydxGh(=s zr^OQhY4nRrwz?jcOaZh5+i7*teY@`)f?$d78$G<@7x!RSNEa^gKR-7MZ$T^Lwdn5; zCMu}RhU7>ta5>N1F(C9F=4oel{Ug3zW&F-m=?fe&Z(se2j5_pJKAy(^5;Id;&{t|G z)Mhyb#fjv+I~BT4-^5Pc!K@&o@`dUrg+5ID)kG?SB}5gq0C4ssuzBKRbOBm zyT=_Tw^QY5ss)Lx;F@%$cC5|~Pm1Jl%ZV4Ffe-XW2c%h;b0gifrz$U(rhw!e>UtTW z(0~kbSnoX5=BzjvJ#JPHOS)G7>cxo2L`RguMKATLTpgJq_odZC#hzWH?i7n@J=yKb zzuk%_MqxP~<(VNpQ{9S|=4qzqAyo#9s09{##lDLyT^BMy(jqIJ(q*Zus|L}>0t2=yU(+PaHF(h9;hEH=YtsV*1>zqr z4|kku_3zGCw|Yj+b81*LA5)qy^ZQA6aIp*AKqXbMPZM_=2l|$ODkM9oSwE{VL-O8Y z;595y7j9n$tJZSwDY3#;4w!7l0Gid@Ttyv)+^>ork4JB-do79O)!=R)?us~Mr&JD} zy~UN$3f~0W2KkUYLGxJ<4A!T%F#G=oF#Y*VI;o*KM2Rl8<$AAK+SXegH!>ogP7k-% zAHdRqTg)bGxZbi}R=JqmY>PoO?jg@NCrTPj^Yxl(U5h0aF};_ye_)QGa@9vWB>feh zE>+Ceo=by4vj5dOte+5VIUHdB*;T|Pbi8^m1vCS6-i(3-IQo-HS(Rn&&6%Q8q9UR8{6AsxRa-px3d-T&?P&Z zw-fR3qK22IfA&E}FcU7&x0jT#Xz(G^LL56C8*wzz0G`7)c1U{(YAz9}hz03_8c(WZ z`USTqXOD6;Y}){dsr!GC_m*9CJ@~ff#@&LuJHg$81c%`6!QI^+V_;bRyWWS&v$#$O2!{||G=*h zN13D7bKI%l;a3-zj@{n8D8|=>pOhIoEKvLYM!%|yzIwUQ26wOVsMfzNgSue!7$lfC zyITwLFlAUoFthsHJEJ(84Y9lBjuA(z^ZW4r)@#3^X07X1Huh-$9Arv4avvQ_s{ zB2KR3^p^>E*VY!BDrDR`Uqjm?6D~!s$$@Sp2$-1UH?I3zt9EWNPQnA=Y~@JU@}XDFUAv!`(4T z?NLwv4VImF*u1jK@X)Wv=z4V!J@CrE=R<9v=hOGe#^n66M|;q_x@8-|IpgHy?0JK) zIRdg!DoOC2m7PTSe`jSkd1&4vm_`nGc;LTu)HFPq7Rd0iGZu+O+td9bHU2+cvs~738is+4tYb{w1WBBrrnC=2^EYmY?o{!BmrA-ii<+pd zW7CYOmy!;Vq5Zv7<6QqbCmb|#ZI1VS)_gjeWfIjvyvU%=6?T+onFQ1M#8&Ma_8Q6* zjRJ8r`iXbw=DB<3aZ&DQXI{I{_`k`dO-9=#Zg8Y_2)@tmFw!{w3B@ z+}*@(aPfjp-@I-({t?xo|3r1(p8~WLohUkev&Zf;*JF2b+EZXZgZ6Pkl`66qj?4C{z8$333GM`#Unr^3|#c$9hp%=%KvELvfU`ajLGa&BO=?DoGk%TQ>cvuV$W{WnP>S>WvFd|5*dt+ZwB0RrQ~1tR$YrdN0d=7p(*3qg2VJ)7pjwSBL)=uboA9hE0J* z2BUGscqBDoNG$pFK#QM;h2JT;vMS$2WuF$^l~ObQKEo=5-U|;!qKw#j*bP>CHe8Q6 z)^LNq_%tzdYwYX?78z{jC5e=#;a7%@jy~Sg%xST0s6@t@VInePEgKOEPI-54vprLY zWjm*w_nGz`mC43W+>SLCs7j&GgEhr4)g1U74j&-C#p);A#6gf5 zp0|XASubV$zwMKen7|7y6`%bFcv)pZ5hW{Gjr5k6|@+j6|3 zp05rwG7x%2jU1EkSZIm`La1t(ub(FY&v;FwRPzoadqm#ha!MoXAqxdwDt5Bnu~ErM zN?0K+hXX6o8Jm9oZzfkJNn5nwlGA{G;LSdl~lR-osvYUX1@OEIX~nqS#p&XaFW+|45-=Atv$yE&DIvEGXH( zfwMaDQK*T6)KKe11_EY|E-~=;?Oo+jqR#a};w-XBGBr`qnSJh&67zt{u>C>POoI05 zkCZxPZmF_h6qe&-$7vKOP?L!g{b!#$CU86ufk86AvC0wr4Z+9<7s$@`;bXTZs7%GP zKjXQs>|}TTZ1e$wGw^Wz`5(ya4uW50TA}v4v2n|LPm+q(|8{XDy>A#nHJP0wV6md( zB?b7ZMiBi?+COx`JwFFJlpAmQ{^CEvW_SJkI6o2T7Tcak^AR%l6*oz3a|H{D8wRDn zd~-QE4D>K7ke+95wb!}-Z?m&M3#0N9JKAU-1ON%z zRK6f>RYOg$t1=3o?( z&U}X21Wfw---HXu4eG(ipae43MP-!MJgJ zWs;gDs|L1t+eZQzRmy8V!-CM8FD%>h7{8BkgD|VQW{5+Ob}Gyk8eMq44A{ZO4hgNP zLkc?;M)>KI=g8Y`T8xY8&Q@*e_KXSyE-`*pc|DB2;hP)ECpJ`7>6dW!MoZLcWr?Is zdl)fApH?L#Fg=GBJ#TlqGdTpD&E=+)co!W0K#$4!QP;QpcZj#bQALQiBfN4l7vx9yJ2zAzJzg2pNUbW)L-!dxE!8fA_}{PA zx_*rp=wmtSBClhP|uUf(UaCaS$l?VlKs>w9ldToaHg%7KC z(d`hTkE%R0GwIWX5P>+4e%+0Lz@@#uqgc)lV*`eANrqf=xYqIsgYcfG$Y0eYf}i2O zF;ln@=~6sySIcy!UyW~@H&2(SbTm@vymW&3a~O~o&=0AwMM%x^EBDh1%`|M=kj0#S zC=f_DVuW1mp8>f_zmBe11HlL2Pc-i1`lgPlLm!OPL3z^dJl-39$`35N z?s{@*#9micR9G?BtY#=*$ef?e?tJb8NdiOXy(y*5Id*b_g}+|Cm%ES%nJ*voDG8?+ zwXt)cnwUR2);v8W*P$KSA){cf6VYqIitQ9`;@ZLJH3in{-rh{kR}+^-W7@i2mu3An zL(VEW==@`56@08U91MqI(5)itVouW^*xAuUGR3Tck&hTZ!sD}iR8axBpZ&;ELPLA~jgAsE+rkSY)KAQaIV`AZ@Ud4hl{_9` z@m=`asHL5a8G35M4M*@kE=f>?u}{L0s%pm?Gx^5T!z;+cdbyfjdk0ZRANT&tK6hxp zyvZ^>9#4fG-`I9kx(i>c>!ay|An6)ykmoCkN%MS1BMs=pg}IW#+1$-bWr=p%%f}~i zGZJa3CjGeONHoWJsKmYZ^TrR<)r-9E=M5PGr0%}hP4J^MIw$yy@X3Pf?JQpnj9vnWa?irW;}BU|YmTJnd9-PBU{ibaD22RO^0 z^WC}SU*;e=@uh;5S}5Gv%%Y$^>u!cY7U`B4Z^?Z&aQ?kjP5SlHUJ=OC%I6p`l;~D& zz(mt=jwlXF!^uED%!uGFQoQQr+T|~e2_tBmXZtvdO0C-zpS`f$a-eju(Ag0$B!==z zSx%zlNUeId)cEW3DFww73+@kbcqs>j)hyn%%6gTb)wUNOH@<5qYCdwU>tF)pOH*#? zK@+VS?8h%CR92|j#kyFlheQ$4pPCjdS)&1IqkjV zm))u}j8-3!#OVLB2d5&I*tgm{ZkCMMSh~M?uq=_DN5i5KmRCWQfI}SFJLhG=)PV7+ z>m@8>O(*mP{_#giU_}STJwIoyhxEy(m8VDC`mY?XXFPRR5JdH+nDcx6ZR$^^TR!*s zC*_5whvl3f7uE@(FB4|ZJJdKwNP{a#(rx+)oVeRDbv2~6mnF9A^x90i+(Vx00Vkfy zKh`{u%knQvEyDG`1vUQE2JQNECO~|suM9CXTjcAa#iqTh^LvJ=6?wx}dBa6JYjHjaoPCK@CChVmX{%Sa1@oMZMJant zN+i4TGjXFKcbLq2Qm5K1dQtHAojNzA*cUPIu0c=m9u6F@QU)M!9ER)P9?WZhmX8}+ zRH&bqS(UA!K>(hoKT=$}@=c0j zy#~AdBP!jwLur4OzI@ITJHOvTXY_@?@%Tf69LHK5xj{tB#K!mVt1~=;{ieew|IxyX z?AD|=97}}ydIWEiC3KnN=EC&A&DmLHpO~3n#xs#u>S`!vDqFT>i+T)&@?2dvHEVsr z;dED=>c#xW(Gbw|hyD5q`w+&w`)PadLaEN!5EpP!9SoG{>Do}BAl4^0G6 zwsh^?j>mqCX=|y&hEI?3m-U8*T+apxMiVCYQ((u&2CVLi|DCPw_xSYl8TWPfVytV~ zC#@a&o|9nu6G;3QLwDODjmdEWG{X<0ResuJW%~KT|!2m2Y_a zX3-3WYxW@IaSqufu$1FB*+OzTBM(^IUGEyGrc64_0xh~Z@(W9;WKEAQ`x*F#Y8TC{ z$N#mertZQR{2%{8jATsV%4okRO+t@Vo^X-oMi9lY< zq+s$d<87}6xW-5!;IXLWxSn(fw%MqR;tKj|Zkz!IUOtK-%tyabm)4m-?qK8exC5D4FVo4ZX&M!xa zV}+PY=UJloAX7)K<#{wDHOiybyAHw9bbpE+!GRydj975Ze0-bNxc~6gQ^HlV7%lLo z&_lIVMVX6BXq$V{JTqw?I`Qke{T;W9$=B3f#YY4QC3##+8{rdMIpnR3IrGKnRyOTxc0nhR1Y^|NnGN`$ zYaYdpf;TMpoYx*UMs=713xxRW)TpPsp>c{r@uV0Lo`|88lYzOV?@fu3PkE^WL?a+Z zBF;7^fX?kX5ifP1b6Zc!x|AH~+@3c3WbcF=0FT?;MliXsNe6RlpftnD?(aPayc+?0 z=L8)3*+p{=9S;GO)kHWn7{TIQU9;HW-+m|r`w5VpogGY~ag9Px(dZ~Y!$#QB41AOM z9>n4)5{kc-La58_u1$*sc-?PW+8nLW-ynW8l3-18aKADv%Rxs+8xP2DwFF*{h&VI$ zjaIB>17N`^BcJ!SSPPMD*`3OiXww0{N4^A(@shv}2DqWy(kOGCKrRd;@N$$P=V&h= zpmOPbSK>by#R9w>wXwJ}cV#E!Gl)uypj+Zg3y6SmBTTMXn@N5TQY`q%d28!$-;sn) zlgagj0P?EB!%pP zf^X-)nq-*4b0ai>ay0?u?>57qHDGb9OysfvUOY0{k=W%lVENe~05^how-g-8r4#_H z_C0QTq`gxAn%eJLW;Y0k{vfoZ!B2zpx$|fabwDx}Sr3Cs z0eCwCWV(li`meQOHX42aW%kr2Bv&gMqybvEtBD>|1g&`#*AiT!qF>t| zxuxw~wGFb@Q9-DTvPpbngJIPh-&`{CYK66T2Pfr_e#nf3Y@^#;V|M~ah+aQ`QFH^` zyuEMD?(iS0uipdUhsT-+kQd__f5mtINNN1;P+P z%bYxJ*eH;5j*tsn{moCxS@=W*W;Ov41Dr$1Egqd(SFnP|(^*-3l-;y_qe9tmt|idH z+zUAVW>=d-e!dHYMlL}dhecY`LIODLB&f70n%iAuAl(aWo;>z~L_TAnt5_z&DFD#* z^4#*Z}3>AZuTbZA`}jP7eX?i4u4QMZoDHxYEzHH9dFtCxnUkZIbt=!XN3H{g7T% zyFUG(Rgym>$(S^868lCYbNnxWMo; zw~4Cn$!tBP9Qn2~bN>{tk&eKhAnAV})kfTtoCR_RPr;#h8 z<7Z)jyF=l__QAsU-QlY=;C*)}01vVSPF=g7@(DHfeRt?L4Q}>sTvG-EpA-uYtGD86 zx6;KD^tH}dgZG|ar6`m0;Bbk5d|_6OTIPYGk`en{B-{@yTCDacF**bh`;~nNwhu!a z!5IrCsVDw>(PHaQ(V|vkApB3!!k?Rg-MFwk;?L~RczNdghVuUb-x?a{~X~iRFPCfZE509SULS>JhVu50G{{FVMZ0tMek0iN+a)Ox#rKoD6PopXtq*F(=TNJGbGE z4IKG=2nf|W129TftM^hUr3#wsNS1W#^kX2j6K7Jgd^|pV$tr*mLA3Dj!GJAPbDbk) zaXU6Kptw$o?N-;Td#L$UcHZ!bLcP_eQpPHGO)F-}ZLjtz1Q}fTN zX=VcctG%7JwulUhn~I-w&tB<3WiVaM*>I$f@wP-&^-I9@HC*?^ktyD41XoA@4Qr&Z zd*O3b+f$L}-7m3{&0laOrW<%V5t3}7ZbwroiR+{cpQxCM?a-sT0xDQ5@?lwx)?#;J zE}V+T%bHwl&sTVGue;W|(g|U?!DhBj;cv_0Ewj~FdYI1*A~C%$zI1=9@ATQC5&Hgm zGLOuGwBo|AF+!Z|q{`)(^>CfAP`AL9p-Of<_A-@5zB{EsP_~QmRC}Xm za}GLV97QVn$j^-$WSL&kr*ENG)~7G^#*yrqf@Mu=2b{e-vM?N++3TT+EI)P`{R4Y%qJ2Q(g$Q=_rM-5)Y@_Y$agz^|x z1XCDcNfqf?q@%Q{Q05M@X>vr^*+>f%oRzmgJf1oVr;~944)un6bcZ8InAX;dGK{jj zcH88IX^^8<)F1+WY5Q9akRe^zjt%Ue}Asp?PIE@kqT8R2b7pw zY+ra4uba#5(Mw0rH=Xt+3oZnWFC0eA3Da+L3Mt{f%VB*rsumBe2@@cnA4X+4&naxo zdc~bjs!71yLE3uMi%){;JX^z7Tlp>W{HtL1+)zg+d4WL%g)13_I{3LkCvAT9Xy;2E zXe`cO_XB0#0dU2$n~+lex`axX_{v;LiB9#F_r(SJ6pnv>uo+%M0sL~mo{53Obu^O#@O7TzQX*N8wF9ITq_vmo z=Xb)%{fX;crkbs;44>!giBGTST8NLS%P&?M0R!J?KmIYD4<)|MVFOL)X-Ch5;_o7} zGI{uV_*wjT_$7_8VI1KZZy(fM_mAjO^hgSUBnwj3u!s2k;E3&?1U|FN5r9cEL`>^8izB8nHQ|^2C7Ia;Kk9QExm?cq(b68 zmoDw}y1A!!VSo&m5V9>MnMD&$yiq>MDn}B2P3N4cKqvvCF8H;%G23enuJH{Un80&9 z4*7>d^VumRBN@E%xt#VcOI^l+V4#PuBt$qLmgEdZW>BbMXE!v6XUMIOz;#!x51=Ef z$!kB)qLhRA8M52yBz*=N%^o86HyQl=r>zlOXlbX!UK4$LlYLy~z|)^mTry;e4qMZYqJ6XoBm?C%H)q4;uYoBy zL7kbRd*iZ~OLl{dawQQf2R=(voE^>Vzx6wNIjkePC!MmX=f5?waT59SXG9Zr=SBQp zAPoa=6}ZSAk%vzzJa(p15Em3zH-*DZmjK;x8+P2>W6vV;7lv8lY1%FuIq!iZ7{4ea zJJ||PH;rj}!;^*S7#_p8-2*Fy!Y17|oW6MBTmIOZUxCcAs+-6^pWGtGvXL$YIn~Z= zY5gaKYc>N@xch%k;a_|eb)^*nJtDQ6W+4o0;;GPxMpUl~K90saQZf)+#Sii+VtxjW zl{t&JF;8wOVubOZ?~FjO*f8kk4Qf82;+Sh<-WY+1jN%`(yk2Md?@ATC49*I|Gg}_q zx(gTt)sQVj%FAyr*zVB1Ys>)}U}M@Q&os)ViQMUc{U*DgU;M+>1*$hJP2zS_z+X(uS}13 z3Xm(O(^7~GEal`@n0l7KQuR7AqnEkdaJGwtUMMi?x+cXfXakoIbcJ$YnfTkDfyegN zAA_w(0C6W2;~lV1R9kb2*>c zEi@FSnvP5U7J0fKbeuR40`%l)9SaX)mXiQ%Z6JT%Ol6M7@HakCk@*h#`;;|=-?*{* zE0PorAZlMexuD1{y9@?+2I$!2YB4yDV35?D)di@Ke{ZRL z8D8oZo+1LxcX3B3eNKNp(*Li?TPG%-SWe_$qqil5u+6?N>!A5E3DA!Y_!{WMGfBHJ zIBoiEw$$c$YzRdE`5ZyeJE(JeeWg4KLjfdBPR^P5orH!Go6FoEc7jtk|Vy~88fuI9B@ox&W)wi^!4 z{JfOA6QjGmsZQhu8geS)()-@QOgU2o%5Sc@?GXnxSl%gEkynt-c|JLvgy_iDx8ESm zFnEI$pY=Gg@WU%ZqC zw0MuI;a3p{3*IC$fxlsMp?4~nic_XJai_tN?_Wh(m!vGQ3`{}6Jzw2wo0g9(nG5v( zc+Yja*(Hb=?c=8)&8GA+c|C4E7}*uiMWg@}mj5n4vmGwKdzYVGzRS-5@A9*5p!^Ka z0C)cELrmAMcfu&pd;b4m1lKCRooRyjcPX6oTk!vs!p&%D&{)$%gK@3j&XLq>N!Fc% zhDN!Roq#7pg1jRgv=Om| zA`H##?+@{g&26yG@?T)7^G&DBI0eejd?8VbV=ig1w@nH1?#F^f3W3;M;6wN^UqC+l zod5**ivUF7FN}SrONpUKDd9@AZWQf&?i>>l8!k-&1(csbzst`O;=={~zRPAr5O9R- z>h_ES0+*QIyBmHtd^1DFMDN`VGjFFPC9SraNZQti&cC`F47h3to=+iB7$p=cg*fkf z2dQ`YnGFTA4wWdAw0q$gC_e-FBR?~E$L0or0y2zdOc-iC)sc~DaX(c!d@r|z z9t>eOT?4w$p%(^+kG?h2>=Qfc8qN@?BdYsQ0A{rH1&9IxcK&Ef4r3WG)4}ngBLZgr zwI0ZlS;ZirK>3--yZo%4A)H8{LDmMca{xgYl{guQ!|0Hp1U=lz1lf)JOB=K9q?KPdL@M$ufz_@nI+G^VV$LGbm zP40zQ-QTzA&ivw#x_9x6z?A<3_cC37kQOB-6sN5?Cb(`?_ckW5o^v)VWtZ_ombbN9VzqV zW9-=bcb0^tMjCSafz;pnsB0P7F+DT&^HDr^(X2uJp81ULpftr9H(F=Sw0jFrx`sXJ zIS;R06PA9@ulF%C13l`iiGhEb6Zu+$_aHwVA>^y}vOFzhFDd_VN}$7Ke-kI%t7#&~ zO%PyUY3@LGW=nPH9-)^@i*nP}T_}0KBpm+zl5qOZOTw>cp1Jo+0)O&YXmlShCv);I zdr-Ky^E3E5ooc$wzANeX5`oHLH5p3GG8`-eEx1#J^0ksgILA@$mm$=B$HG4rZ}0EM zHs>GW*Gf;O@lLcdKaw*_^uO(TbfV{mtsIoR)c#<2TOSEgn>B|M8}M(+PJW%9ctBg7 zwg1Xh^QubLJ+=J;Havgp@_pQ19#0pU{qEtM;m-v?_^%59;6~2-qUdqsmzZv<{(5r^ z`}F2);mR*t^{c6rfpyZzPej9}GHeS(J*qJUs3JcK!{dff(Jx~zx)VMuT(+~dbilPt z^n0$j*v|B>PmRWfo1Ky$3x&`b=OB&O&$x~EU zP(W}{h61^&HEGFU>`O)SNzP>R=e5KGN~Ck5ub4$_C6=VZgc@*b49Kmra(EMEecMx* zLmF4jL72MQ{qFMDvK4)YFE$$ecDvfm)2P8W?RifJry_?w*-~-2E3&IXA%|BBZ#g;7 z+vPVh()k~L95l_HrjscY^g157@aL>E*id~lQH-+Gv^R2nZC8+);QjTxlo z23gOLrI&6}@M+>C%Wxm2>})^|YbZ|sHo);6yT9&PEBVcx}(a(sHr|4Fp1jZVVm<1=YH##08}GR6>Yg47-;!WB!; zH!&p+>4+5PWT49H^R>Kpo2&Iq4sSXGjo?UJ7~CYurHlxMq-+UR`lX=M>zY=hBK<<1 zb$^2vI)-z+{14l8UnLS#nr>&9mWWu`F;N(O6*d(*cC5`u*w_wbmg0+o!0NsH;6;M$ z%H?c%egbJ!t!(C$ahna5>S`(9)+Q105Zq=jh;5;ZfO8MSR;Sa;0|0Sa8&Z*n#Ov2_ z0a!WX8X>DSHpE;0*3zjA&2a2t2G$ov$wp*ye4HClqn9*}0QatGjpm8HOVQ5!uQq&! zIIeF42z6Ok2O;Ml`RG5@X`vq<**^Bpr;e!aK~6?6iCD?HeD6DaecjMg{RZRlwp*Xn z9e#6Mx@O%=;1tM%s;f~kWZgia$&lZkXO@T8rd#Q1+iJ5U4`P*F6{R+P60nh>*D)Ka zzgD%T-je*MisCE3KfTJ%=1ppeK!~uGA-fQ%ZHIFH(ua9g`OtA6<$YOl+Tdje)X3}D zbe1K19fNR=zUKdAdM~0d!Tp2|gBZSffsW(R!Ee_^?I-trK>6rLE3k0~Z+Y z;0m0ym1KJ^j*f~y5icpS9Em;9l>%=^y_@2au{v@&F{REKH}s;0?lA*WY5d1i(Q3v( z=`k+@qrt{L5VN8D;=88t@zA%t@RHRD4d*T(s6viBQex}B9DJ;R2cJiN=UDIm?BD~^ zyg72>@It2hs%i2Y=F#50_|4BTlb@|pbd_;u`R=)(-xXr*u`CC{&wbp0Ewjb(u%DUi|iK z&Y00vNFntTc!13mKt==->rcT#^nWT?SYiPS7RqRYWZRO1wxQ9SEV#@@dK2p}exX;` zX`4*+b{HtmeHk0Fze2|MZImYzwPcv`;ca!0MbgW6x(kcpgSg51u)qB6&O;6ObLWvZ zeZTW0{q4^4!S~~#e{uMN6hAUq29DPFQw`a%57BwB8G6x-;lDI2vJreuRsU*O@JXG! z{-~5!72Wu06lJpN}pRbd1sRTv}=r~twMwF_0ePYT5n`tZmuT!nrg zsuE19z~Z^J;D^)d3C^cKZ&pd zNg5yM?b2o#Qso(H*M;x=3R6kbEzGh8EzxT_w}qU>^xI zi2=CQXd`+Y~5S#mlzyJ0e>w1c z0vIbr%Vh-Br06G2syP^RXCPKni$Jy<4 znZa(h1RU&0N|m06wS-OF!GeJZt2#)gC$V@Tro zZRPP$Ku406mE+z#;|20dH5tw*7vGQSxv5ZC*nL4ooq9WF8sxNzKDY5FCeJFhPU0M2s4 zn7&>VZLH{lUSLm}39P@*a(L6YPkZ@-P7^DdOcl-ojn~s}oNj*56J%&N^_uesFXZJc?CG z69VA+6jTRqUfc~5fxfl!BS6SAboPZzvUq?X3telz5Xhr*%4b3rEoDe)5ir0NFU>V8 z+m~845VYnC4qn3D!tl1L5wnsm4d7U)N{*8k#%0wg?h8v2UE5L zH>16&aT0D`z+Xmt-Q8G;7#Xb|13{f8i8eU#6>w8+5H+sJ0NydFF`(0axABL4ERga% z45U0;)77!*-z-4OHvlQmc<4@qpQz=TfGQ*$pwiwx_j8qj^$M$KK()Q&c{Nrd859q2 znG+N+a|m4KXt*lOL9H5N98%l7Y+5Lu$}$L?~0nKc51A{9aJX06+>U&lyRp?tVNCrtQhPK-J5e|l<;MA zMp*x$g*>Qhpv0DE$DRvAbny~lTAR4Q*gpvlegAxI>d-K|X!xZI4=_qH-wyn@6wuqD z$w8RT?h_ER$O4EOL5VUdhA#Zq|GnH(<1 zqWo<#zZ#9o+ZVRB_G|nuDr?b8f0X@OR*qz=3Dy<&_uMtnjN`5xk~Ri1L^$n8n!*Ck z!k7up!GV(oJeaRvV^C0#Pl9LJ^;Q?=H-Q=yBGZS$<_^0$j#V$R>S6@&Wt+Y>?{=<*Zp^s0+XSCRR5si}buzc~ymYac?Nj{a0F z2BTmXFH8_Qq$iH~*l^|9RwuH}bm+aSELWdN$H^)znfmiefIX0wd((y4;5EOGJfE2W zdmf(pge{S1N>zP%57PSu3Ao)H@4V$x%E{n*i=7{yC9YL2qVAxoO5Tvao`+L9W?5~f zlVneG%Wb(4CDW=s>>a;4|MQ^2Tz#wk`=CvVN!s|01Ur9!%L)QB zVqX5*BXcB}OnKnDSCihjnSAwc2mU$~44?IO8kmm$s;G;nr-1D)5j*vjh*{K^EFy~` zH`9(AO^4?*$wh37SD(n|w~zYw3i7!6ICyKEE1H7~^D8&jD|HPnA(A#K&Wi*`X=3Hh z>X{l}#{$?|a854J$HGALl`g}&o*4Gp#XDYbYjkY1C%Z@TsuSn%?&$FvM0dgG!{&SE z3@mh>&|N>8TXn8POwoG@dW=~c&EeOxlC&Kye8M^j6&bwT7{g>)GyUFz2WNp^#=+MP z3-{_3dQ45fXdN^Zu$wRd4Mi?Gg%+D}4bY91kYW&faOUu#DUp?VwdiY*IO4^kG&4Vm z;2o5@QelQKtkD(P7s0SeE^T_5-?){xnBN*{e3{M){8=_qha9D@o9Un#evMggN^))S zY3u0tdzYjx;@Zjic_`b2h`iYLf%VoF+a|Ufo`S`EP~hIh4B$!$)a}vK21ps#i3*5^x-#0L4O4j+2ReFq5|m?=@_Xr2nbd64_ajq;%;^Ej|a5cVw}2e&uxSJPo!=(=jy7W>&ts>eAzTZYJ~n zlz7|=;{KkdePo3pdMQr`b1MQlUgPAQ$E0up)@g~L4&;<(|_HY@=`}dVQ-Ao#Y?Yu?x?!v zv4Z{?^`t?N0to7Ghf*+J9rS9b7v=qu;oxGFYCZaorOQBh^#t`aISx) zUpDq}o&jV}3<&Aa?O>?d)%kS=EP9k-PUAdJV=x%TxwuVpPK@EI8m`_c#$jIT29$Np z)e}RGhFSb-rY|ngcXe`_&4}7u41bj8hbxgqpt0kOna-jtjZc41{N}NL5`VN^zzBSv zU_vY#kkIiS`MN_ z)xz_6>%y-AbiT%ocOxBK?>}56sb6jYJ01`Fgm19)P%mSruk2-A+kn*zAfbc5ZdUX5 zuiXFR8kqZaf;Drjv98dW^qUNSobcUeU1xmQ{L}Cl!M~^B?NMHfLn-g>;Wb}?7{cXa ze|%?aI@dRVJ-WE;o7^V;puTmfY`WRm&+tKHZ*WPsj6PW{8`HZmbht3w57L`NczS(h zLpSpT&9h{l?){%Kzc@B9^P_hf0_->W)4r0`n+8e`KCak9(n!nN1`ag#Vk2Y?hh2*u z!f$}JWD_TpQ1{2NjKXCPDPVsPRW@1)Ca2~{eF`U7d-*8Yy=;@RnKC*~O+(9lo#Nhl zDJ5GiN+JEfNc>6q|0eN&`frU&cB_xb~NvWBTqj4u}KQfYqv~(Y@*2zlt68 zp}=B?24?@HEhaS%)#h(E3?8|ninz>CvtO6(ClD)05W>aH^KBO?h9Zi%sD+ql)S(xw z1&NOte|8nLst;f!-cx}%4*8%$@`aG|OM&!uij?<9&cb4@WKD8{N@9(PF0qTfZu%dl zLWj%*uX=`Rbq!IcL#a2B1|(jpv2TQ)_>}J8gAw~2KK8*Umwk1n&5$zm|6_dm{M(O{ zCUsH#$#e2%?vE;Y*02-yyZUx8{oqM6bBw&U_7r)+CYbUR)Y%|&cs^!YVwBtK2a*$613 zIh|TLrm7DG>r6fU(Fka063?u&m$@*+NaB~L=#l^|!-dJy8{d9J6NyT~ob3Lp%@t+D zBNa$MEo2HyJr@ai4zSl7Zxuk5QSqnJQKR}^>F|tiY{~HjRys)i4&^o~CZP+;f_KAV zff$aZhfC!7=g!F~Acg|~#Bj{gn|LDtF&z3{Uu3g1{7SL^{g~qJ;{0F76wd$4F~zO+ z@r){0TY8vZ_N|tvvfxc8_&6ib=cM(ICWk6C<^2+{$pJcF^;eUF3*W*@B4`gdJ&oxYT2$Xh=lo{MOfx0ME(URXuse1e=d^=3oI2HQ2{?9%irfq=hkIn zkIO6mV?a^rni~TN*l|soUDdnfq{=<$b`2RKA_>o0#rE(`-W4lw5EZQ z9{kIKf|4yATg~hP=qRX&xymItK*>g4Ue1S(nJ!ygNFcD{I0u{-T|JNZ-Q`pU7&^s^ zf>gKC{3ap_EihVX4do7jtBw;GVx{??`+a*iB+pSp}bEksjTA})yA4yxiB zCnjTLp-KT`_&1YN3ih7p;l^JkC)EeT7(>)~Ah}Z2THze@Zzd-d#NR}+*9s0m-7&EE zvtp=3QfIG}R)Z^LC8Ng2E;IwAZ_tW~v`u}HRFY1v3hbZHuE3*~KS^50`u}B(3nfSSQN2K`hrWUQuP(|}r2M!EDh_mFB%k$Xx>u*Xq@f9uq=UK%fuGWX5OTv6Vrb z!&3hjb8q3+)xLM_0@B?`N+aDVDP7Xt(hbsG5+Wdyl2X!*bfcgA3kgPKx<8+ z2O5>5@D2MQUTx|WruuoCp|--wfSH64IEcPc1c$4v?ux{!6bz4Idaf0f0HSX|NHs}3 zkue#}%LmO59;<-p8^j>`#saW72No2Bq5P%Tgz)OQXUEe~hi+}jGl?cI{UM>2+=|%Q zWx;%(>CTwU7o`-;hCzcHCUjg9WdoxzC}$f9&t@unKK6q$HZV`dXs#~B4{LC+xjc=H zt>3<#;-}Jn65Ztllkr?>szh0fY9;n+*N&WFf)##(QC9t6&eo_D()FOs(gk`0?XTTQNG!j6@Lz zLa<3rs8IAZ9_cKw#f+dv`f5YajLzYH$zb4wXkEH@(q9o_&GHuD z@fek@3m;;FozrFVd!(=R`TMGWK6gu@bu<$#3g(#NM?=Vn#5&-#>wZ1xG#*a*=+AmeKBM>(S?we}MRK~_l-_tGoUS+bFZP6xqm z&SI3MYSe~$U`MTqj9L(~Qhw}?FM;1~n0}XD$I&MIIygJ&7K7xe3$1m70O;C>{_EO5 z`f=^!-Cz4VOTMCw`(KgBGBm#;6+q<0oj*J~4K<0O9AV1()|eKn!_2WcRQv?FgV*@} z*pHVF-e7N*XqT#y;K|zLs z3IrbGHxs1=NR4C~r@_x*`_V4i7@Qwb=f=I3K28{vqv!OuJqL)EGjeHYbEV<4ezsVQ zr^r%a7TQoRt;sc1GU?h{RTSku7p9QMb0IuK?sTN+yo;MUH}_Rwo9HYspU<*q5{>5) z6pE&Jk5~9;`~0Z9Qk@QA9AnJdVvb%K9lWA3?Vub&gfrS=jONv$SjsrH+j8M)w;ZA7gh0kpy}!)Ya+cCiJ#{uB@M5n1!I#XntoUvJ zKw;}vs|gmftqspF8=UBf8+RMnU2ZG_k9733r$D2Fn%fG~moxKJQ?{9g@AVPA2B!9t zN=g#;ZY(ddBIZ7?P#&AEJEpl%Uwb>t*1X^;vKff0$HD6>!rpZ0E4iE#*P;J-IF@x= zdHi6=VSC+k;Lt6u^{}9bimrCUTmou%Lu$J6q zaTr|>>{dlUC6Sc=3B1;7qjJws$DX%$+y1PrDM_+-jV5_4JI?jA_0(eDzVzR=8rzFg zT=CIh)Ft7Bs(JM_V!<>?6lrYp+2rlQU|4iu^~+1n-IS+bjtqiFPyr82VU)5HQ&;2* z+QvB#7KZQ=F6pT{Z}QqK89bga)MJ#LFQ2sytI$}; z^qnqDerU;1Ps4D9P`N3$FPRX#e;JoNS>!8IT>DjRy{bHY3f_7n)0e9#75mPnVX`tA zI5#u5;0!2dBSLXldh08kk~gx^FcY2#h`KS~u}|Y!S>qQDexyj6bW-3$YA+}#xFyfa z8OVLKR#AF6o`xPw)&uS#6y6J0d>=9Ievg=!ERR~lHhDEtao*X-JDifQ`F=k*BN~8R zfeYdaXjhQGoksn98|sR>y^4AI^YpBzQJA^^%{u@I2`6@p--6#F9X6_Q4(@f!t4G92 zOLTqlN#O2!MXz-&t+{q?A)DQmAPv9i_X$5rD9fE7PiaZMb$FctSMSQj{DU^7ZCqRt zftIVBRYQTnO!z65I_uvj1^wzTaHGwJIH3bt2Tz>^@Amet`)@~E`)`3ulf$Jd^^b(P zy!OWEI9UIH9xsiAw~SoAmy*nD<{y>>C?lXH!HAd`KTc9RwOHB1IT=rW3G$@*4mvL^>R{`i)z=kihaljoYE7Ex{R&H|kWE_}l$%3qAu zteZvf!A6R=5wfbqGz^r*0K+gW3P!trcLJV|TD9tsxG+q?=H$T|09OF+P48TdA*Dj2 zn_@?sM3$HNDMFY#KQdW0y~0o%d`7~bL{8A8FxG6zOl<4 z7;8BJt^hV1gy)tGF9JF^FC+dsI33~AA@d^atX+Q{oIT$U&S6n%DY*E*hWzo$5E-3^ z+S2SICI#>2dQCACOrH1WL*t@_lSlNLaE#&zIW{`kd^%ThV*gzF)L@b;!;+}JILt^{ zP0jHl;aqUy#P5k~AjL_SisW=4Hw9}}Z{+))4xP%2z2505Kod2{$ZknNoBF64dbZp5 z8g)uf`9M#Bd=bhYM<-sYMZ~PU9a|7yy=8XsGjMJCYFVs1$yLLtJsKWZNHZA<@kHJ`*7LQg2wbppTGidI4@xDSGdgVyApE)gv-bPmFau9 zoa+5A;qqXVaUqkXkQD}a8gD}St5u#|PE45vs5AZ^8ajaahy)g08x>gYtx}+R9i{WZ z4nqC~DOmFO8?R91hnT7U0YJPw#tduF@hGe8ru*Ng%l!d=rOO)jQshWr-N(88W8+*S zlaTV8W~Chp5xvv+uYEiHPqF`tqtlto`M*q-_3<=j;n43-IN5#x!YP$QRiE+4l_ ziK+ta-WVhUT06xjFj+s{!Kkc-Gk&_QVsT<*g(hBFw$G4ZSA1-1GM+$EUxG5_NcdAy z#o?e5Uo4_E1*OklVkIGd&>l^KY87~De$XCO_!BnmJ~6nhQJydm+he3TLFumvq8za? zvWrLd#IEr4%8F3{$7LsXecAZr%Lzj=k-6uf>oX@;BpMw{$)qs-uyT`DTne*3q;7EJ zAyRMeNLgvc-vZ@^V&;+kS70$L3TQ2oB7t#-nMnb`@S0B$aDh+>`a~EAB2we3FotNUPvN< zo1cfu6q?zD!$d>E8crR2?S}HZW*1XY!u!{SK5d3$K}AopKR4Jr(PA&S8FIgtZWS^7 zEYSeJqumMVn9e*+P74SLYqez4yk|JbT`ko0^LKtU>07>{xPR02(S@NxKx9>YWm55rVkk^ zU=Z$>(GDl|N$67~5l4!Q)yC+kEbfpY(q164qh0M6r48&Ka7XlxvDp`kT{314OvUTE z9dL8BK@p zuDX`8vKU}#(Nk3kE|wcKoS8x`>Xc&JW}W-j~#tL-M3U0$b=Kk0?_Hj0g}Q zBLWj(LTK0_<3j*UL z@0a>e2p}VZ&D>Kcz=#0OC&xbn7!kmbD3yQP>c9T<|H4*3dn9%s-M|=3*cun)2yVF~ z+BRancLcLF^T^N?&wu`eHSeka!x0>hR0!R4BO>uy1%p;O9KbskP=J&OoEWfx65+F8 zFC6MHn!)Y~phWQXjk_#LBN3kH3KatP9b(z8z|m}?gAIude?L|GRE-02RRo{S_Dvoe zq}80?kO!eb+5eKOGKDwJsP=?|AID|T$CSEzMC!+@q>#DP5o!zvO)LX~B{_Q)w}@)M3r zZ4@G`Ex?7K9@4dykJN`~2I*?@LOkeW9lYra_>mY5}o*2bi9ri_q zgFRBSoxCrnUClB4j=VQI05IPpzm6*DjRl&LbDxiy7m)!=%JZ!IgGwk2Mb z)CwpUX@$=->ZcBdE6rdO%d$N*x8%HQt~-z`y=(F1JzlWfqph%6ZPL;r+f$z5Hk;3$ zxp-N$l-YW940lyVi~N2;4}kJz4PD*$pe?sf^>i0R)28xo6F*lI`L^#$p4Rl#O@ZI0 zd-cVF|5b%f?3+!?n^_q2@W2<4-PUV{eD`Ps;<3+7Q%9Vo(vsVGmxJ~w-fY`b0_mM2 z206TqT5}?1x>N7aqvyAlrR>vRI68dIjaiCzGTiZk)YQ~&;BZrazZEsDDwXeirW$eBZZ zk19jr{wOFHKriqeQ8fJ-RU#{aqRPq(qf){@SLl|OXTae&VJQbBm0NQ6Nu}jKC6$Z# zApF~wk&J_v0axc^?3K74>m_bt`Bd)j_&2k0NL~NMR#_}mAw{Y{?8bp5^g$#L}_3sZynnLx~y_|=)#V~cL zQb~mkU*pXl5PxC!^7}UVm^Q4}?8_m+l32z}a5CSaixZ>ixfyCmW>}dr8j7R zUXIfRW{1Ou_xLS5D5u<_2mx|R%R{0asB4iR5|xzAL=Os$k?}6JEhy1YQr>~Q%Dswt zZjWaMYkdK}Ar>Fg#p3b`A`wd>5dErt_S@&`ne4A;L`l&f zX-|aCKq+M+sX#|lF#I%i==bS4DuIl0>|kd65yN& zjJ7EF>3-ddK2Cq!i^N4p3#FD&w$`g+^Z8^x<(3>gOtouA;?Y7MOVFeT#CG~1+`jHI z<%J}2ZoC*mbKyZL%zBa*Sh~_OyHP>VV)r)qF|S1$y&NPOffVjpvtljez|x=-a9Acjz0-CzxKJ0O0+8 zVyngvfW8gllkeHQX~N`|DQV&<90GRd=CqfnnQiTod^um_AutNC_cs;H zdFC`jFPnE@xBYR&gCK%z4X5HMce+V4i9Yc372~!M1E}_Z4lomSS$%^Vo4R~D4_EA= zS0PlHETr#|Q4nR+PU(U?lNZkH6?s9akuNBQSeL@?y;LdEJd}2hZHL4A^a{*Qabb*F zF&)7b9+{!E;n^po05sOHt`*X|v#nW5T!>LIdf_b~Cu!p}CPjjjo!U)=huWMmNB8Qt zGw#HWWCJ4}%4CsKS`pF05KPYm9~9%JF)X>W!)~6?`Y-n8GbAzeJapa9xf*caR34ci zVmu25!Q7g17Sk86|7e4voHS_$eV|7*epqDH)l0%R-m#k^jm)pPbfN~$=S(b z8T4*w6Us#kUN+YL@X^*vW=<6~?5>id9+BY3PCc}oc`o3ulE8{+!DwOJBXivHxcy~{ z38oZmSZIJzInChb@DEj#g+%xy+t?Vu>YPWEA~7cS9g87Sc!{VUw_?ULb2STIrjQ0V z4>nEIs=jGk)uvq}58r%7J7(|{JLP2~vS$h0B6-GB?7h1=Q|hnsYTPVr;{k?aFP2?9 zXFQ>qo~XxpX_%dG@*t&&n-A`ZB%z)ETezEkAphyQke~I}kX~|FJ5qklpX+imB3~uw zWyqeh2`P<*unluFZ9T@ViPp`YbT>YKB|$45Ghx@d>Kqk6Y(hxQozrbg8Dg;sl4pmI z6Vp1T?xDW9?cjKC?4wAW&wLqVv(lWlhKExzmSUfqkc>bzr~o&m6;dnP#lfne;O-mU z+V-Sx$_(Zt#7KH?UttXt9qLDc8SLUU5!Mn%Hh1M(NUc~&UIvz|EEFu|KC_QezLu1av}zPzWHM__%d>~ z%}W4?u*3U7O9$tk)|EU1F5)O>KU6J}(r}ADudUehmoF|oU~hwpNCYoXTEGuH62>jk zjiY=?API$9AuK-GC|Ao1?Ivgn4n+^0Vq;MW2EeKGxW<9S?Fz|0^%Nf>M5wYD`Hqo{<+#G8;a9?Rk-( zHuyRmH{X(s_oJ&>T^@2#w_J5<7p6h{OQkuy8>rXY+YHXQouYyQE>_ZjphT8M{I2XOy;{7aYyKlbXV6^F^ z2U~%pvzd#wj~mp0Op=!~lH+cd+x->cRr^!6Adw+-@bJY!naysy6qqscE)~JJTW}N@ zBABC^KqwT>dN`FVtCrjPw`-NV41{DUrW2AWQ4P&&-?H>NRPVe(D}33)U0ouTzqLb- z8$L~uW@(KaA0tQDrgmP6EM!9xQ|F!XIS?E_7c#|4`f*TeUmdUg}ijA#V zOwOKK7GDMxW2uoqcpHz+2qb+B&bSHb zG*zV!a1iAOq(Lya>Y}JtYa4_FQt~}ujM@o05xq^DPj+53LOGSPP8Qk?z=KXi)lJ|; zWa%i$uq}u?=Uh+0X)aBbEbqB(z1V#23tbMfx` zxwsSXd#ja^=vw$Ht`Cj}4I3e5=L+qy%SX9dAtl=)H4g8@@n&y0CV>nn`CDMcNwc|E0XSz2iw0zOt~s5vEi!iHE0AL{HlQg+#?`w0;a-}WslU>I9xcB-GP`C#QY#)V#(S9q+j*rW2 zPE4|QvN%?;u}J^#&DM9}fsBd?XroO#e;czF8Ukb1q$f#o&i(^mQ>e7aJzOkVAM)Z_ z?c3a-A~uOWV8g;qg_QbiWQ6J*PuAJB0<~`tiwn8E?{Z{&9^cLhV|!r%>Dl+Y1I8AX?%}Grr(Xr=%aS_H2h5vNBpL4at~)Y$#G%zI9LTy z%F%O+fp-2J(d-l;g+2QU=D~vUQfFV%OI6Q(FD_W)`Y{?w&^kdA* zqzsH%6J-n#5nRA?{Lrc2fyS)!<*>cU90dEHbX(}BaTO;ji}N(2uw<=eQg!9C9=DAp zCq5APF=i!z53%s)7UbdK+*97Ko?QI&ZH7xm~__6=!L zq^b;@?O#cwyPM!Q=~PSVqVHo?Ueajk?_*Zl&igT|ruLN9hI5#Jidysq4W>yrS)F?2 zPOpTRlapwC;!6}|_D3}PSmM+r9858%BN#)4QOXBwfNBx;C%skU0yGZ+oyaSnU zq%y9`!NTwm;&yIY-@_qQ7QMbK_a$8)bk)}5m2W-zFy_6wO$?38;poAaR@Sb8zWXUR z*WRiS@GXKStUChYo0XjJ!1axvVaJrfzV!#>a*~jQA5aNJC1&U51E^oTBYNoso33W| za!fUgOe`=s+WqRzHN?_8W_#1Ah!^bq{f5OG*5)8T@s1|$oDI1mFs`sa)~m-XHq|*o zQ2x;#&<^%^%CKBXb*lMTa$tf^f^X`iD0qy~AKOuq6jM?iJ`2yCL6agy&USiHb{0|K8> zUCc>=X617HF7|7TvVOcggy&F*?tMd|xgJRmO|z=G@QtqBOt7r>dP@>))`+R$jn|rNtw5kUS8Pf;G3i$TdR+#}{fa zCVmdfgn*f+(TM>j-zX|7#J4T&vP}vHj@wlH2E9<(C^pDf_A_b~M8QV~K|G^MYcxRR z4#wPGN4SY)Wn|9QW-(cPvcBrebbA)WS}TkiZEK?@fsm(YZ%-v+BhPTvQsbaej@kz|DL`kLrIUgD?xn5_<&`2a&z8GFO6$ZO818|#r< zpVN7-dTX-J_yY^>@Q7!UUAldwk458NU}|1PQ%Fy~;yaBZFkNT#kxi2Xq(zW`v`F`u z*ex)jx;HwxX<<0+u?BWu#a1PHSpj}aiS2~S+=L2~{;j*o9B*kGoyT!nOBF~>2g!x@ zn*Pg>_@hj5g_CzMS202YLPuU7sCNLJJ5u9 zp|nbylBO=m=gNdDm~!&rI(+xZWyH_qQknfN!hLe-Pp3<5f{m`zq6MJGTjNk=qEY0K zAvG{t?rp37_nyJB6l`Oz|=!)jy$TZ(t0tTZ}~3Co;FcokEX|%`mza6X28q+{450t4aPCY3P7&NDe|a?U-y# z4;d5Ds;W+PSOl{SEMetuAJ~Cit5Q}few0CHdYMM{SY7aIY3w$LF0O>IDSGsIK4Tfu zj42%+wOQviW2Md@7cfoSri~MZJVM znxY%sn;R^*k9ym)O1w|^Af0EttED`O`ElvNR>jB|W!bgmG;WK$mRNtU0AFcSFwbYi zm%F{aTmvN$(V?$hPVECZAE^`OvgSjn92h?+@Us;_iz>Hx9!N7X?BMv}Ukb4rVU4%( zUvN=}6`QfxG;_bGGd~79&=B*g%J^F$HtT00maTvl(73~ldA(HtY20rTz(5*zKS1LS zr)W0B?n5a7(zrkP05`fP^f)jS8aC|>DvtHc3(rqYO#WbV{EfKRsr9m&>8Cb(G;3GJ z`NY*O5%P%2P(t{MgN+=9{ec8V&4~HSAarn{XQWg z8L2uUB2b8RKF2&m{#l3(02N{>fkJE}NhvSI>-kpi4cczs-6l$tq~_r=@_AN7H>anH z#+f-MkqYT^IOxHhtp?a3TiD}D$}oq?OmcP5ACC1!xFxZG(6YOXiIkNzn|We~8o6}I z=XEd+6(jj;h8`K3n=i@D66pDh7KzbMmt$3!gpY|6qXxT#!Vvlku~(@?s?$&F95as@ zN5lv|+tm@0A67IkTe8tAUaO5j`Fv=d@7cI@Kkzq=9I2O;T5u+xGoibF!xzCJjUfU4?o0xEc;wgoVUQ3C`b~i9YPQW24HAw~ zGiFwKo&-#*<+&Z0uvW^2W&?WSNo6Ybb-J5dY$z8BfU&+7Q&eazDT$!+ed&AFQjNZ; zk`i~q03nQ$guz{CdjnK{kCrNQJtS=hmd<9h{4GFl1%26`g`9_)_g|@f1jx2h8 zOONP6GeG%@wQyq-0^erAj~ao^l8XML0Q~i~`>OHg6JMowhK2jP`;3+TGyVltvSe!) zS?8>HEY2bkfDz}xskaN#xmnd|GkQ-u-~SwejzA0qOVj=VOEc;D1xqt!di$id-$%z* z;}qld2S(tK4xZ1Br0B`0sQ`Msq)F~+0iQAu3&bor3Jljp2^FHyo0=|lo4*$bXZ8L-9J4Ixk7Y0 z9dRj+a+jLMlj2}q&dRqO;5klw^I-MO|w&-^=k5g-8;S> z5O4f;>CuurOJ^Muh7|)MSql`4L(`5MAp{ zT|-}Vmzz!ME#m8dM@c6Eu^!%qW@NxeFhk>Ky_J(-|Dj5b9dPetNJVTCjyIiF^?zS9Ot%G zhP_Y?+^FeIVrf%xO%_LbqO-Fcvb1cA2p!OvBlqCcCI0S%L(&b_oqtiv+@osA)A>_X zrs?^a`J2P~#VuhrL8Z5nf@v|bVnOaM+=^Dbx(7rGC?{w57cSMeKB;;YDt5KDk*Cvh zpSL#eigM&!T%1#Ged?Y}UobrMoXbD~IgelA6yLu+JQZ!>K8?JE%O#ei;5K0YXfT3svt@p zVwHYBbIC11XD*oqg1o9@r{(tHy4;a|3~Tv)F8T(tXCH}S<3=OuL?Ftg<723DgWpdJ_5;*QB?$yn73~Zh8w;*2 z(?tAxE2jOVzNQDTT0CDFJ=j_a4Qm_XEzX9|O)Hk0Ey)P@lG76dcWRBpXjD zTVGDW41t-Va|fN%$-l&g)A6PFQ|ye!ZP+O>;-AbWg44g4O;Hyg}V<)u&WW=JKL!*C5DBi`t z&~q-5u2!<@)Vk@jbe zmb2mpRHH5bUZZ{7ei99iMW>d6JZE-H37oiEkA|n0av_63l&0!%qZyz>TSa#>gWY(v zJlb1UjxfAUR1Jzm-Tab(NHo5NV$WtM6^KOlQ+XOb-AAJEa6ly5Lt6M~CGkyh{5dQ zSToQ)MmW-5q)7iO5Ty=b1BZ@1U(xy=h?aCYgE8L+qA{HZ!5;|L{OyB`1#<@3e+8le z4+MdI;qd1!h@ z+I;bc0>kflC>5M4>CZe=2<1KxwQ-y_ZpI4wcVs5c@fJb|MBW-568bEH%Ga15muU45 z54x%xjiUrPm{`HpR?-s;Y+{g$!)x>E%9*@l$CUer?uwpf zBuk_-2G`Qelm4>zEqZIjh2H4*_H3m6AMM%o7l7@GbYTZX@NeV;pHs|O(c^yrw<+)5dzz$k6#Pc5=TKYda zv=R3m+TzrE7L)i-7898w(0)ex3Z>DY*iT1Z=UWYgr2+IL?jSfs znuf-zlC@cUI8);sABo6-Qeo5;Fen)-bmI9024a4aolf1Q#A=|g;2y-p`2)mc?!N)( ztq{D1b7(Z7h|{V$xYe5LsqG0@9y3L1~66wz)*5;qOd z!`Sq{ag{L{^?z|(Mg8u$qW;}+1@#Y(E789@u6!4I zvs6QWRcCVvSCxM>XB#DcHD^hFvs_W<|7Xh;Z^IAE)or5am&O?lj%O?^2?VPt#>C3O zUmmKfvOq&&^Luf)e<6?aL3;Awp+#Sa#zhXy5Y>I5Qp$I?ge0TkL z4s5h3in^B)DX~T=`R+I}NHotv0F;K-;UTM!U(UBOk!Fmyg3{27oEjJTA8F_#NFWU@ z&@W6biaSg^h-t^q?wawKrYw(@+SKysVKVclBIfP#U_t$dntUAp{-zPF;vk z)Jag-TMaw`MR`kJLj)R5o_6MX&s_C@$#AgJGOc}c5mptV) zIFNbBkL1rd$>;3NVvM2_26i~!Ptx(-uQj(AniTTf;OTb=BZcK)LI@@uZs{!@PEbs*I~$77 z2kI@$diwEpYGP4tB9X~ROeD6qV3o@)oN1K(?G&GKZ_n2tRA=^b7n5#erCtA83Oz1p zAo8R+Uj7kz9{!3vt8K|#Ow>DH2e>E^)QrWKo~0$Os~H7hGzlIZ?@WeO=~mEXbz12G zXzTQ#nR0RsX=iM}k6kqEq>7|W!8~6W%|julJ)GAbHda2D*Os{Kn{D{dGd&;c~EHDMA4TeV8BB zmBoPOew(J-49iI)Mp^7%Kt0$Y`1Rd{1?{Hpl>SJtkm6ekl9|=MR(D)j)e6Lr3+IwP zU);qhxV?H^XrsxZIKQ{Zd@?yWZ$vyF_4yty!)QZetC)Ud>Mh?bIAO8N89<$^l2S!M zU3i%O8X|(qNVfaajx5^F2+SNNv-m9^^Qtqs16AlnB1vDN7W1mqC-oeHu%x+J7-0_G zYhOe+1*iPLrB!3SBHSaLhb*>QrU-$zY1&-27QLmDGM~M^ktCF}U+%x6*4uQE!ngH^ zC`u^ruR~Irj~LC$HG0`G5^wwVVTlKq?rvV7q(;S}hf%BPilC+!z+bT=(55(1evddB z-9{N6fM(1ksj%oe;1>Y1kW(slN3U^koGccr?VyzEgl|(PjAYUsf)mFR(Ee3#2%0JY zrL%MOHFv?ycJN9O=XlScj>DI$<&T!m7rwirgdKXs74vPbLvD9IC2qz2m*@|;cC?M{ zE@P}SQJgQtM*3Ry<1MKeVXDT@G4LNqa&Ysq6b|rj1|-A>aFQz|mkB(-iXD5oEr*Un z)0m4uv-+fQLUst_J=GntnndKZLKMns{>LrXY!)aN^XjymX>V)k@?9nqb z4uVnIymWl!WVu$CHyoygF7@*}x$p?5owsSMf_k4V zMh1sGV20{gE}IyQm08Hp-d2`&H3D$TWTlOtQ`3=WxHJ@&Q z7)zggcwt|VVxm_)m9r@d3XHhNbEf8In6Xb+bEC}^r)G_Bo8uz2P<-D;+J3}qn2B1} zl9J8AVi4ensIRk0yOqPag*#m^qZqn&81OQl44-xJ@aPb3cw&R%yh#FVLC%d1ZlAY# z@4~6U?hA}l>3tMly;~-`?DUvjuHCp~fM}dY*7)sB;!O9IkJ&=0$7s|(# zW8&<2$DA6*qER~Bj#b0Pm~hU~yWGm6`Z74qU!R=FgN0QX zzb!XO2E*MDox$Fk(N8Y!GZ|{lS;ZMrj%iA4nFW|0ZNWkrMo>*dw~ zz>2o{eZ8!_;`-iThG5sm#+r{qjIh;PYC*gYGV=oIr-3}=Hv_pIU?ATI8OXnE?GNMe zrn?`vF;)znM0;M?ri@W-_62103q&FB7Fd92SrJFB-lak&d`r?W_zPZ@J{EJ^-#OVF zkSeYb-yP(i+{T$qcXSMtZO*&&nSe(WxXp#exg5Yj9u3IQEIlj*S*o3#eP$^?d(3FH z>U-E)dhFNhADrYD-2p9h-uo81=$|e0aFB%jd|;&Br@;&D;4Md%4@6y1BzXT+&Jt#( zI-+9LvxhbjLAV~Jxts&_{s?Cn2V?S$E(1KYw0Y~I%rs*rtdyA4+)G|iR z_xF}bO3-_YlFvHOLw^bM(AVYodK5mVKfkw-i~Fyh{ai5jfELW|v)%uuSFpGB`-1rj zO-Eq$I;6Qkt7Sd2RUc&zy~+~{pLWRob#TlHV&_X~`i;?;vc1o^BJX4$+&DNyGu7kL zYy>%GB{V$V=x~!Lf7mChX!un%c}%@YcIjYbQvbjU6=D9>$|nm+#xTD{_^)`6HIR=0 z6WZva6u1H{Q*5>Q&qH7WiTRWy&O4@#}74(yg zN#55ANZIZg**p?qzZlu|Dj-I-vVG}~S^>^b6Ou|Zl1mGGUze=6-{iZXAHb~qCr#7b z&eO?P$a@YVU#gy!_ngfHkd<$4upSAkm-UzlluLjJ*>(Q?g zX;_$j>x@vpYEfj8%Wk`YTxdoT^($GV8S}{{9)m9cbXKvW_(#;@k744U8fXy|@PL|u z?6S0Hp3oN&yT`(Z@m=MtTtPx09U9teabJ)QP2;rH0CP!-CGyWln32@q9%1mzxS54x zE7+7vwVimvv~fF#+k>`txXt*I6>_>v}B1AAVB(@DJIg#S~H8ZxdMrRN< zAPC|Kcsiy4&&>3(fb?wjX^ZZZF^fgFr~4n&>qQ*^*k!`y~T}QS-283&sMXUM-gC}YT1LA6a6<;%hmbI;lP8LC>gN*yqfyhve zROK%(`G+5+16u`@3Hpw?mNSS8N$BnrP-y|WFfL(FhN>)d)JE(y`Bpc1f0Yf7Dz}GeO z7`M2u_5lX>=x(65YGhF^|4r=!sEg3+UsMbajGb*6 z>=Q_9e>%$D7>3%q86UcC`tT>*6Sf|+$J|2tKlW6j9F-V0dlCRt*Xx1mdas=dE)y28 zb$q~R8#l!hcTz+ARB64%#E5qh>7u$1==9sXe{*ZG^J z9Q&80yqX4QO6C`1OYt72UGaCAwhI8$wng=mro3lqOZvx#{7+cgAplF8LL{>NJOsO~ zH!(6N4M`82mbWJ}yZi%fG-SD70$dFq$^fE6rlXy8zwAV8;9-F$i)8sLOINz?KYHxF zPr1z_h@)vgIYlLfNdZ>!PzPt>iQiYxwhFH(DQL3$)rD6qN7N!>V4eFVYr4$jRU`JM z{;o=^CD5IE*L`LL9%Bh;%C*q2$`20q`K8T+>w4d&rxT?l#$n{p&aboj!X-Ie@#M(9 z{QhvWSzTMTQEJAdABr#iY4z^yuI+2+2kRxK|4P&T#B`(f@aOBz^$zY_?}x|n{E}{F zO(kqUaoRL zv(cVU`63ZZ-eWaJ1?(It+wuR| zQ_f&!Oz$5{=&JQKm3vb;{tr_*TdRZ2SydqarV>^W1nRI>QgXqd^$X0O{A=OV^dDK7Y z%4LjyUqLHaO8)Z-+V+nXH0JLsX#am$L1+BS3fk6KkyiBIdeU^se|gd(|MH{-O8x^= zn@IPEC(UO7WGtuqPsVcVe=wGF<<+?UTVpvj$diT+@}$xH96^)i+7H1xAb=D8Q7Vx6 z?@I;ZBmdh<1=3xllGVjsmiNtef?v({gdffJ@bArb0%UcOE6`gG`UL1L$HG_6em~7j z%p4s_SV{m^^E1|p_wDYNI66Mj`?s75Mg{h@Y7=!ogKqGkEOfD)t$DSj&!9R1xM>HO zHq_%>SEd8^&~0MUg-1(ZSfYuG?;K496C8<6KSvYG@-GQ~#5l5Ub5DMTFzrRCI*Sml z9Q7vq3jfU>F`HC*LO-QblBA_~>ivWn6K6qv95FEN1i3vuM@t0R@*yBM-yHo`C|=WZ zsuYlPP!r!~U{J|Eys~p+^J+OOugW>%2>tyqahDbRSHhHXt?PY8NgY1zt{Z)c`bR#* zUijs&gi10oMP}axU*GVt%k~`b_TK}zORSErF$T$3u1h?MaTrI#Np~$Q_6y(6WvfFS z%QV@M*8uqK-JkgF&0qNKy+yIT>(WphnEh<7haY5d52}!km<`a?4_;4NRT1f8cRv>^ zNqx5`|Jqt3su1us!!y?NY$oQL9pZ7YNuV%g2WvMtr zXDWH(cvJX=DtpsZp-QY9Q#!lpZ6L$Z`>cX=5B=<2J`~2B%YrBuZuuy$k0z-u&r=IE zrW(eMHv^8IG1uAl@KoxRvG1>HxGbi~k!>d(lP+X_=q|}*Tuc62JkkHiKGk4a z+@t9&7XNSU91m!D&34Ycx{>_whix)k( zCAQCdI)40Pw7J%kSfvQ0e>8vk{h7Gw%nk4_sd<@E{0e487mzGc@T8 z5V$*^0!-RZY6!knJ6}He2rUQU*dG6R<5IHex_WR6OPu5Y5)s0w)RcBRIF3kwgC?Kg)HVR0pltBJZ2V*Tia4^z1p<%aC z)PWAhQaDNt+*?kFwEpioa`f%Ml_bS>%F zlIMniJNq!QJT?8DT^>6}A`3anlYm@fP!HV(-Gmd=L#O)2Lfgw-l`M(9VrkH9A|V&* z0MH`yV)(z{AvU2rZ+&8atq!LW$c(CeqV#|Q;l;BUb9|acK{V6}0;Pesr`n8*U0aBG z+cHyl3?O%QwlpK)gkLg$M(+g>)21EZY1P&tNGZ}~+1q5e-)6`o6$d`mSstR(-FcqyAMzpS!Q3=UdGDkY~R(T?oow2zsI)D7&_U z`VjA>HvTN6n-e#d=sR~k7t-Si?xHFCg45H`vI9ibd5}+1 z-8Ea?wZUrBeV`ssPQ^^jXC|1A0vrjj&JzprAgwnXH0$;**z$xd zwRstT(5{eQR7xbyT?+YGa)6-HKdv851^!E=^esIC6r}w0#~cF3&hSeZ#B@84^fIHB zJcrwvpt7jXq5`xWdB{9^uF(G! z05|M9!GTe}v0sIMYO?YivU;XnIoJir?|}ZIU0HQ&cHn0GXz2Nu0nqlaI8WN6DS>=6 z2Tn=R6hsu@QX>A-rNo9!Xa)#?m$w84KQtP_H5K?oAbrU7df<2%s6dbA$t9LIw;k2i zjQ8loPPf|gL7rw2T1`i_c+uOxXt0|iMlgR;cfrR6h_VZ;trS#WMA=kCnQt#-0G@0n z5S#v$wpW^eTC#luJlQCs-;MpWWT%iS`}a`811FRdnSy^X`afE-WvqQ$ND*JU=s<`+ zyXg1PNpJtXKFJ@!>K|S7$eZaATwZde;C)hNtf*&I()NK*ei3v*w~$|5r-1P$U|)?a z@jF);=^$N7H{UoALT__NIaf5?D+zi&y`6XO-0>TN4J!b36?WVULOCrU2vki>t-HFq z{5g6I!7hq~pP!SB@hydc;}d&W3WAFdlxm9Ef9#lOsauWiej5n)VC zgyrw_K!GGXl)hb_jdt(I$a8K1bLbIDg}Q1O_1)@oNb#@Ve#`>6lMK55=1xNYn>(o+ z;7;0=@2_3iLj{)cC1Jo{C*?ml0#=aN;M*TdOKT+j_M1GZlniWqqdfu?xQzRD^M9W8 zrqKke{;5x@)Na08Yi;Mr({8NxZ1#$@?{tdZvt8AMODx@Q#2pHjca;QHhVYPUW6CWx zvj**+>H1#(RoBufmh8PfewIAMc92$lX&n(lRBjrD`l*#_aQqKI1r40KYSjyl2D@!>_v%OO?f?YZS7yulrszC zmD9u+&T&8GQNE3VSQ019tt~JBrJ~^B5k?2l6te6gz$zy!z~NEynH1q*fLxdIZ4~8;988Rm@%S_?6W8_k3%mEG%%kN?^n=tgyBO&wXz_BZ_VbX=7b;;LVfMg3T!&F?=Y!=;WgsA9cI|K|-KZL_uaU zLqF7Q~?czH+Lzax(x8r--#fw>w4|*^vLF=;1%1v)L|^VC!Y$$ znwNDnT7Dqxj+kP|RbNl8j;>fHl%{;aS2^CE#)ue46qt5$dSvCKQ(M32gvB4lI5@*N z;Lhd{wIwi_DuG-0cCBrDn|9=5tnJE&DgEj_kE-iU3IBmMZo|ZD9ULm;-Fl#}XSMNmb*kVazHZBTXxobr9 zp|wnR@1Y^Po8z@Tvp?>E+5$}F7KIRyPxr{lYMmAf>m<%4cceACZP&qJv3q7sM2L4E~1LybE>Xcl-azEC;@H6 zoxoyRNEcqPRgVU%jy2NJ)w(c)bogH8ot`|9F(`$kOd}5?%20}Q@=9#963Dp9LPKsx ze*D)Z;V@^(c|H5g(67dn&yj~9?!M`?G9Hx|FO=dpq+f6meXI;AqSRj&5Qev78KLOJS)i5;EuV%Y)T){`vdL$7enK{Hv^yk$63+ecw- z)q7VHKB2{sFz13WJy`#5OREUEO(DraE|8Q*d*6hcLaMmM=eX8z&Z|vL+7*7Z9anR8 zGs~I(_@3`DvTw)nqoyFbDE^(XARUppDoS13az1%x!cz(v`EtaOQCsGs>gS4zC1z`9 zi+OwWkBCPXD?SW07NHc67>MRr$rttnS0FtV4!Jc&3lkrGFx-6JrLL1@?do+4$@*Uh zIDqZofG4LdV;2lJh4Rx(Yx|rp8;d2{=c2(TIE|{^N*U^>@Lkx&- z-)@yc(72O_ko-POmmXJ!%P4dc%pS7Nvf^@K-k#=HW=p>6 zBoGh^gY8VpEOr-4$K-7)A(a&K9e;`Uw~a{6wK)!8gNxja6ov;V>C}YFZ*9_dkp*Ko zYGkylg1R+&%Ce1U`x4%u&+9*|5ID6n&GgRO)LnF4q4X*N?ih_94g~a(pqO`r-kX7O z#6w!i4u%I+T4iKkp{=PkBINv}@|+dQuwoa!=A0z}YN;^ktA@IgWeGWtZmU zYbnP*HS5gGmhh4ht=GlU|*CtkDGSxNhFN zR^*$>rb0&F^ z<~`>u;9|`NRvefUNdzCZn4b>1agdB2X*Q1zOY4#9_NM$Izl%4;w~FUQZPW%x5ss*qI=#fAkA zuY3gTgHFRC4&cNZL>(kgtwxULKC3@GPR%N-Dp^%fl4%DNQIWfGL4Pd&zC-%XQEYX( z)XzjT=V3+9P4MkNvMK3(fq=0EPKMRD>O3Ou>LuNtLsxcR3w64i&jOk1#-Op#T8oCJ z^IegZ(AD})+%AUGP;->MZ+hcoobJLsnxuFpg0Wn%>RGlcyr&=zD+{OLoOjAf&{$pD z2NS$O=30iG-eJTs1;A3ldWOW??0xxvo)2$<{1%YR(P$8Y#Rl}bk;OCfXQSUUmS@6wmVq~ZKOB)m==Exej4gV{G+LyZ6vyX@X*Z})*oh_Ar1B>zSdV5@Pmf`!v8V1c;!S`0_T7E+ z*3$*p7Nt-JV_<2naaGpCIK=y*Nt4M?zvj3uXfFoH1OUN80Ar2 z*@cPQZ9H8v>X@j`pqDN+HoZBjl5IfqrB1u4f>fsCIFV>`{$A5PxrR5Ikdgf+FAhe7 zDmGdI)mQ*D5^|$Jx7Lq1U23`&O+_HL>D~7`>R38_);1hb^pg+TybHNFTBn@={Gj@A zt&x#h(}#S*eiL(JI*cxQ+eu>E;-QLaa&5s1Q$wcfDUXRORVJE{+_GS`A56Oe7-!WS zml_G{h?Z9yAa-TI)_3tpcb<7VCA_*cX&yKfAR3HvKlG}WVDbS zgVy&UeHSD$@%?D53{35s-@lHyPM`@Y${*wHa7OS1sn)+N9W>e$T{0IxXVNt`B3Okn z&rJH2EoB$>_P|nb`8v5Q2w`fcykrAYQ>er)?v<8)TJ0Y44|)N#D+}ju!A51V+y~IJ zdncBbl@v|t6pBtsddsuJ@G7LOJ+M5Z5Q zU{-5Ihhrsv_7hZ&%oJuOv@BvG*|3Lpl6U>YI!#wdvY~2>9~62hZyFd8&e7YT&|Bit zS&IpwwvzQ9o|n>pGanJ5v@7aK4W~>+m8-Dt1Vxm*VGBK z$tmK9NVWJj3!_A^1}DXl5Gj~oz>+sOW|et0PyyeQRB1`Z2R0I}x=h4J$KZoQ%pzQK z7>)+7{cHHVx5}j7%~)h{3Z_2Fn>0Uii^=2AL{2uf=qxi6&AYmge=GiG2`D#xY>Keo zLTGm)%4nz;3p!gkzm&+nK$KA*a7UZannyJWz%y3KGl-x+YN_R5fQ6vvLV<&p<(yi`(Odp=hS9z#IU zRNleOZ)rN%nCzF)jn6m>FLf(cjow3?K%5|F*rK}$q;L<%bPohT0*Xx~fP1xrCF_pG z;kkn$eDVm2zqf{d%09)-=`vf6)JRM}e`r&F72}@IDrLy_`A4WEXF#v1=;;CSK`z~n zdx)ewz<2G@9xYj?2}o&`POIubL=rNMTACDu?d^}CR?X7-3Y3v%mwKsLjXubk<<_ao zp%6f)X=>;wWS-O|8I%oa{)<7`^zVbRuZ!Qz z39KK7mnVy!&PEB9`KwQ9eg|!4#>&sq zg_AX*muC}^P?;O~iEa(GWfZlp+!3PRBX@^H?Z{(-wk-0G@bs1^JabbZBw+gztI&_j z)LTGh=`!z629M=SwiwjT<8rOv6_D=2q7s zk+f1U50AHsRPdD}m#wW)0`NNblbV9y_CihZGz#`usI5KiC~Mg4>5KE(uUo|k6AXpyBnR` z)?fE)xdh3-->(UEbQ8s~n~;orfSCZ5rw3vaeTAO()3TEif8Ys#w_%wYi_A!NSk>^e z3SqlEJ_Q=m*_P{~O*DHFqN4COg~KCsw~PpyyMzMcx%R_%CT716Nin9UK71 zIVds434)v9g*RA^h(LmkCr&abOYrR)qa5!~Eh=vE2 z@}BLOXpF%@El1YU)$~BAj3bE^53g$J>uiCPRZ?xyjz49ttn9&^OA1qUXdWY9^*4xf zjeEC#TZn)KcKH<3n@e=&-`N?e)0PcDuQw5QKDVAsf3}{U&eY6Ix29=NUfqyE^$fVdta zp)fr6x}^D;!?N2lk_i_F>_@KG@_9aUxBebCG5P=C6@=dqU@&EVN92jy1t{w&PJQKg0kJH=d;X{6w>{J9KR_&$e_912{;~?@ z{|@eS{`LW;r>PaFowejoLTvLs6svm7E)*B z>!;&QOZ&_<8*D<{{F3{~Qg~|9goPHmDyzeHL|AJ0`n`ck!c_mC9cz$`#+ zuOmKE{pAxJ2tBR)Lnui6r%=%QccEa`zZVLgoctjaG(k7IGB=oI>Fv?A4t0qBB8_LP zqp8x13GgtU&+ZsSC_geDz-i{bCDGqZ!B<}9Pcntzv)9v0+*0Zm?d)W~t7%I>EJT>V zn)IZ;F8?ywQk?=Nssa!SMm-A!Wo16TgKvoAk+xA9hLDx?@CbhMyHJq$FQK67=&2qr zPoe33!w_0sIT0bnSgMnYI6zWL54wuWTRm+$Sn>!8Cgr)jXqTqa;v*wP{(>vKZyLPegOQ=dQm@kyr>`MEnA3Zt`K~X z!m<&36u!uBa(6a*rDJ7@GQd$i5E|+!1)kkhm>d=iMtnL)xMWWu;V-%4i#6Nf6Ap45 zrrofE66Flyn)KoqG}jQpMThiNAtYCnmXg8iU@i81L&5EcISQnA<}Bvr&n32}86ZL~ zxkvTR%P*gdY{;_#PMW7gm;30*$z%9LdwcjojCU@j?ERO( zsn9`EHg#CygaQ8By5#uDmrWZ34Mwv9lm7Fjt-GoO)t;pIUY(%huDy8c#}NGNM1TS9 z)dsA~@aN3ba+-I825j8l7gicpKfo?qaDNf9#bLJYu2g7Xab)fUHj^KM>bWnt)_v1! zDlW%l;U#D@=Db)wf?fi==f8`G08AVAM4ILB$ z(0;R;i|lNAN4ZPxEUr%62Qi;5QrwSCDppmMhIo1~D?MuUr(Ww!6~6a7#er;yn+jwH zYOg7&NxCdzWlpeNx^Hke8AzZbc?J2v+ufaPE4C+xv}}BVIc*Z&S7#&n>8hpZ?@y_`U-Jg5G=k7mIJQ#xvBhr5m?&Jw_gY>nFhZIEMd1l z2`oSwzpb6BSq=dN7Sz&R0p*5NwdG+?Yhj&E9MX%aqk%2Nh}&%%;4R@wpgwnZ)&6Lc z(JiNIp?Z9PeWEGoxyHp|1dtY5VatsER^y5W9`CaFtH$-0e4_E0Cu(iC1I|e8&+_BB z#+A+VGZ#~kgVInqaN{zicfb=y21Y>Q*OqTjPtSc|!5@`iU2_(7Wjo*?n zfF~+<%k?*&sPOMR(OUpd6cWG_osx9-omvt7jVH?b*|X`HCrYy0@>e*9#CeuaSeO0) z)VRzZscN$cwq?9cu#jqDhOMHQ^}ZIIu!LaiYZjD%Ypl@=o&f+Vzr$Eig8m6(al5s3 zxB|dfri<8~rsZ`7kSX;d!mOr$c?*Rn_#YmG9v6$A*xymuxq4N09}P(gKUtVrSa2>@ z-92@;9$l^gV)ZNdljepeUw2kFoAV^V?>jaUmJco zJ;i&O1__bS{usL#t)sTo*BFH|n?%*A`#1!fz9>^m9hl!on@d5}#CGx1Q88ii?5HT$ zmH^ldCv)?<6SyxjYg)hx|4nv2*ZvpTnfc;(7>gMizh)1H>SM9_W?~2gV#3Z;&*tmd zSb*Ko+)rg#HgMur&A5(156a0NLdIa6=V@VqRNT_1uQtus$X_VZ=E#*)C9uR>*BmN8 zAOpKRKW~8hSJ_JrQ1)f7u5(^?FZ=DN`R4jo%dn&{%dB9{V^Mn$q!sVVl757Ddc`9ZVp*HhL)Vv;anXJ@f z1uC_zWkc^R=?^hxzgB9C)wCPQHk%4Hj<_LCc7dcToTzl{T)bmlVaY#f(~ei8edTbLPx_`UG5A-4HZQ$C8lP3#J>o=X zG1A#PySzIDMl=<5^Go7FBUD3$cKos;INkZ4R%U^%1ok`Xi7$e2o0{I-v*9qI@Ix|_ z2Osp@{Onl5$5Kll3NkH>?FnwV`=q~x3L z>RViGwkyZs&#H?0$rmWg;6tp&*2eEhmLw0VCQPblBn#7qOu*q!B#Tw_?t}gNaG!r7 zSuFfY{=NpnPkk{P{z9^Z4qtRbz93mhlpyGOO4H_VJ-QHt$yfqqWY%Xa;m9EEUV{RC z1RZ3Z#|e9#0q|5uv3`_&Oc#JbD3%nKv5n-jMJKaz5Pp@~qa}niq6Marh9s#vihu=Z zSz-U!9;Yk5fvzK&{(cIy;+|X}F?5d&fsgcbX*8!Zp`Z6GCF<)I-?rIj1jllnDPM{Oy)XUJhLnn3r0vT4d^qo zM7k7KaiOwMI0Vp!p!}ARaiXCKfP>1Ax<@IjcMzo1w$|wa+min^6anskyY_jP(*ot( z%YzF*7k&+`nh+NBg1Rp3dJpX(6rq zzd>nXmHkC&8JYN3l$Ho^>0m@KM)4ubB;W$U6!PQ|Ww&d!1IW5Z4Rfk}a- z?SQDPD^fO6XKQFk)3f%wxdQr6b47Gxf5Lf@{C~q-5oSnJrWKe5{p!R{Fv-G>DNc?S z5~!l*JB?NX=_}0I9z(B6Lt5$NW@rC$76s=Fa*zMtw!hlGef(e?4+Qidf^SA^-Cw4| z|7#nciD1Qi^EA(y_uoDK^~9$WLLs6j3$*1nn@1*H&A=ZONNu9DdeeS@+>;;c|Luv- zAD+V-e)=npR%fErEVtK&HPYY9w55SoDgtj!1^Z*bfy>H&oUtkG^!a!sig;}u(g9G$ zL57M36AG+=oeFWrWsh~w?fd^|JVb+k#X~^!Zmw$cI{32|7;xQZ=l9o~4hfZfhl>je zeOLYRyynNaX$*KsX$V-VT;cYJa;*b+K44X1gne&i-YP_r2{?ojAhYQ3=_Fuw!BBvv8hmVy1IR4&@T~uoSxhMN zd^LVD3#b6P;ZBhUzOjs7xfb;(uf692js(~&bZYQSNncC!emhOqp9QCezVI!-ZR~X~ zZb;d+F!h^S*fG@@lXE3sTvoHCNR5m=TN^p;l8!KPRV?Gaj z8`ka<2yk22s<=&=SdFF3=^Q_3`c^sLYg>jP+SdvYgiYLikYz`dvg1Y?Bl6%5H9{-j zm7-AO{aWCpT-`J&7YMB|-u@+;l*mzcVp1~E&%bR!eOreom^p< zldc8}%ro)j=nu)o>7T?Ghhh>3^VnaK3mTQ@2>hKlhOC$Eh0VF22=E|c(CnNj29^Ol zh@UWAei2o1Uy!ET`+|3J3Bw^v^U+)J+4D;R8|*c@~|~vM?u28 z`@pGgv&Kllgb&p2UqMGug(rR)79u%!*j`Qgj-9}5t$RsMuByWPS_^}8`ypf+Hfmt+ zV=gJbTRjC+te>uHB?X6v+l~IWh3~i2`@@4X8In@jisv zsmC}tjj;?%ybjf}I^mDRI7{(5Y`qLFgNyBA7_WPm|3KSNSGOnCb7Cs=K$+tG%*nB0 z2`}KM$(0f9@Hc2gB%%M_yG|yVa?w-Ms^>FC*zYgd>bL{$5^k^cb6SK_0hkt%75p_V zssmp7b6ONcCG~%MTJ$DnAj~W1cYl$q)!Z z)Amg+xE)JWu>C+DK%$^X#t^VcHL-s-BBF`PCZ7FDn*w^zX|oL;U__+Mc_Dv}y$PgQ z;#CkjAR~YdU&c`zx~m}FcPBmeGeX-fANm&{il)DTD3;M5xHbY40U(MW>lwVKKIUjr zO}_Av294lez0Mx#tyxnshJCNl01vgOSuYQ@jxP_j@zeY1l-sd8D1 zJC$Qk&YV(f1!_WV_&Irn8}ro0pn!mdte%i<~vX!Ur7bn0ZPPC?LR>j_rEC- zUH<}6^qm8TNjMdgoe;k$5p8_LNq;I46VYCjh<9#(DiMWVl!&?MCeu-2fqQ!a?_!;C z@~v@>4AF3W6BejjV!eI^&AqKAcEn3NUzd<+G3@ADvU@j|7O#*n0__M9a4R%H5OqSw zQ9D*3@yw(loBZgb%aP#iIQI8A$)X^Z^M<`a#?pXAQKpJBHyHZRNhayR8iz$JV*B56 z=E{=Kv3V89EtB=M&E%-&?Br{_!X<0atX{&oX}=PKj0?Rl4FQgc@&ZE%XLiFXN4EGg zQAdCgf3TcO3V{nyyI?ZQ50UUoXJWq<=|1JybAY$clc^+b&Ve*5$#YEh=(6N5u4<-A8^6C+|f53Q+hcI#mMR&6$|>@b4}?La2QF{@gXy|1U`v#;t+!w<rblPL^|27xWWWp55ddYgtNep8f#-g1nP>uFO!U#Q z-oXQpAH$2qbt^)PBk`ochD0FO?=_~kdcsWZ76snuQgtvP0rgd2#fucTyYaW4OIRLP z6t;x}mjgibaq(|Z9~6v=uF2}J*1(WA1b|rbxKB~@EYW|ZOr73VKN4Y`%CLWtGQCrG zi#2{rnT{y`Oqn~2&nfeQYFPW$`M;4eEASKnvl`DgKJ5uVlwmEpXjg5aLVtWsh?LU= zYt$t~z#^386H(pENaqDJ1yhXy&LC=eBb}-LOz*frKm!kQC0tzkMhd2TUB@L_iX5hZ z4Z@_yKLg`2J_KwOI$0&Ctos$H18(0wRjD*AYZR(LWqB$g0<`UV83$1FY1PMHC=NxJ z%KQyp#FKD&^IL4V*ydyv zX2e3vncp5&I|lw56}`*nIJM|Iao>>AU}%O%YbjKQ~1i#2N5o>8(6Y zk9%Z&Yx286@j$Y3Xxl3J4v4A9@=TqCNdf{<(aHfxt!&^7C zq6cQ2B4x4UhpTM}SIj=Od)i&~O*J&^VFEM>PCCiO5vV|Z(d3T7yGvCgke~C@6@WmT zO(JYA>JyNs>4HyX3+Cyep|ChXIz8Q#WD3Q&F~9jy-)RBl3cQEz#27lU`kga~GvQD@Kyw%PLxkK^-hf%f`rWi<2NhzUd zjNj%NfdJW_&M}>tAF6HYGeBYXlTKaH3O-v+ZTQ#j-umz7eF@0|UU7-*po=DcE5*Yz zxqAqool~uGqQ?48yBSz>4d<%pGi3}M#4gU3=YkKFp(d?51Bt2GVZE-0Nc+^Q)O*Mk zpz9)W<1E8CQcWmcVd+wjxi9Y~-^#yo$wnXfwo%b2*axbDN+eZgQ1d5YGIvHR=O{OtHL`Mbke({z{2})-2 z-_&Ry0`i%o*H(Po{c^!M(W_6WtEAXvz#jS zqyoxod4HeejMr#cn`12r&|r)X7p8=pU{E_f+6NcS6GI*z(YHmZbiY{<(cWsHgLU+E z4ezU^y~Y8tCWeo%?v@99gQTk@$tZ1dd_DRWI7iY?v_A~yQTG}Ss^b-*WGJ6Y@y&Z) z?6NUKEJ}$`dqh4ec?KS!&tGc{=cCuzFTIh#b}n}ZSFRS!#$diX*eFpg)5w9>Hrjk0 zvlaNtrfYg5GRG+n{@wu-d4~E6Wwl6I;bv#jZ}xT{wDR2ibynyXo1~8>}U&NGL4`9nJf#3Q$FF;>nGp8Buhdp*F~i^Q#lMa^9~muq7nfS zYUA^Ke0*xhyO)tre0Wu-g0z%X=r_yNn^-cZ`(u{S?bmD{Yp%S(un9=7mml+NmYfRS}UBLnlGc2=r`CwpR{edK*XO@|;`+{2w9js{e8j5c24o(Q{O@k?n=9 zDB6pK&V#jQiHx1!E3Lua%>dp%t*L*#f4*w^^Zm1*(OS6a`TbK^KWC#u+a5w`ykSg^ zCC?Kno7ZD^b2^uNt%TjBNa-D{1zo?Ql(<9g>i0LIQ(uz6y<;}d>K^mU0P2baJK3BK ze^@qHWikwa@Nl2+cm+9Xsqmnj6PRUN{je|fqqbHEO)PwTFU>=u6qhR1_99A!uE{nf z%@1gJkYR|urBSLg&(p_mPNml^O8QM7CP|Jth9ep)wwfJQo2yZy3z-XN50x~lYsoxm zh7CG(RnDa1zB4@C`@=gE>*3CA|@1+5?m-*(c-pTBT>#nvaJfTQdrZ;q%kZe z{$rHi$Xqneeyl9rI5KV7qV&*HSDlALPx#d>C1_5xz`nK0{SA8%)fkMknjGy41x@kv*6Z zl_>8mdmp#xvak3~fDaiZVB@5{s{FgcHr|oO8BDzeqm=b15EKX@Wj{d~TfNv}a3=)R z1ok3EzpxdnWP4{hZYYIDGI06V7(JCbA?(?m2CS%qt4$hPYrFT;o0v)kU1LXM zr*YP1an3q>t!%h-Wzn2=Vzn{o4W_h=aqkLX`>jNqi__L|mQD_@8XDmOkZ380F2q=N zhDCylhE;B@-CF2@zTG%POl(^JIPyOjA2qZ*5n%h#cylDw$o^!PdGw(SGHJ+fUwuYo zP$@i~dF>F-TrPLi1(a&E4#(p5fXP3;V}>p2UKQh!$}YvW+~KilmLf0W-DcDLyw2+5 zGQIyS@Iyoyqcg*`CEF%&Z(|bG2o?RAyCD9Q|cyV8jZ8 z-U#a5r5#Je!w*$lAK70aEr@GWrK&9qd0I=fHw9a8Te`6y9$GxmzIAVare#hilYZO> zgk#fvn(qFXkISV~uc|byl?r+-&N4;g_k7gE@$QL4Dmp`!E;U_*RUvF$YE)G8JLQ(S zxw(&}W={&c9te}}I!n;TksquY+0GlnH^dVir|wwv!0FLvy}9R98cZ)%FN*Ht9{xb=OPVeLee;T)`Ku& zJf=OiBRg!KP;O53%GmUi7w;ab-R~dgxf?5Z-D}2|zhHBm_mF99rR)pu?k%%@VNSKA z=^vLW1jP|tz_fE|8u7#G*R#=mT5?Eme;Rsjlg{L-G zbMdEho@R#dYCReXhICIk;M#KkVs+B&wR)M6BrMgiI&_p_7JaYlvICC~Z;#LYIE1qx z2r3VrpamzUPG*X4x2-cv9znKw(g(-!Y|p5^@@=n%Jbt=8@}`(+#lQc-)2FQ_Bx33E zUTlMF0Y4^l&H;gAb7hu24JCdY%=6f9U`@XM*ndWDin> zfv@tR!oh}T9?-j&FZiZat)e!R9*`M;zNqhg$W#(ikq(Ef2)>$;B@%8)R%RDaS***( zgg1LPTBI>WcKWP-90Pi<4*r$FVuHzWj1>L-mtFm`>HCE_ZCp#qQ}1kfhW?5H1FSn? zQ4yNV*gVls0ZGQ5F~xC91PBnzE@`^C46dnP%fxZes}SaZ^kALhzoN_6Xl-v&F(mGE zCsUZySY_s$nAPu5_U6kbaB$Lm6Xh|WQUiCIV&6QbD&)&Ji?tQ3ns6N7{J@ij-GD@% zfE#1ySzsPx`;}ih0y%pRYF>yVUaANr1BhBt3Of2o%HZKmT)AQ(mIX_2U(969cEYBI z@hTmXN+z~7^Qfxeu_9f_%tpA5B4baizl&C=(wUWwTyCC2#2nqD{3pAu0_hz_1fFH4 z{XWr;b_oH+4A94U#!D65MGL(P$iAL)rs95m?QTMHE)^|yA$<*ecKdXxDkxqh^ zHndzl4{4Fz1UtB%S#Xy$2-L`OhGic|n&JloE$Of~c`f3oV9{R8-p0^8)Vm0=6FhH5 zA89hu_C&j9R5(u0VpmPjj|mL2ej2PFQi4l_M;7Fn1C(i z{&k&YiAqT7h_p=bo|i3`6pAlU_pYIE#rw+fGZuKR0<^`bubLB>rKZE&M*^m~5-Jl> zUs1~}JM{0g+F=xPB{N#0c^T-#If3#On+R zVUH*aFG_%{4jQpo5|WozjE)UD-^#%y7;=N9v732yT|I&>NLA*D1&u(`@BH*8GQ-uyOlLHa^mnfhiP?=kf5iWqj#m1 zu{<10LAiW-lp~MF9#C+d^>^E;5X{glD@LhEPbfq~>0a()!BH_@z$+|>1!S%rMY`ap zgcid`MFm0#h9O19ot1{h#W9{v-wLNHZM7AvnJ4Y!JWa@ZW(e_SMba(xR1?hr511r( z%*_eKV>EaS`NH7JeHLpUK2v0*R98ld@%a6dWo6pWC<}KAvLo@pr^`^ZyYX+(pTqGv zS+k!GI0c#j7zQoo|r<6 zRe3qVMEE;F&L7^ua8Xp!YR^nCfDuZ0aRlic3e*#&@)qLR^J{r zaN*HH@hkc~9-dR^`ID&9`wWI$7`eJJQA(WH1VBcX9?YW^6Q1sBd&$U>IpgH0RTAp; zqK)t(OJIhdfR))tyci_Ud`KojOuFqN_X5SZitwUV4&w6{UrmJsAtj(kNSO$OOB&>` z_UbPvXS7bIm*7#M9Ms6ALSzW3u(RQZ$7V^Jv{mgmhJNH+N?%t)pb_iaaH#^C0^k-? z0k}na_j8PxtV+R8+dYP<__+JgDBUJYTjL&ayjX+%eEZF#dBB_R#<5h#NE)#jaA`M# zviL8TQ;#gXd_cE`O9B%h@5zNZuabo5 zUrW^1V$md*Sv?3n!#7G0F7}Z;J+;Tv=)U?kHVOf>jWVf>0BvI$oVGOXSgfR|s2S&Y z7`PxF0%5sk5r}urYNb~UkSx$))a1mnE3H0#*Xd5ekC>m6- zdfNb5ep5R`u9D>YBI6fGE&}*)o4xxnq|iE9%uHaBW5pcL#tgi`G!*-!nD(2nfPNz& zDV}Fz#%8sI`3dIyjD1Wj+&f`WhV5;c7jvUzt4FmRJnZ!1Yq>M)e4QQXTZ$;Rx}oG( zJPZu2C@?PbvIMqy0YVUPJ3$gd7suvPH3&wbTS0Z7xQY27ggqE6B$KlmAt|&xsmz}N z96FxY?-+4wtWf4qg8%>yEijxt3q#q-TUY*8?_ut2a6gNW{9-Wli6<#lq?s~StCIub zZ>hNwAEji{ml-{U;V8Ys?J)<74bn)#7#h$Q1sOpU0!PscNuMRaL2$6&|#U117;G7VzcvuF@u>>*@n) z^m}*$cOj2sJyf4cbfZpC2>GO?B}-@LJO6i)>%@;Zz~p6C%X7Zvy@sJpo9}ugV#9qP z){PjmyQZ2Xg#0Ef;DJ}Tp&(mmoaCtmKTr_y`>}a?0#5`s`Le^ z>DkpdU!aRjW=gNp!+xfji!g(UsYs6vj?uJbdR`L%_k^tvLO|ui&Bh2#A(u+466jd=^P22oXk@iiGF8`BW z(RpY&K`ox-T-1B=-b!LQm$q;22xIEe1yumEp9);CFDL$CQ*|>2ZL6_+Nsphg@358y zcR`mG>cI`q^3}&)a0Abyjj`SmJl2Y($MGTJmRTpNccUk`mkEgM%c#{CSP8-5R5}d? z9)hpCG0-kmG7NRnu;i()?_}51tGLBD($l{gjBNymjp^=1z28gf6*_@3+>wa2GKhmq z!u(Xt%yr0{x4H2?LF$xg-2B=_evFkS@HKrg?<_55&pvL5OYmhRRRhU_XopwUo=VB! zr;q&m?b@h;5We#z2;BPay`G{iUA76eGn==h{o1!-WsE6OU{COG4UBf$5tbi9qzKL@ zDoHy{Bf%;dG}O%(%XbapC+^2uah1N%&>bX&oIOA;E}z%W4YT^}H%SM2)DvjTHD12P z>ZxLwUf#W*FwVFNr+NE!+0`phD}kvLvN4Qvp1X&N%4n6&2Z>BjG~B~^TZVQ0%nmzg zw8O=YGKaeVal0~8ic`!}C89AlO99vUy|obMnu6%LiC{tuTT_Ga+h{=1IA|7O#&()@ z7Em-MJW!eF@ zMMUoVp6|1gRK?wwODEWNsq3jj`WSHV67{B0i?~BMJQvwh&}IwaP;sI|%4dxN%ZG^T_thuIJRQw#+L? z?G|290pUl%3GpMH?LIkfddc~cK>{uo$_4uh0)^j`(Q%IUC{Olnrma5GciuA96j1IW z)D{4L;xMh*SK2C0k7MRD*)H&7G2tY8Y-A}gJKJ!)ksU|s68Z`r*^{|hy}e5+VRuHx zWa0)jX8I$e8h~~jok=hUXL{XV=(u;cy}kWlBtMjI#VxY!_QOQbx=YBUc=}8%T*~OC z@XBhS>#YlC&W{TGMoj|oSl5V5BOz7|)=dkL<9(M5mP>0)JMjJ?3rL^O$B!nmk?K+2 zE6ul5-BpY;i`WPRhU;-!+&-s-A&CEQXBm-oqMrP_QzMtk3a4#p3a9L z9#$pYA&pN)NMc;$+=~ga3f%X>mOR=T-$-$nJ&OQvGR#AYv{tpB@Yg9e6XDa3A19yk z(5eWsd3gaaAG6hz5#pj#5A;VZZ21Mlu~qaRj979=T2*&H;f~#2%~JLRXU(*X*UPP! znl<%zJvc`PTyy%pQdPc7E2Ek$3%_z^VExuh&djv^4>=R!9*{FN!*tI?-n0O6CLgQP zHD8T|U31RDr89*spG`cE2wIpz14M-Kz#s_UJGA#=UuxgdlS_FjR1=_j>l5`SgT3Fi zsdImjoq#coX2>Dap?x2Y(ZZ2$U4D_HKDc<(RR6DY<`fl&&Xp>z`!wt)i%x}bjf)Q> zKw!7IG-2vkdc30e18hq=h0>Q#$tywWh30lVfe;D8wkF_qPOdE+`$e=hff&Gea;H(T z2vT##rsT9L9GCGas;YrkbgTAhqF#ezBxfpH^D@X|utw#XqNo93#(dtz{tLf?W)>i5 zf(41=AXg0mHXGmMUxMcQO+e60*lACuILffh%vb$?n0u?Jx)yEC8rR@1A-EGHxVyW% zySrO(cL>4V-Q9x*cXxMp_!rr`&ON8@`KwjkR@JJW)*C#m#$=8$djCEv|M@?IChOmW zCgwfQar)Igsxm>Chon8ehI!dx4N8_Q+!~a)RMZH2w^E}7dk;Z?=%JWXfK?mLXrc0V zIUuysLQskO!dmYnNj0ke2wGf`-4XMZ>rwj+?XZD9o>=q21VJ0Lc8y=S`X~}nYP0wT zq{9Jx+M@%btI-8(Qsx5>3Qn_FmHgTBtUy9TWmIHlvsRQXJ*aJkly2jA^;6F7$DAf< ze3{|Ua&8Obrsl`46(00^iOCw#hp_!+lGU%?9{9gu7ZBWLg}|Q@)i`6jJtm#LgGn)x zeiH;P*Z^DEO^22tBWQ{(&^fJ3wSDb|T_u1#2eagoAaN<0H%kfXZzPBjPYw@J7xD~!W5k0K@*Tod&JhK15G`T-7Yw}@MG|C-Sb z$~G;^nUO=_mNR;KqgH)VOAJal5_sfpXG^*-XemKROH33Ac0j#Bho($7@Q4w{5=)S1 zJIMM76waBGvYVV3YkHmulJ+*sngpM>G@ES`hv;_LbQ(!_H#lqfJlwO#zjS&NHbOo^ zTE~24HKPldP1)%0vl~rldwWDb9({>(q71K0BqxqtBbv zKg%fxL&%xMNAli;E<^M7@OTrui)l68D0%m3S%vjiyGm$ALY zFg4!+;OB6+g0%VTbxgWf_1I*O+j2k;BcnAjqrDS_Fpj-?es78aAo)9!1P#(Fz>%<7JuYSU$QK zQxx0y}$}JZPD-nCmPE+9{2{=zqnR0l;qd>~-JZ|9t zTKQH?zoWRg`SH&vYVspnUQ!fnl7MwCpxHcaQ!94nxQ1CX_0za032fUHzc zR(U#nXOZ?*G^wWwWixvGTb~wP zqnNn_x?S^VTrIPUmeQNJKr4jvZ2{%+vbv~*xzJNto4jsUPb6YJs)vzq!1;Al;{c^q z0@C0hKx=>3);n*@9=i(#F%7wa@6jqAhqIr#VU>i`e?$&>^zrW_tODJ~5w-_#gq>+i zJHlj7coWOdtf(aeLxhvM2Ko}Kqu*x^`l7BG>yqn3KeU7$b{dLxWG zF%4%K0K*DQg3kdy!*9LuRIoBdR+`JLg~`QK5i^n^^X3o{vq~$i9M0$Fl&qzDed(in z_V5Y-Pczulm7>d6~2@}$l~gHn|LI`TMYrA2ZSEr3kkeL@yRK%LByP>EM1`8pahI^ zjUw_pNw}=SNeqW@am1?bK1##3C{jjMFnTYJJtW*&;+jLKs*X`nM2dN}D`?=abSGBL zpTC6yhWXs^LEWPhq%VV+@mY4~ca%Q`p;IN%uf{krOF)?+f)XQyy8|oPaJYg*e?Lvo zA;)AhMJDt%O9$mV~JEy9EzYd`*eL zFUrZTzvb4nP*GV}m2qr&zAoP=ntthbiBqsorrkE+eK3GdMr?3k?%twt#X3zfOhhUi zoKN*YG@f5}}tLR6M(3&VQvK@7Zb)z*A)LaNbX0-Hp>4Jc&{ZLaJM$<#4 zLeO%IVps_yJrJ{eO?eTYpsFVuXa-zY885RilZH!rh_66 z7?92&S&bAHtoA5QDBOEOXmBBJpwpLIFq-%+Bz-zqiLcIZ>)>}qFS#BP$#uF(o?vMI zI!rZfX(2r<4~syflLEJV>4-U6QKjrGx){9zPkK6x6>q2>TgrwEg<>I&89PeW!|{V13ViRb!^oHY?1XXV$q#`Ho*LuZ#U56v@uukK4OUXY?)z zgL^dk=^OC=Sn7eV?|LSWv|{uq_YQsG9j4%!^$EA%ZDn7b$R=I@X;QWZf2Z%WLZ*g39c`KR=*iF}I+C1L zeKA^jGlOcBYy8(l>Aec~F;S*nN9$Bq>@c)Cg#JE1Lf!|eY*nd-KdbOO45`)`;zciL zev{rWR8B?w;b~^}xQAo-X}RS)S9HY5;@dOUZOYy)Z;*lJ`bhKV77P;YA%?z{d(Le< zOXpe_Z7I$MO%LFEEM%{2LWI%|mNAOQlTkHVS0&)?P%IVX>z(n!0-`UADhQ9QFM-#9 zV-)=@a)D{h?L92qdE_D?u6r?1tl~Aje}eQwAxtz)?I9b=LpQDCX7zid8E=W7yAZog zx8C9+HWCRR`}hKKAM1Aeby1qzHRab_nv9<+S~EB?wI$aa`*M#H9GODhpSb0K@#Z)Q z5c>KL822-uG=Gf8+EYBPQFO(uM};f;ZDt}9jS`992D89=-^%E2!fA6FDt!l0OV4uD z7N2I9@<}sh3?a?p>I*N7gYg61ws{tip_W_Y7os@7$ ze33{AcD8SA%+gZ)ZkM-z23rkr(e@oe2YBkaO&sK`c!z`}8&olVQwlZ6oOe|NzRc~I zD^wpA??*$6@m$HYb#rp=TJmXEejqzpe7bXzp|%pU`Ch#~h!E;jIRmA^T|Wgih^HsD z$E~wb@!A{KP`cQVT52^%ewsB!NxNnl>3Pxc*V7r2h_+Z~W$*F)jx1C@JZRx(XAtM! zUuKR5dcEW}QZ+%P@(^Z3iYrO7)p}VjgS_SRoXx492)2KIJoVhUfhQ| zz%S1FEK&ubFr+^j^^l!n(+GMvKJn1A`YzJj!dMSX#jXN! zVj4LLa)XAB?{TJWM_|5kWvz@9>$s|9=)pnxsZ;$5^VZRGo2gIh!hJ4och<4cN;yG8 zQx2Yj%4tj{Cr2zdpZ*s?`4%F206Fv)B^W7JE;Npo$z(z%=f!WHPW>a0%aAoGoQBg? zrscB~auvh%@oC1jsx$V(rLyO0M0c2wEl`)AYlR|mL$oLBAopj~9#WrPYKEOjZ5AHN z&)T|I@-5jjk>=d^xu9^?##~tp=9~LB9I%xmjEdsl*5CJ8NZV>5npA8xLS|A0`Cs-m zWzHC?XL%{H+ECw+*MlRCJ`+(8DOEcZIb65|)x||dYc?zD8n=?Xu-!HI zoH97>aV=>oeR(02sATV6A|02E`DuicC}ZW`y`q}#6Q7#NWu)w)PduZ|ygmPxU&E=2 z@h65r+FnRkfhwieB6~I%e1yhkp!!%i#C|o^pKgNUIIzADiFO%5Wsk=s+Iwt)GepdY zSPZjR1rTB-3^c};$ro0A)e%r|gO3p85iek1&_%eaO`@rxNxue#eJ{>d{IXLeYz(1d z_pMow-e)qLd(-_H3q`uh9#p;TZGZRTuX?Ifzm_wdQft@Gou1$nZzYve8ljBL>Jg#? zRdXI%kn@aA{~#4T+o2pyfjjmEEa8;O(1A8w%Yh!hqvu!I1$d3^UGpXG>pCw`kLdsM z&sqZ4IZjqiNYv$9qi!tqozF)k{ITP>1-EouL$HunC%PkS+MY%U4J_#U)_y0R$=>&~ z+Zg=j%pKgZI*#hASKK!%^}%j8Qh=VBft9%wR&OHUwOPG{D3g zBHwNGz_q;wTGoj$8#bEQ?tlo6w^n<`3dO~}3zs~doPp$B4fOTQAx1~#FhPEN*P^Z> z!sS!KDEliD<7{H`s<0WF+nKW2tIQPq7Y}xg2;pVW`NzKC0nU--ZH+1hCr>vi_LEWU z?#nCV!wxMJrC}AC-0b$a#yZu()Lfa7il9mqgk7bEr8{Hk>*6}y%~Fc?5Ewg7%CtBu z2M1owE0ctlgsi=|lR8x+tfr3Q+(wKN2Z|IRM`s?cw>3Fp)4 zq>!PN8x7x78iG`5WhdTZ^wfP>F?hTA;5-ik+MPn}ZCxnU0=rm7+~{H8yThjDS_88Z z#FMRC$`G8+J2az=s_E69nRzQVDIS(cvv9h@ zrqV1DnXXP&5}8cTl~oWm0q>ELSl>iCYQMgl)Y8q1%{N8^y9foZ_#l-MuyX9AT0;7# z&r@%@LXz9qbUZY4)_fgFPCQ;7Yf_W#?1#`772isn=t!ZWVQpbR=+5HMgdb$*u2Qq= z=rP|;K|WqaWGrOv<6!D8-rzv@8Zys2zp_G4JYHW3`aUJd%)zCZR^ac!&+9YqqR34tbr84Y0AP}e|VMqFBrN0 zv_5Wf5b+!CrBgWSV^b5sm>Kt@l{`v1K2Jcwt?#7`!KLyZ``ezK#aKR`Rcd9-8J_hR z6V!}Df}ghFlRN;s`4aA_a>A8vL!j>|dMa8EX--d{M!P^CT6CT|wczZ;x5Xg+-k-bF zur=5k>ppilZ+nX7RvnL;XaT+NSr@In4SWSA5^ouPdiJ-m$gkg4V$;!PQjAWI9I)2F zt`ec~sz0Z>Z>cv7qRwZORVva~>RB(eP=4%L(IHhRVI8k#l1uqaZ` z4%%0%x(MwNN*PrU7xWPXKb&()NVAM-LJ5M4m@w0)eT4;7?qsLbZi%Q_xtIW&i6Z+bIXY@XE!cc5C~lMLq8t(pX6Ge8l^Yj z$Z^|Lz4SjXsLV18uV(N__k#b(#1vWSykE6?Q?T&jk@WXV>R17x^6bB!rbIB^1Y8f8 z_UlsIzI{#RkA9%?GN8lcbbDFY_Hp^8gBkQv`LYk^;{3&`c86?Pz^3Ze^?oS#yltRS zeLBiVsrxCMZ>TijR@{X<$%;WuKB_GE={fSHRr|d&*<{y`cB0hNzy7ZT5rp9Apy*)b z_jC9!)o))sPltOueXifupL;i#{qKFe?t4&v8zH>8;#bjSkOXA6W07RO=Bc4z0W9sDM{O$xUBaDxd z)#6fu(@N3Lz1B^uORW(!by}8m7PDHD~EIj}r6ylWIx?y~Z&I=KEW$WW>ZmcwyrR5v%Q} z{P557J-AS#&gsJhF36*Jq-U0QpSX2LVZOe1tmB0&zn=ti+EN+z&V8I1O5-(_p}*c} zRFP@cxkPHs`j(x&>YFIHQl4McNiO2bL(cDo)*IaS7JGXu8J^4s?zZufl_PDVA-u|E z-(;#FRau1I-M>HjWaQ!dwp=YDe@%Ns0_)|9-OSIBSf5e6?ri>w%-vW2?=@417 z=8?b58^$W{KBo~AYTJ3mt`X*%>WuOfht4I|A?tgLkB`|cm#$@BG!f5nSu|TrO;k8S z#)P6rxsdz@|D)@DOO^9kuxUIndI7z69 z^a>&!`vP8-q(d)@yZl2sILeR8_A9uk(0g$-DZ^#Av%+irzz$Qvb;&mSj_0L_G$`wgtPe`CO zj1_yK@`#(jaFmY&_2lXl?mhkgo4P zmucV>Jy}yt9609%!9s8}@-yf(yL}Jm!}n%h#x|zZOB(lEdHf zL5)M<<4rqCk9g{l_mLt2534vZlsCh_NB*fK)*%5e$HIS)1d6X1(*KC%6xX>*+$v(8D^;e6arWE|T^Kr6&W4|%8a7=HqX zlIC}Nsrt-sf5S_$kcW;S1rT(H@6Fj-79S8QC?~W{=5jpMnFbM zFVusQ*gm$hYah@zqVFk6Tfo32_rxO`gcW^CfOC*A?Qm`gC6XGKL05q#l+`r02#mOY zSp!WE0}&Xpv8oDadr)K=wJVH=L^K* zAqLK*o%+<7W#1hs-#IkjdQdLWZAKeb{?{gFO_AcUqMhj_Iq0#9;w3n}*9FXKGy2Cm zXT@_->4N_blUvUFgUPjI#>ebY2dbkq2o3np99^P+-nVy^lP6slpmu5|r37g~lOwnm z@v&1A*O+mNihwxkuC`{gYumHphD)wvW2tmV5ya(<-bz>x_5Q(phYJA*Dd}c#81u?f z^t_z4>HBz1wY>-2IV3mkWrB^q&>v;`8Ulhla3jLwni9nWe(%54Jzl9xg&|wv8D~HL zVU>-Jx?V;^96x z4i=Dx4B2x0538WEQb&Pv1qK2h!|0XC_OPK}H_8F`4qb7mmZ4xGa8UiB^m0+i)*P|* zSxOp+yf+KxYQI2wJV#{02(8{mA~f(TmIPF#igY+8Fw}=PN&LGKSDKhWd^m<;)em4w$sJ|#95T^0*7 z+k9uMnFn>{s@{-@;NS*S%--lwZQXs=qq|JH2Hmg7>p3(>NyPR1AW#--{?we0Ug8K{ zfmb-G67@_Q@}`T&fjXc|DGO0Cz95vh>7)Qg%CBuHKZ}Ka1y8?Ih~KmdUxWbX%TB@P zHanG=1MaI_VYBVz07w<7GkCuR+i0TNH!%AE!~*d73m}%2MvN1ktthh)B@k0X$&3ig zTR=fg%+5D7yI34kvJ~odC5z}eASiHeb_Y6J&pddC_ShF}ZjVDx|!g8ngzxI z?G+c!-RPN5i^Nlj-PGxoJ~W8=I(yTE!7hctI^@8k`5GyO)g*t!~fEn|3Uc(*1t|<~+}K|v{ot|i9@mdJYQ(3B9BsDv`r-7E_%;-6{FPD?M$ugm|XVb=Qzm`1N?VG%- z*b&+!#u5F`U$74LV-)s%H>s-I(xPSd`XQ@p`1K+MN%1l^+|$cxt$J5-V*71$6{AhU zX1zxEl@7jVY%Kx>7k3V1NCdQ?lp8PsB-^!rK)#F`(X#uTxtvm|rY%`~Wlu(0>%l*eVn0ocsIM{Z%g?xd1krwBA<^wP< zsg(zQ*Lna(!RU3L=Rz0e0|b{R4q5+Tyyl&e7l&7Jtyc}Q3kbmV!R;y3NmoZ{86YUV zvBF_I-(&v6QNnzucr5;lAET81XMXG@CVzUu`te^CB|ZLYfT9$?x;ZxSPvn^H^HA>Q z28WF;2AnLK<<2*9w?sf#WqPzxs$^0^FV(k;nRT0;b%3g~j@R~n+=`KrT;Opr0D2fa z>P?__I!X?``)MCJ%3A4=0)uA_I(;IIbOZ2qk5UP=jI@#mbpQKTguL!RctkNmmF+X1 zoN1xiiC9%9cj5Cqtx%|vv6zE8LlP^I8}La5C7FiL(d;pjPIo&Yf-6BLW}FUH3hmQ1 z`Js=#QGl$F>att^StILP1xCwSSSfMm(T^-(s2dp_!ghvXzc|ihr?!FQ#*=5R?olDN z)ul{KICh_dx!a?f2VJ+hRzq1V+ELeq6=63&GAV01l;j}PzoxwNk0~$5t5$T_a}LQS zA>f7|#v|n+?fbnljiN<-3`44Wa;tw}gKL0m2=00@OT1e?S zj#q6@W(VNLR(Lam|K`T1j=#2IO&jjb8N5~XgRi5n+aLshdfW+|VFQ#5hHx?lSK5|O zk`t~LXPlun6b>$@Z818bEFXpvx&_slW-fo|lk)a34snz1lL(su2ASEfS6x>AD)v8e zl23^}hhZ(Bjt4PD^%x^CLS$(l9G1|tIX$*yT?KK%URkhQw_$sr>V4U6g_uC=)Ms8& zb2eeeM}9#%%_Aamq{u!^8DgZ*!|WL_3)M$>*VvT9a$Ye2_G$}pgZ1;NsdLMf7hYkv zNqtUh9AX4EXp-0TNO}ldJwj#g4OMyj><$%T(9Rv!VkNMX)BwA&EyV$# z4RGoo6VUuJDg*jo4g{V3K0>l>+%tKX%Tn2%iE2MVGH zX*-x$nqTYP=Sv+~>Xw5l=*sIa{$@uLrVIl!IDD_bfgj3&M02z>BXnJvjeDMLSCP#( zpNo_FXZji`B*25Tdiknf9vl+hay$S4p!L0xH9!@>6c1i{$qO6YD@~iS^Z`cuGaL)5 zetZbfZYkT(InChre!s)ijkU@+(irA{9l65kl<8pj1btCFmwpL03!=%m+Gg)MNpXVU zRzr1-^F05XnG1PFiR*R0L{`1DI8MhWk{!G3G%Q;sesRbY z()^)MqKp)9XRVY`>xE>Fant&HbmH~}+a-Pvi}0hy6Lx$_y_=_oQ&2WbbV!b$Vh$CP z6G7>MI*jqru?XaaLq764^uWr%PfGox^n8ED@{Uqo`U1^*#2IaH)jFq>f1$_E#n_b- zObjW@px0Gk4xk|$K1EG{P_xnqFcO9m{asZ7;SPtR28V6NbiCwVD=&-r&Y^{&)2nxx zzKq6Cy8EESt%uWroCNj5R9uA}+6dGE#g+-Lgbhvj@L)+bxr7RKd;ZXIDS*3X$bzM~ z5qKySsGJJO0@6LE-)zk`;K}Z^DM~(FZm6(67dcH!p&qB_shVDYTK~%Iv}i3hP0}H5 zw5eLyzfwqtL!NZOu8II_mskrNC~B6}{tYVs1l-n~s|pcz*?K^e?Ji1(uc`0ar9 ztAts2%UJ9rFBj_^4O!HD+h`&1xAcqDAAxf|xeB1}sD&@mb$E-tfRT#AhWc~OJA{)D z4nRus@itoFq~kAPo383&b{0GqLESK13EVJae?whC2!kZ7lKH#=Ndjm;uy^>T&1tax z6e(T_FRb(VXr2fR{8xd10ThCVMeqV(0YauWva5se>PQp5KbGLz|!LpVjO|9hl&Jz>t)d-(WLeai zEv9sQ4F`_F{ho}D-(dzvK{06C$GyJV~n0JSil`Wn-QeSi87NOSp~l3MXu^u)2TBMN7eu{EBV0e^9wOklq6__#owJ95RS zH0c4K2#%m&AY{K?<+lWe0V;rj+_Amr8;ihzaU{$5`;Sfe{e=*x8x8PG02RO=Le+8v zSgd_INhab3Nbg$GGJSjqd_GT0$ftrayvy$|Y|z;E)|GK$2~|Ue1n0l~v)PrKhBNTG z5&zFCNUZ-03R1-Xa|%*%M6F3{je0YI5sy7bOdXYpWSp5$!JQ(;J8oV(wMseN$3&$G z@4;E}XQCpU{g|j`K{9*SypN8T`StgY}2f1Jce+`fn~lY4PnydV%q^QvD(@_U$5#_KbSgUk(#gjc4r zzDmZYv^J<6hTYN~tm@phrcALB9a+nr__tE&EKPq{Nj-mCNuZDau#z-bss=g%R+7*7 zUa6&4<<96az0^37zPpFhFaGni(en@~=Sp9^c+1|5QQ^%}5Umc@A{Ju~-94>+L#nZ{ zxZkA}D*aWjTqw~P zo;tKp|LLu~6hdLC+40S*oa0LOs1KOn~3era9evT$z zZ1JUjCwSiDF;3{(4S8SiNp$sre)x%Fsm-@tOxn6YIYo(pNk%$d*kR+d`d!4Yc?i2m zVm`GVVRy;oNGX-crk=?L(r{q18y@qljccT$@rE8fX|hf8L3Tll+KXnU&&oxy@x}PH zb?T{cQ>$^fHOU4xG}~jOl`ln2+bXVcGs0=gJnfRFbcxQ^v5L!49eOPdP#wAgKCf9X zOt~DCYt346*VEV|SAXdt)Ud?O!(5Zs{@M}V0VASq9JFHQ*S5I`_z9fPGKW9)Z9#u1 z-Hft1zXrDIE|e-2j@50>;aHcqUzFP(8$WF6%}JbTIIh+&R2{LK30oB&7_OYtR~`1L)A$HatS#9!wE+2GzRaiWgJb>YJq)7D- zoU496e|=(yUoW%a?4$J7(DA5JlRwHEBQes5HorX^N*mD2S(dxPL_{q-tbj^*(qqIv zOJ4Kk_T(giH55N{f1X1K;P>XNU)7c$kIy!S_tav2(!J^k*p{F(ZuxFqDmk&RtR}U)AD40(q0~J`H8vQvZzh%6jZ`ed zvutFJft>qgJI@;_$;>&)Sh=3TX*vQmO2yNhxeI7R@MOw)pQm1e3g=;z@!G_FlO7_q z;N`Lx&Pg7zVc8y+utv7TWabZArKe%R)g&$->|VY9V%^oHwYv)aepWIRru}lPy<~e{ zIn*9scVil-JpFTL&FDxfXUgD2@w!6I^~#mBjX>tS!?sHA5K67Zqr{rEMO6I~MAX3D zIo>LQqx~#fKzk3a!}=aBx`QBk@9p#xvzHEI_)S1b^S3>XF9_`pAp}$ki5>jiL_49l>xk9GRW{ghTenV!M!l^}( ziL3pjZ^aGNfzjUI?U!&r@a3sc{+28ntr>XRN4`3LOd_(t#k`2u?7lepXiaEsvnK=J zb*z;T6Bl$9;N1jg5_E2o#~C)fC8L&MY{s{>S!L=c_$jy!I{BIvzdJ(P{EQ6#F;x`h zOO#rFHoEJ6?=~p;L1(9DbGDU#)Vp`&dojd&anKuu$op*BmkZ{q*2JdR06=?mRwD*k zi14ziq9rw@I&Bs*S(3Wq!M6?MR+y+3BM{kfY{7yg>#RV$_5Cna8Coxw$3~_#JF3$> zdd5Xj+8bKU+CWx;R%C8F3L`PliOKSRZP92?+#Zi4^St~jlks%|AvmQo) zHV)|iewZJ47lX7e>j@Qi3!;=bV)>;HK1^c2@ZMFDl#_I@AKis>aO`$)kVQI>VnIfn zm!N4%FqzX0FUGf?ILvd%WzYij6|82Tv|1{SXV2CREk;>2+<)i(UZ=i;qTTum--D|9 z=0e2iWt4q*RZFpkkm^9uw@I-hX-Azq-_1`ej+DOJ@b7eF@TP*mmqO!x^Um(IAR8oWTfc&R5U&sH}HJ>J~{VfyOuui(_N1ey-u(rESiJ!T%FGP`WK~RhJb%v1<=#WzQBjhY z^CP>6SogTtRiF)yDpplD%pPf4Uznn7B0SqxG#x=e(Wx$+<16M5fVlp`Bo;R4kR7G0=EuLUBMp?q2x96{ti$jfWC6l!Wcp z!VW~P=+9E)6Te*}Z997!7iBv*D^DQ%S?}=RKemJRe{Bah1XKDVB>rKQ>L&9iTf~|d ziTx#&M(9sV{w0;B2Y*PVLf?$VIO+{vid&8>RkJ57aJ!U))l{UXN|qHJZ-2VV%-&{j zx#s@}Ex%5yhV>FB72MV1$t`YI%RP;%ajbsTN+!x(L{Vbf=_p^^?Molcn1U=zA0hwg z-O0tO%g@hl!josO^BhrB>q_W<&!4`d>Y@BWf$-_nHD3IoKt?@2D3Ee5Scl4<>R)>+ zs1GHB3zgx400p%iDVH4^MKsUXl6jNwlnWe7T<1(ctgiEY{JnIX29dX(HLTB6?h+7y zWZ(Z)x~rBa^?Cd-;<8lHM$d%3$GwW4A+#WI;cV^#=Z0x3h(n>iGvl63EKC&CJYKHO z1}QR^l@f!dt|BiHahapqIciz^7CzT6)C;!yOl?FfJ_u0Q>ML1iy2FKe-Jl7^2-Yjq zu-TfH!GteG$ez&g@|+R+f;})%L@sj6$DUajD&V{ASeM&;<}Zghkz?dc?#a=YtsFkcl$UIX(eI(8wrrHEHV@&4L|NobaWSM$bkAj#rJCSzr8r$$WCyS_S z*ydvD=|Bf?3f=XIaTz|P!=@A0FblEmRAkxJ8vI<0Sv6lF&^vD^x$Q2Q4A=s`&Qs&C zGHjI1{UaSo_#+(&A)eNOv^%ZGE+Jclijp!7QptO+f2dg0mRsh!YBd8J;IB?&K~Fp2 z6bk?Ht)-M8QU3_@f!}DOQjsuu4FOieR=F0W2)O_-;xF6ksO6}rF}p%K*im5-H7T6bSaDHPRDwzr&J9CzwGOc$y8b^rvM{Q&ep2!+Xiky+EOoU#LR5hmF!-)xw7Na(7y%C#eMs%g4Q>F@5Y#pjcx()8N-kb zcTJi!@}d9^g>L}pr*vQ-8<4?)1%!Sq5}{E*Q$9B(ws2RaIQx864-rH%B4$>`eUUt%w%5iG^onk zGGd`F8Q{5=xDb;~rx|{;E}Pu2n4FJFfOhUSVOGNV%WIwC{qMZiGA^@XCOM>u@(`Gx zJWt^x@=G}t4u*`fffx(!&1~A&%$X3s9jW$in1VnLsr-wa?{@Or0i?|IW#NXmEa$@`n&mFYaH5R-S;~JsK1sbBGcGDl^E5DTZkuRL@Pw&`Mac$4aBX7qBw*d|H zkuUrL$QQ;lz*#;+j_=+j58Zp=6fgc%vcF7$dC^dzx7p%hWUejk^y#zsd)}1H{2~fS zND!$jzn+c8k^fhv$w6P>_UfVLx7AVXc>=hpHo3;*e@|isZFrC-y(q4N60^!(M*Lwekx*bZ{NJRxkJ$+9}s$B0g=?-?x;sFil4;y8qtbL zr6YlZ>nCMy1g<3@5G1%^#3?Di4@RW^Iu3! z8Z*)>yxg!D6OJw&yr|S8#TT%`q^Ekn8GOP!Hk?MhqN0jt<>HBeAz1r4fHvl6=mcb< zC{eN@F02eX?@dT*q%;twl=I!eF+ZnH6Ppz!HVeHXgDKC?7x=SAMEcv0C1}hEzjYWW ztP*BrMi>y!Ai2z9)8;rjd}U^D>3tY2015ZaOtzD&0C4UwNSURwRr*SJ)FIl1*Nj(l zCJ6S?)~fpnxQ4jSlZtsq$#_`{=l@D*k{%hPu9$Osy-YyD>)>hfR7D!SSOMD4rCRM5 zhnTw>O{PKWlrjAa?h~~A$$Lu^FK>+6{AZ9t7mQ*)n~!!*&>?3v2|I;O9cQ+oX6T{_86mEBdTS0w|q|G+}t+(>@3ySKJ=H2MhJ zo5fLjzsbJ|7X-@3W{fru2z(ob*Z=3xI|%U>}PT(r%d zK8#!}k-PfrFfVarL~OlqN>j5O3t7Poy;6Of6CfdLH(Y1kuQ|=Rvj*A*f_qg%Ebm^E z10J7=t_{Rd$0qf3zXqDh9lf=Hqd*&~PYW_9g(X6G@-DVyxLS48YCJo)(u_3Fp#5A4 zM^+hMF*X!jx44WO86;p;dc8+jqkO03a5Zuy^rMBO!o#L_sFH})!fHg#jfU;pS=zNn z0;8d(cW*#@t8q_%Rwp5>vBK5SS_ey7vvkW@P#{TMisxxotSnEIc80W-u*!#bLjCe5 z%gTRt(hGQ}`1^J-#P*^8t)<@z|MbD_GRK$wf@DHbcPX~bZsYEza&Uv*SDW}}G8Fn8 z4%cTdjMupaxw3h@3L%t(x1*&b?qe#1j&hPoZb*kV&qF?N3phJUQUXCt}cX zRE?Mj&uf3l2(aCSn+j1@7FDfGxZD#39KGJ3cKPsZ+M2-HAUF$&GoCXCf6#`{(qEsf zop-)&1M-Uw)8U?a)8F7{HnK&&J~F&(@`$Uv&q22V2YRSwc>lAE@av7M-+J+70iYu^ zKFNd$cOw;*>`8>5oE|HVYO`cEc;p^3>o$N8leBd=0b zb@#_SD$M(z=Fw8oTq>`BI0#>?dN=5v-!J0_WIC=Pbehjz);rza&tEq$PP?BwJ3Ka_ zg&QD!IAh?jd{FK8*COI%uXw+{UmnzCT#f9fPe6~FfpAX?wG6`Is?jZh=u@J86W7aE zH)1sF4PZF)^(!Nzw4oT&DZ2{AfL0jeFrYaVJB2ph-M)fmIROfMEMdKFbP~{VeDGg`CL|vx>$iICr4*M%Sx6JAzJa?NB z+5fkRn!eD-_&HMw?H49vUXxWpzW!IH(M|$j{M_l4JoeNevG!$HB$VQZrA+4WaD%ZT zaWCD6o|cbNbjq?qLm^R9GFQmkH=>6=pa$n?H)&UR%jls*m5he=G?a*>)Y<_@E$PO2 zY#6drBWpTx787AL6ruS4xO>Z>I3Ijl7k3B{BoN$#yAxc4d*cvXf&_Pm;O_43?ykYz z-Q68-lmG15GjnF|yKmL0Tc^&at}ebc@K!%-t>0SLMPU^*u2~P$l=N^JdN&Ps&w9@RsKYwZIqcr(=G5HJ3rFj3~@ATx8E#-o_4G&AcoO4jxj^kdd#Mf$|_YMIqS zZ4y~&JzjKpE#-aMBe2p4>~{tJB$5>5VKngGAd^)=&?t84a_h%qzQBe?LURejpJ2+) z;|xMG>>R%9KqzYM9H`meqD6A}hkTD1CVOkJCol6;E`glC+H;Lcdi*V^jK3>cLX>lD z;;#`KgQ0#d`-=UiJ(nW!PkU}MjtJz(%YSaq-D#NLDgM-H6=^|{?U#7;3s|WL=;!ir zA!`y{@(;36#Lu~MN@9m#mlowpN-euh?>9LIlY-+2XTv(fKh3#pr98N?iKifBK9@vmV;z!>lLR+b4m2MkD{xXLQLC((iTn-e)v+ z`5%2oJH`J?pAl=xmh=A<04XETsU`mO8C5gL(GK_it zt=ac~)0)d+{N9?|bZyx1U%=n!IM^Hvh1H(DUxYY^VZ6+|f4MJd7gq9QthB&F$1;RQ zXn?7-pB!fsD@NYoP}jX3XDVwZti}Hh>|2&{_mRsk!NvW6(l1}YqN{GpEmn$WIbls3 zu>PTF988N1!j>vaU^o1Avnr;p;0Ol`aoXqmip{3u$dW5IJ(F0N6TtX|jguuq)OzSl z=qR!t0UIgdvTu^`$x`;N9$0I1wWrcI0#3YL$b<-Q{#~@jT?kaVPZ%yOZ%d~0CBu;b z>}&?~UiQ*0_X``_RxcB4*;>K%q0aS8raO;-tgJaFv;TQT{ahdz4JTYp-^mPH3_n7U zAokRkFNLMR5}AyGZqP(YiVup&*pZd$w&un%#DPs6G$c))^}wI`d?DN?!w*A42wagn zvKNkSEB>#jkK#*_2G?g(7>e_kMDZFUMW#Mum`}j9QV(-G)?@{CXps5=7CPM{60}dD z2_t3fqwKOpz-rly5sF+*r?gy7P0mk(X%mPgnaWz8yiyE}^gth;SpTafAmWN<-gZ`BE|$x zmmcWLJrd*P=2i(ZWV1xI|DQ{8LH<7^RNViMOQ_hI54q3RPQxL5d5T;@$lJZyWZToVHOUcAy2!7x zi9UAp~y!8Cm0VG0r4fihMsgUc4$F1F=} zLHX)qm&n5QsYXV~L)}nRwkPdL1Zi~k#x;-}QC}-6*4`Au1}(c>ln5RAoez! zydf{{C4Vf^?hJfZcH&W9SmGsaWctEUEz+tJJGU6sNWvYK8}g&UCe@Y{6!42D8(eC) zg@KoLj)2iYC3hKST-yu2y*}446nCv?y+wCQ+ea$Cj@#uYnMD8;6WSc2Pg!(XR|Y=x z`o~9RH?YCuxz11k6W#ggd{s4AN}X>paF(oM3Pti8jA0H4h1w)m#-R=_|mXiM!QZpCBxV`O^fV5NS zeR|S5cYKr?=-J(EJIY&o$u{1OJdvW$XI%)X-`ggk0kcFnyc%1 ziBUfIO?o|bu28QG$0?)@?Gp4HBr5d%3i_6pLysC|m$0kPAWauHHfWRLA8f!uAk)ST zt`AE$T&2iPUp3LlF)@F&LuXeeU|2S6U8WqHtC_bmRo`?V!L<^P(P&QbzLWzAT*@gg z%UmMedaUDmmIzwT-Fbn(tE;need76Xl0A9!BYTxA=c9bD&Qt{BLWNd#(j~t0Pl+gs z#95IKu-S21ao*M6Z^aXnLt8v)j3`7uf75O|tU#!UcsZi#$~$?g`;qtj!-WFzHa0bw zJr9@?g2u1@d`83x-_BxjYl!|c&ysn3X_Aj^XdCww&pu@5bAd!@1zR51m^AJ$w{=TR zmIV2`6@=T-wf0gP$*0-yt(|X{q7`Il4xU0}H0?a`$+VX|KKtEOrP?JMjF*uXbC#8Nq3ys&%$2Q?QSu~vB)%=v)6~6{{=9{7;aF03k>MIQ7DSqpBF>DHl@o@Z z?({ip@^DuEOeU-mO%|ogbF`l_Ev(*~6BZWSu!DKxeHsr=ck?QeJ@Fb%9_VrUOQuiq zS>ZMFLjUZ7c4T!8H+$lAb&Fi4O;D!H<7V!ymc_yjF4weh6>t-u-Mf2*coumxp1wA) zhIz}2n}KyF+bMj*($2s1-IDR(;O#=+qpJDr=Izz7<_#BnMFjl$!`a(`cGy_h>g&}A zJc&?Gj2l5-rR*SaP3A$AP9tBEP3d-rE$^h9`#48pbkH_6STO}@nhvTAOjVMwaap`? zMWT+TyhWNOSh${HRIVLp5^9vgz`;a(yRezSX|i%o=A`4V;w16Ky2P_*c3B0&_Vlnr z%3V4qnaJnWC{rGd+=p`>H_@)50b3NUinlLe?Pp$X`BkjtU+>~o!F6VN1bC{H}y6f}7RL+Jh2fFI^Y2GkToUnrbosY}SAvo4Aoc4ZjPzzOe4in_oE; z%cN9x9=1!b-l|Vw>+@N2GNz&Iqkvs=9x<46k|MpG=)H>L)J&I)E_QWLAwS<$cCU@< zF8pE;RxA{`$yHG*BGDbsZzsqs?5Y8~=^y6xK`W(t+v6J~PReWpA*L?k8nwlV*2ubt z7B(*TGIKK+_1J!zTM0A@D@`_0N}382BiUzOWozK+x;r}usl!1*U@o6_RpT?Yr~KL* zkRC>?G!2()zK0Vp)=8SYxI2)5%}>$U_!WljD58+SWnj7?k#z`}oodoMU_{pAwphXE zLpu0Q1QQXVYt_S&qToo3YlZUA@#?Peo?D5~E$Ci5Ow|bSw6%B2l z$ED{Ni1~>D4ITxgxnL_J$d#EulZZVg@>$=#p4syy^Fy%pAzA&V>f)MDrwVEOf`%>OSQLGpUpIy&r10|1L5pXnBc(%-@l}{fy zL%S_%EPrjo$2VK%`r#;QlyJ{nP>#)<;v==G!LDBK+_=|W2gF=OMzxOSN}QphBfHdM zun7z~-%_wrq0iFA88Uq%s}lI|5ENR|zN+SHg|o_(4!<8ZyLd0614a)maEo>dU5lcy zyZwEOR_tu5g-inE@(hH2feJuzq|$0iT7KV)?$Aj23&g4_!5(XtQ0~u=W!0%hKY$Aw zMJF^%=PkhYM=}DaNpXB8Q3?!<5a=5c_x6^^Sd|0V^j%ZOm^3T9R?7`?xV4ggqFt5+ zOvbn{Z{$r$hZ1VYw*fU44G?A09DAM89O_ii0f`~+r@WD>`d*Gil^iXokSOnmiXwux zw$jPou1eLP`xOM=?AepYLN5&~e`N@IN@8>sX*5mCgY^)D3rWBNj2;S1kU`T~^$m0l z#9`>a;T*}4qJqe__8JUw<5KX7GQxslHJWPW2^9};B7!E@5gtRxo$h)v4;(HMnKKH2 z==t9`Wt`~{55E^7XO^MLQuEaH47+j`jiW{|IAUW4CWorG^JOI;S#<3mWF(q zH}bgxmlG#PE8Jn9KEJ!zU-l(U+S62e8p4VxO9TV=m017FiQHKf6T)=%$0eK1?Xda> zYMsg5<<`*yR9z6aMD%Cr>*TKapX|(^-WPYiKU$VNE@gIlJ`5NByz*Szmi^9~01a7J zOfT`K1N2**$sE-r%6K={hZBnu&g8+Pt0J&AMG3~g?bMW&XH zgm?m(+QQgHL-Oe95ae0lQ%pEdhVO*~6PRmzi?e_Fi_9%Mt_C?mr2L>GXby>Yo`mny z(|kQSCd6erY}wKf=VwL;+MxdNvN2j|)g8a#E zXy4n`m|ixm-QDksWa>yn5Tx*A=!$yfV6yWQy8)XcM+$zSZwk~o0!Y5ErmWoDHdI(; zsHFq!;QA%Kj7pbXyBgzu+Sx8&$5Nv|sQQy_Y90umt+Mx??}^3m zjgE2QKANZJ>cV!*(~6YeQ9_TfLEI80aHEzBj3oB2yBCN*cQ1|a8@0(@*6(*O@W72) z>VQX69!m%c$hpB5e0@o{*+$~3s6*bq+wDBhx=f3t&p_j5UPp_CQ&KIC9Ser zSR@1Od1H`wCR|z0hkW7Um{}}`gbSzI7erX`{#tN%bsu%%G?cou2t0X#fZP!N&deeR z;wi1Uw7Xi`TD+VB1^PXf4A_b++1UwcZ%*Obo-1BmbAG`L;#xjQLMV}o4hvJ@+}hgt z?j8fofbKCD$h&)7{b47%lYnQ7c0e;B3JPjVn2UIHwoL{qkom9zB$^ilYrUS*;#y#s z3{(&XIJyHK^I2ZY?nkEgJd>TLR!;gdaCOHM>SIyV1!rosBd*c5dEb`$A^$e;vCBhc zonkr%V1xw0WI8@+!2S7aT~;JOrI2{q1Ql;U`*Oa)foo*XL>f9eprszc_mKWGc)vtn zR!5i7sEEws^hNoGA&B6~CkC^(>yAgfL!Ih(3;C*~fm_-vbG5M_z0+04PG_`$Rgo|T zu>>mfMMx|d*mbNJ>Yti@L@Lpr%TNCi#&qLwL4Xnld3<7!ecz)n85ES}O1-no_b?Pa z7z`x+`}7`djQ{`{+3a(B#!tUCbC`ibR^v6iDHE9a{h`B{MoLUMTkY-Ncz{ZC_KzTk zZS(}lf}W22a4VGA|wbYj`8J zGP66rNE@s3nmfRd_X}pXh7V>R&n3^4*fepLUG3v6{jadiwn%oG4@f^rpg)<$CDbWA z{+bS?y_fqPhmW55P~yDs2(8H0l@CcHu1qnqK%Pac<5$emWeXc-g@dWo6^!;lm6l0I zdhd&Pgz-ZUd)=mqP%VxcO#fr;EtTv(dR2{UCvvI{&Iem$=df*PaC`-OoyQtSXtx9I z5yl5YoR5mXoxE+fyr)AQe++D8FKGlGF%t&9HAiEHZi;+_)6!=#iJoX_$NZhZ?;pX7 zh8Upy928@$88tFt9*Qc^KS4PHumdD>5vam{#Gy0rGyZllH)tPT$Sgm9^7S6Hbg@Ky zI7HMtx1CT;ilv{PR;^DW>juASHqS&Yrajs8x>Gq1U6ezY?c@F!H}+RYg2V%UIu|(+ zbX>QeS^e>B%Hp&&jnAi}{f39qpQ|?Mw#=p@<{5rMQ+9^j&sB%(b|VEFkuy zKb*DrY&z4@3msMbP{H+J0SM6dQQ&$Amec+SMVfSoM03*k^C6Vym{-0k7QXP<$l1e` z3#x55p0#bw4QycCD`ymw5voM2!#ve?14I z`O$PWu;Y=`Phr~zn;$^A<=bO>(?f0_aGao5+gFSzLkAjRCqCy!CyH< z>QkP%u8^iPn(+et9UXp}`z9s+=F;dEZNrrg|9XNF@qtwH*tUCd=-mA{AXN6o@p&0* zU)KssFSKt&s-EY=rS=oWy)gs({KHY!gZi0^2hC*8*`Se|(*4>-8a__TQS#7K%bDhz zXswO5-)pzRLEb^=-lX+VN_Y8urG(o^g+;WlzqIYZ|E2fTc z)KQRmN=d4ozCpNPQqybX>X&{RJD#Bv%Bsrl5*xOPXtxtf^G#}n{U*~1)H&NrTq`fq z%{B{K_8h?~oxL0wBY^dnF~1Q)7VZ6!r65!)w4eAl2jo$X-@e9RatXr*(HOrPKJdfS zN7}actUpcJke`ay_S`9+ufCYq!T-GWU6Outu4;Se4eYs5+-TZi8APoAW_*)nI`FY6 z>5eM#^IAV=ZfN>uNKiRkElad5dSM}qAd_xQKS`o$Mb2+0i#iOf0-8e4t?2a^LyRVE zG`EeceZw%$I*q`R$N8$2xE6WrXH1(88~ClI5*m>m81ZxgHm#*T$}C zE>!bBeV-fCC~)tLvRT5NEiWvu9dT|qKBoKGZfpy0(XKIWBfB7=cC}d>{IWo82x0YiefNHv(YCtD4;x-P{zkmk-90hUhQN7u zW3N19bI)5P(2VD@{Fz(krt2l^;PoE*xUzL~HCc5~71Qd4*qN$ldkc4JLE6xSLSD3ddlv~9yRABmMD4`%2@l}g#HB_>tPhmPTw|q4wn!;pWFIgYLrj3UU zxedRjqkHZVC#x1iYeI;yxP^CrPgu8^IXMp6BQ)6Ng{_8bF;#VQ;ufJEc*o$5EgT;o z-z~gIy|h42t1KrasxO?C7?lJ*OtxQ1N3<62jaE$+4(Fob|Q)cbttav*3^sp$lgP=Cs-GJs%~693kXZl za+p!&376-CDQB18E$ok1;T|s!{p}O|6IR?<(yEB=eD_J(yS!|Y!6zO^DLkE8VM9fZ zK*0#-f=h!fve9 zs9cIZtZVocJXis5owkYks({lB!BC4K5DPaYZ1y+w2k7I|&UdK-DR98(A|SlaI|gUq2^vz!%$ACW_@7*-qq;l+fH%J>K?9SC~pxLm5qa;We)Wa`j+@k+Aj+QE5gaoqD9dG~+jo8FMg` z}^AQZah3x2K0HX~NAs4sDk2*ty@FW2KNGUoDn(<^(t3gDoWfy(<+>hdnJ7CEPJ+;&)AdcPY$Q488&F zrX$LiJlv+Kw=myEs7T+m9C+|W=d}%&}#whde5D6w`QNhQSS%)mQ1d7 zM@fCmOsOXIgme=(7(|MJ^*C){**uczb=1lohf%$LA+w`&oMIrlJs0$quJVr9>T|!A zEp32%{rJLQDcss1F?245aymk8?2&Dpp-J^A2$F#pf{nl%m$X^YhqB(1eJOvk50~7I zJwuU;``#gMZWg~Lbk0Mo=*tE~eWpkSAg~8z?7L^92r)E_w(;ULn0V~L7Y;SWl}d}2(Xp^Op$OZz!WH4_}&$AM7?qz)wYDixi@^3nE_l@s4rTou_oKK`T7F9Ylt@*15W z*DAuX?s`8(kX;EdVO-H6*qlO*NECi=$ny(?YE4D;=b-HEr9sUP`pEh1`K>b0ly&fB z4H*lgr^4Hp?3DDdpkq&G*FDbr4Ha5te5EVOSt`OnM^Z%5Sqw0h^Ww8e7NOE50tKH( z;Zi8RUM`B_>p%xI58XUQkrIGL<7Wbf<8h9vt(h=A9EqAE=p_YR=31-gUwsp4>UPV zy%aYKo2hI4^gnJyw1%dT5vwGUs1oXJJ^E zFIcDb8Ym<|5<84g{i4rEb0bmmpGhH7$jIQ2^V;*{^v_=F;M02xV75y}fG{tft2(B_ zk(~gsWS^nkgc|hoDxw>m5!K^9T%@B*j{0``D$^G)WpmgLp{GU+&VR!8G8H%iSlpH zl;WX-9?FG+=bj;MmXiD>3wR8SC0>M)&jG2b62fSu-mJ5~p-+aWO>7iyHVm;B_D$sJ ziNol-TU30st5nT-=&H|%(}%f(aFx9D7u+)ihbR#hR#p@dDIkF`rh`{^9z=uC5!hEh zvJ(UW4WE>1et%CbHj&k}6ZJXjQy?xUM1>;!_Gu2HWH1=$I-QdMWs-Oc;c})A*pZ!E z0Fpg$02D?OeH=?(Dk%xXdT4q*tJ}jDp`GUtw>psD#a1ubHf8w*D$8%gP67kirwTHbcg^=E=f5ORoWmW&TZGT|pr_}*X!Z(X16t2G6)X>Ipq zLAWrTJjl=tH1MNCsI3H_V@)$)VoY&19#V2RcG;-rlSD>(zTy(B!*kXe_%2yo>z<)` z$%l^J`oe+OvU^^n8PBts$^rkdu9L#59Z%@}rMw}l!(&}+GCkiC*PBX9z`qE3f?b>? zKxWlT3L${P^rSVcKc#Br3nEaHTQ%$5{b-W%22gkl?x15!~eF(3-U5f>cuZAQ5ovTm=Mm(&#ncQ88ly z)x{*#R>vSwin|CJ*jZMn^f{ZH?tAWE>0>P6`g!r{!DtCMu3RE>%=cc6qUuexJ7hcf zL!`w|o zVp6=~LQz{wk1woV4n}mOS+iZx%8UCzTxF%A?2&YmcSC%(bM%5GO-MOck7adEHH=>O z^2K}X>KrQNE9bkY+vSHnd1l%NC9?-9+#j;D+ z$}lE+gN6bq99o(hg#!7qyNjnI@0ejx_voC=UH4OWubA_{4}-6%Ly3hZ?D%}||1Q_T z&n#L)ZgJ>HV$HM;>VQyX#|`Qz3F3GRAb1!_aZ=X6%dZ`WTmg^L`PyPi|EBfX6lKU? z<=40&X~j+%B4)*A_vp>dV&2w0VFE04!+Dp57diw1$bmVot>MfF2v|bngU*KD4Qr^d z7wAN#uq~!ZCN)7ut%=?^ys$Pa^0}g2&Drk*;1k7G$$p4?D0qE{&c;x^be=5*7Ti&r z9Wx_SqXjwkbR6DDptjq9P{t}wZ%e^XF5%Hrms9xy)WKqd{51Cy!V$*l&HddA&pft+ zL-3iSc!d;w{A3_v4IB$G1*j!CkiBb3 zP*vIf|EMMLX#lk(e6gK4_p4%)RtCcBZ#&RfA7X!7wHaS@;h%5P@g>E@mc21*QZwz| zV9mrIq_B1}=Pk~5*3ed#Jq74n$<|d&QA zKW!UKPY}tnN3j4cu11_2S3arI3V4^2ifU_okgPOx!I1p!UT1Q+!lsBkOWK z*F=leNlyOGoxW5OBOxQM^-lMK8HIoC1pkz_-x$^N~8i#*yDI3hX* z)i$3%9~`Hhem?qqa{*md*1y&5`T{riEwAj^x$<7D7%c+()rD9i4$DatK)Ja*%3hSS z*u$Achr913y5{ni%pyNi0+d;(_~%iamUQ2crww-Kgx#bt^i^h_ojrf1pMG|k_Q=s6 zqWYW4;@|prl_k&O_^RCNFD~#Ir?t9y z)^Fx7JvLqDJxb!7h?1;mtIEHVhmPWkrhJc?fl3xR?Wg7|i673_hWUP-ouV3$)tBK> zJASgO&R;8_q{ph?%((c=i(4wq*v?x}meqMN<$F#wl1^D%+n>&R)8_AAZ;D9^9XDuT zrUKUU62J}tzE_V9BVBW zm6Yb3v}xqySV)u{{q0-SB@H*NCgy=?6xD_coz6rk{JbmerxsD)uLu(+ z&8^@hQLX8Ywsb{Gv&vbIxJ$5hIjha1ZN@(ZQBz(gOT{iuj`ZOj{7G#;Efb`RR*&~9Zat8Z@8hePEupKN(%W$gw}{&^QYSSw@B zkhm-ZS8q;rIlHj=%9;~v8G`0`uQv68Q{T@dib6m3uD_>+!n~QN==7O|cIakp{M6V% zZ}7vCfY}1G!3%Q`Egf9|d=YqUwXQ}<*5e(93Q5wJN=81!GK?H2R!6q%5@Gyuv0HP# zvi%Rc?1D~mF}~p&@UJA%OoFxv1_gQ{a>R9V05_6BWFFVhBdA(~t`=k7oq2l^7p|=f z;@};M+mE+jm7zvv=RE5@6<%on`+&mXuYUTFV**Y5s@?%En7X^6=rDTQKBRbLGk-g8Wzz$7;$E(i|$*(*2 z$NML|Yb|_w5K;@!dLM~#6Z9riX-XBAGMhaW7`vj7bgwo{1rclhGJtC z{r5yUjH_k8<~h6VVRwL&^%B&IK&6@j1#Wwvc~49i+GmSXj2#6wfHpx*|ZirF_(=ICVVIhIxF zD_@Pl+=|>f;|)_2+S|#^zi}ln0uwoFC=tx^EbQAUVbleTAJiOwMF++YY_i~?#g=8{ zbnN;c{VPqh>Oxr(pt|@R0Q6?-Mn3SbDgIP7HbN|DE!kM3vlE|?SB^ypnMliyf@E*X z4#GUEh-;ZwFxw(6o75cXB)=;&m`RQkP3Un@UqM<7hYSTp*Er3LLPb7N+RH%7)uA

CBlUxq_z-(Z9spi>gj*e}kl&YLsA0tXS-4UB%orjtj_rM>wLhRiFpKb?JP_Pg7;DQ z)czo0unGnhay+;Vp47o(&M5e$dGzoYsf*4E-<4J%8DeWR$qjSbQVdxaubVHEOXBj! zliwMLw=Z^UNdW=}o!V*86$e0`PGX^T>=*&SM?hnAy&mQ;_WhG6^CyAOrVlID0ZbswUfX13%%&AKN2+xvMtD)V;0(9tBVmFJ zHs<@KaiE>mv1NPvnoeqQL&>ggYnMozgr|EzgB{&r7%ih$cICm2gNXE-2tQkZNr4Ao zRLB^ie;ENNH4A;>lTmTZ6he7Jf|;!+nwPmsqUaoG@AfpH3jn3@zL|_~*^K9DSx@nX z0jIp`N!P{Q63zjBx1m!~&EEK6;2L)DQA?)H%}(w{?M{rz#az{ixYe{`7Zf zto`UKJfXAR5?D+$T(V^+=m{0!7mA>mt#T&)Pt4$lC8k<2>0 zim|7!73qvskpj2tQ|x!Y82aOEyfZV-)tWW^v((roCO@=y618tGcee;thER~GKWrRo z)hL+al&79y-l|rQJ%Jc7dB9JGO7HoeJa|SeSpUEX3xV?|d0;lfi3pL#>UQiKbh!K9 z!=k^AZ600Vpe^QZL`h1R5wQXY06-M1g<-AU?3^Iwz4&`MOOwgJO$o9x*YBd0HTFGs zKqgTm<8LL?(NAK@Zd=C6*Ws+FFKnRiDFQA_^;vJgaLXocsMJiIHgbB!6&+Q{i)&m7{GmQ43y7ZHtky!fap}% zl4&RT7OK?G1tdlf4!ct&cEST6C(j5jt};qk$aDl#R9+gxv#kK@7cmGvWv_@#X;|k* zi)Emz+yUEZj=0~wF!lZEH6Vj;p`9M;)qHNe03MeUtz%SpH62zMYp$P!7=9VqBNv+j zEEikU@hiDW*uw}M9+txBzr(|@=yyCsoB5yOp(6OJ81+XKK@hM?IwFVsxdUYIVc6xe z`PSqg(HR|RkGa89nO>mIuaD@X(UNprh@eIG)MFF2XVr@8Ufe^lTFH9>?1b%b+~9p! z2AC?-wJ=}?@Z0JkU`*&dzo*c7p{L*xN5EEa2qL)H#yT|FeyUh>=HdutOgNe0-%Oz) z#Ec4Drc~hCHl`qyGN*#^QLZ0nc+YbxjfaVAC>oBGMOAcEf{V!~GFh1fc8PaH1RdR{ zK0S2Ewtc~Qb6kdN@ZA1=CLC3j`jjrdTI2>Q2nx->NysvFQ?eU_<|w2Oa*T9S$EKvaXzlS`n6J!=oTzwuQe>a|(Kb%4!<#h4r_7J57OtFa$;o7>gvmyrG;5 zC<6aP4G1oo5d!~24d5|g2|AoL554U2?|@MQI@xC~1l7%yjOx~%XhJWZtsk43IZ;rs zyYEp0ac>!aSk}XHu#Xb-92@UZ1I`h$PHs8KT(4-6I7B>VASA#92hmAmgl+X zxQhdoCpLUopTAH=vqBz0IT26h#1mgeaO}YKF~^kw!TSh;=Yk>T&SaE^9^Y?5W6OW% zNs{oP9Q$|soWGiH)rJyL4FJ}>(X1P?<) zj>!|m@W)rxb=6j>?{YePw&o}+!fF)oFvb>1pRNTa;t?UZm2gkEegdB%c$%@PjNz9= zzb}JR7L=)O5skV)Rxw8*jVUncgmSsAyAowjtN;TaQ*!6;6?M__zUm}|DYgMsGu5V>!lS>QLTmiloVC!3LE;7SwZb9&65fK5N%K=+%o6{@td?2uB zI_S`hi*fsoPXv5#$8;lAJT_W9-|M(wgHgK`jzze!x=ZRiBy#)*nttfC36R|TncCG9 z6zg+KL%%Em~tp`6U=NICAUaT<9u0F)rcvZs6tG4XDp4q2cWfOyx>L~I94yQhA0Q2 z$?&r^2hDt$i$8i`X&3t@3=Kdlvku5i@l6fktdeg~hs?)ZnXiBIhhwZ_5tYbGiW+jyyUVZJnlW=X*?L+bKM%1O?E4zb z)jRA1zi4;eYGba)Np_%+^DCZ2_j^Ju+vj32W+cj8?wN5psY8F>8LZk-I`d%rYW-Om zYVzM?8nHQ>?p2xRb(_n~0Y92Kr3R#u?xcoJ;#rXQY{Cpy-CnoIj4S09*PYQ@N|@We~A4KY}Dym z1Ttmw*aeHc>Z?NENKoDvWj4aCp5z}&eU0nFhgy9rd0^y=&sqUj_^om%`JbNDQLSHR z?bkQV9Iy^#F+Q(kMJTP}Q(a|MI23-_du7QRZfeh5nK z;g5ND<17{YGkWsx-kt8(g@5qwWd8E*d<>7wI@CL;ysMS2@jM=DR`HnV!d{=Zv^`!g zEU&GZab)~ID*NCg149)LV~A6FPive;G8OUJRg|k!NH~Y4K<_SBLA>g#BVYf|>MY6Y z6}H#>y~@8pin-t)LF(aP&W=se<)1++drCV@a!yXV*kRpiuV;M z^hY-6Vp0{1pL{Kcf$ytL&Ae;d22TqkaSm^LWcxn^x$m8Zz9J|4?9-!ME!m1&5e0yy z8zH5ni7My7*-G!`5OMrOrVa|~pZ|m|SZ+w$dqheoX00D#<+jC=5l|gQv4fh zPV4hOSab3h=SkA?z_^HgQ zwyuVbX=cD?#pi)pW+1j^yCMdLMuUc@OACY>CtPGLTPR2+ihHt2*rd|G{P1&$trq2F zkKnNRPC?bMnzZc(2<#Fuq_RVa2T{_l!IG+viRTbPzdnHeDfDkBg{C8P1NjG~68@kR z595EL)FGiA*$U?C!H@qplrr@3rBDyj5KZi{@19SkfI|{#}3+-J{f;ghh=1 zcZ*K(FN-d6@^2R1ik{HdaV59)pB3B&YmFrZ5fuT3VRl%LESmS%mHy_+BQ3}vGpSSUPGRF{oq6I#`!;t$ zZ?UIeksW#WS`lKF_9(GnuK$`%K9 zL&PJBH_3H1W6^`CdyYQf1t+n+e_ILIJYT%+{IHXi0WsyG8(~d7{>=x@xxJbb3a_M_ zbL;t)B`vaKD=%GvUtk9%JY1YOO!{B(>818crv*3vBn1xfP)^dS^;Z2@0Kom6%#eWWMoabU9UVWSeMmnT(~eeBT<={G(wGG2k|ym)ZP+FQ=q z(5{c8@7CLvYMXium6%wVI`y@Eg;hKpYLU208!NvPoNFazZMpC(E=P z60vsKC(+Zgpt^3&l3O1*3UQ&EgP_3ogf-9shPdUQ!I(X%xd+~J+qQ{=TRD*b6R+*Z zwm<+9Qtftd^~18UGe$cMC-SsDA@vRxs~RY&JU63cMNEVpMn)18S~dE-yzmydcML~> zf{!GL4v0(eaFo-yLKu$$Dh#{LOpD~N*&;h^7;cNld28_15ie7&+1iMCeQeNvz2hsZ zwUO5ZP!dEB!DMGGq?m7r{9{Yn>y}TnzX<^xC&j9H?=BmecW~2x4NhPQ|69Qccgo}Y%mor6!lbrzstdYwL#GZN z!S-lav4lV;Ie19Vf5fy=J4+QKs0tLkwSIiA2PHzZ5};QHf3&*2o^N|2q>#O(3-RJz zVqrc6{$3y}en#FI3CQ)`FbocWvGr&dLIv>^_MxPWi6?z`ukM0VUCIQ9aOKah3$bbr z{d$~ABwMs$ic&`-K>!W2Z>3tmGf`nVo%IQrdS$^ix>(djNQQtn#HYI3765%?>ass%6*?`qk*`MVtkx-j9ev~612hnMP$Ovcp4mcg zd&$i#Ml<_ZU&t_AzNn!TuWy2A(qR6I8vSR>W6=JWQXBXETgn}fBu4IZQ86dWZ<3eF zC-9%(*aIhE3lqzXSn_i^e1={R4kamQ|B8h=&vZ(*Dokk-p`%s9w3$M34>Y#3k?80%A)-IJ7f*_m zPnn}~M~n+|*e8q)Y zu14)IycH)?pwD1{-w9J;i-!T4n820t%QQ0n&1cf^&=0Lsz!^FlN>yuJeXufqet@HteXpxoZ(UoB}?*WIyHC^)j00o>nv;-IcCZytlS? zX!Whr9~ZcEuyuugi`1N50M_h7{5sYMv=bT3oD47lLfB zE1TN$(VU^doGCv0X{*F?Ex)9!Wxz&WC0O8aK-?Di*npS(^P!rhG|Y?qLua2LDN_oa zTFW_f+dX_lo5-0FylQ>tKf7wIgG);6)mZm4z=02F zXc-rL-mDP2p*%`=wm{4z5ikQGGd;Vs4X{N{P31%6{GHC?&8S-}wZrUA^HBQkpd?cM z-%Aip8mMVmp>eZ;L1%E;Nlv$)llU$>(=&7+9hPxC9wZH7w|%0+r^>Ebyg4lfg4#pM zRRlr|^dYD|Zx@Li%T+f&K%yPn*9$bAp=2)@ee35E>8p4WK+rX^Tm@xzFK!Cq^j6VWv73+ zf`(>@ZRXERQ9o`8WuN`TT6Y7r%4A~;1f|0dI2(1CSE|}~zhTmfA$CXfkWx*dlM7CQn4|Tas2HPV-jnl2OYPKx5nD zZR)ez3UAxy)_!NRQLZBhdVC`qU3-G%c0EB&LDH@KNCF4gd0}9rgLC;DU~{a!m8J29 zcoJq$9_L%h))ObCFe{V2e|c%skg>cx>Tg{cbhxHIv^OCMn+9rXRZH+ExwwP#ugOJM zN$qp;#AU3kZfZgFqq`)GJywdE#%Kj%ONd>~Fc%SF>+T{OX?k$75-uwMs zy1Toiq&p=@R)rWRI|JJ@KUv8-2?g8cEHqydv2>8&uh+4o0^4h@;cC5HimciU0UN zp-6So07Z(Xiv`mKOMj+FqC4n6y{5Ky17LB1^<#S(!`hRP6+k`wK0Jb&-G)M)5mtxH zNkdL5CUr#EN~7@uK@3UG>TfZT&!h2KOoZ#9C^ezHnKx`X-w+&CRPg}oj z&Mi7wqZ#^o{L>UoNtwqlxDuau6Z5BwVW*Euva;5ROEDkQeo3b91BIojcah`VId$w_ z6mFi-VDQXk83UKgEK8P$Q>JDY?(Up6cr-UMol~1i_G(p3u0$QKLh#57M>1G>=19qG z=-=pO_`XU!b0i-%35xN`$?>2AgTZ$+do3RVWAezIa@cdn*I_)`b<4+9YI@O;=~+YH zDz>XiUMzyZ%7a5HU4QeqiF{r^dPcw3Px;3DpXjBERbnHbcxRe=vG9`nb-h5u;U8l2O(vgxdfhNtxdj!1 zG3&!jLS8^p2r*CoZ;%v9_X3hW-{tL5)~2J{g_`RWd(B>k&1DtI>q%GBm=`wckOS+- zb=9Wyjpzcfek9Ak>i@ZZx+1E5Om|Px11#UEB^0m$9LX2m9^gnJyXBm}ITC-eXCvp# zE*G<1GqvDpMo*b+BaAs3Le;Bnk-mk$KB+cw)XV3V!f9+krK;9Pj-4*FJQaC~kr(hEI^%*pDt8 zoEHZO?7kL=f%I`B(0}qvx18=nwhI+mG$X|ftSnggB623p8w<_B z2VAd$T(PxD6NS*cVZ2B)wt|F;vK<)Iv#@t%wV`3l|6qPu0Us;BCg`TAAXckL4?v{# z?KnJ_h3-vuZ%m3u&e;ip&nUXq+Z6T0*1zPi<-pVOhBDqZIfwH9%@Oc zzuJG$Z9SI3*YfskL_4!q53KP;JG3c)?kAlEPF6JvPmcw)AD7odT%u)X*+B8ycDYId zTBS0KS4Y9@2eMN%c#BNpVZe8P!ZF5Budjf%-zh=d8(Rp;p8wr7^h0B8@h0i;>`y5$ z_|*6lj-^1p_>f zUa`ZQF@?X&hWfG~hLELE8K2(}A-(7{?Y zx47y-AThqdpPxLp&QLdj;hB8|t8H-5LF(%_j?ZC%jEJRRL47wm)oF${X}FDbn8ZAf ziE4O-qNa+oVk-Z0rb|}`?D6Kms~3K;^uxwvh+mBOA$TxK>Y1ym{osY92|ke}2-3Sz z%#>dJFW^X%$?`vEMt4yTe;+@U9smCLQK>PBk30eUFocT=mLHdLHop^IlDd7< zcct+A*gjh_1Ty)>C^nLk1*G#-eFVIL+H|{fq`S343j`>MTw6o$zOD4ST}osXE;4;# zPt3=!px4DetP0(t`Y;fT28HT3riPv!b3)DBu%>Tf5nLX9dK>SK+0wsp6RHv2EVBrj z{GcNy;3WzML(1aL;xm@-c@>xpid?4`QL+KsrU%xhHv-o8WqYt{{fw)`k71W60^)p4 z(dYJhUM5(EqeCra-kOzGQc}|S7G3%(}Z+PLL*F61R>X%!V6e2c4>dA zwJhstJw9%qu4`0t?UC>{H_7A(4zr9K%D?+sf=Djh=%u5xBmF8!or(#a2v;^%Ro2b? zgZ~3juhD9gI(-vsfi=rdwg^IY_3a|%%sgrbr8?tckoB|7t(!Jx%q-*9%4rvLp;iU= z{8O1egq>h4#s?k7C$Jo2m7hwV@`4SzT?Ml5SW+ka6S@_4coL>5rs+>eaS37$=_EFc zf9yi%NArEONx9rUD_dJMT&;m+WDSJ~2mq^g?zUwvagG1T^TXK5G5`-3szqfTYV56# z?%lq*l#xKDvx@pSg7+?p$yi9`7jL5;R&n7y4pSNC4|Ww~`5E8$yb@@}-Wb$G3uH8e z#>31sH5t{Ac?3%Y5@E*X!F>+m(F?O2UJ01QML`z*HTO8~80Y2%#Q+Wci#OqIqRG@X zN-UHygAGvt^V;=X67hEM@|pXwPC%Lm0YN|@xN9 zS2mr+7R}ZiuzX(5djZs!JJdp)_v$9X0?~#lyY#Z9qS=rO7v0)K6GVEQXEssu;OKw#otexc%wz4iO);}N=Jx3svf2LxBw z0C--@muXsmq z(%Dl)61HDSvpm!<+T_b8fBO%O=n_nG`xyokF_#n64NXl14C97#e=aNaNTa;Xsei&s z_`k7|Vu+|PyHO0buvi^T-RegcX7-$cV+6$zHIuyf%IvGZxKazvKXIk6f9FaKY5%FD z2fAkJ{<);@G46uknjkSkLTsynTH(@W zON^(`F{AICi6mF`t=GODm6;;~A2v>RVTTAlUJ)ISA3QEG_+F1ZBIa~*$`Q{M(221SV z*9Hm|Szxw6APBbSx1m>sy`m=a?;3i!6HWgfSbF;Bn=iROAW%b-2X@-Xejx&vUvMv%UovC09aHmiazleO19sP+C*F|Kc-Q5! z8q1m#NL^L#{$c1PJYRn0iU$)uKt{BSe_MMo^m;MIs_}G8v8TAhBKX4-|7o(#nhM$BPvZ%e)7aWwXn1+%H+;1RLXf|zlm0>J~ zDSPeLIv4Se>o4e+>#qUVw+k%UXKUolIp9-{Z>8%*Oq|3(z=DDB0p+-&QCZ&uhT%SqInXgXTZ(KTLa0 z1VOmS{Fw-XLQM6k|DgRVa2EP|XrlD_&LZ%rUiqYa23}$wg%r%Vv|&E#HD5PNO#e zU}1m}j`XeP~yZJrAska_)+-6aZNFJu!;tAy1`QZY_ReNJ#FZTL~{6%E<* zJm51xe6pHpr&S^tWXX(fiWQwqkrg22slftLo?hUo`yJj$0G#8YEWngVj{zlbIN&d) zWcs4y5!#;_nGu$y{s&B{PJZ`am{MwyqO*mf7|Ci-vBs9OTOV44XJ7be@y{*6w@v?>ajQe92J$20r-r;j({`EPu@PN*%Y zsejMMvq8^^@%Rcl0L0Z)A@*|_ow~~M9n)$dQK1yJ4XHZky^=)%mq!H(FMUA!fu8k4 z_rJd0>APxDLFI5$6V8lECKgBc^1fW1##QKR`*C_VN6L43$QG)bg|Ys&EuNshx?kyE?Km>F$bZQ;ZLja z8@e-n-qGK7z<&603h!HYfyb@_gYV>ot`dk5j(~1P{vcm>9+U^#WhTraxAw`Cgx;zc z`j5-4T+A;j0HAxNJTwqvRH6!eDw@a(ClrWSBFL}N(|`|@%0soJ>*hzkUOEWJ6&yd| z{9drLC0IX+V%vNJiG+RJK@b%?F}$Y_M?x#1Pu37q^mUFre`t_?o?UNOP4S-xm5|{7 z(Lu#`G9kH+xQ0ZC@u_T|*S7q8OL4<5a0((oJ`W1}x%+bibbk_r5$1vJPtL~X5hn`0 zS!uk^wIN1;X$jVJyh{6V;KJ}AAs$Z7ng2BNBc~GK@n{>#GnrK!CErp z)kNx+M2N4XQK_dat6>(fC?dciY`GZP{wEsVqR6+Im2$ysL2j=F%tnU^b2N+uX^avX zeR?KAyUAi{9Qr>_v_|C2A{+*L@#oP7rWD$7ra_&XB>x&_{e>h8tA405U%h z1d@zwZ1A==o`Oe{wa8#i0Xi7I6j&{J`-R4<7Y*^8*f<>_k49qpp zW0!aOg8J;|^ z&l8p!gf%<<^ERjVs=9csujsU)?Led+(x)T9 z9^g8lACtwhi84tY*h3eP{(m^l8vF3S{WObI@BjU27RbQ=w$m)50m{3jvi!^8m(Gvj zn?E~0y?=CmAYVE^tt0s@k~`l~^O&biUHg^$Xb=GJ*qf#!>$r>IcB~&8Aml{Gn2C9LTU8Mi5w}B^g8W_5!(8nVo)tteR@m@Dx+K>)G7VqMR2S3JsZQv3dIWckN_Lk!h$4fQ3B2LQKgG|=~tL+3+t3wQX~KR>!3)C z%%!C6-^o`zx&+gr4aIokjRv;Z3VEI+AqiXg`ZRY^? z%9@5L==wYO*M@l@c$%#eS&U3H`c?}27#g_+{NW!CT#V=69JtcnX?wGy=YU0XA4J8- zV>8u5v=#d=f>4K^k5^PiZ{}Q@B&x0*dW~jN6}vu8fsELJ8p_3$Dvq+2)$30#+S5AkU~eT>f5%K^X{N{pB>fW5%l4IjKn8yz z%hEzrE?Y;qFe^_SN%=>(;rhM?|G_Vi3h)SrC-+0MVE@CB2u-t4B9>OVS-GtTLuaAp#~(l zg4X-EXAIQ&Ck7gN_yYq?s=mhrY06d^Qu4wW2l?V`!Sj=QZLljr@3fkePx zFc6E@Xw6`L43}84@}U_@eVHz_TmX$V*~}PH#S)YKP7vw)o>+a&B}&%97;>wrQp4>Z zJqk;kSFBm374+fkD2>a^YRtQg)ok-Ovqj$gbP5$@RSPmyJ#{?uoZ&sIz z3pSms6nL>`4n+TL@`VGj#sM5i{GT|`hhl=$MNYpr9PO+4b5Y}%jl5H$WbZTj)8ABS zRV>}&&?q2bf9Cp=0uiqLjRLg@J943uSSni~8ni>wGaTJq+k>*UbRe;0i>y zM+t1}IFl0~yiQDoCrzUZd0m(|qT^qvko%{tmir1uGl;6EdKeU>{lG7sWGR-Es`D)~ zf{Oh36@uX)OcvNwVbNi6+QMerRdaWgVj;jvd*>BPXX5EVVG|x;hLSXqFec~k-_PK? zaG|qU8hGd}txYj_k!Y+|k1o7@r9mT_PkDH&4z|U--Bmcr?{MQlQttl6s(T5M+AIkK zQQI~}>BkD?D4V4b=)JkjvP`OCwS+I|g{>d9IL7I*r?wld_ahr;h4`%lPWizWQ-*N4 z=3SKXLzdr;ry7cmpuw^|OYvh};IlwukYUw~(0#~q{#o)Dvhf}VF3hY_nZcYgS4LJ9 zjiP^O%@>+?kiM6PETICMIrao4ukjF4uwTNZO%^btAS|3?Rba|uqjqTF@u+klr9^Up ze#)_WyGPTPIO{;jC;K>XsdA`Dog@hSL>v4_z5|5ANJ z4$)e5IQ^}@RZ0J$zDd^qrM`(Yl64Fc=}N$FxR}#CHhiL!B!@{ySWEK^7hAU6RX6wa zyv*+n>hFb#^#wUJ(2-zF^ahcHaWieUfFW6xZ7}8pzCS=LJ^6cFB1B-c-Beo@0|uo2 zmHWSmOEei({1;sbj)Ub8FsqWOjyo3G8$PRrZ}soMeH4~QdGdaB7j8Tcm(~=XYnqgD z*7i4oy{UxCvA*6Pd6L4?v8t|5JL}xZy$SNQp=G{7G%s>kfWOCE_0_I{x>!5-S>g8U zolM4o77n;ajj7S3A5g~B-XS|4@y!a^*NckugXM27_~)QRahm}lk6;_Nt;qmP?ZR&7 z@@wFps1!?QAq&FV(-Y|{^ej5!y$F4fmnYD0vBD}N>@F88*S@N-{>XrFB7m-58*4{m z03$>4lxosO9B4qM3nNH!CA_qIafgrf1%vvpro;qn9wuBlBvd|9+Eid3q#|$Jj#0yP z?gB?Zztw;3z3nI@fF1t->b)tcWB-AESk6MGQg|E**zyn3ONaGk+uzm<>hl3VxMLrU zEwqYt#YhCZ@Q%4OoTwU~6|wll7U*u^95s%28ox?AKwbhi)9zjZhK7v0U~@kMuA(7}_B zebL=G+y1V**$+|Za5ds`Rc{ODMcyO^2vsC4Uyzn)#-l#-9+EJ7OMlC#oV_AgkQF*B zAKf5B5fp|2IttiB5?@*KVJ%6fn^k1l-mI@*!alfmmy4f)cK4_%d*kUObLe+zb@OrtPBzPHW#^qJ0+%a&sdWPm}ft9z%@gK(PTLt>STRmY7QV^lUXh zpGGcTIBn8Q58d!1lh>DEh*V0 zMWj-iv)uiF#K(GpBr2x@TsHwl+DcDjI&P%5hhVlwZw^!0QgpsAHDwmnRnT%;)}vkm z-H7o@lKvGcF4}mU7KOH%UbbI8-=GF16_W)NQ^7jTs04} zhcD+1#t!|eKT|@8cM&V9Y*83Lk{;)2YP4s*H(_45-fN6(no+D~yw*fpi6TEb_HdS{<RToracS&3T5=z2JGruN)tt&m0+dw z-NPWIDe&tog_wFpS)QkgpEzICF|toZ5l{^0DjeAxyoQ#C%N9f19z*Wz;g^HA)X)Yp z^IEY-x5w0$5RfjqJ_ng>ZPwm@V%FA}&#n5l8_^0%`~8b)&`Ee7II@<@xR@zD(vUDv z4rGJ^mRGvt#M|4MI_epZca7OgffUx}3ts;*B_colixP!F|HHqFAiUm&OvS02ZCL$S zS&H}K-)(FI%WFnHiq!cAZwAq1!1va{t-s-y%C3u*Y_)k&|kNE42Ewf6Oz0rqnuRZI(~zHVI41@ zLP{DtHUjJ}Dqwf{ety|qWM7_l*RMpew{iPP8@WzGr8zWuQrD`!s;n)|a86uAp@4md zkpR=%g{#2uat|-`u8!ZW1Vy_~gDXA~U2&&*Aw(m85F(}IKL}C& zYQXS;;|JD+k_9G`hPhBOJ#qCJ%*;KF2|`ecwNKzS-&5V zh{KIV{PPhBMM+r^g?H%nVe?;qXB-H4l78EF=C5AtyS(Oq*mtjg+jlGlf7o{myhy~m zaQr8?N~-IJ>PiY2v*0W}4G51(3=g>)y_<8@_D>&u>vIkV7IWNMdC?*hcCn4SiuJVm z$wV;(8SfB$j+YG^(fiu$a-q6HIj(az$-av*9TCksI0J+TwUibCqoEW2cv|F!0UG#F zF%Z-rVPgm-oZD_wnIlwOzQCP;Tt!26Vob|1!~-g;R-I^n4GP~SQUMEj#FfhYa)m@> z^L&M*smSwh>VT*t!VbN(oG+}X^RWImE7FCkbR^h$GdAf^1X0zI6Twn}FUp<)koWVWlDw?$RKL8ED z)>^I&1`13LDNiUS9%iT;Dz2YzhN7hYRN^IzXHoI^ZdSZX5*5TQJ+*lV;w- ziu}th65=|f3i|Uc(uXYsQ?188Zjm}ny1KBq9js|sF zXi$!RmF@@Kk1z9dE@~;!PQrTzZPqji$fa28rkvsx@1Vb`o^{Q+TCnj2Ye5jgm{g)% zog(0uc%r=~!lnEq-pd0oBLyBb2d7&?b`17bb^Q}E%kyCuJ%hxylE~8MSOCNIDxR}Y zs1{8dlbn42sYkW>ffKs$@Y9TtZnQB3L2$)LryJ+J9#jO|1ETq!6SoWlJ4Cjb>szzX zMy9X&Tej+8iD13`Xo)c7M|(OPuqLcF!S+Kqhe0r`E&=rPA;;AP7yG&uOk@0REWR#a z{FF|enKsp+VAI)Tw1v+v87%=X8BP10FDQ?7Rz;boV^+LYiL)k1x(8k|nhxSSizN8G z{csA___ngd(BYc^-Izm^T0(u1dSCGIaUS(TMZe1?J31<)?KOCY3^j-!4gD*9G_dbG zxv!hw!+|j|T!daWPzAvB27dgjMgf|q;B6YTf(GJ8)P>*OY(!m2Jo=UlJ zRA4IU!Pr|byN2a#pH#*&RY@gCp6w<|!4wwEx|>yE(#|hmod@W$#)ycLDG7UOTfL05 ztH8zQII{)SP1(y?s8-%9C0gy%0mE+He;W1n3mNZn7LX6z540=mfTJfE1ovH>w~7^` zzIo47v1!HamcIBg33~A{*&ZC)MqFmV{E)-*8>lplv#B8Aa2i44wE!1n|C1lb$+t#- zRgDv%8>oiuq^0A{VjN}}wv*p=B+f1aA)0SeWovX?;{SN4TfSIf(7)6C0l)7wb;Iqn1`5E8FDZb1^4mnKBj zA5Dl;mCr<%(LfVoTIdX6g3z|&xd~AMG$FJPpPLY|qhXeE)6PQ-(dBJp;G*jLtd=?f z9inX!XZttHkFMI(TJdonZww*Tg{-%)LqwVxx63TY`rJUJfF=ZgH{#S~$TkMhg!t*< zn%b8EG$9iDcmPXxL#wi*>637@pywI;vTTj5w7mv!WjSJFhaB?c3m&xe%%rLS79|HT zsp>zN6jtg-)@_5?@9r1?lNwPgnKlNP)R_>k&6^{2>(2m_a!MeCjrjJ`3nc%sQu$p2 z2So)B>OIjXdF_2fIv4yugAnkVuNh?yI1xTQq_iz8TR-;#SvXHQhO*5&+}@ffS|nA*4Q-Q=H<06h@ali}%;A8r)hICv(i`?(F=0$0Dt5$q%ZQ^E8?xn-BgjgM~8M&&Is#m&J$=@MaQiIazLfhO91$ zJHQ|I1#MzXfghD&kPZ-c+4W=1oL?J{prRg$xGE5Ot>7leL|9bk>85t0aW9A9Z3lnt z{BVCnWajg*w5|r^AmrfdRcr&!T*W5^^vy`b=CN_G43D@ddlkWC*CO>)3Mj^AYToxA zdj&uZ_p>kZM$=J6DS;=-b_%z+Do(~tO`}zppbDzL`97NlvlaJXU1Z$E+_m}P5bC)W zD9e02x=48PpykO{YNGf{m_uuGa^GfB-H>%0V#C)+E!s++RPj34mZ_k@IE`W>VVo*5 zeu;?`XPA-^6VtGMBf*1|lA7|G9}+&U*3+f+L&BBF*Do87x4}UZCa0#? zg(G$S*k6|E2(@+K}Oqk&3CPD-wtES zCXZH-G`f|KR11;v4^;2)6DFlU*B6{`EY8RB?nA(iP%<3DQB(|DiHr-uRqoj#Xu3sW z-;}N5qK*<)xo+kdg_-H#FsQqXc-{VM=F%>!a$jdx7@Qx9@($5k;20J6nn@-Y@pgQi zt`duJ<~l5G(rC`|9YhPMHO{$zm4X(}#9YhjQ*HQcn`D%5J@vXc~oJ-LV{2@hEGE3wFWaXSP|J z)8{4I)X#IPk89Hf<(a6={G^Lj5EXn8D#hnzaQ$$oytI2(;ULB_LSC}-L%j@sk z!Cn5)jbGM{py(r6){u9U7k;m-Q7s>x>sT~2pYp~^dM-`TdMR5=$qHAJKZ7Sh(UmFT z3I5~x)nv=9ZKev_?Rn6 z@SeVKr_PPVk(0v5^Nr@lL!W1o;}m3nb`~A&V9pS?OO*W@6Ho7XejeRo#QMRsF;B=* z>w77DJ4NxO8Ue%E8W9(@g$3l0_P6E46W3!bW43mPj^K`=vMnJi+2O>>$$Exe*#f_A zW&mW!d&h)lag5|(jOd=Dq-5GU$j>?0Kh$a`lAggBUfAIJk;gK>(A;W?D=qG4kTI;j zndFh%b;&RJ^L-}zXsB8iU0d|@wY-Bp2+mX4MB70j`yo8zB~IXh#N{K4_rHMlpsvU3 z{i@dN!^02v_xEF0N6VdrQO&JYgrW9V#O7Z-utQr!z-9Sehbh0xT zosekyVt)g!BkTSB@lCOCZ7pRk*%Dkt==|wUYgVm2CccACB;m~O8XTb%tNaHyH({}dl~bR z$~C+OI;)u-BSHYu!bdih&Y6h9`Xf_k0=&>u!&5A%0U8749X8|{VTer{!n9@lC5W)M zX-Vuv4D--D?)%H(SC2NP!7$Afh06ZJ`8yc0!<^$IK^R)F)xD!wF(~X9P&S8F9xiNm z{NjE%T|dEd-zz}T))gUy#!3nrMDiH@Y_88|Fb+Otz<>Wh6a`VlGtLe*98_o;+RhqK zNI>BzE64hi%E#s^#hZ3mB|z7+2E!+@5EU{jNn`(Q!(Ux{W?$=^yAF1<;W(QeKNTTb z!w^t8@-#+&%%z`#+>wYqD)(8*NV@lm7yNSXXQOshRbR2-cOR(pTlN~E4HnJoi^s&W z6*O)sXx)q{&eT7Kp=b}b`XkJ(hS9&%Ku(^loaXs5%|@|Kz&EK>wYC=M;k#D zq?|$Th}jVX%sb`G12q{B;TzNOj!Cz@Yu;BxnUN1Dv_zQbY8ZizUb`wQewhoc1J&(# z!)gdiLXL>rdSfC+QQC`QY{z#Eh_GZKpK+*dKYSWCA3h=c2z*A`VUHyJY|x`#!rui? z_CvfX)#sL}r~^F9LA}_;Yn--CUkaXP~P(=%QD3~V}n;D1&CZRke6`hsI9W? zpM^iOOgcsEw7*kD;?3k08shty3B1k~ zf|OY0lbN5kZD5_5_aK9Xa8(gezwFtO2;#L6WJ(RsV083-=yDDUhf&Lhki0ZaH=;ee zHXa3!KVR|3+n_?MZ~oCFeXE*K2yIXqtTnY{J5upL3;Mh++ZFnmnKeuMQ1^h@5s+tI z^A>+wZRaVO0X@;odOh4M;}!y}Rzx8iD_=Etjy)q!&FA|u`l&QyC*Xc8V9s6|xu&Vj zJOrp`=qP)fWU>HfV;={2F4d+oI=uRq#2aJ~X;AVt7HB9!sI)I z{o($*S0A0#F2_{4!la$}(yOn&=wh6uN1?i*q3ZAye?`A3+I6z_`-bc=7hSSf%EVIY z`G!mixFJhb9T-oy6zuwDM_Gb5R7ai!+>j*;$Ejn~Rd^qW0swJGOk=y=s;LynAdaJC zPM}R0GnqjJ#}YjQM4>fJoxLv~`<&hA?8XNC);CAg&6mOag0lZbk*TBZJgR z88%d%V7>91@XF}6u^|0e5eX+6xeh=M3g1OFPZ|ItQqgPTSsJ6kjKfiwM4UczL>Wcd z83LBNucBa}U(4oqaFtZ6#lgM4NfI~9XuAVQi^^qA-6z9pG<1&SS zIv&q^td^g2d)hqV-MBT4W~3;nzJV8=yC$WE-o6ecuw7Y$?YnUHlrVq9ZFgVyE8H1y zr|(m*GT?UbfnrD3t*vT2lf?4D0o4JRM1UkZ8H+PUdV_?(yXiHT!ji0_Hdt^1-yg6S zjx~u)dE-VI1rP!K!7NBhZ2c3H1Sm)_K`h@yecjJ6F19k-sioJu+B*`sMUqlUK|rBi zVRhZ-xlm8IM_&~n;^JtQWJ|E}1eN7A6t;$iZ~z6hf8L~j{bR_n1`82E&g$KMzyoI_ z;g>PMdA$75pxkazBx;QEPa890>>nHRO3{J*ZujczYJPyi(Q zFK-~;t1>);M6D>RxMI3)roTX98IwuFJXgdx1U1SpX|`45Stism2ojWgvQn33X@8tg z(%SZ2S4+0h5RjBJjOHo8Uvji6o>3-p+hnc)7C0lb3d?g&&uhT@-O%8DZfIyfH#FST zE54vY^kel_<3JkHILqiu*dyg(;RQiH0PVr%MkgG=_PI*(|a9qZP8mh*W>3j zeVN3708tef11XTEk2AF0dBSAisb|c1y-L#EQ6U>SkPs`3>M z&E!EsDFM642n|N2rJJ`uZn&>h0=T?#Dn0TV1AfXXcmpzvw6O?LH2dR7o1VV{;la7A zbK~wNgyiXPZy-GAR5ZmS1%wARjXsC6|`Bkyt&clFxr#7GusH3#$0PJu^N38#B}K zf8ERs*x)@ID9JnR#)u}a#@7eT#}8di?`#~}&OJcK>k1VgvFBVP<;zB7Z4!q>(L>O) z%%!@e{1lcL$J=xE@|@yA^u*KOYjQ9&7;r^5$tiF~s3B5@yAWqDZ>zbZ2E^j@5U5J7 z;`8M;rmzK$a1vRmKhLPia{ASPe9Xv$Dr>Av(MjT^12#47V6>W$F|REjYEd_?T32p& zo5VrtJ}6rJ+7`BHZ(h^WsOFFoEg^(&22k|)o7Gks(C?8<(=4%qcG)iUSH*+f##+7* zGehw_!b&BxPz@AMwO1W3byjwd7#Evx2wfqECl-0v_O(}S*>rTZz*x0nWf%6J@{SKM z>$w>(U=EBddR*VM3xGtqYufVt>hTIaXGyhi>#8M9%-<)ERNP<^4Yb{# z1r?_10Pfou#bG|o1PIRinkq0%)yS~Z4~>`oQfnpgS9^h74AqSB6nz+#jd>?|^1h|5 zCdHHzr%K7y+)nE$VMt1ScHzsG;<%D%SyT`P9?TQ!48pCf#*4^fKT}AdBu4a*Ig-T` za;NQ=@w%ta+%|wJAs$3#W3&8}f#URc9_nAg6lJ#sWmIlo)Pb0Tx zH4DCE&4*W!4kOs5t{+=IXb9Ae)%LgR<2ZZ5c~pJ0U;$-%mGF0qea0m&$ePN6 zBnbcPz$hQ$N9vE;D{`d$_D55f69M_%MSA1b-KZ=1#0!tb%IT$gWFQja|60ZT)Xi11 zm-?9Dv!Q{pMMrd37qXa2iF=s62ybI|(%75fPv6a_-h^!o3=FKjF~wf8O^6w&yKR28 z@8d`lALWxTd`VFI5$ZV47r$?VeK;NA1oM_eLmIV}YtpA>TO_LGpgSs4q zBG+13d7%w7xePl*tY&K2%_WD2&`|Mc2R#>V-zC{JG{BcZH1%Q_H?DU#dZxA$R8DsR zJMfST4*YaJ;QQH@Sy|mlIAUTlJUJ`;e_2YBh>qee-DOUwbLS90(eUsJ3Wsm1bhy!Pq$MrQ)MQe=R z?8?~HRknH5?DCRJ-Mh+bhnnoMcS7zL8f<$WTk-cZ>^Y&ZF%7h$Qg;K9x>a*Y*X8{o zWS7_Yx13K4V?WoDJzCtcto(5%1W;4)VA4;GKTF2yw@XMqd~_`PAOaJ-i!fpt3ctsl z5Wlwd+QBBz9MI_uy_g9vi{J!sN5LPsjPdRfVo+`b@hgjOsx))*2=5If7NbsU1?}GT zD9sGlxZ{bg_0S|2{TQ(?65NcMY67z-R5u@0?TL(?dxKos=H#>g{@5IbP+oyK4O@P^Eu z=5=E;7*w$DR+8I}e5$V&-dskTqJ8&kOjjl5d}OzZtV?P~Q|GqxS!XgIf9T;EY82T9e01AB_XoMqYACm@+rth|tR$!D}UzhN4O-zUFc z)*G9Gean%B>+{I#I(5j<-o>CAjNrt1NXV=b$QYVTi9boDm$B+Db|K^9yCpMj2h9YE z@4DU8B*N>rx}Pv@#^bmnk^ZsxCJA1Xnf2Mwcfltj>e(|8^XR{U-BvVbp*VL-nq0Cj zJan_2vIBzig?P!9qP%DRq<*NbeGlclR0NQTOY!neg ztm2PFks*ZhO~C+yC`%klwFZXXQz0&;jzb(C5(9XY>p1biva~0yt(yOz|kYaJX zxIz=^gsu+a5|y1=pA5%1`V53ZKzQ_$X|0!SfyR6#zQf*825`nT?P45ZO*b0sgXY}Y z$pc4JJi&7a@{1yAebHuWBp+zZ=l6W5+u8{ZgWBC{&+nL!Gf#?B)+Px=N5hJku~{6> z2OLrROK4)6YyeGuFP3jrL&OR0dE9sVxyfhN$7jd4{Vt7SGf!%#!*k+jwG!mtGpMXXpylYKyOsnt} zJ`A1n=ji&Rs96l45^_UbRM9AvVFXk{uI4EC*3^njl7UJ{AKFkZwQlS0N{CqI#$?ss z7v7W{)eYS9!sDag7QH>$`eWhcLrC@_;thB|2;>wb>yv2nR>$QEta%1~+?PyZPjVMy z$3&Ut45q86w$$UEiv=nnBhd|mHXDu_=oz3nq(XTVg%cSIl329#&y^5gG#$Dh2rrco z!H0%{bIvW?w5d83h~Jfvc8|L;czQq)^=6d*%v$mj_o3sbpv(q0XXLk8QOF!oD?k!O z6FQ<7#6+Yvd{vhl(hCh??1#qQ`}~i|nP0f8=<#z=p4`i`Q~B^5fwn|7*Q-rFFFcLb zQUJh`313JnhS|Wvx@LzgSB9SwpvV!P3yIP%g~a29^i`XCjzLmm?ya&<&+m{4c7un^ zJ12+%Y5Bn{4QBraMIbF-f7;9v>#j1q!vmKf@tl_LBDdgjRK_RK=A%2WoMsWCBo%bg zOd6NSApzMCTKQCF3I^loTe=_xeD4x!!d50*t?f^am-XQ*NSu*ZA0%!QUfx?TkO)W} zvcy^34kF;7?b|*d&+P44VVAyQhTfP7*pJupUctyus4Nfm`L%;&c!z5h#^YA5_xJ%& z9K55xZme)Ws+GWLZCHi%V{u2i0cc2LVMG}Di?VWq{#g@E`*clH9O3hN9pMner z0*Q8!*O-*l(c3UPj$x_?r3&EBM{OuWhFr8LjVd}2C6~J(py|;C^gV+X*~pE`0A4hs z@AxhZy9okHh=f?(gMU@6jsXse-%7qgr=k*~6Q$jLptqH#PQ9w7Gih6GMUo5q?1>t+ z5tr+bWx+msqUz_)kL;oB$T8>%8WnDwOXP38j3MO^A(bJ)6(FTA$qIy~!n(MV_S};8 zOd>vT|JMvr)rcDF1h{FtvPko4v@k52_m;r{w-vM-JUZ>JW=<1G%PM>kUCQAT6LNcyc8bnH{lOd{tCP}W;S-qrl;vIwg2HQ@Zwn0 zlu0UO8wfSych;VbVG0KkaIol}g;)@$-$!ji`t3o80j;N=!6+mxz2g`X^a)h|D1|1}NTvx%4moSP+FoL>oM}2r7w&hzCwb4^F`_Uy|}Xz&i~?^aD~~}W?NoyG^NV9j)O|4@St5ZK$5g3Z zG?&bP|H)6=6%G4bq96j#XUN9*FQkK1lp-p&Jdf$Yb3`W3+ABAhfw;=vtN9Ivsy9)y zxF?=!P;)eCAa5u^-drI>92gGMF*1f%`tN&Rfr>E^YqIBil(ARC7<3lBH>yILwVv^X z|8$zUb7x|{!TpkyA8xk9*X9P2@+{9u`CFikD9=gErdvFp#|*R)RcivSezy@>{?SIv z58F=Vjs@C?#r@LxADoD^ZdKlz7g79k8xcKgoalEOk!=&UpEbv=PzFws7zJn}GH9=0 zxzDs<_-OxbBQ`=Wka*PI#Kl7-PYPLJ5oWzfN4rGE#TSjbg7o)G2S z*Q*d8S~ACF8Oqu_;YnF3z&7#&+>CircEg95M24HzmD|voyO+98gbY8XC4Wke`(@(M zOA8I=K!O1iFWV}^N*HNB_IctFoa?U!d8g-)ZY}T)6Mnnb?``@~Wp7u0Zg!h;lF10U z=+K>CX#EftkdeS##x@evRRm>1ooQ$#LmphI`Ac)Ia0`+l$Lu_3_HtCX@|T2_RxqT> zrS9B*S~s}%W?Wa6LsszTB|+OzM{xIosSNi8Wps5f zJfr^9*#>mrkF@=muB~OWt@Q>p%to;f-Q+7c+kPQu3=<>$fhavX% zh>1E!;f(V&CPY1_TU%R}Y1P3NJd*teix110cs=s3#i3+__qZ+65tgN3k0W|aQv`5V zY0uihwq#}FFb#b!QuxFm`+n~mz7=5KK(PL`Z}py;teX=xtIa6aQM`+R@VAgV#Hu&f|7 zUsqF}4dYN~cm=JfOmWV40-v?Yqf;3&QueZ)qEgC2cPMduq{2H^wcsR;4RuFX(YO2B z+>?00Km`0&d5!($%uwF0BI!1?KvdKGZl!ij0I_Tyl-SdTPEm`IFa* z)LT?9`M^ojJ zKFurWeH zujF9KM_h%C-Q){|;Ve&XDPv`Sl%w6(asz>ZGYsTtyf2EU^VzfAhfQj>Q zbRr=7D_K{S4C|5iGEm1HehmOSOf&}aSl;i#123|z~Wx$aTF zNW&gl0It2V90B=sb8N*B0PKL1HiQI#9c)JY!+3d^6*pyjvLW0cMYH6H!GO2fpb-U9 zJ31Ye@Y%d_G_f!g^(MUHy~(%C{6gXF(;kN=+DN~WfxTERp1qhm3q5ii%ik(3#5B*> z&nWovXO-3tPQ$Y2qTks$+nhf>;sRNqge?OJD+mQ2h^b2V_Q8DJ=Z`F_?T;+0#kuGh zH3F1n;lNT2K(z5v0$EmhK9FTqe0zKP4#=|jTpvJLR-~5~5M_}a{v*n&e~z+F7smt6 zJ;oPt0UdKs#p9ZY35Wxq?EIslL?{?CsU_Ji7Z0##wbZLhzmx|oT9T- zg$}W0|z{3yuNBXZI;n@Hr`WcIXU2@6~ z{u9Yb=S_n?kp7pRp$p%>Wcym-VTyw+B){bt_s(=RIUb0}gXu z#B&g{Bi`TdXj&^7C~{Hrm$O*Ro8OVofS4V$)mwR;(c9+gQ~GPX@;{g-qBos^9%yU` zd|Gnx+rSDI&DL6wLJLhg=nERlvqB5 zthUhX6tM_WD0+8EGRyEaRxD{BKopRHYia;f1yG35U@6ShL}&$A($mD7z^ZU1rzEf9 zvLH}C4hjP0UEKsrS*<1Te--&OevjkM2N1TSJ-CRxg^cQ5(u zd;?aG78yeewi71|Gx)fePkikV5+4w)*W_K1>zdalbHVEA&)d79Or~C~znV~tT>e9^ocA5c4BC)` zCaSZJ5RfZ7GS_XVeh1{r*8n3vq+Beup3?snaZb;A?v-0ldvc^9vHoU?amE{(NG91A zw5i@@O9_b3zi6V;E7(yASiuo`J1~%MAlYR_SpmUvd$E;XWk=x|hyq_jQ-4zU5um`A z>zCw$mFoMItbNvFRRzc$oD#}y^2)l%zsVg0AaX|)h}^+nG2ifP&(eCfXHiza;ek~~ zMDBy|K|vc_d6p|5{vlWPnoW~B{<~wuH9Po*FV?(O##6OmrV({%wF&509*S1cp2%Zsa81ZQItkH2ObJDM~4CsZ4 zV}V{KP_f|88fdL?U__Hcz|X{z3pFgec)_7GDrNYpjxT(=Xttpv9zwt)voYKjwdn!+ zyYdeCia51-tbUfO^7~A(Mu7fq^Z}<>Az%o;V@4CGFq6X*O77({(3XuNTnx87BM`ei zvb<|u+c|$D5J%pJB&f!3expKUFX>MN1#z{)QiWde;Q#`0TKN0VAEp>25Yea=%rYwp zWRe*j*x^^Xu1cfT0a0|YUbeWzYEP6&N(S7XmIys~mVXwb#MgTx{4uFBxrJP(GXj-wPTdNB;!K1Q z1H}$-3xSQm3xdUe=iVC~o&c1}&9^yBMlAq%fLuGx@0dKTMCue{d%BUNhYt-Ivh|c zqa$Y|Sv9(nYrZ8bhhfeSiS)WHDW)qee`Bfr+ON^g{0rY?h%4Fp?6jLj#L$O@Xcj{1 zw0y&r+$Nr#+YT@botYANY*2bN@H@St0n#hG=k)6G-=tSH1TWc8FpFUl2HND6vVYQb zp!7;d8O6|(voYSuxbj+HWqa~&G^S^a=DGOiCu(0zw%cHvq!dkJN+dCE_gDlKZo|Gx zVk1cqBk~k=spf5&^xq0xeLcwK>c#cwkTwiNSrqt1?H4lv+`pqNb>XE?CQx+v#%1<7 z<-na&0J?K(fjdV!G`qlhdoi1=C4=9vyn}n*z258X%WpVH$2>+Vs$4!21xllhnp*Gs z4#gnZsug~hC@XzS-+w!Yz)_laH$3uKqn&)pY^{E&F4@4Dz`2t z)?@=dqw}|$$Nf2zQn)}RhfkXdglJYMYYTs`1~*%OfyY1X-~>caKTuz;_nRg%kSxtd zw&&T^_|^1g+TBZcTRYPAdh7###9SxW0F+fW$IX|GoxHsyzi>M}ubZFT{FcV1jFa$Nu!TC#vW7rkkbRzZF}Xh&XpJ=Auh|EQes?RNoB zSn%%!y!R3XPaA5j$DrBR(`0_w!}6vtl}Js;#=F|KmTS9ER@Jq4!rG9SY{(*YEJ<5&k&gI6pzW6j;praSvnhp>26N>v45u*}bvF==!N= zvgaXmRV=@966|UHLEvwB4HH|TFKLM;+WtUY@)<+tpR94E#BiyoQ;1n(KlCN` z;K=E@%8rBLg2GeY7=#fwPC0d+|2MgNAh7XVO+ahBA^IKI)M7seHkt2O$#f77jVSy%g_G4} zPr(I7b71Q^urXc*1vbI62!WKlCu3$}5hfRIB3LTb(_dl6f|nkSCim_sv8FJKP!mHm zaFN#Ozq6|4=_ZQ($oVv|t*ARizDd9lc5{{wRoeV*8Ep(y&?8|D8!Vyhii{^*=f%ya z*~Qdpj|dN&4XwxgnC8I%ohJ{U7+?C2zy=&z$-Es1Y{vcyY$X34*r5F*u(^22Oo}w@ zSpEk5Uv3%J$>&=p`{(|@+%hzBf8H|73av#y+$KzPzZ9$hfsO26feqr;SM*}cv=*B^oX5!k4?97Z@32N-~~R&K5$WU!Dj`o zUsXEvBcwS$n7EC{QJQnS(o=?l)6YdT8RrLtcUB_~>Sk9oEUcxp`&Gm~YN+gTRwK zG=}5Omj{${a)gro7na#ysxMB5vfTnMU=F|q>|#kL;|sWevuD#-tymx8EI=+`Y)uEn zwSI>R3JXTNEDGne-Tt#?z^x^z8z?WMQY7T6Nh>a01=i>R_oiDT47UV2BRJLn#yMrz zc9?~?)V>Bz<1O^hu9<+Ri+t>V*Tp0KH(fk&1sdFN*ng_x;pWx@{YFl&8UBf?sS;IS zwPA9%*93Oyn6nUbi~Zt2_Vt=Z)H2fb(cuRR!R}}H;1&ozc+q?d-_CB^^C~`B*#|)k zfDa-X^H!ynho*txgR~1+Mou!LV}~U5tQ_s?g;NY8w>lC}c0*{#@Qtax$gn4tkWgiz zCVI14;)7&R<`Xi?9^sf!`Z{~~2hMU};2*v^w}5`GRE*wXE5RO(6&1PIL+gA&$Jj(1 zsNTa$i3V1^hDe6NBQl>K2yx)lCIRvQ*S!tW7Xw^Y)OKfGAO$eWWwNGdJ|8c;9CwVZ zFXUvWDNkzsZ=AcncUH<_R^$EvXy5g3q8bH}zeP2iIP!l*HQIwPOiForr9eX*qMaZBUk-{VD&_XuMhftCd<5L#=;%;{ZVjAg@;MS`DwfY?&D(qhK z8-+s@!#(O$G1#D#Y7@9h;1lO`S+su7E1ijeL7#zZV#j@@#hCWy#&O+Lz{cb!@ zKDfW8+2{5sY9-)bEFtxa4O`6xdZaK~WXO$3TDdRN0qziRReC8N`pf$d0qVnunD@w# z*a8%%^$j}AWK~6@a;?!SUx~YTPYUO`rR;_nyZQ+k6n;ZJY5*;Q>~DvahDI9JUXm*b z&TxHM@FnlP`H7c3gkXW6b6m=IB#Kh9fg)vWWz}dZpxu0I5gadjONK%9@@sK$_3q3V zIRJ7e(lJSHr2v84>0TU(oD`&*K;vqoJcHat>4<1~2m=9-JAWSEG4sgl@Js;YZW3F* z@dwBqY{+J3^!)ss(yEc(oai^m{q9;z`EMY1IS|O*qoQ(_J!>;mpZwL@5@G{*GKL=* zS&j48w4`isC`RX>La+NvtnmUNAoENj%^9YIH3bD}zV+tdM6|yrUJL(WzLKU4>`n(u z4ud=rch8ctv8L;_s%<$jU{2fZ=mkZZI7z6Fa&g9kEJI~PvT}Gu7K#u)DO`egIhAcd zTv@NX9?3Al&C)F$oSn3IRw19eM%ubdRY}opnNE@n|D;lUiv8kGX7Ns6BNZ4~5v#+C z21~@4d`cF5xA=mj1C|tzlV;BDM7BCZQVZEw92w{KTvbt9O# zclqbDspk%!**`jXqknYpFlei9NsD5#^LLm(#;Lue5M57?`iSuP$Gd_+sTsMSw73I_ z{Nb&KAwyku?Czf{SZEkyZY2yMdd*#yeG44;G2D9X+1wTN;%8&1agW+`*C@BuJXonh z#8oykbQg0?EYQCzp8pbq4Mg>c>fGV`we8kxf|O5&um8U6_Js=KVp*Te6?6R#oP8MK zZteS6u73XzY_77t0rx_ica-LiEOGj>Lyx@u6RBzZ^A;d>Hp)5`SN}TbjF0ZPyN_& zj`RDYbtkwqS1nYZ(pJz<^K+`besfuZx+G>}!K?6E`QzCo+dHj$pL=-LPm5LIJg>?& zu&$3*FOY5SFy2JMB|L@|(x@TPjl>vFMk0Tw?V-wD&377~HC+vV3@d3a3$tl@QSIk- zDHw)D%Fa*Rjf<|iFD6>?x;34@-i${|@_T>q2&c#^BVVX(nwy{kb@|wgfi9nD9jMEP5qB&k#&)8q>5DFJ0a1$RNBUp&s0XW8jjpD3np`)h zfonb6`qj^+xa%=drIpiek-hsZmL9Z+9W8&ufV$Ck@v40(FW}s|V`)rt_PnktJ98vG zRbtn>26~UXS+?#Wy4po8X;%y%E#A#-!;&WMtMuJEQTE2Cl6}e=Gi9|Mx9qL$r&#wy zUT5IK7?Dbk_|?)xdq>2da`v|4%$OYJcA57oo8yD^2kc?S>mpQ#ga%(iH`h~{d$Apk zhwlUDHSc`;@23|$RrQtgN(Ppp;5`GjY`-p3tmf^?-UYmx(5gO`%}=kt{%}~NH!?hq zBCwc@MI!*pxK`v^C!hSnQ${PvN4#cV9gKaF55SdyaAJLR>2)}u$0x|Ldz9a*Oe8w{ zM0;sKG?}2Eaa_B7^_q`9b!c63>=T1H?9JL!vB+k_iAT|FVBnGWiSWtdmY2_|uYmeG zn&e5twh?Tx5}(@-njb{(T5hA*^%uey(UKvIVvlQ689w(_WnHjWDhm5dX*bduWqEf7 zk>B%Dr=4|w*kBm`sT!1;gzZgil|NFZyCkxM@iWFcI3Y=3sM|TH822C(0pcw*y3sk_ zo1mG2WeD?;M?Ns?T*scF4zpq11B64o88WaHrTn1aJ7mA9WcVLuR+e_JVPCvci*7Qt z+U~F|w9q9Bl#09j?0kT~{NmVE?$JWd=R`)opo{9~_c=wLxz7Q#DTAhXvnJs~UUNFH zOSCPEDNC6uCoQ$~%2Q^JYGu_Aq`xv>-a*t#dg#X0MU<-|G034yDa{E?mF~}fs*q^X z6q|KPRjeSbq1~^0qZr)yHrGXHo~iMZQDZVEDPqxekiqC_dXuu61Ek$t0~D3LT+u3o zx?9au!x;Y4*~7l9n`;{tqPLB0{I5&HOw1gXzIUv;nd|kXk$ZG?$jzqRq%`zj7`s2m z#~hF?`+kKP*X!oxtw1?lCv?4XyE|_ECDotde&5tW|LgL4mG7}683}(zTF6NIl`9Og zZ`a#_k5yy(v&9CI;>Kz(c?esTgMK(ne8H@*7m%J!n%b(`pb+`Y>EE=t7uIR*MAn^h zh>W5=tI1X7y&T=Z(M@kxcfa_NpuMa|H$q>JqqjWYZ`pWx!S!4S&8OG-)+A-gHI(h^ zt_QYgeA?F&0>bRL;Wj=ucJ2in*NqkOY@Y8m*S@;>ePh(0VwdI4eY@<%_4L>$OAhBv zi22baTKi^rNZP3v85vW z$L-Q`Q>o;O+NN=)m}C>i^Pszn<zT-`0}l37EsuYfBq3crgzj7&A2;a}LZ_b4-6 ztEm3zBJ6~zr=D$Labd+r|CF%HM|M?WLX_KSSMH=xw&`ZW7X zxuo;?9c78YUZ~&+*JillEn^z&aDkDYq75g@;4}Dic{%KHdDXM`amv2$F{ZwO=qSGT zZ$m~xey`g5y%zHeHatICe+9XmX>tbBQA5z%WoaOyuq6WX|v{_J%`3T*w z!dyX}_cX=PEA?%j-fr*-E_x)NWF%VPTGw)+ZndG8E=~neg+m3w`RM&Yk$(nx>c`K; zpD{L7PvA@bN_}mmEk5m&Mq+gwYpUh956lXDbQOEBc=u^6&|Clo`bxfcSzm=BGOH-O z7b}B#hcvb0Y=q8f>;9z`AMX3kkl8>?f{M$Cz``i0)p6pH2;M1yhWfBXojeZ{$}o=* zjBPLZw_CoNaT_$b`S?E~U$ln67+DToH%R24OwVGi(uJZ0)mS zPT>dKWGX#Y+;4KO;ezFyLl0yrwZ}7YOySE@`2;0DyS2Ym>&vJ$f4enkKij@n7&z~P zf2k+YAmLu|X_U0adX#=AKLUxZtFJ_}P&8CJp;`NFohPTRXJ$+CYt=Tn$?~eyI{CeH zY8BgL0~K9$k3et_dDWY&k+F?NH(<%=(DUl^pG!sr5u1zms2;xlr2^+2B2!z_0Z;dt zlO&6pZv=v@%UF|=e#gGMw#Qex;3#7+_gqq4(7+eyyl53tkf+F&xs?Wjv?#y3I3kcL zlqndMT=1YEdm;r#u=~74uAkVWV9 z3fw}Jh)6`5YfEbw>$0iy)^r?+(0CjlFt=b30+7=fW>H?Kr!Wn!3PT^NhE{;r1`j+> z9L2*Bh7R>$UXH>PvefIoHd9SOfjI;35H`{S>p1em;%{D=$4d0{@2iB%IYG^oJqtw4 zem^T1Vkiv?hu@^ks}!4WrW7!?NsNfrsy}Hs>sb4}9KwiU$1;V}5pVx%kW1>%KELWeMS|ShV z@~9Sdq{^PR)fj9iNt+;T8cg1*@b@QXnVYUso3ea}dRK+db=9qj)|K-Kz1NY<>{VPq z2ukC7US-Ad2^*e_y6A{Ufr8bK#++_Eb;N}NLhGPbtd=p}k-36Fmv_xzd?W-%G`QMi zry$>RUR>iN2NuTk2we$k#p1K6MO`MkXkC6h~ z=Fw0M^v9oanPa=jY&l|~a5{`|uC1FaF;0V!(41M0J-!GZriBo2Ly@oa{ zzs1>1JASFP^e))KeJCUbbdeB#@VTzGUwPok+jjqf(+n6mZQYa6>J zQ*8D9rtx4L>?~i^Uro_5b#Q{!w%s~InEZUG&X}k%JWdZlJTFHbWYn^E>}jb6hdMS$ zOQ}o71GI?CKc_G)NTH$dvr(hOI>-fuB&(ec!ZFd_vu5=_&mWu26A206^zxX2`6H)Q z0Sq);|GP-cIWi)iz=eE~o`X|AiBR5L;N9hvPz;Q_h}sME?&5NYa(U$rASQU(t>t2b z-pk>g_8x)V8&=8%L8XZKkwP3ge?HQu#UrcQ5MKZ>cDOq8gdpw##*S6c@?hLKNh&O2 zYh8XRUumHKVC+LBr@PMERf_9`ovum>Cy{i+<(t|)7gNMK(>Z=DH@qF4+=iFa;AcZ| z`0J-zd$XE7ouBFHzdlHoE4eudrk3-JRWgF7vr2FdI39Vq>7om=af#O8jwAFQM}O^$ z%_!03mL1(S-WXx3A>R)?!2(yo(Ei34Z4AL>XNPEUe51IsIR@+@OV`(cJ)}WO87&Hv z)LQJ-7iW2T;$Oe_kkH?t1Sy}!1H|z{Xwt!8P23W#Pdu09#a|gG>(5SJC3z=6!BMG; zTNh&^znJ}F4+*4aesvc1K1K6_oIQ{wvakdQRYv)-2k^=E2d}0+a9trM=cG}WM-QPu z8pNHMLtDD%xphtW2QIX{hdm3)Y}-Jjhx9j$p5Xp=>{rkURyUh#mU{dxa>m>|*AmN5 z8P>`Zd$|1&Mln=yJ%1p(akl8JTR0?c&A+Z&&2ks|)Q_9VJe9-|epGj(hBaRT3IyAE zfR^(QV+LS5sz}k|SeUWq0Bq-II7e92I`x(t^koBr?TCpd*j1gs*#NCy((g5Y-FK&;IpSaWhl8EfbATAXI;P~)8GVPJCK$TFQd*&1b)Jw z=scORa!MZ1&Tu%0A>eVZy_U%PMJKZu>>vNBE5|GD6IF5qi+pF->_G!s^+fl(Q|YE@ z!;UWE&4Cvy6=^asA=imb=M7y5c#H+R%b41*IP|!*EAvJO)So-6du^R(OH8t)Ai{s* zhiMvi)deP$whZ~X_|P@(ewXkRiN??m2rjQ~9W~|De8a_`S#4Ko8P?>)7$#4XXgvHK zFvti=$d&UIxwE5F&fct1*Azm;2O(SnRoNH>c~Dh0cV`W#$`&b26ZTZIGE<@{{z%vW zsMLlGCtg7? zBtpYBR2L&PAMA~U1ZMB0?Z^owg#^Zy?Y%AD^d$_q*AzPHeM1w<(xrcbI0DH*_5mYj znlOA_wzII8)dm@;$`VWhRaqu94O>=v)756*x%QjD&SmlTc7*$57+V0hv$yz8?7b3t z)8#X62UE=Wy#xriLkhy}tO2+k&3Gft$~TG!^`Z(l{$V&10B)xz3546hPqW|tJ8s8N z4}{y{Bsm;l%5B18U&%B)&v${G3YFd|PIWaujsSmT5X4ijvkZR*?x4Fq19x6-22q-V zfIBk?|6G=BG00=ekkk92nwf+@@JpMi%g8C zMUoH)8$T;DDzvmxW_7MQZ3t9l@T|Wm^+40c$XU{ethf|A{dcs>zRKij&B&BPllNR0 zh7@#!=HH1aq9K<_95fJvYZOF_vM3J^fQ~=J5?Fl(nx)#z)lYqNGzlP>k=R87Apm@1qx? zmHOamMz$|(mJlwfYG*A`feYs$K7Z2`ivp`CYfG`9eutAd*{^LYA$UDEGT4YQ=9_Dt z%w4Ckm%8DmTt{!0AZh71)xZ1J&eyujIy#%@Gu?=n?&s*sw+CHaSM^`c?ry6W-LC0| zj;$<1=eReL`P?bG1jGXHtw%)b5?3@|V;-h2N4-gRQd@#w-Lpb`7kOz*>2<%mXyv`^ ztNmhe*%%4f8D^n=W?OaG0$RAogPBR6n%+tFPyRJC43TB!c!y)H&GupQ=KS1&lfpxh zgMfUSncPZAWz&sXY@66pk#FEAp{s>z-RRsc`X>b>DVaU!8j~iiPAlL7R)!UL;;`<7 zGl_`!N*QSgf1P7aSik=FNT4?4A1$|q@{oD@n(^Qr9SYzb{Rx&apm+w$u>MzI znUiO*Ot!J)S(7^mEYlM*7Kbr=6z8Ci2~=<=Q4oGiC*!OI?^Ess*5t-~0i9#bKyV$Q z^oapf!A&EDqE`s{UBM0i{#?Nwrv)mwxKqy+T&2Mp$Ti>?yUn_Wnm8e-Q15x8=)ICK zS5RBwWMgbH$3I97m?+X=e^wL=tb5k-p&gax`u(D^!;ku5Jo%FnJvIQVU&ru#?vjCl zGt!P}vZE~4)}ZyL@z)VuwKM3*g)&vwbmko+p1{3b_X1xVYxKAV(aYhlsFz!>hi`Wa zaTNn9gDQ-Rv803W(u11>n>zULyoo*uhizQ=Pq9-6Vl90N>z6hysg@+Dz1X8Iky+4d z9f3h_z>L#Zm1w3=(^PaWXL5s4Ov;C1koM?)d_KtRnj#3%ks++9U|5_f5k!erse`5d zs^AWXea%yO*H~oxj|wi+?+PyUP63@GDgIv_+;T}#R-r7b&nbiNU)DI@c9P^vF;-e8 zP)%A+6&xokTZiYCRyYFEyqWpLZiFz+lOX#1Ry>vxMGM{K6?*_JbDA~MV3=(V9AtT& zuVVi^$R32Tsq5{B-|0&_N-m@{&))zgTqC$xqV5gRKG#1>xLx-5&@SxkWJsX%NY;i@^O++5uy z;9YcgN5UK;YWsUBvu#FlAydQRQAqf9l!ztv`@r4hZP)itP?>Qekw-#mge4=_^mHSk$3J$s;D3P%3=lp`+i0uKS-)E@dA|M3{Sx!6h1eo>pr$bXdKoK z&jY@NjuJEig|?N#5PZUK+rJhCExghUg9TtDKcir^;^tCNppjSdQAhz9$){%f?HY2u9)(Wp&;@P# zYwCZe*DB~isGN1Fnrg#wg!jl$vnK?@X_3U?asXv4>O(bN%OX?+3<{m#JDG|iCo5HJ z32S>BXu3T&{ zd+v`GauaJfZ(#%QCYro?`^2e<#UeyP;FHlDY{5&+1)1=f&`b*0i6vz(>_}30s8{Wl*=8CRGt|gXS6s!j-+E}eSUPk@fr6JK!_8RW(@1>!* z+V7>|rrh6_hT;vqOCTYI zj73QS8@ZN^RRcILvYqf(ZO9*XS6hRvPhC_BR}8iO0?TaEKLR8|A?BM0?-4K(r5uAC zdFKd&=CJ&gqD5Fgu9pcOng*l$Pv=8IdA%*Hf5p-g&3~u|$n&b|;J*DK&r_Hnw4I-G zPz3(={ECmNF*acekqUsW`HA;Sxi@!yykA_fyDC*&p- zs)9*Eml3F-X&2#(KKMh%5DIQ+W&0zFV2VS8B)%KC208QgMURdDe^b9D{Za1uU*^^s z%Kwk&);)dy{oK0i|GC_nG*SD1fgR)06Qs}iu~kJSbvwrBF*r3Rb?F|HR$~R?_<_)1 zVJ%BPTiybG%uAjt6-mUYlHb&nEtPi#bH+?(8A7~{g|nIYLoIu=a~T31J}XHRUegA)Zf=W*VjRon?uW1*!SfBap;y<;{Ni9FX6 zn=V$RUExwtf@O;gB-Kp3yu%skr(>`qF$0%hvDFHE?0Nf}G)ha~B0Pk(GwWl00_x)W z4*UU)S@}m7_qrS-Ww(4|Crqte8`?OCvSYttPG0&sOAZ9GWZ4E#mduh?kzpDB7Z-+^ zy>zQtqT_IsBh^dLnX&Xnzv>bvi{h}!;ODJiUH8I@UeAt}jqNWT$%i0fSt7kP)tWYM zg)%*~a0&G`+lk$5I=La4ju^6|U|;kltT=Cb3UOO%any)nfN+&4QD7aeNAyWEF!@^) zTnV;>@{*pRj_CBY0??Q>++lEyzdDfC>c8YjtnQ!Rcfaa5=`9&;{v0E{{SBOby45wS z)-pl!++yPj%Lc~;@7wG9`whdEvt!Wd=dqO>GYIgx+GG(L~tm`@tD-F>4FYpdFZy0(YTm#?7inY@YUFyz$d{5bqDKC!&( zKbai(P&&p`v+<`Bkih#Ta)WDVOD&ARizDZU|8x@h$2GPt+TRacW2^lFY>_D6m@VvR zUiY(|J!fNf7(_`@18)cKN7+PMqbp|P*v9@jB2$7f^Oaci{NQqRmG`%sjL%Dwxjj<+ zxo~U;@mx4Q`Ll3b#+)zt@F4ye{p8~0akGCGWrZ9FIwaM`6%1?FfJ9sPM(=)a=E^c#r|VW$zb} zhnaKucsU=?S3HNuC5NkAmMJuS{5vJ11f^tqkskc$+g{%?%OuZ|6vC0@gu>N;V(J{h z9~l{(I*^eeh?-P|v~+*f7}`?C{v4RB^-bJaYBAb%op@t5{6*OhjX8c|nvx1Om~X@- z4vA}GQqdGyNaNof5i0hC^DuMh`s@m|ME#3R=eT3(?RC|IN?he!p)L?}Uw&@4vnHtC zUUD}`{u+U66o47N8)=|ADy6+6s`kq42-xd}9jQ-pF@cK2bkXR)$uE+|PQS@75z^1( zmoYHsKglmjn!m{}Nq>-EJdfO3i>N&&w%-}pR|BI+bOV&pKSz;4BrH;k!snH6(Gm@! zHHME5<6#oEBm%wZ5`7~We~cn!-R@no@XIz@x4+Ugu9!TkzYijZ4{57*NA0whL?iL( z7R-GY?>dWRaBuq;>T`(^IxhqEr-54EyRkGOOr9oq*L$JyM)(F4qW4@SUqMY`D4J?e zlUUD|6Iey!{L3n`+;%X5;rA-i>H8n6$f!wA2vvq1z6c*nk~ylEl&FtK7r4 zR$2P#M55tq0w_9Z>t(4md`@-T3$lY;)VH0+K_#RSK{J>Is|QezDO+1HGRHONZ2z)Q2pYkKB!F0O@^9k$ICj7{BO#{wbrcO*j9fl6L-@6OPRO_Rt{7qPHCo%G5l|piC=%z z`Zr)tihoxoUem@c$M~l*v0^sN)LG?! zV**rNTAEmkVU$gHQySmjxt?(T|Es&moalevMatj~2>xHWo+oHXcVK^VJvG#U3+z8~ zJq?0iBLgmTo1?~Iz-3Mfrg+|%(Jp^XF$PKa>n%)IAorW%?Rppd&Tn88P;G2EC}#38 zqxVD^5GGH;_&48lMat>joGAUuBU>vOh0>mrtZ75nPk5C7R42}<`ww+u`^_9BFu~BC z{-d)HZ#tYl!Onh$Ax;@JY@<{%4aR$oCJG#c8}*lLy4J5GEg&$%d@1lwVc(~QnM0t3 zc~8D<)1weUqNQMLF}$~FmI{FQhEQFWXcPzoQ;bkTt4Iy;KlDcYH;%FY$b6yBC0H*g zyG++5H}KDgjcuGYTkA#(j`Jhgo;z#1zwK0Lr>A>z8%1ag+8RC4OrOlWS8v?gYWFMj z3w%km8S=wJ+z|nRxA;P!ecV`~ONf2cm;m_hIAhQ>&@0OW41u?JCzRUU6fGbK=5A9n ztT@op?>hz=0yP0cAeDB=sTS}FzA9%NIbMYOlli@t0KyC6*xhoq16FVtLHFEDE<#uO zCKf!jROjR$BgG(#%vLTb$z$@Tqi(;!DaQY=sW0{%{{!j^ZnSz7!D*X`-*lK3zlIAh z4D>5eZ&A-BlVph(JdlKTBgEQ$7=8m#egj$H@ynxW0K`IZ)=u{;KQa7HPbtjhNnIg! z?t8Z+IBPWs?c;Pia2oy#op96kytTjKOh74HTs|r7rRduQVh|`v>WF(S6#35 z@wZN}SI^`16SM}$@Tl9S4|%Dqe&ke0Vh?O&8u?|3=scRg~3E ztzvy8&6q2$7H=>LkN$kSG_Ss_KDpRB8f;@Dx9_SqTuFw~#yOg!DD_wIvi@dnJQwv2 zL3#^h_7h@kziRn{LEIP)*X83Ywv_KttbLp$T64xrDw1_wV%(`J%d8Xe_Okm4gCjPn zj7Vk;kPRDUiK@k~WPJt~vqdy7+7®vC6jhF@KeFB^8-nJoHBXnJa1l{?Y< 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 an5xbH1AT;U4Gpy5M|u%`hUzLIQ0?NvOoY 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

-w|wzp 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%0DW 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

$o+NK;J)jHu_$HE7R3-Q`oPp?D!q#}@1m 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

Q)}X&k63* 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�^Z#LB<+Yl#OaFhU&Lv~gX5pUogN&CcG&EK?+m}@ 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�HG$eL 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 literal 0 HcmV?d00001 diff --git a/img/carat.png b/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/img/dash.png b/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 000000000..8d8e1c4c8 --- /dev/null +++ b/index.html @@ -0,0 +1,753 @@ + + + + Blueprint Reference + + + + + + + + + + + + + + + +

+

+ + Blueprint + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+ +

Build Status

+

Blueprint

+

Declarative UI construction for iOS, written in Swift

+ +

Blueprint greatly simplifies the task of building and updating views as application state changes.

+ +

We still consider Blueprint experimental (and subject to major breaking API changes), but it has been used within Square’s production iOS apps.

+
let rootElement = Label(text: "Hello from Blueprint!")
+let view = BlueprintView(element: rootElement)
+
+ +

Generated documentation is available at square.github.io/Blueprint

+

Getting Started

+

Swift Package Manager

+ +

SwiftPM compatible

+ +

If you are developing your own package, be sure that Blueprint is included in dependencies +in Package.swift:

+
dependencies: [
+    .package(url: "git@github.com:square/Blueprint.git", from: "0.3.0")
+]
+
+ +

In Xcode 11+, add Blueprint directly as a dependency to your project with +File > Swift Packages > Add Package Dependency.... Provide the git URL when prompted: git@github.com:square/Blueprint.git.

+

Cocoapods

+ +

CocoaPods compatible

+ +

If you use CocoaPods to manage your dependencies, simply add BlueprintUI and BlueprintUICommonControls to your +Podfile:

+
pod 'BlueprintUI'
+pod 'BlueprintUICommonControls'
+
+ +
+
What does this library do?
+ +

Blueprint provides an architecture that allows you to:

+ +
    +
  • Declaratively define a UI hierarchy as pure values (Swift structs and enums).
  • +
  • Display that hierarchy within your application.
  • +
  • Update that hierarchy as application state changes (including animated transitions).
  • +
+
When should I use it?
+ +

Use Blueprint any time you want to display a view hierarchy, but don’t want to manage view lifecycle (hint: managing view lifecycle is a large portion of most conventional UIKit code). There are times when you want to manage view lifecycle (complex animations and transitions are a good example), and for these cases you may want to stick with a conventional approach.

+
How does it interact with UIKit?
+ +

Blueprint is not a replacement for UIKit! From the beginning, Blueprint has been designed as a compliment to all of the powerful tools that come with the platform. You can use Blueprint to manage the display of a single view controller, or of a single view representing a small part of the screen. Likewise, it’s straightforward to host standard views and controls within a blueprint hierarchy, always leaving you with an escape hatch.

+ +
+

Documentation

+

Getting Started

+ +
    +
  1. Hello, World

  2. +
  3. The Element Hierarchy

  4. +
  5. Building Custom Elements

  6. +
  7. Layout

  8. +
+

Reference

+ +
    +
  1. Element

  2. +
  3. BlueprintView

  4. +
  5. ViewDescription

  6. +
  7. Transitions

  8. +
+

Tutorials

+ +

Tutorial setup instructions

+ +
    +
  1. Using Blueprint in a View Controller

  2. +
  3. Building a receipt layout with Blueprint

  4. +
+ +
+

Adding Blueprint to an existing project

+ +

Two modules are provided:

+ +
    +
  • BlueprintUI contains the core architecture and layout types.
  • +
  • BlueprintUICommonControls includes elements representing some common UIKit views and controls.
  • +
+ +

Blueprint is available via CocoaPods. Add it to your Podfile to integrate:

+
target MyTarget do
+    pod 'BlueprintUI'
+    pod 'BlueprintUICommonControls'
+end
+
+ +
+ +

Release instructions

+ +
+ +

Copyright 2019 Square, Inc.

+ +

Licensed under the Apache License, Version 2.0 (the “License”); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at

+ +

http://www.apache.org/licenses/LICENSE-2.0

+ +

Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.

+ +
+
+ + +
+
+ + + diff --git a/js/jazzy.js b/js/jazzy.js new file mode 100755 index 000000000..198441660 --- /dev/null +++ b/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/js/jazzy.search.js b/js/jazzy.search.js new file mode 100644 index 000000000..359cdbb8b --- /dev/null +++ b/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/js/jquery.min.js b/js/jquery.min.js new file mode 100644 index 000000000..7f37b5d99 --- /dev/null +++ b/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/js/typeahead.jquery.js b/js/typeahead.jquery.js new file mode 100644 index 000000000..3a2d2ab03 --- /dev/null +++ b/js/typeahead.jquery.js @@ -0,0 +1,1694 @@ +/*! + * typeahead.js 1.3.1 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/search.json b/search.json new file mode 100644 index 000000000..bd22c5142 --- /dev/null +++ b/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:11BlueprintUI14ElementBuildera":{"name":"ElementBuilder","abstract":"\u003cp\u003eResult builder for working with elements that conform to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ElementBuilderChild.html\"\u003eElementBuilderChild\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Typealiases.html#/s:11BlueprintUI17LayoutSubelementsa":{"name":"LayoutSubelements","abstract":"\u003cp\u003eA collection of proxy values that represent the child elements of a layout.\u003c/p\u003e"},"Typealiases.html#/s:11BlueprintUI17LifecycleCallbacka":{"name":"LifecycleCallback","abstract":"\u003cp\u003eThis is the type used by all lifecycle callback hooks.\u003c/p\u003e"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6radius14CoreFoundation7CGFloatVvp":{"name":"radius","abstract":"\u003cp\u003eThe blur radius of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV7opacity14CoreFoundation7CGFloatVvp":{"name":"opacity","abstract":"\u003cp\u003eThe opacity of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6offsetSo8UIOffsetVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV5colorSo7UIColorCvp":{"name":"color","abstract":"\u003cp\u003eThe color of the shadow.\u003c/p\u003e","parent_name":"TextShadow"},"Structs/TextShadow.html#/s:25BlueprintUICommonControls10TextShadowV6radius7opacity6offset5colorAC14CoreFoundation7CGFloatV_AJSo8UIOffsetVSo7UIColorCtcfc":{"name":"init(radius:opacity:offset:color:)","parent_name":"TextShadow"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO3cutyA2GmF":{"name":"cut","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO4copyyA2GmF":{"name":"copy","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO5pasteyA2GmF":{"name":"paste","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO6deleteyA2GmF":{"name":"delete","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO6selectyA2GmF":{"name":"select","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO9selectAllyA2GmF":{"name":"selectAll","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO14toggleBoldfaceyA2GmF":{"name":"toggleBoldface","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO13toggleItalicsyA2GmF":{"name":"toggleItalics","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO15toggleUnderlineyA2GmF":{"name":"toggleUnderline","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12increaseSizeyA2GmF":{"name":"increaseSize","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12decreaseSizeyA2GmF":{"name":"decreaseSize","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO12printContentyA2GmF":{"name":"printContent","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO10pasteAndGoyA2GmF":{"name":"pasteAndGo","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO18pasteAndMatchStyleyA2GmF":{"name":"pasteAndMatchStyle","parent_name":"System"},"Structs/EditingMenuItem/Kind/System.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6SystemO14pasteAndSearchyA2GmF":{"name":"pasteAndSearch","parent_name":"System"},"Structs/EditingMenuItem/Kind.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6systemyA2E6SystemOcAEmF":{"name":"system(_:)","abstract":"\u003cp\u003eA standard system item.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem/Kind.html#/s:25BlueprintUICommonControls15EditingMenuItemV4KindO6customyAESScAEmF":{"name":"custom(_:)","abstract":"\u003cp\u003eA custom item with a custom title.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem/Kind/System.html":{"name":"System","abstract":"\u003cp\u003eThe system menu item kinds supported by an editing menu.\u003c/p\u003e","parent_name":"Kind"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV4kindAC4KindOvp":{"name":"kind","abstract":"\u003cp\u003eThe type of menu item.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV8onSelectyycvp":{"name":"onSelect","abstract":"\u003cp\u003eA callback, invoked when the user selects the menu item.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV5title8onSelectACSS_yyctcfc":{"name":"init(title:onSelect:)","abstract":"\u003cp\u003eCreates a new menu item of the given kind.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV_8onSelectA2C4KindO6SystemO_yyctcfc":{"name":"init(_:onSelect:)","abstract":"\u003cp\u003eCreates a new menu item of the given kind.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toACSS_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given string to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toACSo7UIImageC_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given image to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem.html#/s:25BlueprintUICommonControls15EditingMenuItemV7copying_2toAC10Foundation3URLV_So12UIPasteboardCSgtFZ":{"name":"copying(_:to:)","abstract":"\u003cp\u003eA \u003ccode\u003e.copy\u003c/code\u003e type item, which will copy the given url to the provided pasteboard.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenuItem/Kind.html":{"name":"Kind","abstract":"\u003cp\u003eThe menu item types you may place into a menu.\u003c/p\u003e","parent_name":"EditingMenuItem"},"Structs/EditingMenu/MenuTrigger.html#/s:25BlueprintUICommonControls11EditingMenuV0E7TriggerC4showyyF":{"name":"show()","abstract":"\u003cp\u003eCall this method to show the menu.\u003c/p\u003e","parent_name":"MenuTrigger"},"Structs/EditingMenu/Gesture.html#/s:25BlueprintUICommonControls11EditingMenuV7GestureO5onTapyA2EmF":{"name":"onTap","abstract":"\u003cp\u003eThe menu will be shown when the element is tapped.\u003c/p\u003e","parent_name":"Gesture"},"Structs/EditingMenu/Gesture.html#/s:25BlueprintUICommonControls11EditingMenuV7GestureO11onLongPressyA2EmF":{"name":"onLongPress","abstract":"\u003cp\u003eThe menu will be shown when the element is long pressed.\u003c/p\u003e","parent_name":"Gesture"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe wrapped element to display.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV5itemsSayAA0dE4ItemVGvp":{"name":"items","abstract":"\u003cp\u003eThe editing items to show in the editing menu.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV4show8wrapping4withA2C7GestureO_0A2UI7Element_pSayAA0dE4ItemVGyXEtcfc":{"name":"init(show:wrapping:with:)","abstract":"\u003cp\u003eCreates a new editing menu, wrapping the provided element, and displaying the provided items.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:25BlueprintUICommonControls11EditingMenuV8wrapping5itemsAC0A2UI7Element_pAC0E7TriggerCXE_SayAA0dE4ItemVGyXEtcfc":{"name":"init(wrapping:items:)","abstract":"\u003cp\u003eCreates a new editing menu, wrapping the provided element, and displaying the provided items.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EditingMenu"},"Structs/EditingMenu.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EditingMenu"},"Structs/EditingMenu/Gesture.html":{"name":"Gesture","abstract":"\u003cp\u003eThe gesture to use to show the menu.\u003c/p\u003e","parent_name":"EditingMenu"},"Structs/EditingMenu/MenuTrigger.html":{"name":"MenuTrigger","abstract":"\u003cp\u003eA trigger that you can use to show the menu based on the result of some other","parent_name":"EditingMenu"},"Structs/URLHandlerEnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP12defaultValue0F0QzvpZ":{"name":"defaultValue","parent_name":"URLHandlerEnvironmentKey"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC16notificationTypeSo28UIAccessibilityNotificationsavp":{"name":"notificationType","abstract":"\u003cp\u003eThe type of accessibility notification that will be triggered.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC10identifiers11AnyHashableVSgvp":{"name":"identifier","abstract":"\u003cp\u003eAn optional identifier for the trigger.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC16notificationType10identifierAESo28UIAccessibilityNotificationsa_s11AnyHashableVSgtcfc":{"name":"init(notificationType:identifier:)","abstract":"\u003cp\u003eCreates a new trigger for the purpose of changing accessibility focus.\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus/Trigger.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7TriggerC5focusyyF":{"name":"focus()","abstract":"\u003cp\u003eManually fire the trigger\u003c/p\u003e","parent_name":"Trigger"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element that will have the focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV7triggerAC7TriggerCvp":{"name":"trigger","abstract":"\u003cp\u003eA object that can be held on to by the caller to manually trigger a focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:25BlueprintUICommonControls18AccessibilityFocusV8wrapping7triggerAC0A2UI7Element_p_AC7TriggerCtcfc":{"name":"init(wrapping:trigger:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityFocus\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityFocus"},"Structs/AccessibilityFocus/Trigger.html":{"name":"Trigger","abstract":"\u003cp\u003eA trigger that can be used to manually fire an accessibility focus.\u003c/p\u003e","parent_name":"AccessibilityFocus"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV8durationSdvp":{"name":"duration","abstract":"\u003cp\u003eThe duration of the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV5curveSo06UIViewC5CurveVvp":{"name":"curve","abstract":"\u003cp\u003eThe timing curve of the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV20allowUserInteractionSbvp":{"name":"allowUserInteraction","abstract":"\u003cp\u003eWhether the view supports user interaction during the animation.\u003c/p\u003e","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV7defaultACvpZ":{"name":"default","parent_name":"AnimationAttributes"},"Structs/AnimationAttributes.html#/s:11BlueprintUI19AnimationAttributesV8duration5curve20allowUserInteractionACSd_So06UIViewC5CurveVSbtcfc":{"name":"init(duration:curve:allowUserInteraction:)","parent_name":"AnimationAttributes"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html#/s:11BlueprintUI14SizeConstraintV25UnconstrainedInfiniteAxisV12wrappedValueAC0G0Ovp":{"name":"wrappedValue","parent_name":"UnconstrainedInfiniteAxis"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html#/s:11BlueprintUI14SizeConstraintV25UnconstrainedInfiniteAxisV12wrappedValueAeC0G0O_tcfc":{"name":"init(wrappedValue:)","parent_name":"UnconstrainedInfiniteAxis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO6atMostyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atMost(_:)","abstract":"\u003cp\u003eThe measurement should treat the associated value as the largest","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO13unconstrainedyA2EmF":{"name":"unconstrained","abstract":"\u003cp\u003eThe measurement is unconstrained in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO7maximum14CoreFoundation7CGFloatVvp":{"name":"maximum","abstract":"\u003cp\u003eThe maximum magnitude in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO7minimum14CoreFoundation7CGFloatVvp":{"name":"minimum","abstract":"\u003cp\u003eThe minimum magnitude in the given dimension.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO16constrainedValue14CoreFoundation7CGFloatVSgvp":{"name":"constrainedValue","abstract":"\u003cp\u003eThe constraint value in this dimension, or \u003ccode\u003enil\u003c/code\u003e if this dimension is unconstrained.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1poiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"+(_:_:)","abstract":"\u003cp\u003eAdds a scalar value to an Axis. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1soiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"-(_:_:)","abstract":"\u003cp\u003eSubtracts a scalar value from an Axis. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1doiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"/(_:_:)","abstract":"\u003cp\u003eDivides an Axis by a scalar value. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO1moiyA2E_14CoreFoundation7CGFloatVtFZ":{"name":"*(_:_:)","abstract":"\u003cp\u003eMultiplies an Axis by a scalar value. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO17isGreaterThanZeroSbvp":{"name":"isGreaterThanZero","abstract":"\u003cp\u003eIf the \u003ccode\u003eAxis\u003c/code\u003e is greater than zero.\u003c/p\u003e","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2peoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"+=(_:_:)","abstract":"\u003cp\u003eAdds a scalar value to an Axis. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2seoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"-=(_:_:)","abstract":"\u003cp\u003eSubtracts a scalar value from an Axis. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2deoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"/=(_:_:)","abstract":"\u003cp\u003eDivides an Axis by a scalar value. If the Axis is unconstrained the","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:11BlueprintUI14SizeConstraintV4AxisO2meoiyyAEz_14CoreFoundation7CGFloatVtFZ":{"name":"*=(_:_:)","abstract":"\u003cp\u003eMultiplies an Axis by a scalar value. If the Axis is unconstrained","parent_name":"Axis"},"Structs/SizeConstraint/Axis.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"Axis"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5widthAC4AxisOvp":{"name":"width","abstract":"\u003cp\u003eThe width constraint.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV6heightAC4AxisOvp":{"name":"height","abstract":"\u003cp\u003eThe height constraint.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5width6heightA2C4AxisO_AGtcfc":{"name":"init(width:height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV13unconstrainedACvpZ":{"name":"unconstrained","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintVyACSo6CGSizeVcfc":{"name":"init(_:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5widthAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(width:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV6heightAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV7minimumSo6CGSizeVvp":{"name":"minimum","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV7maximumSo6CGSizeVvp":{"name":"maximum","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5inset5width6heightAC14CoreFoundation7CGFloatV_AItF":{"name":"inset(width:height:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint.html#/s:11BlueprintUI14SizeConstraintV5inset2byACSo12UIEdgeInsetsV_tF":{"name":"inset(by:)","parent_name":"SizeConstraint"},"Structs/SizeConstraint/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eRepresents a size constraint for a single axis.\u003c/p\u003e","parent_name":"SizeConstraint"},"Structs/SizeConstraint/UnconstrainedInfiniteAxis.html":{"name":"UnconstrainedInfiniteAxis","abstract":"\u003cp\u003eThis property wrapper checks the value of \u003ccode\u003eatMost\u003c/code\u003e cases, and turns it into an","parent_name":"SizeConstraint"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV02isE0Sbvp":{"name":"isEnabled","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI22UserInteractionEnabledV_8wrappingACSb_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"UserInteractionEnabled"},"Structs/UserInteractionEnabled.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"UserInteractionEnabled"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1x14CoreFoundation7CGFloatVvp":{"name":"x","abstract":"\u003cp\u003eThe normalized distance from the origin to the point in the horizontal direction.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1y14CoreFoundation7CGFloatVvp":{"name":"y","abstract":"\u003cp\u003eThe normalized distance from the origin to the point in the vertical direction.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV1x1yAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(x:y:)","abstract":"\u003cp\u003eCreates a unit point with the specified horizontal and vertical offsets.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV4zeroACvpZ":{"name":"zero","abstract":"\u003cp\u003eThe origin of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA point that’s centered in an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA point that’s centered vertically on the leading edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA point that’s centered vertically on the trailing edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA point that’s centered horizontally on the top edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA point that’s centered horizontally on the bottom edge of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV10topLeadingACvpZ":{"name":"topLeading","abstract":"\u003cp\u003eA point that’s in the top leading corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV11topTrailingACvpZ":{"name":"topTrailing","abstract":"\u003cp\u003eA point that’s in the top trailing corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV13bottomLeadingACvpZ":{"name":"bottomLeading","abstract":"\u003cp\u003eA point that’s in the bottom leading corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/UnitPoint.html#/s:11BlueprintUI9UnitPointV14bottomTrailingACvpZ":{"name":"bottomTrailing","abstract":"\u003cp\u003eA point that’s in the bottom trailing corner of an element.\u003c/p\u003e","parent_name":"UnitPoint"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element whose transform is being affected.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eThe transform of the wrapped element.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transform8wrappingACSo13CATransform3DV_AA7Element_ptcfc":{"name":"init(transform:wrapping:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eTransformed\u003c/code\u003e with the given content element and 3D transform.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI11TransformedV9transform8wrappingACSo17CGAffineTransformV_AA7Element_ptcfc":{"name":"init(transform:wrapping:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eTransformed\u003c/code\u003e with the given content element and DD transform.\u003c/p\u003e","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Transformed"},"Structs/Transformed.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Transformed"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV04tintdE0So06UIViewcdE0Vvp":{"name":"tintAdjustmentMode","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI18TintAdjustmentModeV_8wrappingACSo06UIViewcdE0V_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TintAdjustmentMode"},"Structs/TintAdjustmentMode.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TintAdjustmentMode"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO5fixedyA2GmF":{"name":"fixed","abstract":"\u003cp\u003eThe element has a fixed size, with a grow and shrink priority of 0.","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO8flexibleyA2GmF":{"name":"flexible","abstract":"\u003cp\u003eThe element has a flexible size, with a grow and shrink priority of 1.","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO5growsyA2GmF":{"name":"grows","abstract":"\u003cp\u003eThe element has a flexible size, it will grow if the stack underflows,","parent_name":"Priority"},"Structs/StackLayout/Child/Priority.html#/s:11BlueprintUI11StackLayoutV5ChildV8PriorityO7shrinksyA2GmF":{"name":"shrinks","abstract":"\u003cp\u003eThe element has a flexible size, it will shrink if the stack overflows,","parent_name":"Priority"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7elementAA7Element_pvp":{"name":"element","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV6traitsAC6TraitsVvp":{"name":"traits","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV3keys11AnyHashableVSgvp":{"name":"key","parent_name":"Child"},"Structs/StackLayout/Child/Priority.html":{"name":"Priority","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7element6traits3keyAeA7Element_p_AC6TraitsVs11AnyHashableVSgtcfc":{"name":"init(element:traits:key:)","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildV7element8priority14alignmentGuide3keyAeA7Element_p_AE8PriorityO14CoreFoundation7CGFloatVAA0K10DimensionsVcSgs11AnyHashableVSgtcfc":{"name":"init(element:priority:alignmentGuide:key:)","parent_name":"Child"},"Structs/StackLayout/Child.html#/s:11BlueprintUI11StackLayoutV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/StackLayout/Alignment.html#/s:11BlueprintUI11StackLayoutV9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to the size of the stack.\u003c/p\u003e","parent_name":"Alignment"},"Structs/StackLayout/Alignment.html#/s:11BlueprintUI11StackLayoutV9AlignmentO5alignyAeA0E2ID_pXp_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eChildren will be aligned relatively to each other, and then all the contents will be","parent_name":"Alignment"},"Structs/StackLayout/OverflowDistribution.html#/s:11BlueprintUI11StackLayoutV20OverflowDistributionO22condenseProportionallyyA2EmF":{"name":"condenseProportionally","abstract":"\u003cp\u003eEach child will shrink proportionally to its measured size.\u003c/p\u003e","parent_name":"OverflowDistribution"},"Structs/StackLayout/OverflowDistribution.html#/s:11BlueprintUI11StackLayoutV20OverflowDistributionO17condenseUniformlyyA2EmF":{"name":"condenseUniformly","abstract":"\u003cp\u003eEach child will shrink by the same amount.\u003c/p\u003e","parent_name":"OverflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO11spaceEvenlyyA2EmF":{"name":"spaceEvenly","abstract":"\u003cp\u003eAdditional space will be evenly divided into the spacing between items.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO18growProportionallyyA2EmF":{"name":"growProportionally","abstract":"\u003cp\u003eAdditional space will be divided proportionally by the measured size of each child.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO13growUniformlyyA2EmF":{"name":"growUniformly","abstract":"\u003cp\u003eAdditional space will be distributed uniformly between children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO14justifyToStartyA2EmF":{"name":"justifyToStart","abstract":"\u003cp\u003eAdditional space will appear after all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO15justifyToCenteryA2EmF":{"name":"justifyToCenter","abstract":"\u003cp\u003eAdditional space will be distributed on either side of all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/UnderflowDistribution.html#/s:11BlueprintUI11StackLayoutV21UnderflowDistributionO12justifyToEndyA2EmF":{"name":"justifyToEnd","abstract":"\u003cp\u003eAdditional space will be appear before all children.\u003c/p\u003e","parent_name":"UnderflowDistribution"},"Structs/StackLayout/Axis.html#/s:11BlueprintUI11StackLayoutV4AxisO10horizontalyA2EmF":{"name":"horizontal","parent_name":"Axis"},"Structs/StackLayout/Axis.html#/s:11BlueprintUI11StackLayoutV4AxisO8verticalyA2EmF":{"name":"vertical","parent_name":"Axis"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV12growPriority14CoreFoundation7CGFloatVvp":{"name":"growPriority","abstract":"\u003cp\u003eControls the amount of extra space distributed to this child during underflow.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV14shrinkPriority14CoreFoundation7CGFloatVvp":{"name":"shrinkPriority","abstract":"\u003cp\u003eControls the amount of space allowed for this child during overflow.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV14alignmentGuideAC09AlignmentG0VSgvp":{"name":"alignmentGuide","abstract":"\u003cp\u003eAllows for custom alignment of a child along the cross axis.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/Traits.html#/s:11BlueprintUI11StackLayoutV6TraitsV12growPriority06shrinkG014alignmentGuideAE14CoreFoundation7CGFloatV_AkC09AlignmentJ0VSgtcfc":{"name":"init(growPriority:shrinkPriority:alignmentGuide:)","abstract":"\u003cp\u003eCreates a new set of traits with default values.\u003c/p\u003e","parent_name":"Traits"},"Structs/StackLayout/AlignmentGuide.html#/s:11BlueprintUI11StackLayoutV14AlignmentGuideV12computeValuey14CoreFoundation7CGFloatVAA17ElementDimensionsVcvp":{"name":"computeValue","abstract":"\u003cp\u003eReturns a value along the stack\u0026rsquo;s cross axis, in the element\u0026rsquo;s own coordinate space,","parent_name":"AlignmentGuide"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV13defaultTraitsAC0F0VvpZ":{"name":"defaultTraits","abstract":"\u003cp\u003eThe default traits for a child contained within a stack layout\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/AlignmentGuide.html":{"name":"AlignmentGuide","abstract":"\u003cp\u003eDetermines how a stack child will be aligned on the cross axis relative to other children.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/Traits.html":{"name":"Traits","abstract":"\u003cp\u003eContains traits that affect the layout of individual children in the stack.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV4axisAC4AxisOvp":{"name":"axis","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV9underflowAC21UnderflowDistributionOvp":{"name":"underflow","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV8overflowAC20OverflowDistributionOvp":{"name":"overflow","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV9alignmentAC9AlignmentOvp":{"name":"alignment","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV14minimumSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumSpacing","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI11StackLayoutV4axis9alignmentA2C4AxisO_AC9AlignmentOtcfc":{"name":"init(axis:alignment:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI12LegacyLayoutP7measure2in5itemsSo6CGSizeVAA14SizeConstraintV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"measure(in:items:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI12LegacyLayoutP6layout4size5itemsSayAA0D10AttributesVGSo6CGSizeV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"layout(size:items:)","parent_name":"StackLayout"},"Structs/StackLayout/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eThe direction of the stack.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/UnderflowDistribution.html":{"name":"UnderflowDistribution","abstract":"\u003cp\u003eDetermines the on-axis layout when there is extra free space available.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/OverflowDistribution.html":{"name":"OverflowDistribution","abstract":"\u003cp\u003eDetermines the on-axis layout when there is not enough space to fit all children as measured.\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout/Alignment.html":{"name":"Alignment","abstract":"\u003cp\u003eDetermines the cross-axis layout (height for a horizontal stack, width for a vertical stack).\u003c/p\u003e","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP12sizeThatFits8proposal11subelements11environment5cacheSo6CGSizeVAA14SizeConstraintV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelements:environment:cache:)","parent_name":"StackLayout"},"Structs/StackLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP16placeSubelements2in11subelements11environment5cacheySo6CGSizeV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"placeSubelements(in:subelements:environment:cache:)","parent_name":"StackLayout"},"Structs/StackLayout/Child.html":{"name":"Child","parent_name":"StackLayout"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element whose opacity is being affected.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV7opacity14CoreFoundation7CGFloatVvp":{"name":"opacity","abstract":"\u003cp\u003eThe opacity of the wrapped element.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7OpacityV7opacity8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(opacity:wrapping:)","abstract":"\u003cp\u003eInitializes an \u003ccode\u003eOpacity\u003c/code\u003e with the given content element and opacity.\u003c/p\u003e","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Opacity"},"Structs/Opacity.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Opacity"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV7wrappedAA7Element_pvp":{"name":"wrapped","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppearyycSgvp":{"name":"onAppear","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV11onDisappearyycSgvp":{"name":"onDisappear","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppear0E9Disappear8wrappingACyycSg_AgA7Element_ptcfc":{"name":"init(onAppear:onDisappear:wrapping:)","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV8onAppearyACyycF":{"name":"onAppear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element appears.\u003c/p\u003e","parent_name":"LifecycleObserver"},"Structs/LifecycleObserver.html#/s:11BlueprintUI17LifecycleObserverV11onDisappearyACyycF":{"name":"onDisappear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element disappears.\u003c/p\u003e","parent_name":"LifecycleObserver"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame of the element in the coordinate space of the custom layout.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key to use to disambiguate this element.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element to be displayed.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Child.html#/s:11BlueprintUI12LayoutWriterV5ChildV5frame3key7elementAESo6CGRectV_s11AnyHashableVSgAA7Element_ptcfc":{"name":"init(frame:key:element:)","abstract":"\u003cp\u003eCreates a new child element.\u003c/p\u003e","parent_name":"Child"},"Structs/LayoutWriter/Sizing.html#/s:11BlueprintUI12LayoutWriterV6SizingO15unionOfChildrenyA2EmF":{"name":"unionOfChildren","abstract":"\u003cp\u003eEnsures that the final size of element is large enough to fit all children, starting from (0,0).\u003c/p\u003e","parent_name":"Sizing"},"Structs/LayoutWriter/Sizing.html#/s:11BlueprintUI12LayoutWriterV6SizingO5fixedyAESo6CGSizeVcAEmF":{"name":"fixed(_:)","abstract":"\u003cp\u003eFixes the layout size to the provided size. Children are positioned within this size, starting at (0,0)","parent_name":"Sizing"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO11measurementyA2GmF":{"name":"measurement","abstract":"\u003cp\u003eThe element is being measured.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO6layoutyAGSo6CGSizeVcAGmF":{"name":"layout(_:)","abstract":"\u003cp\u003eThe element is being laid out with a known size.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context/LayoutPhase.html#/s:11BlueprintUI12LayoutWriterV7ContextV0C5PhaseO9onMeasure_0gC0xxyXE_xSo6CGSizeVXEtlF":{"name":"onMeasure(_:onLayout:)","abstract":"\u003cp\u003eReturns the provided value based on if a measurement or layout is occurring.\u003c/p\u003e","parent_name":"LayoutPhase"},"Structs/LayoutWriter/Context.html#/s:11BlueprintUI12LayoutWriterV7ContextV4sizeAA14SizeConstraintVvp":{"name":"size","abstract":"\u003cp\u003eThe size constraint the layout is occurring in.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Context.html#/s:11BlueprintUI12LayoutWriterV7ContextV5phaseAE0C5PhaseOvp":{"name":"phase","abstract":"\u003cp\u003eThe phase of the layout current occurring – measurement or layout.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Context/LayoutPhase.html":{"name":"LayoutPhase","abstract":"\u003cp\u003eThe current phase of the layout event: \u003ccode\u003e.measurement\u003c/code\u003e or \u003ccode\u003e.layout\u003c/code\u003e.\u003c/p\u003e","parent_name":"Context"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV6sizingAC6SizingOvp":{"name":"sizing","abstract":"\u003cp\u003eHow the size of the layout should be calculated. Defaults to \u003ccode\u003e.unionOfChildren\u003c/code\u003e,","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe children of the custom layout, which specifies the child element and its frame.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV3add4with3key5childySo6CGRectV_s11AnyHashableVSgAA7Element_ptF":{"name":"add(with:key:child:)","abstract":"\u003cp\u003eAdds a new child element to the layout with the provided frame and optional key.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV3addyyAC5ChildVF":{"name":"add(_:)","abstract":"\u003cp\u003eAdds a new child element to the layout.\u003c/p\u003e","parent_name":"Builder"},"Structs/LayoutWriter/Builder.html#/s:11BlueprintUI12LayoutWriterV7BuilderV10modifyEach5usingyyAC5ChildVzXE_tF":{"name":"modifyEach(using:)","abstract":"\u003cp\u003eEnumerates each of the children, allowing you to modify them in place,","parent_name":"Builder"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterVyACyAC7ContextV_AC7BuilderVztccfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates a new instance of the LayoutWriter with the custom layout provided by the builder.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterV5Builda":{"name":"Build","abstract":"\u003cp\u003eThe builder type passed to the \u003ccode\u003eLayoutWriter\u003c/code\u003e initializer.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI12LayoutWriterV5buildyyAC7ContextV_AC7BuilderVztcvp":{"name":"build","abstract":"\u003cp\u003eThe builder used to create the custom layout.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"LayoutWriter"},"Structs/LayoutWriter.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eThe builder is the primary surface area you interact with when using a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/LayoutWriter.html\"\u003eLayoutWriter\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Context.html":{"name":"Context","abstract":"\u003cp\u003eProvides the relevant information about the context in which the layout is occurring.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Sizing.html":{"name":"Sizing","abstract":"\u003cp\u003eControls the sizing calculation of the custom layout.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutWriter/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child of the custom layout, providing its frame and element.\u003c/p\u003e","parent_name":"LayoutWriter"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.layer.transform\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.alpha\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isUserInteractionEnabled\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV8isHiddenSbvp":{"name":"isHidden","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isHidden\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement/Attributes.html#/s:11BlueprintUI16LayoutSubelementV10AttributesV18tintAdjustmentModeSo010UIViewTintgH0Vvp":{"name":"tintAdjustmentMode","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.tintAdjustmentMode\u003c/code\u003e.\u003c/p\u003e","parent_name":"Attributes"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV10attributesAC10AttributesVvp":{"name":"attributes","abstract":"\u003cp\u003eOptional attributes to apply to this subelement, such as opacity and transforms.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place2at6anchor4sizeySo7CGPointV_AA9UnitPointVSo6CGSizeVtF":{"name":"place(at:anchor:size:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place2in6anchorySo6CGRectV_AA9UnitPointVtF":{"name":"place(in:anchor:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV5place7fillingySo6CGSizeV_tF":{"name":"place(filling:)","abstract":"\u003cp\u003eAssigns a position and size to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV12sizeThatFitsySo6CGSizeVAA14SizeConstraintVF":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eAsks the subelement for its size.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement.html#/s:11BlueprintUI16LayoutSubelementV6traits03forC4Type6TraitsQzxm_tAA0C0RzlF":{"name":"traits(forLayoutType:)","abstract":"\u003cp\u003eGets the layout traits of the subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutSubelement/Attributes.html":{"name":"Attributes","abstract":"\u003cp\u003eOptional additional attributes that can be applied to a subelement.\u003c/p\u003e","parent_name":"LayoutSubelement"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV7defaultACvpZ":{"name":"default","abstract":"\u003cp\u003eThe default configuration.\u003c/p\u003e","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV19hintRangeBoundariesSbvp":{"name":"hintRangeBoundaries","abstract":"\u003cp\u003eEnables aggressive cache hinting along the boundaries of the range between constraints and","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV23searchUnconstrainedKeysSbvp":{"name":"searchUnconstrainedKeys","abstract":"\u003cp\u003eAllows cache misses on finite constraints to deduce a range-based match by searching for a","parent_name":"LayoutOptions"},"Structs/LayoutOptions.html#/s:11BlueprintUI13LayoutOptionsV19hintRangeBoundaries23searchUnconstrainedKeysACSb_Sbtcfc":{"name":"init(hintRangeBoundaries:searchUnconstrainedKeys:)","parent_name":"LayoutOptions"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6centerSo7CGPointVvp":{"name":"center","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.center\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.bounds\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.layer.transform\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.alpha\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isUserInteractionEnabled\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV8isHiddenSbvp":{"name":"isHidden","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.isHidden\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV18tintAdjustmentModeSo010UIViewTintfG0Vvp":{"name":"tintAdjustmentMode","abstract":"\u003cp\u003eCorresponds to \u003ccode\u003eUIView.tintAdjustmentMode\u003c/code\u003e.\u003c/p\u003e","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesVACycfc":{"name":"init()","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5frameACSo6CGRectV_tcfc":{"name":"init(frame:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV4sizeACSo6CGSizeV_tcfc":{"name":"init(size:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6center6boundsACSo7CGPointV_So6CGRectVtcfc":{"name":"init(center:bounds:)","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV5frameSo6CGRectVvp":{"name":"frame","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:11BlueprintUI16LayoutAttributesV6withinyA2CF":{"name":"within(_:)","abstract":"\u003cp\u003eConcatenates layout attributes, moving the receiver from the local","parent_name":"LayoutAttributes"},"Structs/LayoutAttributes.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"LayoutAttributes"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key used to differentiate the element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe wrapped element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI5KeyedV3key8wrappingACs11AnyHashableVSg_AA7Element_ptcfc":{"name":"init(key:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eKeyed\u003c/code\u003e element with the provided key and wrapped element.\u003c/p\u003e","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Keyed"},"Structs/Keyed.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Keyed"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV02isC0Sbvp":{"name":"isHidden","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI6HiddenV_8wrappingACSb_AA7Element_ptcfc":{"name":"init(_:wrapping:)","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Hidden"},"Structs/Hidden.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Hidden"},"Structs/GridRow/Width.html#/s:11BlueprintUI7GridRowV5WidthO8absoluteyAE14CoreFoundation7CGFloatVcAEmF":{"name":"absolute(_:)","abstract":"\u003cp\u003eAssign the child a fixed width equal to the payload.\u003c/p\u003e","parent_name":"Width"},"Structs/GridRow/Width.html#/s:11BlueprintUI7GridRowV5WidthO12proportionalyAE14CoreFoundation7CGFloatVcAEmF":{"name":"proportional(_:)","abstract":"\u003cp\u003eAssign the child a proportional width of the available layout width. Note that proportional children","parent_name":"Width"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element displayed in the \u003ccode\u003eGrid\u003c/code\u003e.\u003c/p\u003e","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eA unique identifier for the child.\u003c/p\u003e","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV5widthAC5WidthOvp":{"name":"width","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildV5width3key7elementAeC5WidthO_s11AnyHashableVSgAA7Element_ptcfc":{"name":"init(width:key:element:)","parent_name":"Child"},"Structs/GridRow/Child.html#/s:11BlueprintUI7GridRowV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV17verticalAlignmentAA0D0V0dF0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eHow children are aligned vertically. By default, \u003ccode\u003e.fill\u003c/code\u003e.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe space between children. By default, 0.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements to be laid out. By default, an empty array.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV9configureACyACzXE_tcfc":{"name":"init(configure:)","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV17verticalAlignment7spacing_AcA0D0V0dF0O_14CoreFoundation7CGFloatVSayAC5ChildVGyXEtcfc":{"name":"init(verticalAlignment:spacing:_:)","abstract":"\u003cp\u003eInitializer using result builder to declaritively build up a grid row.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7GridRowV3add5width3key5childyAC5WidthO_s11AnyHashableVSgAA7Element_ptF":{"name":"add(width:key:child:)","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"GridRow"},"Structs/GridRow.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"GridRow"},"Structs/GridRow/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child of a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GridRow/Width.html":{"name":"Width","abstract":"\u003cp\u003eThe sizing and content of a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e child.\u003c/p\u003e","parent_name":"GridRow"},"Structs/GeometryProxy.html#/s:11BlueprintUI13GeometryProxyV10constraintAA14SizeConstraintVvp":{"name":"constraint","abstract":"\u003cp\u003eThe size constraint of the element being laid out.\u003c/p\u003e","parent_name":"GeometryProxy"},"Structs/GeometryProxy.html#/s:11BlueprintUI13GeometryProxyV7measure7element2inSo6CGSizeVAA7Element_p_AA14SizeConstraintVSgtF":{"name":"measure(element:in:)","abstract":"\u003cp\u003eMeasure the given element, constrained to the same size as the \u003ccode\u003eGeometryProxy\u003c/code\u003e itself (unless a constraint is explicitly provided).\u003c/p\u003e","parent_name":"GeometryProxy"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eThe key used to optionally unique the child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV6traitsAE6TraitsVvp":{"name":"traits","abstract":"\u003cp\u003eThe traits of a child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe element representing the child item.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates a new child item with the given element.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV_3keyAeA7Element_p_s11AnyHashableVSgtcfc":{"name":"init(_:key:)","abstract":"\u003cp\u003eCreates a new child item with the given element.\u003c/p\u003e","parent_name":"Child"},"Structs/Flow/Child.html#/s:11BlueprintUI4FlowV5ChildV6TraitsV":{"name":"Traits","parent_name":"Child"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eShorter items are stretched to fill the height of the tallest item.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eShorter items are aligned to the top of the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eShorter items are vertically aligned within the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/ItemAlignment.html#/s:11BlueprintUI4FlowV13ItemAlignmentO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eShorter items are aligned to the bottom of the row.\u003c/p\u003e","parent_name":"ItemAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO7leadingyA2EmF":{"name":"leading","abstract":"\u003cp\u003eItems are aligned with the leading edge.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eItems are centered within the remaining space.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow/LineAlignment.html#/s:11BlueprintUI4FlowV13LineAlignmentO8trailingyA2EmF":{"name":"trailing","abstract":"\u003cp\u003eItems are aligned with the trailing edge.\u003c/p\u003e","parent_name":"LineAlignment"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13lineAlignmentAC04LineE0Ovp":{"name":"lineAlignment","abstract":"\u003cp\u003eHow to align each row when there is extra horizontal space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV11lineSpacing14CoreFoundation7CGFloatVvp":{"name":"lineSpacing","abstract":"\u003cp\u003eSpace between lines in the layout.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13itemAlignmentAC04ItemE0Ovp":{"name":"itemAlignment","abstract":"\u003cp\u003eHow to align items in a line when there is extra vertical space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV11itemSpacing14CoreFoundation7CGFloatVvp":{"name":"itemSpacing","abstract":"\u003cp\u003eSpace between items within a line.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements of the flow layout to be laid out.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI4FlowV13lineAlignment0D7Spacing04itemE00gF0_A2C04LineE0O_14CoreFoundation7CGFloatVAC04ItemE0OALSayAC5ChildVGyXEtcfc":{"name":"init(lineAlignment:lineSpacing:itemAlignment:itemSpacing:_:)","abstract":"\u003cp\u003eCreates a new flow layout with the provided parameters.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Flow"},"Structs/Flow.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Flow"},"Structs/Flow/LineAlignment.html":{"name":"LineAlignment","abstract":"\u003cp\u003eHow to horizontally align the line when there is extra space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow/ItemAlignment.html":{"name":"ItemAlignment","abstract":"\u003cp\u003eHow to vertically align items which there is extra space.\u003c/p\u003e","parent_name":"Flow"},"Structs/Flow/Child.html":{"name":"Child","abstract":"\u003cp\u003eA child placed within the flow layout.\u003c/p\u003e","parent_name":"Flow"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV5width14CoreFoundation7CGFloatVvp":{"name":"width","abstract":"\u003cp\u003eThe element\u0026rsquo;s width\u003c/p\u003e","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV6height14CoreFoundation7CGFloatVvp":{"name":"height","abstract":"\u003cp\u003eThe element\u0026rsquo;s height\u003c/p\u003e","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsVy14CoreFoundation7CGFloatVAA19HorizontalAlignmentVcip":{"name":"subscript(_:)","abstract":"\u003cp\u003eAccesses the value of the given guide, or the default value of the alignment if this","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsVy14CoreFoundation7CGFloatVAA17VerticalAlignmentVcip":{"name":"subscript(_:)","abstract":"\u003cp\u003eAccesses the value of the given guide, or the default value of the alignment if this","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV8explicit14CoreFoundation7CGFloatVSgAA19HorizontalAlignmentV_tcip":{"name":"subscript(explicit:)","abstract":"\u003cp\u003eReturns the explicit value of the given alignment guide in this view, or","parent_name":"ElementDimensions"},"Structs/ElementDimensions.html#/s:11BlueprintUI17ElementDimensionsV8explicit14CoreFoundation7CGFloatVSgAA17VerticalAlignmentV_tcip":{"name":"subscript(explicit:)","abstract":"\u003cp\u003eReturns the explicit value of the given alignment guide in this view, or","parent_name":"ElementDimensions"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV14decorationSizeSo6CGSizeVvp":{"name":"decorationSize","abstract":"\u003cp\u003eThe size of the decoration being positioned within the decorated content\u0026rsquo;s bounds.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV11contentSizeSo6CGSizeVvp":{"name":"contentSize","abstract":"\u003cp\u003eThe size of the content element within the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html\"\u003eDecorate\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position/PositionContext.html#/s:11BlueprintUI8DecorateV8PositionV0D7ContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is being rendered in.\u003c/p\u003e","parent_name":"PositionContext"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5insetyAESo12UIEdgeInsetsVFZ":{"name":"inset(_:)","abstract":"\u003cp\u003eInsets the decoration element on each edge by the amount specified by","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5insetyAE14CoreFoundation7CGFloatVFZ":{"name":"inset(_:)","abstract":"\u003cp\u003eProvides a \u003ccode\u003e.inset\u003c/code\u003e position where the decoration is inset by the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV5inset10horizontal8verticalAE14CoreFoundation7CGFloatV_AKtFZ":{"name":"inset(horizontal:vertical:)","abstract":"\u003cp\u003eProvides a \u003ccode\u003e.inset\u003c/code\u003e position where the decoration is inset by the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV7aligned2to15horizontalGuide08verticalH0AeA9AlignmentV_14CoreFoundation7CGFloatVAA17ElementDimensionsVcSgAQtFZ":{"name":"aligned(to:horizontalGuide:verticalGuide:)","abstract":"\u003cp\u003eAligns the decoration according the given alignment option, optionally adjusting it with","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV6corneryAeC6CornerO_So8UIOffsetVtFZ":{"name":"corner(_:_:)","abstract":"\u003cp\u003eThe decoration element is positioned in the given corner of the","parent_name":"Position"},"Structs/Decorate/Position.html#/s:11BlueprintUI8DecorateV8PositionV6customyAESo6CGRectVAE0D7ContextVcFZ":{"name":"custom(_:)","abstract":"\u003cp\u003eAllows you to provide custom positioning for the decoration, based on the passed context.\u003c/p\u003e","parent_name":"Position"},"Structs/Decorate/Position/PositionContext.html":{"name":"PositionContext","abstract":"\u003cp\u003eInformation provided to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate/Position.html\"\u003ePosition\u003c/a\u003e\u003c/code\u003e closures.\u003c/p\u003e","parent_name":"Position"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO7topLeftyA2EmF":{"name":"topLeft","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO8topRightyA2EmF":{"name":"topRight","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO11bottomRightyA2EmF":{"name":"bottomRight","parent_name":"Corner"},"Structs/Decorate/Corner.html#/s:11BlueprintUI8DecorateV6CornerO10bottomLeftyA2EmF":{"name":"bottomLeft","parent_name":"Corner"},"Structs/Decorate/Layering.html#/s:11BlueprintUI8DecorateV8LayeringO5aboveyA2EmF":{"name":"above","abstract":"\u003cp\u003eThe decoration is displayed above the content element.\u003c/p\u003e","parent_name":"Layering"},"Structs/Decorate/Layering.html#/s:11BlueprintUI8DecorateV8LayeringO5belowyA2EmF":{"name":"below","abstract":"\u003cp\u003eThe decoration is displayed below the content element.\u003c/p\u003e","parent_name":"Layering"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element which provides the sizing and measurement.","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV10decorationAA7Element_pvp":{"name":"decoration","abstract":"\u003cp\u003eThe element which is used to draw the decoration.","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8layeringAC8LayeringOvp":{"name":"layering","abstract":"\u003cp\u003eWhere the decoration should be positioned in the z-axis: Above or below the wrapped element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8positionAC8PositionVvp":{"name":"position","abstract":"\u003cp\u003eHow the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html#/s:11BlueprintUI8DecorateV10decorationAA7Element_pvp\"\u003edecoration\u003c/a\u003e\u003c/code\u003e should be positioned in respect to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Decorate.html#/s:11BlueprintUI8DecorateV7wrappedAA7Element_pvp\"\u003ewrapped\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI8DecorateV8layering8position8wrapping10decorationA2C8LayeringO_AC8PositionVAA7Element_pAaL_ptcfc":{"name":"init(layering:position:wrapping:decoration:)","abstract":"\u003cp\u003eCreates a new instance with the provided overflow, background, and wrapped element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Decorate"},"Structs/Decorate/Layering.html":{"name":"Layering","abstract":"\u003cp\u003eIf the decoration should be positioned above or below the content element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate/Corner.html":{"name":"Corner","abstract":"\u003cp\u003eWhat corner the decoration element should be positioned in.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Decorate/Position.html":{"name":"Position","abstract":"\u003cp\u003eHow to position the decoration element relative to the content element.\u003c/p\u003e","parent_name":"Decorate"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV8Childrena":{"name":"Children","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildBlockySayxGAEd_tFZ":{"name":"buildBlock(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV13buildOptionalySayxGAESgFZ":{"name":"buildOptional(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV11buildEither5firstSayxGAF_tFZ":{"name":"buildEither(first:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV11buildEither6secondSayxGAF_tFZ":{"name":"buildEither(second:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGxFZ":{"name":"buildExpression(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGxSgFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eThis function is disfavored in case a builder wants to offer additional \u003ccode\u003ebuildExpression\u003c/code\u003e functions to support","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildArrayySayxGSayAEGFZ":{"name":"buildArray(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV10buildArrayySayxGAEFZ":{"name":"buildArray(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV24buildLimitedAvailabilityySayxGAEFZ":{"name":"buildLimitedAvailability(_:)","parent_name":"Builder"},"Structs/Builder.html#/s:11BlueprintUI7BuilderV15buildExpressionySayxGAEFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow for an array of \u003ccode\u003eChild\u003c/code\u003e to be flattened into the overall result.\u003c/p\u003e","parent_name":"Builder"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV6squareACvpZ":{"name":"square","abstract":"\u003cp\u003eA 1:1 aspect ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5ratio14CoreFoundation7CGFloatVvp":{"name":"ratio","abstract":"\u003cp\u003eThe width:height ratio value.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5width6heightAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(width:height:)","abstract":"\u003cp\u003eInitializes with a width \u0026amp; height ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/AspectRatio.html#/s:11BlueprintUI11AspectRatioV5ratioAC14CoreFoundation7CGFloatV_tcfc":{"name":"init(ratio:)","abstract":"\u003cp\u003eInitializes with a specific ratio.\u003c/p\u003e","parent_name":"AspectRatio"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentVyAcA0D2ID_pXpcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates an instance with the given ID.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA guide marking the top edge of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the vertical center of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/VerticalAlignment.html#/s:11BlueprintUI17VerticalAlignmentV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA guide marking the bottom edge of the element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentVyAcA0D2ID_pXpcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreates an instance with the given ID.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA guide marking the leading edge of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the horizontal center of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/HorizontalAlignment.html#/s:11BlueprintUI19HorizontalAlignmentV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA guide marking the trailing edge of the element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV6centerACvpZ":{"name":"center","abstract":"\u003cp\u003eA guide marking the center of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV7leadingACvpZ":{"name":"leading","abstract":"\u003cp\u003eA guide marking the leading edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV8trailingACvpZ":{"name":"trailing","abstract":"\u003cp\u003eA guide marking the trailing edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV3topACvpZ":{"name":"top","abstract":"\u003cp\u003eA guide marking the top edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV6bottomACvpZ":{"name":"bottom","abstract":"\u003cp\u003eA guide marking the bottom edge of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10topLeadingACvpZ":{"name":"topLeading","abstract":"\u003cp\u003eA guide marking the top and leading edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV11topTrailingACvpZ":{"name":"topTrailing","abstract":"\u003cp\u003eA guide marking the top and trailing edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV13bottomLeadingACvpZ":{"name":"bottomLeading","abstract":"\u003cp\u003eA guide marking the bottom and leading edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV14bottomTrailingACvpZ":{"name":"bottomTrailing","abstract":"\u003cp\u003eA guide marking the bottom and trailing edges of the element.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10horizontalAA010HorizontalC0Vvp":{"name":"horizontal","abstract":"\u003cp\u003eThe alignment on the horizontal axis.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV8verticalAA08VerticalC0Vvp":{"name":"vertical","abstract":"\u003cp\u003eThe alignment on the vertical axis.\u003c/p\u003e","parent_name":"Alignment"},"Structs/Alignment.html#/s:11BlueprintUI9AlignmentV10horizontal8verticalAcA010HorizontalC0V_AA08VerticalC0Vtcfc":{"name":"init(horizontal:vertical:)","abstract":"\u003cp\u003eCreates an instance with the given horizontal and vertical alignments.\u003c/p\u003e","parent_name":"Alignment"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateVACySbGycSbRszrlufc":{"name":"init()","abstract":"\u003cp\u003eCreates a focus state that binds to a Boolean.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateVACyqd__SgGycADRszSHRd__lufc":{"name":"init()","abstract":"\u003cp\u003eCreates a focus state that binds to an optional type.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV12wrappedValuexvp":{"name":"wrappedValue","abstract":"\u003cp\u003eThe current state value, taking into account whatever bindings might be","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV14projectedValueACyxGvp":{"name":"projectedValue","abstract":"\u003cp\u003eA projection of the focus state that can be bound to focusable elements.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV7binding3forAA0C7BindingVqd___tqd__SgRszSHRd__lF":{"name":"binding(for:)","abstract":"\u003cp\u003eGets a focus binding associated with the \u003ccode\u003eFocusState\u003c/code\u003e being a specific value.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusState.html#/s:11BlueprintUI10FocusStateV7bindingAA0C7BindingVySbRszrlF":{"name":"binding()","abstract":"\u003cp\u003eGets a focus binding associated with the \u003ccode\u003eFocusState\u003c/code\u003e value being \u003ccode\u003etrue\u003c/code\u003e.\u003c/p\u003e","parent_name":"FocusState"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV7triggerAA0C7TriggerCvp":{"name":"trigger","abstract":"\u003cp\u003eA trigger, which is responsible for piping focus changes from a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/FocusState.html\"\u003eFocusState\u003c/a\u003e\u003c/code\u003e into a backing","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV02onC0yycvp":{"name":"onFocus","abstract":"\u003cp\u003eA callback to be called by a backing view when it is focused, to pipe changes from a backing","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV6onBluryycvp":{"name":"onBlur","abstract":"\u003cp\u003eA callback to be called by a backing view when it loses focus, to pipe changes from a","parent_name":"FocusBinding"},"Structs/FocusBinding.html#/s:11BlueprintUI12FocusBindingV02onC00E4BlurACyyc_yyctcfc":{"name":"init(onFocus:onBlur:)","abstract":"\u003cp\u003eCreates a new binding\u003c/p\u003e","parent_name":"FocusBinding"},"Structs/UIViewElementContext.html#/s:11BlueprintUI20UIViewElementContextV11isMeasuringSbvp":{"name":"isMeasuring","abstract":"\u003cp\u003eThis bool indicates whether the view being updated is the static measuring instance. You may","parent_name":"UIViewElementContext"},"Structs/UIViewElementContext.html#/s:11BlueprintUI20UIViewElementContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is rendered in.\u003c/p\u003e","parent_name":"UIViewElementContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds of this element after layout is complete.\u003c/p\u003e","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV13subtreeExtentSo6CGRectVSgvp":{"name":"subtreeExtent","abstract":"\u003cp\u003eA rectangle in the local coordinate space that contains any children.","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eThe environment the element is rendered in.\u003c/p\u003e","parent_name":"ViewDescriptionContext"},"Structs/ViewDescriptionContext.html#/s:11BlueprintUI22ViewDescriptionContextV6bounds13subtreeExtent11environmentACSo6CGRectV_AHSgAA11EnvironmentVtcfc":{"name":"init(bounds:subtreeExtent:environment:)","parent_name":"ViewDescriptionContext"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV10layoutModeAA06LayoutG0Ovp":{"name":"layoutMode","abstract":"\u003cp\u003eThe layout mode used to render the view.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV14startTimestampSdvp":{"name":"startTimestamp","abstract":"\u003cp\u003eThe mach time in seconds at which the view render started (from \u003ccode\u003eCACurrentMediaTime()\u003c/code\u003e).\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV13totalDurationSdvp":{"name":"totalDuration","abstract":"\u003cp\u003eThe total time it took to apply a new element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV14layoutDurationSdvp":{"name":"layoutDuration","abstract":"\u003cp\u003eThe time it took to lay out and measure the new element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/BlueprintViewRenderMetrics.html#/s:11BlueprintUI0A17ViewRenderMetricsV18viewUpdateDurationSdvp":{"name":"viewUpdateDuration","abstract":"\u003cp\u003eThe time it took to update the on-screen views for the element.\u003c/p\u003e","parent_name":"BlueprintViewRenderMetrics"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV5emptyACvpZ":{"name":"empty","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerVy5ValueQzSgxmcAA010AttributedC3KeyRzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGet or set for the given \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/AttributedTextKey.html\"\u003eAttributedTextKey\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV4fontSo6UIFontCSgvp":{"name":"font","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV5colorSo7UIColorCSgvp":{"name":"color","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV8tracking14CoreFoundation7CGFloatVSgvp":{"name":"tracking","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14underlineStyleSo011NSUnderlineG0VSgvp":{"name":"underlineStyle","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14underlineColorSo7UIColorCSgvp":{"name":"underlineColor","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV14paragraphStyleSo011NSParagraphG0CSgvp":{"name":"paragraphStyle","parent_name":"TextAttributeContainer"},"Structs/TextAttributeContainer.html#/s:11BlueprintUI22TextAttributeContainerV4link10Foundation3URLVSgvp":{"name":"link","parent_name":"TextAttributeContainer"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV5rangeSnySS5IndexVGvp":{"name":"range","abstract":"\u003cp\u003eThe range of the run of attributes.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV10attributesAA0D18AttributeContainerVvp":{"name":"attributes","abstract":"\u003cp\u003eThe attributes that apply to this run.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText/Run.html#/s:11BlueprintUI14AttributedTextV3RunV13dynamicMemberxs7KeyPathCyAA0D18AttributeContainerVxG_tcluip":{"name":"subscript(dynamicMember:)","abstract":"\u003cp\u003eDynamic member getter for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e of this run.\u003c/p\u003e","parent_name":"Run"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV6stringSSvp":{"name":"string","abstract":"\u003cp\u003eThe wrapped string, with no attributes.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV16attributedStringSo012NSAttributedF0Cvp":{"name":"attributedString","abstract":"\u003cp\u003eAn \u003ccode\u003eNSAttributedString\u003c/code\u003e representation of the attributed text.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV4runsSayAC3RunVGvp":{"name":"runs","abstract":"\u003cp\u003eAn iterable view into segments of the attributed string, each of which indicates where a run of identical","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyACSScfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreate some \u003ccode\u003eAttributedText\u003c/code\u003e from a plain string.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyACSo18NSAttributedStringCcfc":{"name":"init(_:)","abstract":"\u003cp\u003eCreate some \u003ccode\u003eAttributedText\u003c/code\u003e from an attributed string. The attributes are preserved.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV5range2ofSnySS5IndexVGSgx_tSyRzlF":{"name":"range(of:)","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV13dynamicMemberxs15WritableKeyPathCyAA0D18AttributeContainerVxG_tcluip":{"name":"subscript(dynamicMember:)","abstract":"\u003cp\u003eDynamic member getter or setter for any attributes defined on \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e.","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextVyAA0D18AttributeContainerVxcSXRzSS5IndexV5BoundRtzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGet or set a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/TextAttributeContainer.html\"\u003eTextAttributeContainer\u003c/a\u003e\u003c/code\u003e for the provided range of text. This allows you to set attributes","parent_name":"AttributedText"},"Structs/AttributedText.html#/s:11BlueprintUI14AttributedTextV1poiyA2C_ACtFZ":{"name":"+(_:_:)","abstract":"\u003cp\u003eConcatenate two pieces of \u003ccode\u003eAttributedText\u003c/code\u003e together.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText/Run.html":{"name":"Run","abstract":"\u003cp\u003eA Run represents a range of identical attributes in the attributed text.\u003c/p\u003e","parent_name":"AttributedText"},"Structs/AttributedText.html":{"name":"AttributedText","abstract":"\u003cp\u003e\u003ccode\u003eAttributedText\u003c/code\u003e allows you to apply strongly-typed attributes to strings (much like the \u003ccode\u003eAttributedString\u003c/code\u003e type"},"Structs/TextAttributeContainer.html":{"name":"TextAttributeContainer"},"Structs/BlueprintViewRenderMetrics.html":{"name":"BlueprintViewRenderMetrics"},"Structs/ViewDescriptionContext.html":{"name":"ViewDescriptionContext","abstract":"\u003cp\u003eThe context passing to the \u003ccode\u003ebackingViewDescription\u003c/code\u003e of an Element.\u003c/p\u003e"},"Structs/UIViewElementContext.html":{"name":"UIViewElementContext","abstract":"\u003cp\u003eContext object passed into \u003ccode\u003eupdateUIView\u003c/code\u003e.\u003c/p\u003e"},"Structs/FocusBinding.html":{"name":"FocusBinding","abstract":"\u003cp\u003eA two-way binding between a focusable element\u0026rsquo;s backing view and a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/FocusState.html\"\u003eFocusState\u003c/a\u003e\u003c/code\u003e-wrapped"},"Structs/FocusState.html":{"name":"FocusState","abstract":"\u003cp\u003eA property wrapper type that can read and write a value that represents the placement of focus.\u003c/p\u003e"},"Structs/Alignment.html":{"name":"Alignment","abstract":"\u003cp\u003eAn alignment in both axes.\u003c/p\u003e"},"Structs/HorizontalAlignment.html":{"name":"HorizontalAlignment","abstract":"\u003cp\u003eAn alignment position along the horizontal axis.\u003c/p\u003e"},"Structs/VerticalAlignment.html":{"name":"VerticalAlignment","abstract":"\u003cp\u003eAn alignment position along the vertical axis.\u003c/p\u003e"},"Structs/AspectRatio.html":{"name":"AspectRatio","abstract":"\u003cp\u003eRepresents an a proportional relationship between width and height.\u003c/p\u003e"},"Structs/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eGeneric result builder for converting blocks of \u003ccode\u003eChild...\u003c/code\u003e into \u003ccode\u003e[Child]\u003c/code\u003e.\u003c/p\u003e"},"Structs/Decorate.html":{"name":"Decorate","abstract":"\u003cp\u003ePlaces a decoration element behind or in front of the given \u003ccode\u003ewrapped\u003c/code\u003e element,"},"Structs/ElementDimensions.html":{"name":"ElementDimensions","abstract":"\u003cp\u003eAn element’s size and its alignment guides in its own coordinate space.\u003c/p\u003e"},"Structs/Flow.html":{"name":"Flow","abstract":"\u003cp\u003eElement which lays out children horizontally, wrapping to another row when there is not enough space.\u003c/p\u003e"},"Structs/GeometryProxy.html":{"name":"GeometryProxy","abstract":"\u003cp\u003eContains information about the current layout being measured by GeometryReader\u003c/p\u003e"},"Structs/GridRow.html":{"name":"GridRow","abstract":"\u003cp\u003eLike \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Row.html\"\u003eRow\u003c/a\u003e\u003c/code\u003e, \u003ccode\u003eGridRow\u003c/code\u003e displays a list of items in a linear horizontal layout. Unlike \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Row.html\"\u003eRow\u003c/a\u003e\u003c/code\u003e, \u003ccode\u003eGridRow\u003c/code\u003e provides"},"Structs/Hidden.html":{"name":"Hidden","abstract":"\u003cp\u003e\u003ccode\u003eHidden\u003c/code\u003e conditionally hides its wrapped element.\u003c/p\u003e"},"Structs/Keyed.html":{"name":"Keyed","abstract":"\u003cp\u003e\u003ccode\u003eKeyed\u003c/code\u003e allows providing a \u003ccode\u003eHashable\u003c/code\u003e value which is used"},"Structs/LayoutAttributes.html":{"name":"LayoutAttributes","abstract":"\u003cp\u003eContains layout-related metrics for an element.\u003c/p\u003e"},"Structs/LayoutOptions.html":{"name":"LayoutOptions","abstract":"\u003cp\u003eConfiguration options for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedACvpZ\"\u003ecaffeinated\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Structs/LayoutSubelement.html":{"name":"LayoutSubelement","abstract":"\u003cp\u003eA proxy that represents one child element of a layout.\u003c/p\u003e"},"Structs/LayoutWriter.html":{"name":"LayoutWriter","abstract":"\u003cp\u003eA parent element which allows arbitrary, custom layout and positioning of its children.\u003c/p\u003e"},"Structs/LifecycleObserver.html":{"name":"LifecycleObserver","abstract":"\u003cp\u003eAllows element lifecycle callbacks to be inserted anywhere into the element tree.\u003c/p\u003e"},"Structs/Opacity.html":{"name":"Opacity","abstract":"\u003cp\u003eChanges the opacity of the wrapped element.\u003c/p\u003e"},"Structs/StackLayout.html":{"name":"StackLayout","abstract":"\u003cp\u003eA layout implementation that linearly lays out an array of children along either the horizontal or vertical axis.\u003c/p\u003e"},"Structs/TintAdjustmentMode.html":{"name":"TintAdjustmentMode","abstract":"\u003cp\u003e\u003ccode\u003eTintAdjustmentMode\u003c/code\u003e conditionally modifies the tint adjustment mode of its wrapped element.\u003c/p\u003e"},"Structs/Transformed.html":{"name":"Transformed","abstract":"\u003cp\u003eChanges the transform of the wrapped element.\u003c/p\u003e"},"Structs/UnitPoint.html":{"name":"UnitPoint","abstract":"\u003cp\u003eA normalized point in an element\u0026rsquo;s coordinate space.\u003c/p\u003e"},"Structs/UserInteractionEnabled.html":{"name":"UserInteractionEnabled","abstract":"\u003cp\u003e\u003ccode\u003eUserInteractionEnabled\u003c/code\u003e conditionally enables user interaction of its wrapped element.\u003c/p\u003e"},"Structs/SizeConstraint.html":{"name":"SizeConstraint","abstract":"\u003cp\u003eDefines the maximum size for a measurement.\u003c/p\u003e"},"Structs/AnimationAttributes.html":{"name":"AnimationAttributes","abstract":"\u003cp\u003eUIView animation configuration values.\u003c/p\u003e"},"Structs/AccessibilityFocus.html":{"name":"AccessibilityFocus","abstract":"\u003cp\u003eEnables VoiceOver focus to jump to the wrapped element via a trigger that can be manually fired.\u003c/p\u003e"},"Structs/URLHandlerEnvironmentKey.html":{"name":"URLHandlerEnvironmentKey"},"Structs/EditingMenu.html":{"name":"EditingMenu","abstract":"\u003cp\u003eAllows showing the system\u0026rsquo;s \u003ccode\u003eUIMenuController\u003c/code\u003e editing menu.\u003c/p\u003e"},"Structs/EditingMenuItem.html":{"name":"EditingMenuItem","abstract":"\u003cp\u003eA single item in an editing menu.\u003c/p\u003e"},"Structs/TextShadow.html":{"name":"TextShadow","abstract":"\u003cp\u003eDescribes a shadow that can be applied to text elements, like \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Label.html\"\u003eLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Protocols/URLHandler.html#/s:25BlueprintUICommonControls10URLHandlerP5onTap3urly10Foundation3URLV_tF":{"name":"onTap(url:)","parent_name":"URLHandler"},"Protocols/NativeView.html#/s:11BlueprintUI10NativeViewPAASo6UIViewCRbzrlE8describeyAA0D11DescriptionVyAH13ConfigurationVy_xGzXEFZ":{"name":"describe(_:)","abstract":"\u003cp\u003eGenerates a view description for the receiving class.","parent_name":"NativeView"},"Protocols/Measurable.html#/s:11BlueprintUI10MeasurableP7measure2inSo6CGSizeVAA14SizeConstraintV_tF":{"name":"measure(in:)","abstract":"\u003cp\u003eMeasures the required size of the receiver.\u003c/p\u003e","parent_name":"Measurable"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPxycfc":{"name":"init()","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementP6layoutAA0C6LayoutVvp":{"name":"layout","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementP8childrenSayAA0D0_p7element_AA0C6LayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAEyxyxzXEcfc":{"name":"init(_:)","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE3add12growPriority06shrinkG014alignmentGuide3key5childy14CoreFoundation7CGFloatV_A2lA0D10DimensionsVcSgs11AnyHashableVSgAA0D0_ptF":{"name":"add(growPriority:shrinkPriority:alignmentGuide:key:child:)","abstract":"\u003cp\u003eAdds a given child element to the stack.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE8addFixed14alignmentGuide3key5childy14CoreFoundation7CGFloatVAA0D10DimensionsVcSg_s11AnyHashableVSgAA0D0_ptF":{"name":"addFixed(alignmentGuide:key:child:)","abstract":"\u003cp\u003eConvenience method for adding a child with a grow and shrink priority of 0.0.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/StackElement.html#/s:11BlueprintUI12StackElementPAAE11addFlexible14alignmentGuide3key5childy14CoreFoundation7CGFloatVAA0D10DimensionsVcSg_s11AnyHashableVSgAA0D0_ptF":{"name":"addFlexible(alignmentGuide:key:child:)","abstract":"\u003cp\u003eConvenience method for adding a child with a grow and shrink priority of 1.0.\u003c/p\u003e","parent_name":"StackElement"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP10Subelementa":{"name":"Subelement","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP5CacheQa":{"name":"Cache","abstract":"\u003cp\u003eCached values associated with the layout instance.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP12sizeThatFits8proposal10subelement11environment5cacheSo6CGSizeVAA14SizeConstraintV_AA0F10SubelementVAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelement:environment:cache:)","abstract":"\u003cp\u003eReturns the size of the element, given a proposed size constraint and the container\u0026rsquo;s","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP15placeSubelement2in10subelement11environment5cacheySo6CGSizeV_AA0fH0VAA11EnvironmentV5CacheQzztF":{"name":"placeSubelement(in:subelement:environment:cache:)","abstract":"\u003cp\u003eAssigns a position to the layout’s subelement.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html#/s:11BlueprintUI28CaffeinatedSingleChildLayoutP9makeCache10subelement11environment0H0QzAA0F10SubelementV_AA11EnvironmentVtF":{"name":"makeCache(subelement:environment:)","abstract":"\u003cp\u003eCreates and initializes a cache for a layout instance.\u003c/p\u003e","parent_name":"CaffeinatedSingleChildLayout"},"Protocols/LegacySingleChildLayout.html#/s:11BlueprintUI23LegacySingleChildLayoutP7measure2in5childSo6CGSizeVAA14SizeConstraintV_AA10Measurable_ptF":{"name":"measure(in:child:)","abstract":"\u003cp\u003eComputes the size that this layout requires\u003c/p\u003e","parent_name":"LegacySingleChildLayout"},"Protocols/LegacySingleChildLayout.html#/s:11BlueprintUI23LegacySingleChildLayoutP6layout4size5childAA0F10AttributesVSo6CGSizeV_AA10Measurable_ptF":{"name":"layout(size:child:)","abstract":"\u003cp\u003eGenerates layout attributes for the child.\u003c/p\u003e","parent_name":"LegacySingleChildLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP11Subelementsa":{"name":"Subelements","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP5CacheQa":{"name":"Cache","abstract":"\u003cp\u003eCached values associated with the layout instance.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP12sizeThatFits8proposal11subelements11environment5cacheSo6CGSizeVAA14SizeConstraintV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"sizeThatFits(proposal:subelements:environment:cache:)","abstract":"\u003cp\u003eReturns the size of the composite element, given a proposed size constraint and the","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP16placeSubelements2in11subelements11environment5cacheySo6CGSizeV_SayAA0D10SubelementVGAA11EnvironmentV5CacheQzztF":{"name":"placeSubelements(in:subelements:environment:cache:)","abstract":"\u003cp\u003eAssigns positions to each of the layout’s subelements.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/CaffeinatedLayout.html#/s:11BlueprintUI17CaffeinatedLayoutP9makeCache11subelements11environment0F0QzSayAA0D10SubelementVG_AA11EnvironmentVtF":{"name":"makeCache(subelements:environment:)","abstract":"\u003cp\u003eCreates and initializes a cache for a layout instance.\u003c/p\u003e","parent_name":"CaffeinatedLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP6TraitsQa":{"name":"Traits","abstract":"\u003cp\u003ePer-item metadata that is used during the measuring and layout pass.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP7measure2in5itemsSo6CGSizeVAA14SizeConstraintV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"measure(in:items:)","abstract":"\u003cp\u003eComputes the size that this layout requires in a layout, given an array of children and","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP6layout4size5itemsSayAA0D10AttributesVGSo6CGSizeV_Say6TraitsQz6traits_AA10Measurable_p7contenttGtF":{"name":"layout(size:items:)","abstract":"\u003cp\u003eGenerates layout attributes for the given items.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/LegacyLayout.html#/s:11BlueprintUI12LegacyLayoutP13defaultTraits0F0QzvpZ":{"name":"defaultTraits","abstract":"\u003cp\u003eReturns a default traits object.\u003c/p\u003e","parent_name":"LegacyLayout"},"Protocols/ElementBuilderChild.html#/s:11BlueprintUI19ElementBuilderChildPyxAA0C0_pcfc":{"name":"init(_:)","parent_name":"ElementBuilderChild"},"Protocols/AlignmentID.html#/s:11BlueprintUI11AlignmentIDP12defaultValue2in14CoreFoundation7CGFloatVAA17ElementDimensionsV_tFZ":{"name":"defaultValue(in:)","abstract":"\u003cp\u003eReturns the value of the corresponding guide, in \u003ccode\u003econtext\u003c/code\u003e, when not","parent_name":"AlignmentID"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP0C4TypeQa":{"name":"UIViewType","abstract":"\u003cp\u003eThe type of the view associated with the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP04makeC00C4TypeQzyF":{"name":"makeUIView()","abstract":"\u003cp\u003eCreate and return a new instance of the provided view type.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP06updateC0_4withy0C4TypeQz_AA0cD7ContextVtF":{"name":"updateUIView(_:with:)","abstract":"\u003cp\u003eUpdate the view instance with the content from the element. The context provides additional","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementP4size_8thatFitsSo6CGSizeVAG_0C4TypeQztF":{"name":"size(_:thatFits:)","abstract":"\u003cp\u003eReturns the sizing measurement for the element for the provided","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementPAAE7contentAA0D7ContentVvp":{"name":"content","abstract":"\u003cp\u003eDefer to the reused measurement view to provide the size of the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/UIViewElement.html#/s:11BlueprintUI13UIViewElementPAAE22backingViewDescription4withAA0fG0VSgAA0fG7ContextV_tF":{"name":"backingViewDescription(with:)","abstract":"\u003cp\u003eProvide the view for the element.\u003c/p\u003e","parent_name":"UIViewElement"},"Protocols/BlueprintViewMetricsDelegate.html#/s:11BlueprintUI0A19ViewMetricsDelegateP09blueprintC0_19completedRenderWithyAA0aC0C_AA0achD0VtF":{"name":"blueprintView(_:completedRenderWith:)","parent_name":"BlueprintViewMetricsDelegate"},"Protocols/AttributedTextKey.html#/s:11BlueprintUI17AttributedTextKeyP5ValueQa":{"name":"Value","parent_name":"AttributedTextKey"},"Protocols/AttributedTextKey.html#/s:11BlueprintUI17AttributedTextKeyP4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"AttributedTextKey"},"Protocols/AttributedTextKey.html":{"name":"AttributedTextKey","abstract":"\u003cp\u003eDefine \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedText.html\"\u003eAttributedText\u003c/a\u003e\u003c/code\u003e keys using this protocol. Keys must have an attribute name"},"Protocols/BlueprintViewMetricsDelegate.html":{"name":"BlueprintViewMetricsDelegate","abstract":"\u003cp\u003eProvides performance information for blueprint layouts and updates.\u003c/p\u003e"},"Protocols/UIViewElement.html":{"name":"UIViewElement","abstract":"\u003cp\u003eAn element type which makes it easier to wrap an existing \u003ccode\u003eUIView\u003c/code\u003e instance that"},"Protocols/AlignmentID.html":{"name":"AlignmentID","abstract":"\u003cp\u003eTypes used to identify alignment guides.\u003c/p\u003e"},"Protocols/ElementBuilderChild.html":{"name":"ElementBuilderChild","abstract":"\u003cp\u003eDefines a way for an\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e to be implicitly converted into the conforming type (the child of a container)."},"Protocols.html#/s:11BlueprintUI6LayoutP":{"name":"Layout","abstract":"\u003cp\u003eA type that defines the geometry of a collection of elements.\u003c/p\u003e"},"Protocols/LegacyLayout.html":{"name":"LegacyLayout"},"Protocols/CaffeinatedLayout.html":{"name":"CaffeinatedLayout"},"Protocols.html#/s:11BlueprintUI17SingleChildLayoutP":{"name":"SingleChildLayout","abstract":"\u003cp\u003eA type that defines the geometry of a single element.\u003c/p\u003e"},"Protocols/LegacySingleChildLayout.html":{"name":"LegacySingleChildLayout"},"Protocols/CaffeinatedSingleChildLayout.html":{"name":"CaffeinatedSingleChildLayout"},"Protocols/StackElement.html":{"name":"StackElement","abstract":"\u003cp\u003eConforming types (Row and Column) act as StackLayout powered containers.\u003c/p\u003e"},"Protocols/Measurable.html":{"name":"Measurable","abstract":"\u003cp\u003eConforming types can calculate the size that they require within a layout.\u003c/p\u003e"},"Protocols/NativeView.html":{"name":"NativeView","abstract":"\u003cp\u003eMarker protocol used by generic extensions to native views (e.g. \u003ccode\u003eUIView\u003c/code\u003e).\u003c/p\u003e"},"Protocols/URLHandler.html":{"name":"URLHandler","abstract":"\u003cp\u003eConform to this protocol to handle links tapped in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Extensions/UIOffset.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"UIOffset"},"Extensions/AXCustomContent.html#/s:So15AXCustomContentC25BlueprintUICommonControlsEyAbC20AccessibilityElementV06CustomB0Vcfc":{"name":"init(_:)","parent_name":"AXCustomContent"},"Extensions/AXCustomContent.html#/s:So15AXCustomContentC25BlueprintUICommonControlsE5label5value10importanceABSS_SSSgSo0aB10ImportanceVtcfc":{"name":"init(label:value:importance:)","parent_name":"AXCustomContent"},"Extensions/UIAccessibilityTraits.html#/s:So21UIAccessibilityTraitsa25BlueprintUICommonControlsE4withABShyAC20AccessibilityElementV5TraitOG_tcfc":{"name":"init(with:)","parent_name":"UIAccessibilityTraits"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGAA0D0_pFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow an Element to be implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGAA0D0_pSgFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow an Optional Element to be unwrapped and implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A07ElementC5ChildRzlE15buildExpressionySayxGSayAA0D0_pGFZ":{"name":"buildExpression(_:)","abstract":"\u003cp\u003eAllow Elements to be implicitly converted into \u003ccode\u003eChild\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A7OverlayV5ChildVRszlE15buildExpressionySayAGGAA5KeyedVFZ":{"name":"buildExpression(_:)","parent_name":"ElementBuilder"},"Extensions/ElementBuilder.html#/s:11BlueprintUI7BuilderVA2A11StackLayoutV5ChildVRszlE15buildExpressionySayAGGAA5KeyedVFZ":{"name":"buildExpression(_:)","parent_name":"ElementBuilder"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE17replacingInfinity4withxx_tF":{"name":"replacingInfinity(with:)","abstract":"\u003cp\u003eReturns \u003ccode\u003ereplacement\u003c/code\u003e if \u003ccode\u003eself.isInfinite\u003c/code\u003e is \u003ccode\u003etrue\u003c/code\u003e, or \u003ccode\u003eself\u003c/code\u003e if \u003ccode\u003eself\u003c/code\u003e is finite.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE5round_2byys25FloatingPointRoundingRuleO_xtF":{"name":"round(_:by:)","abstract":"\u003cp\u003eRounds this value to the specified scale, where the scale is the number of rounding stops per integer.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF11BlueprintUIE7rounded_2byxs25FloatingPointRoundingRuleO_xtF":{"name":"rounded(_:by:)","abstract":"\u003cp\u003eReturns this value rounded to the specified scale, where the scale is the number of rounding stops per integer.\u003c/p\u003e","parent_name":"FloatingPoint"},"Extensions/CGSize.html#/s:So6CGSizeV11BlueprintUIE8infinityABvpZ":{"name":"infinity","abstract":"\u003cp\u003eA size with \u003ccode\u003einfinity\u003c/code\u003e in both dimensions.\u003c/p\u003e","parent_name":"CGSize"},"Extensions/CGSize.html#/s:So6CGSizeV11BlueprintUIE17replacingInfinity4withA2B_tF":{"name":"replacingInfinity(with:)","abstract":"\u003cp\u003eReturns a size with infinite dimensions replaced by the values from the given replacement.\u003c/p\u003e","parent_name":"CGSize"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhone7ACvpZ":{"name":"iPhone7","abstract":"\u003cp\u003eiPhone 7\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhone7PlusACvpZ":{"name":"iPhone7Plus","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhone8ACvpZ":{"name":"iPhone8","abstract":"\u003cp\u003eiPhone 8\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhone8PlusACvpZ":{"name":"iPhone8Plus","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPhoneSE_1ACvpZ":{"name":"iPhoneSE_1","abstract":"\u003cp\u003eiPhone SE\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPhoneSE_2ACvpZ":{"name":"iPhoneSE_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E7iPhoneXACvpZ":{"name":"iPhoneX","abstract":"\u003cp\u003eiPhone X\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E8iPhoneXsACvpZ":{"name":"iPhoneXs","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPhoneXsMaxACvpZ":{"name":"iPhoneXsMax","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E8iPhoneXrACvpZ":{"name":"iPhoneXr","abstract":"\u003cp\u003eiPhone Xr\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPadMini_4ACvpZ":{"name":"iPadMini_4","abstract":"\u003cp\u003eiPad Mini\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E10iPadMini_5ACvpZ":{"name":"iPadMini_5","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E9iPadAir_2ACvpZ":{"name":"iPadAir_2","abstract":"\u003cp\u003eiPad Air\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E9iPadAir_3ACvpZ":{"name":"iPadAir_3","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E6iPad_5ACvpZ":{"name":"iPad_5","abstract":"\u003cp\u003eiPad\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E6iPad_6ACvpZ":{"name":"iPad_6","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E11iPadPro_9_7ACvpZ":{"name":"iPadPro_9_7","abstract":"\u003cp\u003eiPad Pro\u003c/p\u003e","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_10_5ACvpZ":{"name":"iPadPro_10_5","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_11_1ACvpZ":{"name":"iPadPro_11_1","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E12iPadPro_11_2ACvpZ":{"name":"iPadPro_11_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_1ACvpZ":{"name":"iPadPro_12_9_1","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_2ACvpZ":{"name":"iPadPro_12_9_2","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html#/s:7SwiftUI13PreviewDeviceV09BlueprintB0E14iPadPro_12_9_3ACvpZ":{"name":"iPadPro_12_9_3","parent_name":"PreviewDevice"},"Extensions/PreviewDevice.html":{"name":"PreviewDevice","abstract":"\u003cp\u003eThe available devices to be used for previewing elements in an Xcode preview.\u003c/p\u003e"},"Extensions/CGSize.html":{"name":"CGSize"},"Extensions/FloatingPoint.html":{"name":"FloatingPoint"},"Extensions/ElementBuilder.html":{"name":"ElementBuilder"},"Extensions.html#/c:objc(cs)UIView":{"name":"UIView"},"Extensions/UIAccessibilityTraits.html":{"name":"UIAccessibilityTraits"},"Extensions/AXCustomContent.html":{"name":"AXCustomContent"},"Extensions/UIOffset.html":{"name":"UIOffset"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO7defaultACvpZ":{"name":"default","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO6legacyyA2CmF":{"name":"legacy","abstract":"\u003cp\u003eThe \u0026ldquo;standard\u0026rdquo; layout system.\u003c/p\u003e","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedyAcA0C7OptionsV_tcACmF":{"name":"caffeinated(options:)","abstract":"\u003cp\u003eA newer layout system with some optimizations made possible by ensuring elements adhere","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO11caffeinatedACvpZ":{"name":"caffeinated","abstract":"\u003cp\u003eA newer layout system with some optimizations made possible by ensuring elements adhere","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:11BlueprintUI10LayoutModeO4nameSSvp":{"name":"name","abstract":"\u003cp\u003eThe name of the layout mode.\u003c/p\u003e","parent_name":"LayoutMode"},"Enums/LayoutMode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"LayoutMode"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV21recordElementMeasuresSbvp":{"name":"recordElementMeasures","abstract":"\u003cp\u003eWhen \u003ccode\u003etrue\u003c/code\u003e, timing data will be logged when measuring each \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV21recordElementMeasuresAESb_tcfc":{"name":"init(recordElementMeasures:)","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV4liteAEvpZ":{"name":"lite","abstract":"\u003cp\u003eLogging configuration that will not record measurement data for all \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003es.","parent_name":"Config"},"Enums/BlueprintLogging/Config.html#/s:11BlueprintUI0A7LoggingO6ConfigV7verboseAEvpZ":{"name":"verbose","abstract":"\u003cp\u003eLogging configuration that includes measurement data.","parent_name":"Config"},"Enums/BlueprintLogging/Config.html":{"name":"Config","abstract":"\u003cp\u003eConfiguration for logging options\u003c/p\u003e","parent_name":"BlueprintLogging"},"Enums/BlueprintLogging.html#/s:11BlueprintUI0A7LoggingO6configAC6ConfigVvpZ":{"name":"config","abstract":"\u003cp\u003eLogging configuration\u003c/p\u003e","parent_name":"BlueprintLogging"},"Enums/BlueprintLogging.html#/s:11BlueprintUI0A7LoggingO9isEnabledSbvpZ":{"name":"isEnabled","abstract":"\u003cp\u003eIf enabled, Blueprint will emit signpost logs. You can view these logs in Instruments to","parent_name":"BlueprintLogging"},"Enums/LinkKey.html#/s:11BlueprintUI7LinkKeyO5Valuea":{"name":"Value","parent_name":"LinkKey"},"Enums/LinkKey.html#/s:11BlueprintUI7LinkKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"LinkKey"},"Enums/ParagraphStyleKey.html#/s:11BlueprintUI17ParagraphStyleKeyO5Valuea":{"name":"Value","parent_name":"ParagraphStyleKey"},"Enums/ParagraphStyleKey.html#/s:11BlueprintUI17ParagraphStyleKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"ParagraphStyleKey"},"Enums/UnderlineColorKey.html#/s:11BlueprintUI17UnderlineColorKeyO5Valuea":{"name":"Value","parent_name":"UnderlineColorKey"},"Enums/UnderlineColorKey.html#/s:11BlueprintUI17UnderlineColorKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"UnderlineColorKey"},"Enums/UnderlineStyleKey.html#/s:11BlueprintUI17UnderlineStyleKeyO5Valuea":{"name":"Value","parent_name":"UnderlineStyleKey"},"Enums/UnderlineStyleKey.html#/s:11BlueprintUI17UnderlineStyleKeyO4nameSo018NSAttributedStringE0avpZ":{"name":"name","parent_name":"UnderlineStyleKey"},"Enums/TrackingKey.html#/s:11BlueprintUI11TrackingKeyO5Valuea":{"name":"Value","parent_name":"TrackingKey"},"Enums/TrackingKey.html#/s:11BlueprintUI11TrackingKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"TrackingKey"},"Enums/ColorKey.html#/s:11BlueprintUI8ColorKeyO5Valuea":{"name":"Value","parent_name":"ColorKey"},"Enums/ColorKey.html#/s:11BlueprintUI8ColorKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"ColorKey"},"Enums/FontKey.html#/s:11BlueprintUI7FontKeyO5Valuea":{"name":"Value","parent_name":"FontKey"},"Enums/FontKey.html#/s:11BlueprintUI7FontKeyO4nameSo018NSAttributedStringD0avpZ":{"name":"name","parent_name":"FontKey"},"Enums/FontKey.html":{"name":"FontKey"},"Enums/ColorKey.html":{"name":"ColorKey"},"Enums/TrackingKey.html":{"name":"TrackingKey"},"Enums/UnderlineStyleKey.html":{"name":"UnderlineStyleKey"},"Enums/UnderlineColorKey.html":{"name":"UnderlineColorKey"},"Enums/ParagraphStyleKey.html":{"name":"ParagraphStyleKey"},"Enums/LinkKey.html":{"name":"LinkKey"},"Enums/BlueprintLogging.html":{"name":"BlueprintLogging","abstract":"\u003cp\u003eNamespace for logging config.\u003c/p\u003e"},"Enums/LayoutMode.html":{"name":"LayoutMode","abstract":"\u003cp\u003eControls the layout system that Blueprint uses to lay out elements.\u003c/p\u003e"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerCACycfc":{"name":"init()","abstract":"\u003cp\u003eCreate a new trigger, not yet bound to any view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC11focusActionyycSgvp":{"name":"focusAction","abstract":"\u003cp\u003eThe action to be invoked on focus, which will be set by a backing view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC10blurActionyycSgvp":{"name":"blurAction","abstract":"\u003cp\u003eThe action to be invoked on blur, which will be set by a backing view.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC5focusyyF":{"name":"focus()","abstract":"\u003cp\u003eFocuses the backing view bound to this trigger.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html#/s:11BlueprintUI12FocusTriggerC4bluryyF":{"name":"blur()","abstract":"\u003cp\u003eBlurs (removes focus from) the backing view bound to this trigger.\u003c/p\u003e","parent_name":"FocusTrigger"},"Classes/FocusTrigger.html":{"name":"FocusTrigger","abstract":"\u003cp\u003eA trigger for focus and blur actions.\u003c/p\u003e"},"Protocols/EnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP5ValueQa":{"name":"Value","abstract":"\u003cp\u003eThe type of value stored by this key.\u003c/p\u003e","parent_name":"EnvironmentKey"},"Protocols/EnvironmentKey.html#/s:11BlueprintUI14EnvironmentKeyP12defaultValue0F0QzvpZ":{"name":"defaultValue","abstract":"\u003cp\u003eThe default value that will be vended by an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e for this key if no other value","parent_name":"EnvironmentKey"},"Structs/Environment/LayoutDirection.html#/s:11BlueprintUI11EnvironmentV15LayoutDirectionO11leftToRightyA2EmF":{"name":"leftToRight","parent_name":"LayoutDirection"},"Structs/Environment/LayoutDirection.html#/s:11BlueprintUI11EnvironmentV15LayoutDirectionO11rightToLeftyA2EmF":{"name":"rightToLeft","parent_name":"LayoutDirection"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV5emptyACvpZ":{"name":"empty","abstract":"\u003cp\u003eA default \u0026ldquo;empty\u0026rdquo; environment, with no values overridden.","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentVy5ValueQzxmcAA0C3KeyRzluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eGets or sets an environment value by its key.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV22linkAccessibilityLabelSSSgvp":{"name":"linkAccessibilityLabel","abstract":"\u003cp\u003eThe localised accessibility label elements should use when handling links.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV8calendar10Foundation8CalendarVvp":{"name":"calendar","abstract":"\u003cp\u003eThe current calendar that elements should use when handling dates.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV12displayScale14CoreFoundation7CGFloatVvp":{"name":"displayScale","abstract":"\u003cp\u003eThe display scale of this environment.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment/LayoutDirection.html":{"name":"LayoutDirection","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV15layoutDirectionAC06LayoutE0Ovp":{"name":"layoutDirection","abstract":"\u003cp\u003eThe layout direction associated with the current environment.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV6locale10Foundation6LocaleVvp":{"name":"locale","abstract":"\u003cp\u003eThe current locale that elements should use.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV14safeAreaInsetsSo06UIEdgeF0Vvp":{"name":"safeAreaInsets","abstract":"\u003cp\u003eThe insets representing the safe area for content.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV8timeZone10Foundation04TimeE0Vvp":{"name":"timeZone","abstract":"\u003cp\u003eThe current time zone that elements should use when handling dates.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV10windowSizeSo6CGSizeVSgvp":{"name":"windowSize","abstract":"\u003cp\u003eThe size of the window that contains the hosting \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/BlueprintView.html\"\u003eBlueprintView\u003c/a\u003e\u003c/code\u003e.","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV10layoutModeAA06LayoutE0Ovp":{"name":"layoutMode","abstract":"\u003cp\u003eThis mode will be inherited by descendant BlueprintViews that do not have an explicit","parent_name":"Environment"},"Structs/Environment.html#/s:11BlueprintUI11EnvironmentV0A16UICommonControlsE10urlHandlerAD10URLHandler_pvp":{"name":"urlHandler","abstract":"\u003cp\u003eThe link handler to use to open links tapped in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Environment"},"Structs/Environment.html":{"name":"Environment","abstract":"\u003cp\u003eEnvironment is a container for values to be passed down an element tree.\u003c/p\u003e"},"Protocols/EnvironmentKey.html":{"name":"EnvironmentKey","abstract":"\u003cp\u003eTypes conforming to this protocol can be used as keys in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV09appearingD00A2UI010VisibilityD0VSgvp":{"name":"appearingTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element is appearing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV012disappearingD00A2UI010VisibilityD0VSgvp":{"name":"disappearingTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element is disappearing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV06layoutD00A2UI06LayoutD0Ovp":{"name":"layoutTransition","abstract":"\u003cp\u003eThe transition to apply when the wrapped element\u0026rsquo;s layout is changing.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV14wrappedElement0A2UI0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe element to which transitions are being applied.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV8wrappingAC0A2UI7Element_p_tcfc":{"name":"init(wrapping:)","abstract":"\u003cp\u003eCreate a transition container wrapping an element.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:25BlueprintUICommonControls19TransitionContainerV09appearingD0012disappearingD006layoutD013transitioningAC0A2UI010VisibilityD0VSg_AkH06LayoutD0OAH7Element_ptcfc":{"name":"init(appearingTransition:disappearingTransition:layoutTransition:transitioning:)","abstract":"\u003cp\u003eCreate a transition container wrapping an element.\u003c/p\u003e","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TransitionContainer"},"Structs/TransitionContainer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TransitionContainer"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4textSSvp":{"name":"text","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV11placeholderSSvp":{"name":"placeholder","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV8onChangeySScSgvp":{"name":"onChange","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV6secureSbvp":{"name":"secure","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV9isEnabledSbvp":{"name":"isEnabled","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV13textAlignmentSo06NSTextG0Vvp":{"name":"textAlignment","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4fontSo6UIFontCvp":{"name":"font","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV9textColorSo7UIColorCvp":{"name":"textColor","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV15clearButtonModeSo06UITexte4ViewH0Vvp":{"name":"clearButtonMode","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV12keyboardTypeSo010UIKeyboardG0Vvp":{"name":"keyboardType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV18keyboardAppearanceSo010UIKeyboardG0Vvp":{"name":"keyboardAppearance","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV22autocapitalizationTypeSo024UITextAutocapitalizationG0Vvp":{"name":"autocapitalizationType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV18autocorrectionTypeSo020UITextAutocorrectionG0Vvp":{"name":"autocorrectionType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV17spellCheckingTypeSo011UITextSpellgH0Vvp":{"name":"spellCheckingType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV15textContentTypeSo06UITextgH0aSgvp":{"name":"textContentType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV8onReturnyycSgvp":{"name":"onReturn","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV13returnKeyTypeSo08UIReturngH0Vvp":{"name":"returnKeyType","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV29enablesReturnKeyAutomaticallySbvp":{"name":"enablesReturnKeyAutomatically","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV12focusBinding0A2UI05FocusG0VSgvp":{"name":"focusBinding","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the field, these will be merged with any existing traits.","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV4text9configureACSS_yACzXEtcfc":{"name":"init(text:configure:)","parent_name":"TextField"},"Structs/TextField.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"TextField"},"Structs/TextField.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV7focused4when6equalsAC0A2UI10FocusStateVyxSgG_xtSHRzlF":{"name":"focused(when:equals:)","abstract":"\u003cp\u003eModifies this text field by binding its focus state to the given state value.\u003c/p\u003e","parent_name":"TextField"},"Structs/TextField.html#/s:25BlueprintUICommonControls9TextFieldV7focused4whenAC0A2UI10FocusStateVySbG_tF":{"name":"focused(when:)","abstract":"\u003cp\u003eModifies this text field by binding its focus state to the given Boolean state value.\u003c/p\u003e","parent_name":"TextField"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV14wrappedElement0A2UI0F0_pvp":{"name":"wrappedElement","parent_name":"Tappable"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV5onTapyycvp":{"name":"onTap","parent_name":"Tappable"},"Structs/Tappable.html#/s:25BlueprintUICommonControls8TappableV5onTap8wrappingACyyc_0A2UI7Element_ptcfc":{"name":"init(onTap:wrapping:)","parent_name":"Tappable"},"Structs/Tappable.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Tappable"},"Structs/Tappable.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Tappable"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV4sizeSo6CGSizeVvp":{"name":"size","abstract":"\u003cp\u003eThe size that this spacer will take in a layout.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV4sizeACSo6CGSizeV_tcfc":{"name":"init(size:)","abstract":"\u003cp\u003eInitializes a new spacer with the given size.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerV5width6heightAC14CoreFoundation7CGFloatV_AHtcfc":{"name":"init(width:height:)","abstract":"\u003cp\u003eInitializes a new spacer with the given width and height.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI6SpacerVyAC14CoreFoundation7CGFloatVcfc":{"name":"init(_:)","abstract":"\u003cp\u003eInitializes a new spacer with the given value for the width and height.\u003c/p\u003e","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Spacer"},"Structs/Spacer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Spacer"},"Structs/SegmentedControl/Item/Width.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5WidthO9automaticyA2GmF":{"name":"automatic","parent_name":"Width"},"Structs/SegmentedControl/Item/Width.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5WidthO8specificyAG14CoreFoundation7CGFloatVcAGmF":{"name":"specific(_:)","parent_name":"Width"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5titleSSvp":{"name":"title","parent_name":"Item"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV5widthAE5WidthOvp":{"name":"width","parent_name":"Item"},"Structs/SegmentedControl/Item.html#/s:25BlueprintUICommonControls16SegmentedControlV4ItemV8onSelectyycvp":{"name":"onSelect","parent_name":"Item"},"Structs/SegmentedControl/Item/Width.html":{"name":"Width","parent_name":"Item"},"Structs/SegmentedControl/Selection.html#/s:25BlueprintUICommonControls16SegmentedControlV9SelectionO4noneyA2EmF":{"name":"none","parent_name":"Selection"},"Structs/SegmentedControl/Selection.html#/s:25BlueprintUICommonControls16SegmentedControlV9SelectionO5indexyAESicAEmF":{"name":"index(_:)","parent_name":"Selection"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV5itemsSayAC4ItemVGvp":{"name":"items","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV9selectionAC9SelectionOvp":{"name":"selection","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV4fontSo6UIFontCvp":{"name":"font","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV13roundingScale14CoreFoundation7CGFloatVvp":{"name":"roundingScale","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV5items9configureACSayAC4ItemVG_yACzXEtcfc":{"name":"init(items:configure:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV9selection4font11itemBuilderA2C9SelectionO_So6UIFontCSayAC4ItemVGyXEtcfc":{"name":"init(selection:font:itemBuilder:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:25BlueprintUICommonControls16SegmentedControlV10appendItem5title5width8onSelectySS_AC0G0V5WidthOyyctF":{"name":"appendItem(title:width:onSelect:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI10MeasurableP7measure2inSo6CGSizeVAA14SizeConstraintV_tF":{"name":"measure(in:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"SegmentedControl"},"Structs/SegmentedControl/Selection.html":{"name":"Selection","parent_name":"SegmentedControl"},"Structs/SegmentedControl/Item.html":{"name":"Item","parent_name":"SegmentedControl"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV11contentSizeSo6CGSizeVvp":{"name":"contentSize","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV06scrollE6BoundsSo6CGRectVvp":{"name":"scrollViewBounds","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV16ScrollingContextV13contentInsetsSo06UIEdgeK0Vvp":{"name":"contentInsets","parent_name":"ScrollingContext"},"Structs/ScrollView/ContentOffset/ScrollingContext.html":{"name":"ScrollingContext","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV8Providera":{"name":"Provider","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV3topAEvpZ":{"name":"top","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV6bottomAEvpZ":{"name":"bottom","parent_name":"ContentOffset"},"Structs/ScrollView/ContentOffset.html#/s:25BlueprintUICommonControls10ScrollViewV13ContentOffsetV8providerAESo7CGPointVAE16ScrollingContextVc_tcfc":{"name":"init(provider:)","parent_name":"ContentOffset"},"Structs/ScrollView/ScrollTrigger.html#/s:25BlueprintUICommonControls10ScrollViewV0D7TriggerCAEycfc":{"name":"init()","parent_name":"ScrollTrigger"},"Structs/ScrollView/ScrollTrigger.html#/s:25BlueprintUICommonControls10ScrollViewV0D7TriggerC6scroll2to8animatedyAC13ContentOffsetV_SbtF":{"name":"scroll(to:animated:)","parent_name":"ScrollTrigger"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO8disabledyA2EmF":{"name":"disabled","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO7enabledyAEyyc_tcAEmF":{"name":"enabled(action:)","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/PullToRefreshBehavior.html#/s:25BlueprintUICommonControls10ScrollViewV21PullToRefreshBehaviorO10refreshingyA2EmF":{"name":"refreshing","parent_name":"PullToRefreshBehavior"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO12fittingWidthyA2EmF":{"name":"fittingWidth","abstract":"\u003cp\u003eThe content will fill the height of the scroller, width will be dynamic\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO13fittingHeightyA2EmF":{"name":"fittingHeight","abstract":"\u003cp\u003eThe content will fill the width of the scroller, height will be dynamic\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO07fittingF0yA2EmF":{"name":"fittingContent","abstract":"\u003cp\u003eThe content size will be the minimum required to fit the content.\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/ContentSize.html#/s:25BlueprintUICommonControls10ScrollViewV11ContentSizeO6customyAESo6CGSizeVcAEmF":{"name":"custom(_:)","abstract":"\u003cp\u003eManually provided content size.\u003c/p\u003e","parent_name":"ContentSize"},"Structs/ScrollView/KeyboardAdjustmentMode.html#/s:25BlueprintUICommonControls10ScrollViewV22KeyboardAdjustmentModeO4noneyA2EmF":{"name":"none","parent_name":"KeyboardAdjustmentMode"},"Structs/ScrollView/KeyboardAdjustmentMode.html#/s:25BlueprintUICommonControls10ScrollViewV22KeyboardAdjustmentModeO18adjustsWhenVisibleyA2EmF":{"name":"adjustsWhenVisible","parent_name":"KeyboardAdjustmentMode"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV14wrappedElement0A2UI0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content to be scrolled.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV11contentSizeAC07ContentG0Ovp":{"name":"contentSize","abstract":"\u003cp\u003eDetermines the sizing behavior of the content within the scroll view.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20alwaysBounceVerticalSbvp":{"name":"alwaysBounceVertical","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV22alwaysBounceHorizontalSbvp":{"name":"alwaysBounceHorizontal","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV12contentInsetSo12UIEdgeInsetsVvp":{"name":"contentInset","abstract":"\u003cp\u003eHow much the content of the \u003ccode\u003eScrollView\u003c/code\u003e should be inset.\u003c/p\u003e","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV16centersUnderflowSbvp":{"name":"centersUnderflow","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV015showsHorizontalD9IndicatorSbvp":{"name":"showsHorizontalScrollIndicator","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV013showsVerticalD9IndicatorSbvp":{"name":"showsVerticalScrollIndicator","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV21pullToRefreshBehaviorAC04PullghI0Ovp":{"name":"pullToRefreshBehavior","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV19keyboardDismissModeSo08UIScrolle8KeyboardgH0Vvp":{"name":"keyboardDismissMode","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV30contentInsetAdjustmentBehaviorSo08UIScrolle7ContentghI0Vvp":{"name":"contentInsetAdjustmentBehavior","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV22keyboardAdjustmentModeAC08KeyboardgH0Ovp":{"name":"keyboardAdjustmentMode","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20delaysContentTouchesSbvp":{"name":"delaysContentTouches","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV20contentOffsetTriggerAC0dH0CSgvp":{"name":"contentOffsetTrigger","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:25BlueprintUICommonControls10ScrollViewV_8wrapping9configureA2C11ContentSizeO_0A2UI7Element_pyACzXEtcfc":{"name":"init(_:wrapping:configure:)","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ScrollView"},"Structs/ScrollView.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ScrollView"},"Structs/ScrollView/KeyboardAdjustmentMode.html":{"name":"KeyboardAdjustmentMode","parent_name":"ScrollView"},"Structs/ScrollView/ContentSize.html":{"name":"ContentSize","parent_name":"ScrollView"},"Structs/ScrollView/PullToRefreshBehavior.html":{"name":"PullToRefreshBehavior","parent_name":"ScrollView"},"Structs/ScrollView/ScrollTrigger.html":{"name":"ScrollTrigger","parent_name":"ScrollView"},"Structs/ScrollView/ContentOffset.html":{"name":"ContentOffset","parent_name":"ScrollView"},"Structs/Rule/Thickness.html#/s:25BlueprintUICommonControls4RuleV9ThicknessO8hairlineyA2EmF":{"name":"hairline","abstract":"\u003cp\u003eIndicates that the rule should be exactly 1 screen pixel thick,","parent_name":"Thickness"},"Structs/Rule/Thickness.html#/s:25BlueprintUICommonControls4RuleV9ThicknessO6pointsyAE14CoreFoundation7CGFloatVcAEmF":{"name":"points(_:)","abstract":"\u003cp\u003eAn exact thickness in points.\u003c/p\u003e","parent_name":"Thickness"},"Structs/Rule/Orientation.html#/s:25BlueprintUICommonControls4RuleV11OrientationO10horizontalyA2EmF":{"name":"horizontal","abstract":"\u003cp\u003eIndicates that the rule is parallel to the x axis.\u003c/p\u003e","parent_name":"Orientation"},"Structs/Rule/Orientation.html#/s:25BlueprintUICommonControls4RuleV11OrientationO8verticalyA2EmF":{"name":"vertical","abstract":"\u003cp\u003eIndicates that the rule is parallel to the y axis.\u003c/p\u003e","parent_name":"Orientation"},"Structs/Rule/Orientation.html":{"name":"Orientation","abstract":"\u003cp\u003eRepresents whether the rule is parallel to the x or y axis.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule/Thickness.html":{"name":"Thickness","abstract":"\u003cp\u003eRepresents the thickness of a rule in the direction perpendicular to its orientation.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV11orientationAC11OrientationOvp":{"name":"orientation","abstract":"\u003cp\u003eWhether this rule is horizontal or vertical.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV9thicknessAC9ThicknessOvp":{"name":"thickness","abstract":"\u003cp\u003eThe thickness of this rule in the direction perpendicular to its orientation.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV5colorSo7UIColorCvp":{"name":"color","abstract":"\u003cp\u003eThe color that the rule should be drawn.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:25BlueprintUICommonControls4RuleV11orientation5color9thicknessA2C11OrientationO_So7UIColorCAC9ThicknessOtcfc":{"name":"init(orientation:color:thickness:)","abstract":"\u003cp\u003eInitializes a Rule with the given properties.\u003c/p\u003e","parent_name":"Rule"},"Structs/Rule.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Rule"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to fit the vertical size of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO5alignyAeA08VerticalD0V_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eUsing the specified alignment, children will be aligned relatively to each other, and","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO3topAEvpZ":{"name":"top","abstract":"\u003cp\u003eChildren will be aligned to the top edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO6centerAEvpZ":{"name":"center","abstract":"\u003cp\u003eChildren will be vertically centered in the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO6bottomAEvpZ":{"name":"bottom","abstract":"\u003cp\u003eChildren will be aligned to the bottom edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO7leadingAEvpZ":{"name":"leading","abstract":"\u003cp\u003eChildren will be aligned to the top edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html#/s:11BlueprintUI3RowV0C9AlignmentO8trailingAEvpZ":{"name":"trailing","abstract":"\u003cp\u003eChildren will be aligned to the bottom edge of the row.\u003c/p\u003e","parent_name":"RowAlignment"},"Structs/Row/RowAlignment.html":{"name":"RowAlignment","abstract":"\u003cp\u003eDescribes how the row\u0026rsquo;s children will be vertically aligned.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV8childrenSayAA7Element_p7element_AA11StackLayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV6layoutAA11StackLayoutVvp":{"name":"layout","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowVACycfc":{"name":"init()","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV9alignment9underflow8overflow14minimumSpacing8elementsA2C0C9AlignmentO_AA11StackLayoutV21UnderflowDistributionOAL08OverflowN0O14CoreFoundation7CGFloatVSayAL5ChildVGyXEtcfc":{"name":"init(alignment:underflow:overflow:minimumSpacing:elements:)","abstract":"\u003cp\u003eInitializer using result builder to declaratively build up a stack.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV19horizontalUnderflowAA11StackLayoutV0E12DistributionOvp":{"name":"horizontalUnderflow","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV18horizontalOverflowAA11StackLayoutV0E12DistributionOvp":{"name":"horizontalOverflow","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV17verticalAlignmentAC0cE0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eSpecifies how children will be aligned vertically.\u003c/p\u003e","parent_name":"Row"},"Structs/Row.html#/s:11BlueprintUI3RowV24minimumHorizontalSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumHorizontalSpacing","parent_name":"Row"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV7elementAA7Element_pvp":{"name":"element","abstract":"\u003cp\u003eThe child element\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV3keys11AnyHashableVSgvp":{"name":"key","abstract":"\u003cp\u003eAn optional key to disambiguate between view updates\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildV7element3keyAeA7Element_p_s11AnyHashableVSgtcfc":{"name":"init(element:key:)","abstract":"\u003cp\u003eCreate a new child.\u003c/p\u003e","parent_name":"Child"},"Structs/Overlay/Child.html#/s:11BlueprintUI7OverlayV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8childrenSayAC5ChildVGvp":{"name":"children","abstract":"\u003cp\u003eAll elements displayed in the overlay.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8elements9configureACSayAA7Element_pG_yACzXEtcfc":{"name":"init(elements:configure:)","abstract":"\u003cp\u003eCreates a new overlay with the provided elements.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV8elementsACSayAC5ChildVGyXE_tcfc":{"name":"init(elements:)","abstract":"\u003cp\u003eCreates a new overlay using a result builder.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV3addyyAA7Element_pF":{"name":"add(_:)","abstract":"\u003cp\u003eAdds the provided element to the overlay.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7OverlayV3add3key5childys11AnyHashableVSg_AA7Element_ptF":{"name":"add(key:child:)","abstract":"\u003cp\u003eAdds the provided element to the overlay, above other children.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Overlay"},"Structs/Overlay.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Overlay"},"Structs/Overlay/Child.html":{"name":"Child","abstract":"\u003cp\u003eThe child of an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Overlay.html\"\u003eOverlay\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Overlay"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO3topyA2GmF":{"name":"top","abstract":"\u003cp\u003eAlign text to the top of the available line height, with extra space added at the bottom.","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO6centeryA2GmF":{"name":"center","abstract":"\u003cp\u003eCenter text within the available line height. This makes line height behave like half-leading,","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO9AlignmentO6bottomyA2GmF":{"name":"bottom","abstract":"\u003cp\u003eAlign text to the bottom of the available line height, with extra space added at the top.","parent_name":"Alignment"},"Structs/Label/LineHeight/Alignment.html":{"name":"Alignment","parent_name":"LineHeight"},"Structs/Label/LineHeight.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO4fontyA2EmF":{"name":"font","abstract":"\u003cp\u003eUse the default line height of the label\u0026rsquo;s font.\u003c/p\u003e","parent_name":"LineHeight"},"Structs/Label/LineHeight.html#/s:25BlueprintUICommonControls5LabelV10LineHeightO6customyAE14CoreFoundation7CGFloatV_AE9AlignmentOtcAEmF":{"name":"custom(lineHeight:alignment:)","abstract":"\u003cp\u003eUse a custom line height and alignment.\u003c/p\u003e","parent_name":"LineHeight"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4textSSvp":{"name":"text","abstract":"\u003cp\u003eThe text to be displayed.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4fontSo6UIFontCvp":{"name":"font","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV5colorSo7UIColorCvp":{"name":"color","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV9alignmentSo15NSTextAlignmentVvp":{"name":"alignment","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV13numberOfLinesSivp":{"name":"numberOfLines","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV13lineBreakModeSo06NSLinefG0Vvp":{"name":"lineBreakMode","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV10lineHeightAC04LineF0Ovp":{"name":"lineHeight","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV25adjustsFontSizeToFitWidthSbvp":{"name":"adjustsFontSizeToFitWidth","abstract":"\u003cp\u003eA Boolean value that determines whether the label reduces the text’s font","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV18minimumScaleFactor14CoreFoundation7CGFloatVvp":{"name":"minimumScaleFactor","abstract":"\u003cp\u003eThe minimum scale factor for the label’s text.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV36allowsDefaultTighteningForTruncationSbvp":{"name":"allowsDefaultTighteningForTruncation","abstract":"\u003cp\u003eA Boolean value that determines whether the label tightens text before truncating.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV6shadowAA10TextShadowVSgvp":{"name":"shadow","abstract":"\u003cp\u003eA shadow to display behind the label\u0026rsquo;s text. Defaults to no shadow.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV22isAccessibilityElementSbvp":{"name":"isAccessibilityElement","abstract":"\u003cp\u003eDetermines if the label should be included when navigating the UI via accessibility.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV17accessibilityHintSSSgvp":{"name":"accessibilityHint","abstract":"\u003cp\u003eA localized string that describes the result of performing an action on the element, when the result is non-obvious.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the label, these will be merged with any existing traits.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV26accessibilityCustomActionsSayAA20AccessibilityElementV0F6ActionVGvp":{"name":"accessibilityCustomActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eAccessibilityElement.CustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"Label"},"Structs/Label.html#/s:25BlueprintUICommonControls5LabelV4text9configureACSS_yACzXEtcfc":{"name":"init(text:configure:)","parent_name":"Label"},"Structs/Label.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Label"},"Structs/Label/LineHeight.html":{"name":"LineHeight","parent_name":"Label"},"Structs/Inset.html#/s:11BlueprintUI5InsetV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe wrapped element to be inset.\u003c/p\u003e","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV3top14CoreFoundation7CGFloatVvp":{"name":"top","abstract":"\u003cp\u003eThe amount to inset the content element.\u003c/p\u003e","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV6bottom14CoreFoundation7CGFloatVvp":{"name":"bottom","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV4left14CoreFoundation7CGFloatVvp":{"name":"left","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV5right14CoreFoundation7CGFloatVvp":{"name":"right","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV3top6bottom4left5right8wrappingAC14CoreFoundation7CGFloatV_A3kA7Element_ptcfc":{"name":"init(top:bottom:left:right:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV07uniformC08wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(uniformInset:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV6insets8wrappingACSo12UIEdgeInsetsV_AA7Element_ptcfc":{"name":"init(insets:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV10sideInsets8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(sideInsets:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI5InsetV8vertical8wrappingAC14CoreFoundation7CGFloatV_AA7Element_ptcfc":{"name":"init(vertical:wrapping:)","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Inset"},"Structs/Inset.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Inset"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eThe image is not scaled, and is simply centered within the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO7stretchyA2EmF":{"name":"stretch","abstract":"\u003cp\u003eThe image is stretched to fill the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element, causing the image","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO9aspectFityA2EmF":{"name":"aspectFit","abstract":"\u003cp\u003eThe image is scaled to touch the edges of the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element while","parent_name":"ContentMode"},"Structs/Image/ContentMode.html#/s:25BlueprintUICommonControls5ImageV11ContentModeO10aspectFillyA2EmF":{"name":"aspectFill","abstract":"\u003cp\u003eThe image is scaled to fill the entire \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Image.html\"\u003eImage\u003c/a\u003e\u003c/code\u003e element. If the aspect","parent_name":"ContentMode"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV5imageSo7UIImageCSgvp":{"name":"image","abstract":"\u003cp\u003eThe image to be displayed\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV9tintColorSo7UIColorCSgvp":{"name":"tintColor","abstract":"\u003cp\u003eThe tint color.\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV11contentModeAC07ContentF0Ovp":{"name":"contentMode","abstract":"\u003cp\u003eThe content mode determines the layout of the image when its size does","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV29blockAccessibilityDescriptionSbvp":{"name":"blockAccessibilityDescription","abstract":"\u003cp\u003eiOS 14 added support for Image Descriptions using VoiceOver. This is not always appropriate.","parent_name":"Image"},"Structs/Image.html#/s:25BlueprintUICommonControls5ImageV5image11contentMode9tintColor29blockAccessibilityDescriptionACSo7UIImageCSg_AC07ContentG0OSo7UIColorCSgSbtcfc":{"name":"init(image:contentMode:tintColor:blockAccessibilityDescription:)","abstract":"\u003cp\u003eInitializes an image element with the given \u003ccode\u003eUIImage\u003c/code\u003e instance.\u003c/p\u003e","parent_name":"Image"},"Structs/Image.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Image"},"Structs/Image.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Image"},"Structs/Image/ContentMode.html":{"name":"ContentMode","abstract":"\u003cp\u003eThe content mode determines the layout of the image when its size does","parent_name":"Image"},"Structs/GeometryReader.html#/s:11BlueprintUI14GeometryReaderV21elementRepresentationAcA7Element_pAA0C5ProxyVc_tcfc":{"name":"init(elementRepresentation:)","parent_name":"GeometryReader"},"Structs/GeometryReader.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"GeometryReader"},"Structs/GeometryReader.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"GeometryReader"},"Structs/EqualStack/Child.html#/s:11BlueprintUI10EqualStackV5ChildV7elementAA7Element_pvp":{"name":"element","parent_name":"Child"},"Structs/EqualStack/Child.html#/s:11BlueprintUI10EqualStackV5ChildVyAeA7Element_pcfc":{"name":"init(_:)","parent_name":"Child"},"Structs/EqualStack/Direction.html#/s:11BlueprintUI10EqualStackV9DirectionO8verticalyA2EmF":{"name":"vertical","parent_name":"Direction"},"Structs/EqualStack/Direction.html#/s:11BlueprintUI10EqualStackV9DirectionO10horizontalyA2EmF":{"name":"horizontal","parent_name":"Direction"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9directionAC9DirectionOvp":{"name":"direction","abstract":"\u003cp\u003eThe direction in which this element will stack its children.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe amount of space between children in this element. Defaults to 0.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV8childrenSayAA7Element_pGvp":{"name":"children","abstract":"\u003cp\u003eThe child elements to be laid out. Defaults to an empty array.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9direction9configureA2C9DirectionO_yACzXEtcfc":{"name":"init(direction:configure:)","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV9direction7spacing8elementsA2C9DirectionO_14CoreFoundation7CGFloatVSayAC5ChildVGyXEtcfc":{"name":"init(direction:spacing:elements:)","abstract":"\u003cp\u003eInitializer using result builder to declaritively build up a stack.\u003c/p\u003e","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EqualStack"},"Structs/EqualStack.html#/s:11BlueprintUI10EqualStackV3add5childyAA7Element_p_tF":{"name":"add(child:)","parent_name":"EqualStack"},"Structs/EqualStack/Direction.html":{"name":"Direction","parent_name":"EqualStack"},"Structs/EqualStack/Child.html":{"name":"Child","parent_name":"EqualStack"},"Structs/Empty.html#/s:11BlueprintUI5EmptyVACycfc":{"name":"init()","parent_name":"Empty"},"Structs/Empty.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Empty"},"Structs/Empty.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Empty"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO13unconstrainedyA2EmF":{"name":"unconstrained","abstract":"\u003cp\u003eThere is no constraint for this axis – the natural size of the element will be used.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO6atMostyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atMost(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eno greater\u003c/strong\u003e than the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO7atLeastyAE14CoreFoundation7CGFloatVcAEmF":{"name":"atLeast(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eno less\u003c/strong\u003e than the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO6withinyAESNy14CoreFoundation7CGFloatVGcAEmF":{"name":"within(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003ewithin\u003c/strong\u003e the range provided.","parent_name":"Constraint"},"Structs/ConstrainedSize/Constraint.html#/s:11BlueprintUI15ConstrainedSizeV10ConstraintO8absoluteyAE14CoreFoundation7CGFloatVcAEmF":{"name":"absolute(_:)","abstract":"\u003cp\u003eThe measured size for this axis will be \u003cstrong\u003eexactly\u003c/strong\u003e the value provided.\u003c/p\u003e","parent_name":"Constraint"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element whose measurement will be constrained by the \u003ccode\u003eConstrainedSize\u003c/code\u003e.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV5widthAC10ConstraintOvp":{"name":"width","abstract":"\u003cp\u003eThe constraint to place on the width of the element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV6heightAC10ConstraintOvp":{"name":"height","abstract":"\u003cp\u003eThe constraint to place on the height of the element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI15ConstrainedSizeV5width6height8wrappingA2C10ConstraintO_AhA7Element_ptcfc":{"name":"init(width:height:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eConstrainedSize\u003c/code\u003e with the provided constraint options.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ConstrainedSize"},"Structs/ConstrainedSize/Constraint.html":{"name":"Constraint","abstract":"\u003cp\u003eThe available ways to constrain the measurement of a given axis within a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ConstrainedSize.html\"\u003eConstrainedSize\u003c/a\u003e\u003c/code\u003e element.\u003c/p\u003e","parent_name":"ConstrainedSize"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO10fillParentyA2EmF":{"name":"fillParent","abstract":"\u003cp\u003eThe content will be sized to fill its parent while","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO9fitParentyA2EmF":{"name":"fitParent","abstract":"\u003cp\u003eThe content will be sized to fit within its parent while maintaining the specified","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO03fitF0yA2EmF":{"name":"fitContent","abstract":"\u003cp\u003eThe content will grow in whichever dimension is needed to maintain the aspect ratio,","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html#/s:11BlueprintUI22ConstrainedAspectRatioV11ContentModeO06shrinkF0yA2EmF":{"name":"shrinkContent","abstract":"\u003cp\u003eThe content will shrink in whichever dimension is needed to maintain the aspect ratio,","parent_name":"ContentMode"},"Structs/ConstrainedAspectRatio/ContentMode.html":{"name":"ContentMode","abstract":"\u003cp\u003eRepresents how the content should size itself relative to its parent.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV14wrappedElementAA0G0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe element being constrained.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV06aspectE0AA0dE0Vvp":{"name":"aspectRatio","abstract":"\u003cp\u003eThe target aspect ratio.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV11contentModeAC07ContentG0Ovp":{"name":"contentMode","abstract":"\u003cp\u003eWhether the aspect ratio should be reached by expanding the content element\u0026rsquo;s size to fill its parent","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI22ConstrainedAspectRatioV06aspectE011contentMode8wrappingAcA0dE0V_AC07ContentH0OAA7Element_ptcfc":{"name":"init(aspectRatio:contentMode:wrapping:)","abstract":"\u003cp\u003eInitializes with the given properties.\u003c/p\u003e","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ConstrainedAspectRatio"},"Structs/ConstrainedAspectRatio.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ConstrainedAspectRatio"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eChildren will be stretched to fit the horizontal size of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO5alignyAeA010HorizontalD0V_tcAEmF":{"name":"align(to:)","abstract":"\u003cp\u003eUsing the specified alignment, children will be aligned relatively to each other, and","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO7leadingAEvpZ":{"name":"leading","abstract":"\u003cp\u003eChildren will be aligned to the leading edge of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO6centerAEvpZ":{"name":"center","abstract":"\u003cp\u003eChildren will be horizontally centered in the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html#/s:11BlueprintUI6ColumnV0C9AlignmentO8trailingAEvpZ":{"name":"trailing","abstract":"\u003cp\u003eChildren will be aligned to the trailing edge of the column.\u003c/p\u003e","parent_name":"ColumnAlignment"},"Structs/Column/ColumnAlignment.html":{"name":"ColumnAlignment","abstract":"\u003cp\u003eDescribes how the column\u0026rsquo;s children will be horizontally aligned.\u003c/p\u003e","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV8childrenSayAA7Element_p7element_AA11StackLayoutV6TraitsV6traitss11AnyHashableVSg3keytGvp":{"name":"children","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV6layoutAA11StackLayoutVvp":{"name":"layout","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnVACycfc":{"name":"init()","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV9alignment9underflow8overflow14minimumSpacing8elementsA2C0C9AlignmentO_AA11StackLayoutV21UnderflowDistributionOAL08OverflowN0O14CoreFoundation7CGFloatVSayAL5ChildVGyXEtcfc":{"name":"init(alignment:underflow:overflow:minimumSpacing:elements:)","abstract":"\u003cp\u003eCreates a Column, using result builder syntax. Columns display a list of items in a vertical","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV17verticalUnderflowAA11StackLayoutV0E12DistributionOvp":{"name":"verticalUnderflow","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV16verticalOverflowAA11StackLayoutV0E12DistributionOvp":{"name":"verticalOverflow","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV19horizontalAlignmentAC0cE0Ovp":{"name":"horizontalAlignment","abstract":"\u003cp\u003eSpecifies how children will be aligned horizontally.\u003c/p\u003e","parent_name":"Column"},"Structs/Column.html#/s:11BlueprintUI6ColumnV22minimumVerticalSpacing14CoreFoundation7CGFloatVvp":{"name":"minimumVerticalSpacing","parent_name":"Column"},"Structs/Centered.html#/s:11BlueprintUI8CenteredV7wrappedAA7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe content element to be centered.\u003c/p\u003e","parent_name":"Centered"},"Structs/Centered.html#/s:11BlueprintUI8CenteredVyAcA7Element_pcfc":{"name":"init(_:)","abstract":"\u003cp\u003eInitializes a \u003ccode\u003eCentered\u003c/code\u003e element with the given content element.\u003c/p\u003e","parent_name":"Centered"},"Structs/Centered.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","parent_name":"Centered"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV14wrappedElement0A2UI0F0_pvp":{"name":"wrappedElement","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV9isEnabledSbvp":{"name":"isEnabled","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV5onTapyycvp":{"name":"onTap","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV19minimumTappableSizeSo6CGSizeVvp":{"name":"minimumTappableSize","parent_name":"Button"},"Structs/Button.html#/s:25BlueprintUICommonControls6ButtonV9isEnabled5onTap8wrappingACSb_yyc0A2UI7Element_ptcfc":{"name":"init(isEnabled:onTap:wrapping:)","parent_name":"Button"},"Structs/Button.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Button"},"Structs/Button.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Button"},"Structs/Box/ShadowStyle.html#/s:25BlueprintUICommonControls3BoxV11ShadowStyleO4noneyA2EmF":{"name":"none","parent_name":"ShadowStyle"},"Structs/Box/ShadowStyle.html#/s:25BlueprintUICommonControls3BoxV11ShadowStyleO6simpleyAE14CoreFoundation7CGFloatV_AISo6CGSizeVSo7UIColorCtcAEmF":{"name":"simple(radius:opacity:offset:color:)","parent_name":"ShadowStyle"},"Structs/Box/BorderStyle.html#/s:25BlueprintUICommonControls3BoxV11BorderStyleO4noneyA2EmF":{"name":"none","parent_name":"BorderStyle"},"Structs/Box/BorderStyle.html#/s:25BlueprintUICommonControls3BoxV11BorderStyleO5solidyAESo7UIColorC_14CoreFoundation7CGFloatVtcAEmF":{"name":"solid(color:width:)","parent_name":"BorderStyle"},"Structs/Box/CornerCurve.html#/s:25BlueprintUICommonControls3BoxV11CornerCurveO8circularyA2EmF":{"name":"circular","abstract":"\u003cp\u003eProvides a standard-style corner radius as you would see in design tools like Figma.\u003c/p\u003e","parent_name":"CornerCurve"},"Structs/Box/CornerCurve.html#/s:25BlueprintUICommonControls3BoxV11CornerCurveO10continuousyA2EmF":{"name":"continuous","abstract":"\u003cp\u003eProvides an iOS icon-style corner radius.\u003c/p\u003e","parent_name":"CornerCurve"},"Structs/Box/CornerStyle/Corners.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:s9OptionSetP8rawValuex03RawD0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV7topLeftAGvpZ":{"name":"topLeft","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV8topRightAGvpZ":{"name":"topRight","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV10bottomLeftAGvpZ":{"name":"bottomLeft","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV11bottomRightAGvpZ":{"name":"bottomRight","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV3allAGvpZ":{"name":"all","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV3topAGvpZ":{"name":"top","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV4leftAGvpZ":{"name":"left","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV6bottomAGvpZ":{"name":"bottom","parent_name":"Corners"},"Structs/Box/CornerStyle/Corners.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7CornersV5rightAGvpZ":{"name":"right","parent_name":"Corners"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO6squareyA2EmF":{"name":"square","parent_name":"CornerStyle"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7capsuleyA2EmF":{"name":"capsule","parent_name":"CornerStyle"},"Structs/Box/CornerStyle.html#/s:25BlueprintUICommonControls3BoxV11CornerStyleO7roundedyAE14CoreFoundation7CGFloatV_AE7CornersVtcAEmF":{"name":"rounded(radius:corners:)","parent_name":"CornerStyle"},"Structs/Box/CornerStyle/Corners.html":{"name":"Corners","parent_name":"CornerStyle"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV15backgroundColorSo7UIColorCvp":{"name":"backgroundColor","abstract":"\u003cp\u003eThe background color to show in the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerStyleAC06CornerF0Ovp":{"name":"cornerStyle","abstract":"\u003cp\u003eThe corner style to apply, eg rounded, capsule, or normal, square corners.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerCurveAC06CornerF0Ovp":{"name":"cornerCurve","abstract":"\u003cp\u003eHow to style the curves when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Box.html#/s:25BlueprintUICommonControls3BoxV11cornerStyleAC06CornerF0Ovp\"\u003ecornerStyle\u003c/a\u003e\u003c/code\u003e is non-square.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11borderStyleAC06BorderF0Ovp":{"name":"borderStyle","abstract":"\u003cp\u003eThe border to apply around the edges of the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV11shadowStyleAC06ShadowF0Ovp":{"name":"shadowStyle","abstract":"\u003cp\u003eThe shadow style to apply to the outside of the box.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV12clipsContentSbvp":{"name":"clipsContent","abstract":"\u003cp\u003eIf content placed within the box should be clipped.\u003c/p\u003e","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV14wrappedElement0A2UI0F0_pSgvp":{"name":"wrappedElement","parent_name":"Box"},"Structs/Box.html#/s:25BlueprintUICommonControls3BoxV15backgroundColor11cornerStyle0G5Curve06borderH006shadowH012clipsContent8wrappingACSo7UIColorC_AC06CornerH0OAC0pI0OAC06BorderH0OAC06ShadowH0OSb0A2UI7Element_pSgtcfc":{"name":"init(backgroundColor:cornerStyle:cornerCurve:borderStyle:shadowStyle:clipsContent:wrapping:)","parent_name":"Box"},"Structs/Box.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Box"},"Structs/Box.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Box"},"Structs/Box/CornerStyle.html":{"name":"CornerStyle","parent_name":"Box"},"Structs/Box/CornerCurve.html":{"name":"CornerCurve","abstract":"\u003cp\u003eSpecifies the curve style when showing rounded corners on a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Box.html\"\u003eBox\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Box"},"Structs/Box/BorderStyle.html":{"name":"BorderStyle","parent_name":"Box"},"Structs/Box/ShadowStyle.html":{"name":"ShadowStyle","parent_name":"Box"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO4dateyA2EmF":{"name":"date","abstract":"\u003cp\u003eDetect date strings. Tapping a date opens the calendar to that date.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO7addressyA2EmF":{"name":"address","abstract":"\u003cp\u003eDetect addresses. Tapping the address opens Maps with that address.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO4linkyA2EmF":{"name":"link","abstract":"\u003cp\u003eDetect URLs. Tapping the link opens the URL.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel/LinkDetectionType.html#/s:25BlueprintUICommonControls15AttributedLabelV17LinkDetectionTypeO11phoneNumberyA2EmF":{"name":"phoneNumber","abstract":"\u003cp\u003eDetect phone numbers. Tapping the phone number prompts the user to call it.\u003c/p\u003e","parent_name":"LinkDetectionType"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14attributedTextSo18NSAttributedStringCvp":{"name":"attributedText","abstract":"\u003cp\u003eThe attributed text to render in the label.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV13numberOfLinesSivp":{"name":"numberOfLines","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV6shadowAA10TextShadowVSgvp":{"name":"shadow","abstract":"\u003cp\u003eA shadow to display behind the label\u0026rsquo;s text. Defaults to no shadow.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14textRectOffsetSo8UIOffsetVvp":{"name":"textRectOffset","abstract":"\u003cp\u003eAn offset that will be applied to the rect used by \u003ccode\u003edrawText(in:)\u003c/code\u003e.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV22isAccessibilityElementSbvp":{"name":"isAccessibilityElement","abstract":"\u003cp\u003eDetermines if the label should be included when navigating the UI via accessibility.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV25adjustsFontSizeToFitWidthSbvp":{"name":"adjustsFontSizeToFitWidth","abstract":"\u003cp\u003eA Boolean value that determines whether the label reduces the text’s font","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV18minimumScaleFactor14CoreFoundation7CGFloatVvp":{"name":"minimumScaleFactor","abstract":"\u003cp\u003eThe minimum scale factor for the label’s text.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV36allowsDefaultTighteningForTruncationSbvp":{"name":"allowsDefaultTighteningForTruncation","abstract":"\u003cp\u003eA Boolean value that determines whether the label tightens text before truncating.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV19accessibilityTraitsShyAA20AccessibilityElementV5TraitOGSgvp":{"name":"accessibilityTraits","abstract":"\u003cp\u003eA set of accessibility traits that should be applied to the label, these will be merged with any existing traits.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV17accessibilityHintSSSgvp":{"name":"accessibilityHint","abstract":"\u003cp\u003eA localized string that describes the result of performing an action on the element, when the result is non-obvious.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV26accessibilityCustomActionsSayAA20AccessibilityElementV0G6ActionVGvp":{"name":"accessibilityCustomActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eAccessibilityElement.CustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV18linkDetectionTypesShyAC04LinkG4TypeOGvp":{"name":"linkDetectionTypes","abstract":"\u003cp\u003eA set of data types to detect and automatically link in the label.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14linkAttributesSDySo21NSAttributedStringKeyas11AnyHashableVGvp":{"name":"linkAttributes","abstract":"\u003cp\u003eA set of attributes to apply to links in the string.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV20activeLinkAttributesSDySo21NSAttributedStringKeyas11AnyHashableVGvp":{"name":"activeLinkAttributes","abstract":"\u003cp\u003eA set of attributes to apply to links when they are touched.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:25BlueprintUICommonControls15AttributedLabelV14attributedText9configureACSo18NSAttributedStringC_yACzXEtcfc":{"name":"init(attributedText:configure:)","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AttributedLabel"},"Structs/AttributedLabel.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AttributedLabel"},"Structs/AttributedLabel/LinkDetectionType.html":{"name":"LinkDetectionType","abstract":"\u003cp\u003eTypes of data that can be detected and automatically turned into links.\u003c/p\u003e","parent_name":"AttributedLabel"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO7leadingyA2EmF":{"name":"leading","abstract":"\u003cp\u003eAligns the content to the leading edge of the containing element.","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eCenters the content horizontally.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO8trailingyA2EmF":{"name":"trailing","abstract":"\u003cp\u003eAligns the content to the trailing edge of the containing element.","parent_name":"HorizontalAlignment"},"Structs/Aligned/HorizontalAlignment.html#/s:11BlueprintUI7AlignedV19HorizontalAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eThe content fills the full horizontal width of the containing element.\u003c/p\u003e","parent_name":"HorizontalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eAligns the content to the top edge of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO6centeryA2EmF":{"name":"center","abstract":"\u003cp\u003eCenters the content vertically.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eAligns the content to the bottom edge of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html#/s:11BlueprintUI7AlignedV17VerticalAlignmentO4fillyA2EmF":{"name":"fill","abstract":"\u003cp\u003eThe content fills the full vertical height of the containing element.\u003c/p\u003e","parent_name":"VerticalAlignment"},"Structs/Aligned/VerticalAlignment.html":{"name":"VerticalAlignment","abstract":"\u003cp\u003eThe possible vertical alignment values.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned/HorizontalAlignment.html":{"name":"HorizontalAlignment","abstract":"\u003cp\u003eThe possible horizontal alignment values.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV14wrappedElementAA0E0_pvp":{"name":"wrappedElement","abstract":"\u003cp\u003eThe content element to be aligned.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV17verticalAlignmentAC08VerticalE0Ovp":{"name":"verticalAlignment","abstract":"\u003cp\u003eThe vertical alignment.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV19horizontalAlignmentAC010HorizontalE0Ovp":{"name":"horizontalAlignment","abstract":"\u003cp\u003eThe horizontal alignment.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7AlignedV10vertically12horizontally8wrappingA2C17VerticalAlignmentO_AC010HorizontalH0OAA7Element_ptcfc":{"name":"init(vertically:horizontally:wrapping:)","abstract":"\u003cp\u003eInitializes an \u003ccode\u003eAligned\u003c/code\u003e with the given content element and alignments.\u003c/p\u003e","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"Aligned"},"Structs/Aligned.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"Aligned"},"Structs/EnvironmentReader.html#/s:11BlueprintUI17EnvironmentReaderV21elementRepresentationAcA7Element_pAA0C0Vc_tcfc":{"name":"init(elementRepresentation:)","parent_name":"EnvironmentReader"},"Structs/EnvironmentReader.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"EnvironmentReader"},"Structs/EnvironmentReader.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"EnvironmentReader"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV7Adaptera":{"name":"Adapter","abstract":"\u003cp\u003eTakes in a mutable \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e which can be mutated to add or override values.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV2by8wrappingACyAA0D0Vzc_AA7Element_ptcfc":{"name":"init(by:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified using the given","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV3key5value8wrappingACxm_5ValueQzAA7Element_ptcAA0D3KeyRzlufc":{"name":"init(key:value:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified for a single key and value.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI18AdaptedEnvironmentV7keyPath5value8wrappingACs011WritableKeyF0CyAA0D0VxG_xAA7Element_ptclufc":{"name":"init(keyPath:value:wrapping:)","abstract":"\u003cp\u003eWraps an element with an environment that is modified for a single value.\u003c/p\u003e","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AdaptedEnvironment"},"Structs/AdaptedEnvironment.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AdaptedEnvironment"},"Structs/AccessibilityElement/CustomContent/Importance.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10ImportanceO7defaultyA2GmF":{"name":"default","abstract":"\u003cp\u003eBy default custom content is available through the rotor.\u003c/p\u003e","parent_name":"Importance"},"Structs/AccessibilityElement/CustomContent/Importance.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10ImportanceO4highyA2GmF":{"name":"high","abstract":"\u003cp\u003eIn addtion to being available through the rotor, high importance content will announced in the main VoiceOver utterance.","parent_name":"Importance"},"Structs/AccessibilityElement/CustomContent/Importance.html":{"name":"Importance","abstract":"\u003cp\u003eThe importance of the content.\u003c/p\u003e","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5labelSSvp":{"name":"label","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5valueSSSgvp":{"name":"value","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV10importanceAE10ImportanceOvp":{"name":"importance","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV5label5value10importanceAESS_SSSgAE10ImportanceOtcfc":{"name":"init(label:value:importance:)","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomContent.html#/s:25BlueprintUICommonControls20AccessibilityElementV13CustomContentV02axfG0So08AXCustomG0Cvp":{"name":"axCustomContent","parent_name":"CustomContent"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV12OnActivationa":{"name":"OnActivation","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV4nameSSvp":{"name":"name","abstract":"\u003cp\u003eA localized name that discribes the action.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV5imageSo7UIImageCSgvp":{"name":"image","abstract":"\u003cp\u003eAn image representing the action to be shown with some assistive technologies such as Switch Control.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV12onActivationSbycvp":{"name":"onActivation","abstract":"\u003cp\u003eA Callback for when the action is activated. This should return a \u003ccode\u003ebool\u003c/code\u003e indicating success or failure of the action.\u003c/p\u003e","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:25BlueprintUICommonControls20AccessibilityElementV12CustomActionV4name5image12onActivationAESS_So7UIImageCSgSbyctcfc":{"name":"init(name:image:onActivation:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/CustomAction.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"CustomAction"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO15IncrementActiona":{"name":"IncrementAction","abstract":"\u003cp\u003eUsed in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control.","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO15DecrementActiona":{"name":"DecrementAction","abstract":"\u003cp\u003eUsed in conjunction with UIAccessibilityTrait.adjustable, these will be called to allow accessible adjustment of a value, for example in a slider or stepper control.","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6buttonyA2EmF":{"name":"button","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO4linkyA2EmF":{"name":"link","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6headeryA2EmF":{"name":"header","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO11searchFieldyA2EmF":{"name":"searchField","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO5imageyA2EmF":{"name":"image","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO8selectedyA2EmF":{"name":"selected","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10playsSoundyA2EmF":{"name":"playsSound","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO11keyboardKeyyA2EmF":{"name":"keyboardKey","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10staticTextyA2EmF":{"name":"staticText","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO07summaryE0yA2EmF":{"name":"summaryElement","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10notEnabledyA2EmF":{"name":"notEnabled","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO17updatesFrequentlyyA2EmF":{"name":"updatesFrequently","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO18startsMediaSessionyA2EmF":{"name":"startsMediaSession","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO10adjustableyAEyyc_yyctcAEmF":{"name":"adjustable(_:_:)","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO23allowsDirectInteractionyA2EmF":{"name":"allowsDirectInteraction","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO14causesPageTurnyA2EmF":{"name":"causesPageTurn","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:25BlueprintUICommonControls20AccessibilityElementV5TraitO6tabBaryA2EmF":{"name":"tabBar","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Trait"},"Structs/AccessibilityElement/Trait.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Trait"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5labelSSSgvp":{"name":"label","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5valueSSSgvp":{"name":"value","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV4hintSSSgvp":{"name":"hint","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV10identifierSSSgvp":{"name":"identifier","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV6traitsShyAC5TraitOGvp":{"name":"traits","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV22accessibilityFrameSizeSo6CGSizeVSgvp":{"name":"accessibilityFrameSize","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV29accessibilityFrameCornerStyleAA3BoxV0hI0Ovp":{"name":"accessibilityFrameCornerStyle","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV07wrappedE00A2UI0E0_pvp":{"name":"wrappedElement","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV21accessibilityActivateSbycSgvp":{"name":"accessibilityActivate","abstract":"\u003cp\u003eUsed to provide custom behaviour when activated by voiceover. This will override the default behavior of issuing a tap event at the accessibility activation point.","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV13customActionsSayAC12CustomActionVGvp":{"name":"customActions","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomAction.html\"\u003eCustomAction\u003c/a\u003e\u003c/code\u003es, defining additional supported actions. Assistive technologies, such as VoiceOver, will display your custom actions to the user at appropriate times.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV13customContentSayAC06CustomG0VGvp":{"name":"customContent","abstract":"\u003cp\u003eAn array containing one or more \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AccessibilityElement/CustomContent.html\"\u003eCustomContent\u003c/a\u003e\u003c/code\u003es, defining additional content associated with the element. Assistive technologies, such as VoiceOver, will announce your custom content to the user at appropriate times.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:25BlueprintUICommonControls20AccessibilityElementV5label5value6traits4hint10identifier22accessibilityFrameSize0kL11CornerStyle13customActions0P7Content8wrapping9configureACSSSg_AOShyAC5TraitOGA2OSo6CGSizeVSgAA3BoxV0nO0OSayAC12CustomActionVGSayAC0xR0VG0A2UI0E0_pyACzXEtcfc":{"name":"init(label:value:traits:hint:identifier:accessibilityFrameSize:accessibilityFrameCornerStyle:customActions:customContent:wrapping:configure:)","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/Trait.html":{"name":"Trait","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/CustomAction.html":{"name":"CustomAction","abstract":"\u003cp\u003eUsed to provide additional functionality to assistive technologies beyond your accessible UI.\u003c/p\u003e","parent_name":"AccessibilityElement"},"Structs/AccessibilityElement/CustomContent.html":{"name":"CustomContent","parent_name":"AccessibilityElement"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV10identifierSSSgvp":{"name":"identifier","abstract":"\u003cp\u003eAn optional \u003ccode\u003eaccessibilityIdentifier\u003c/code\u003e to give the container. Defaults to \u003ccode\u003enil\u003c/code\u003e.\u003c/p\u003e","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV7wrapped0A2UI7Element_pvp":{"name":"wrapped","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:25BlueprintUICommonControls22AccessibilityContainerV10identifier8wrappingACSSSg_0A2UI7Element_ptcfc":{"name":"init(identifier:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityContainer\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityContainer"},"Structs/AccessibilityContainer.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityContainer"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV7wrapped0A2UI7Element_pvp":{"name":"wrapped","abstract":"\u003cp\u003eThe element whose accessibility information will be blocked.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV10isBlockingSbvp":{"name":"isBlocking","abstract":"\u003cp\u003eIf the \u003ccode\u003eAccessibilityBlocker\u003c/code\u003e is currently blocking accessibility.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:25BlueprintUICommonControls20AccessibilityBlockerV10isBlocking8wrappingACSb_0A2UI7Element_ptcfc":{"name":"init(isBlocking:wrapping:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eAccessibilityBlocker\u003c/code\u003e wrapping the provided element.\u003c/p\u003e","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"AccessibilityBlocker"},"Structs/AccessibilityBlocker.html":{"name":"AccessibilityBlocker","abstract":"\u003cp\u003eBlocks all accessibility on the element, so that it is"},"Structs/AccessibilityContainer.html":{"name":"AccessibilityContainer","abstract":"\u003cp\u003eActs as an accessibility container for any accessible subviews.\u003c/p\u003e"},"Structs/AccessibilityElement.html":{"name":"AccessibilityElement"},"Structs/AdaptedEnvironment.html":{"name":"AdaptedEnvironment","abstract":"\u003cp\u003eWraps an element tree with a modified environment.\u003c/p\u003e"},"Structs/EnvironmentReader.html":{"name":"EnvironmentReader","abstract":"\u003cp\u003eAn element that dynamically builds its content based on the environment.\u003c/p\u003e"},"Structs/Aligned.html":{"name":"Aligned","abstract":"\u003cp\u003eAligns a content element within itself. The vertical and horizontal alignment may be set independently.\u003c/p\u003e"},"Structs/AttributedLabel.html":{"name":"AttributedLabel"},"Structs/Box.html":{"name":"Box","abstract":"\u003cp\u003eA simple element that wraps a child element and adds visual styling including"},"Structs/Button.html":{"name":"Button","abstract":"\u003cp\u003eAn element that wraps a child element in a button that mimics a UIButton with the .system style. That is, when"},"Structs/Centered.html":{"name":"Centered","abstract":"\u003cp\u003eCenters a content element within itself.\u003c/p\u003e"},"Structs/Column.html":{"name":"Column","abstract":"\u003cp\u003eDisplays a list of items in a linear vertical layout.\u003c/p\u003e"},"Structs/ConstrainedAspectRatio.html":{"name":"ConstrainedAspectRatio","abstract":"\u003cp\u003eConstrains the size of the content element to an aspect ratio.\u003c/p\u003e"},"Structs/ConstrainedSize.html":{"name":"ConstrainedSize","abstract":"\u003cp\u003eConstrains the measured size of the contained element in the ranges specified by the \u003ccode\u003ewidth\u003c/code\u003e and \u003ccode\u003eheight\u003c/code\u003e properties.\u003c/p\u003e"},"Structs/Empty.html":{"name":"Empty","abstract":"\u003cp\u003eAn empty \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e which has no size and draws no content.\u003c/p\u003e"},"Structs/EqualStack.html":{"name":"EqualStack","abstract":"\u003cp\u003eAn element that sizes its children equally, stacking them in the primary axis according to"},"Structs/GeometryReader.html":{"name":"GeometryReader","abstract":"\u003cp\u003eAn element that dynamically builds its content based on the available space.\u003c/p\u003e"},"Structs/Image.html":{"name":"Image","abstract":"\u003cp\u003eDisplays an image within an element hierarchy.\u003c/p\u003e"},"Structs/Inset.html":{"name":"Inset","abstract":"\u003cp\u003eInsets a content element within a layout.\u003c/p\u003e"},"Structs/Label.html":{"name":"Label","abstract":"\u003cp\u003eDisplays text content.\u003c/p\u003e"},"Structs/Overlay.html":{"name":"Overlay","abstract":"\u003cp\u003eStretches all of its child elements to fill the layout area, stacked on top of each other.\u003c/p\u003e"},"Structs/Row.html":{"name":"Row","abstract":"\u003cp\u003eDisplays a list of items in a linear horizontal layout.\u003c/p\u003e"},"Structs/Rule.html":{"name":"Rule","abstract":"\u003cp\u003eA solid line, parallel to the x or y axis, with a fixed thickness but unconstrained in length,"},"Structs/ScrollView.html":{"name":"ScrollView","abstract":"\u003cp\u003eWraps a content element and makes it scrollable.\u003c/p\u003e"},"Structs/SegmentedControl.html":{"name":"SegmentedControl","abstract":"\u003cp\u003eAllows users to pick from an array of options.\u003c/p\u003e"},"Structs/Spacer.html":{"name":"Spacer","abstract":"\u003cp\u003eAn element that does not display anything (it has neither children or a view).\u003c/p\u003e"},"Structs/Tappable.html":{"name":"Tappable","abstract":"\u003cp\u003eWraps a content element and calls the provided closure when tapped.\u003c/p\u003e"},"Structs/TextField.html":{"name":"TextField","abstract":"\u003cp\u003eDisplays a text field.\u003c/p\u003e"},"Structs/TransitionContainer.html":{"name":"TransitionContainer","abstract":"\u003cp\u003eWraps a content element and adds transitions when the element appears,"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO6deviceyAE05SwiftB00D6DeviceVcAEmF":{"name":"device(_:)","abstract":"\u003cp\u003eThe preview will be inside the provided device (eg, iPhone X).\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO5fixedyAE14CoreFoundation7CGFloatV_AItcAEmF":{"name":"fixed(width:height:)","abstract":"\u003cp\u003eThe preview will be the provided size\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO8thatFitsyAE14CoreFoundation7CGFloatV_tcAEmF":{"name":"thatFits(padding:)","abstract":"\u003cp\u003eThe preview will be as large as needed to preview the content.\u003c/p\u003e","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO10identifiers11AnyHashableVvp":{"name":"identifier","parent_name":"PreviewType"},"Structs/ElementPreview/PreviewType.html#/s:11BlueprintUI14ElementPreviewV0D4TypeO11previewView4with3for05SwiftB003AnyG0VSS_AA0C0_ptF":{"name":"previewView(with:for:)","parent_name":"PreviewType"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV0C8Providera":{"name":"ElementProvider","abstract":"\u003cp\u003eA provider which returns a new element.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV13commonDevices5named4withACSS_AA0C0_pyctFZ":{"name":"commonDevices(named:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with several common devices that your users may use.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV5named4withAeCSS_AC0D4TypeOAA0C0_pyctcfc":{"name":"init(named:with:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with the provided preview type.","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:11BlueprintUI14ElementPreviewV5named4withAeCSS_SayAC0D4TypeOGAA0C0_pyctcfc":{"name":"init(named:with:with:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementPreview\u003c/code\u003e with the provided preview types.\u003c/p\u003e","parent_name":"ElementPreview"},"Structs/ElementPreview.html#/s:7SwiftUI4ViewP4body4BodyQzvp":{"name":"body","parent_name":"ElementPreview"},"Structs/ElementPreview/PreviewType.html":{"name":"PreviewType","abstract":"\u003cp\u003eThe preview type to use to display an element in an Xcode preview.\u003c/p\u003e","parent_name":"ElementPreview"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC11environmentAA11EnvironmentVvp":{"name":"environment","abstract":"\u003cp\u003eA base environment used when laying out and rendering the element tree.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC046automaticallyInheritsEnvironmentFromContainingA5ViewsSbvp":{"name":"automaticallyInheritsEnvironmentFromContainingBlueprintViews","abstract":"\u003cp\u003eIf \u003ccode\u003etrue\u003c/code\u003e, then Blueprint will automatically inherit the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Environment.html\"\u003eEnvironment\u003c/a\u003e\u003c/code\u003e from the nearest","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC7elementAA7Element_pSgvp":{"name":"element","abstract":"\u003cp\u003eThe root element that is displayed within the view.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)bounds":{"name":"bounds","abstract":"\u003cp\u003eWe need to invalidateIntrinsicContentSize when \u003ccode\u003ebound.size\u003c/code\u003e changes for Auto Layout to work correctly.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC10layoutModeAA06LayoutE0OSgvp":{"name":"layoutMode","abstract":"\u003cp\u003eAn optional explicit layout mode for this view. If \u003ccode\u003enil\u003c/code\u003e, this view will inherit the layout","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC4nameSSSgvp":{"name":"name","abstract":"\u003cp\u003eAn optional name to help identify this view\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC15metricsDelegateAA0ac7MetricsE0_pSgvp":{"name":"metricsDelegate","abstract":"\u003cp\u003eProvides performance metrics about the duration of layouts, updates, etc.\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC7element11environmentAcA7Element_pSg_AA11EnvironmentVtcfc":{"name":"init(element:environment:)","abstract":"\u003cp\u003eInstantiates a view with the given element\u003c/p\u003e","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)initWithFrame:":{"name":"init(frame:)","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)sizeThatFits:":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within the given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/s:11BlueprintUI0A4ViewC12sizeThatFitsySo6CGSizeVAA14SizeConstraintVF":{"name":"sizeThatFits(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within the given \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SizeConstraint.html\"\u003eSizeConstraint\u003c/a\u003e\u003c/code\u003e.","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)systemLayoutSizeFittingSize:":{"name":"systemLayoutSizeFitting(_:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within then given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:":{"name":"systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)","abstract":"\u003cp\u003eMeasures the size needed to display the view within then given constraining size,","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)intrinsicContentSize":{"name":"intrinsicContentSize","abstract":"\u003cp\u003eFor us, this is the same as \u003ccode\u003esizeThatFits\u003c/code\u003e, since blueprint does not","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(py)semanticContentAttribute":{"name":"semanticContentAttribute","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)safeAreaInsetsDidChange":{"name":"safeAreaInsetsDidChange()","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)layoutSubviews":{"name":"layoutSubviews()","parent_name":"BlueprintView"},"Classes/BlueprintView.html#/c:@M@BlueprintUI@objc(cs)BlueprintView(im)didMoveToWindow":{"name":"didMoveToWindow()","parent_name":"BlueprintView"},"Classes/BlueprintView.html":{"name":"BlueprintView","abstract":"\u003cp\u003eA view that is responsible for displaying an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Element.html\"\u003eElement\u003c/a\u003e\u003c/code\u003e hierarchy.\u003c/p\u003e"},"Structs/ElementPreview.html":{"name":"ElementPreview","abstract":"\u003cp\u003eA SwiftUI view which wraps a Blueprint element, which can be used to preview Blueprint elements"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5alpha14CoreFoundation7CGFloatVvp":{"name":"alpha","abstract":"\u003cp\u003eThe alpha of the view in the hidden state (initial for appearing, final for disappearing).\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV9transformSo13CATransform3DVvp":{"name":"transform","abstract":"\u003cp\u003eThe transform of the view in the hidden state (initial for appearing, final for disappearing).\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV10attributesAA19AnimationAttributesVvp":{"name":"attributes","abstract":"\u003cp\u003eThe animation attributes that will be used to drive the transition.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5alpha9transform10attributesAC14CoreFoundation7CGFloatV_So13CATransform3DVAA19AnimationAttributesVtcfc":{"name":"init(alpha:transform:attributes:)","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV5scaleACvpZ":{"name":"scale","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that scales in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV4fadeACvpZ":{"name":"fade","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that fades in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Structs/VisibilityTransition.html#/s:11BlueprintUI20VisibilityTransitionV12scaleAndFadeACvpZ":{"name":"scaleAndFade","abstract":"\u003cp\u003eReturns a \u003ccode\u003eVisibilityTransition\u003c/code\u003e that simultaneously scales and fades in and out.\u003c/p\u003e","parent_name":"VisibilityTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO4noneyA2CmF":{"name":"none","abstract":"\u003cp\u003eThe view will never animate layout changes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO8specificyAcA19AnimationAttributesVcACmF":{"name":"specific(_:)","abstract":"\u003cp\u003eLayout changes will always animate with the given attributes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO9inheritedyA2CmF":{"name":"inherited","abstract":"\u003cp\u003eThe view will only animate layout changes if an inherited transition exists.\u003c/p\u003e","parent_name":"LayoutTransition"},"Enums/LayoutTransition.html#/s:11BlueprintUI16LayoutTransitionO21inheritedWithFallbackyAcA19AnimationAttributesVcACmF":{"name":"inheritedWithFallback(_:)","abstract":"\u003cp\u003eThe view will animate along with an inherited transition (if present) or the specified fallback attributes.\u003c/p\u003e","parent_name":"LayoutTransition"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV6Updatea":{"name":"Update","abstract":"\u003cp\u003eA closure that is applied to the native view instance during an update cycle.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7builderxycvp":{"name":"builder","abstract":"\u003cp\u003eA closure that is responsible for instantiating an instance of the native view.","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7updatesSayyxcGvp":{"name":"updates","abstract":"\u003cp\u003eAn array of update closures.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV07contentC0ySo6UIViewCxcvp":{"name":"contentView","abstract":"\u003cp\u003eA closure that takes a native view instance as the single argument, and","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV16layoutTransitionAA06LayoutG0Ovp":{"name":"layoutTransition","abstract":"\u003cp\u003eThe transition to use during layout changes.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV19appearingTransitionAA010VisibilityG0VSgvp":{"name":"appearingTransition","abstract":"\u003cp\u003eThe transition to use when this view appears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV22disappearingTransitionAA010VisibilityG0VSgvp":{"name":"disappearingTransition","abstract":"\u003cp\u003eThe transition to use when this view disappears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV8onAppearyycSgvp":{"name":"onAppear","abstract":"\u003cp\u003eA hook to call when the element appears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV11onDisappearyycSgvp":{"name":"onDisappear","abstract":"\u003cp\u003eA hook to call when the element disappears.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV21frameRoundingBehaviorAC05FramegH0Ovp":{"name":"frameRoundingBehavior","abstract":"\u003cp\u003eThe prioritization method to use when snapping the native view\u0026rsquo;s frame to pixel","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVAEy_xGycfc":{"name":"init()","abstract":"\u003cp\u003eInitializes a default configuration object.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV5applyyyyxcF":{"name":"apply(_:)","abstract":"\u003cp\u003eAdds the given update closure to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationV7updatesSayyxcGvp\"\u003eupdates\u003c/a\u003e\u003c/code\u003e array.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVyqd__Sgs24ReferenceWritableKeyPathCyxqd__Gcluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eSubscript for values that are not optional. We must represent these values as optional so that we can","parent_name":"Configuration"},"Structs/ViewDescription/Configuration.html#/s:11BlueprintUI15ViewDescriptionV13ConfigurationVyqd__Sgs24ReferenceWritableKeyPathCyxAFGcluip":{"name":"subscript(_:)","abstract":"\u003cp\u003eSubscript for values that are optional.\u003c/p\u003e","parent_name":"Configuration"},"Structs/ViewDescription/FrameRoundingBehavior.html#/s:11BlueprintUI15ViewDescriptionV21FrameRoundingBehaviorO15prioritizeEdgesyA2EmF":{"name":"prioritizeEdges","abstract":"\u003cp\u003ePrioritize preserving frame edge positions\u003c/p\u003e","parent_name":"FrameRoundingBehavior"},"Structs/ViewDescription/FrameRoundingBehavior.html#/s:11BlueprintUI15ViewDescriptionV21FrameRoundingBehaviorO14prioritizeSizeyA2EmF":{"name":"prioritizeSize","abstract":"\u003cp\u003ePrioritize preserving frame sizes\u003c/p\u003e","parent_name":"FrameRoundingBehavior"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionVyACxmcSo6UIViewCRbzlufc":{"name":"init(_:)","abstract":"\u003cp\u003eGenerates a view description for the given view class.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV_11configuringACxm_yAC13ConfigurationVy_xGzXEtcSo6UIViewCRbzlufc":{"name":"init(_:configuring:)","abstract":"\u003cp\u003eGenerates a view description for the given view class.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV8viewTypeSo6UIViewCmvp":{"name":"viewType","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV5buildSo6UIViewCyF":{"name":"build()","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV5apply2toySo6UIViewC_tF":{"name":"apply(to:)","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV07contentC02inSo6UIViewCAG_tF":{"name":"contentView(in:)","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV16layoutTransitionAA06LayoutF0Ovp":{"name":"layoutTransition","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV19appearingTransitionAA010VisibilityF0VSgvp":{"name":"appearingTransition","parent_name":"ViewDescription"},"Structs/ViewDescription.html#/s:11BlueprintUI15ViewDescriptionV22disappearingTransitionAA010VisibilityF0VSgvp":{"name":"disappearingTransition","parent_name":"ViewDescription"},"Structs/ViewDescription/FrameRoundingBehavior.html":{"name":"FrameRoundingBehavior","abstract":"\u003cp\u003eThe available prioritization options for rounding frames to pixel boundaries.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ViewDescription/Configuration.html":{"name":"Configuration","abstract":"\u003cp\u003eRepresents the configuration of a specific UIView type.\u003c/p\u003e","parent_name":"ViewDescription"},"Structs/ElementContent/Builder.html#/s:11BlueprintUI14ElementContentV7BuilderV6layoutxvp":{"name":"layout","abstract":"\u003cp\u003eThe layout object that is ultimately responsible for measuring","parent_name":"Builder"},"Structs/ElementContent/Builder.html#/s:11BlueprintUI14ElementContentV7BuilderV3add6traits3key7elementy6TraitsQz_s11AnyHashableVSgAA0C0_ptF":{"name":"add(traits:key:element:)","abstract":"\u003cp\u003eAdds the given child element.\u003c/p\u003e","parent_name":"Builder"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV7measure2in11environmentSo6CGSizeVAA14SizeConstraintV_AA11EnvironmentVtF":{"name":"measure(in:environment:)","abstract":"\u003cp\u003eMeasures the required size of this element\u0026rsquo;s content.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV10childCountSivp":{"name":"childCount","parent_name":"ElementContent"},"Structs/ElementContent/Builder.html":{"name":"Builder","abstract":"\u003cp\u003eUsed to construct elements that have layout and children.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV6layout9configureACx_yAC7BuilderVy_xGzXEtcAA6LayoutRzlufc":{"name":"init(layout:configure:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given layout and children.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child3key6layoutAcA0C0_p_s11AnyHashableVSgxtcAA17SingleChildLayoutRzlufc":{"name":"init(child:key:layout:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given element and layout.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5childAcA0C0_p_tcfc":{"name":"init(child:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given element.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5buildAcA0C0_pAA14SizeConstraintV_AA11EnvironmentVtc_tcfc":{"name":"init(build:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e that will lazily create its storage during a layout and measurement pass,","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV10measurableAcA10Measurable_p_tcfc":{"name":"init(measurable:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/Measurable.html\"\u003eMeasurable\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV15measureFunctionACSo6CGSizeVAA14SizeConstraintVc_tcfc":{"name":"init(measureFunction:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided measure function.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV15measureFunctionACSo6CGSizeVAA14SizeConstraintV_AA11EnvironmentVtc_tcfc":{"name":"init(measureFunction:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that delegates to the provided measure function.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV13intrinsicSizeACSo6CGSizeV_tcfc":{"name":"init(intrinsicSize:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with no children that uses the provided intrinsic size for measuring.\u003c/p\u003e","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child11environmentAcA0C0_p_yAA11EnvironmentVzctcfc":{"name":"init(child:environment:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given child element, measurement caching key, and environment adapter,","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV5child3key5valueAcA0C0_p_xm5ValueQztcAA14EnvironmentKeyRzlufc":{"name":"init(child:key:value:)","abstract":"\u003cp\u003eInitializes a new \u003ccode\u003eElementContent\u003c/code\u003e with the given child element, measurement caching key, and environment key + value.","parent_name":"ElementContent"},"Structs/ElementContent.html#/s:11BlueprintUI14ElementContentV9measuringAcA0C0_p_tcfc":{"name":"init(measuring:)","abstract":"\u003cp\u003eCreates a new \u003ccode\u003eElementContent\u003c/code\u003e which uses the provided element to measure its","parent_name":"ElementContent"},"Protocols/ProxyElement.html#/s:11BlueprintUI12ProxyElementP21elementRepresentationAA0D0_pvp":{"name":"elementRepresentation","abstract":"\u003cp\u003eReturns an element that represents the entire content of this element.\u003c/p\u003e","parent_name":"ProxyElement"},"Protocols/ProxyElement.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","parent_name":"ProxyElement"},"Protocols/ProxyElement.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","parent_name":"ProxyElement"},"Protocols/Element.html#/s:11BlueprintUI7ElementP7contentAA0C7ContentVvp":{"name":"content","abstract":"\u003cp\u003eReturns the content of this element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP22backingViewDescription4withAA0eF0VSgAA0eF7ContextV_tF":{"name":"backingViewDescription(with:)","abstract":"\u003cp\u003eReturns an (optional) description of the view that should back this element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment3key5valueAaB_pqd__m_5ValueQyd__tAA0E3KeyRd__lF":{"name":"adaptedEnvironment(key:value:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given environment key and value.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment7keyPath5valueAaB_ps011WritableKeyG0CyAA0E0Vqd__G_qd__tlF":{"name":"adaptedEnvironment(keyPath:value:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given keypath and value.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18adaptedEnvironment2byAaB_pyAA0E0Vzc_tF":{"name":"adaptedEnvironment(by:)","abstract":"\u003cp\u003eWraps this element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AdaptedEnvironment.html\"\u003eAdaptedEnvironment\u003c/a\u003e\u003c/code\u003e with the given configuration block.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7aligned10vertically12horizontallyAA7AlignedVAH17VerticalAlignmentO_AH010HorizontalI0OtF":{"name":"aligned(vertically:horizontally:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Aligned.html\"\u003eAligned\u003c/a\u003e\u003c/code\u003e element with the provided parameters.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8centeredAA8CenteredVyF":{"name":"centered()","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Centered.html\"\u003eCentered\u003c/a\u003e\u003c/code\u003e element to center it within its parent.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if_4thenAaB_pSb_AaB_pxXEtF":{"name":"if(_:then:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003emodify\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if_4then4elseAaB_pSb_AaB_pxXEAaB_pxXEtF":{"name":"if(_:then:else:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003ethen\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if3let4thenAaB_pqd__Sg_AaB_pqd___xtXEtlF":{"name":"if(let:then:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003emodify\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE2if3let4then4elseAaB_pqd__Sg_AaB_pqd___xtXEAaB_pxXEtlF":{"name":"if(let:then:else:)","abstract":"\u003cp\u003eReturns a new element from the provided \u003ccode\u003ethen\u003c/code\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE3mapyAaB_pAaB_pxXEF":{"name":"map(_:)","abstract":"\u003cp\u003eCreates and returns a new element by passing the","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6modifyyAaB_pyxzXEF":{"name":"modify(_:)","abstract":"\u003cp\u003eCreates and returns a new element by passing the","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo11aspectRatio11contentModeAA017ConstrainedAspectG0VAA0kG0V_AH07ContentI0OtF":{"name":"constrainedTo(aspectRatio:contentMode:)","abstract":"\u003cp\u003eConstrains the element to the provided aspect ratio.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo5width6heightAA15ConstrainedSizeVAH10ConstraintO_AJtF":{"name":"constrainedTo(width:height:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided width and height.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo5width6heightAA15ConstrainedSizeV14CoreFoundation7CGFloatV_AKtF":{"name":"constrainedTo(width:height:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided width and height.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE13constrainedTo4sizeAA15ConstrainedSizeVSo6CGSizeV_tF":{"name":"constrainedTo(size:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided size.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11constrained2toAA15ConstrainedSizeVAA0G10ConstraintV_tF":{"name":"constrained(to:)","abstract":"\u003cp\u003eConstrains the measured size of the element to the provided \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SizeConstraint.html\"\u003eSizeConstraint\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8decorate8layering8position4withAaB_pAA8DecorateV8LayeringO_AI8PositionVAaB_pyXEtF":{"name":"decorate(layering:position:with:)","abstract":"\u003cp\u003ePlaces a decoration element behind or in front of the given \u003ccode\u003ewrapped\u003c/code\u003e element,","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE9flowChild3keyAA4FlowV0E0Vs11AnyHashableVSg_tF":{"name":"flowChild(key:)","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Flow/Child.html\"\u003eFlow.Child\u003c/a\u003e\u003c/code\u003e to allow customizing the item in the flow layout.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE12gridRowChild3key5widthAA04GridE0V0F0Vs11AnyHashableVSg_AH5WidthOtF":{"name":"gridRowChild(key:width:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003eGridRowChild\u003c/code\u003e in order to provide meta information that a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/GridRow.html\"\u003eGridRow\u003c/a\u003e\u003c/code\u003e can aply to its layout.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6hiddenyAA6HiddenVSbF":{"name":"hidden(_:)","abstract":"\u003cp\u003eConditionally hide the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset3top6bottom4left5rightAA5InsetV14CoreFoundation7CGFloatV_A3MtF":{"name":"inset(top:bottom:left:right:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset2byAA5InsetVSo12UIEdgeInsetsV_tF":{"name":"inset(by:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset7uniformAA5InsetV14CoreFoundation7CGFloatV_tF":{"name":"inset(uniform:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5inset10horizontal8verticalAA5InsetV14CoreFoundation7CGFloatV_AKtF":{"name":"inset(horizontal:vertical:)","abstract":"\u003cp\u003eInsets the element by the given amount on each side.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE5keyedyAA5KeyedVs11AnyHashableVF":{"name":"keyed(_:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Keyed.html\"\u003eKeyed\u003c/a\u003e\u003c/code\u003e allows providing a \u003ccode\u003eHashable\u003c/code\u003e value which is used","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE8onAppearyAA17LifecycleObserverVyycF":{"name":"onAppear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element appears.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11onDisappearyAA17LifecycleObserverVyycF":{"name":"onDisappear(_:)","abstract":"\u003cp\u003eAdds a hook that will be called when this element disappears.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7opacityyAA7OpacityV14CoreFoundation7CGFloatVF":{"name":"opacity(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Opacity.html\"\u003eOpacity\u003c/a\u003e\u003c/code\u003e element with the provided opacity.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE12overlayChild3keyAA7OverlayV0E0Vs11AnyHashableVSg_tF":{"name":"overlayChild(key:)","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE16stackLayoutChild8priority14alignmentGuide3keyAA05StackE0V0F0VAK8PriorityO_14CoreFoundation7CGFloatVAA0C10DimensionsVcSgs11AnyHashableVSgtF":{"name":"stackLayoutChild(priority:alignmentGuide:key:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child.html\"\u003eStackLayout.Child\u003c/a\u003e\u003c/code\u003e in order to customize \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Traits.html\"\u003eStackLayout.Traits\u003c/a\u003e\u003c/code\u003e and the key.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE16stackLayoutChild8priorityAA05StackE0V0F0VAI8PriorityO_tF":{"name":"stackLayoutChild(priority:)","abstract":"\u003cp\u003eWraps an element with a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child.html\"\u003eStackLayout.Child\u003c/a\u003e\u003c/code\u003e in order to customize the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/StackLayout/Child/Priority.html\"\u003eStackLayout.Child.Priority\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE18tintAdjustmentModeyAA04TinteF0VSo06UIViewgeF0VF":{"name":"tintAdjustmentMode(_:)","abstract":"\u003cp\u003eConditionally modifies the tint adjustment mode of its wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11transformedyAA11TransformedVSo13CATransform3DVF":{"name":"transformed(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element with the provided 3D transform.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE11transformedyAA11TransformedVSo17CGAffineTransformVF":{"name":"transformed(_:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element with the provided 2D transform.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE10translated10translateX0E1Y0E1ZAA11TransformedV14CoreFoundation7CGFloatV_A2LtF":{"name":"translated(translateX:translateY:translateZ:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that translates the receiver in 3D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE7rotated2byAA11TransformedV10Foundation11MeasurementVySo11NSUnitAngleCG_tF":{"name":"rotated(by:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that rotates the receiver in 2D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE6scaled6scaleX0E1YAA11TransformedV14CoreFoundation7CGFloatV_AKtF":{"name":"scaled(scaleX:scaleY:)","abstract":"\u003cp\u003eWraps the element in an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/Transformed.html\"\u003eTransformed\u003c/a\u003e\u003c/code\u003e element that scales the receiver in 2D space.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementPAAE22userInteractionEnabledyAA04UsereF0VSbF":{"name":"userInteractionEnabled(_:)","abstract":"\u003cp\u003eConditionally enable user interaction of the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE18blockAccessibility10isBlockingAD0G7BlockerVSb_tF":{"name":"blockAccessibility(isBlocking:)","abstract":"\u003cp\u003eBlocks all accessibility on the element, so that it is","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE22accessibilityContainer10identifierAaB_pSSSg_tF":{"name":"accessibilityContainer(identifier:)","abstract":"\u003cp\u003eActs as an accessibility container for any subviews","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE013accessibilityC05label5value6traits4hint10identifier0F9FrameSize0fL11CornerStyle13customActions0P7ContentAD013AccessibilityC0VSSSg_AQShyAP5TraitOGA2QSo6CGSizeVSgAD3BoxV0nO0OSayAP12CustomActionVGSayAP0wR0VGtF":{"name":"accessibilityElement(label:value:traits:hint:identifier:accessibilityFrameSize:accessibilityFrameCornerStyle:customActions:customContent:)","abstract":"\u003cp\u003eWraps the receiver in an accessibility element with the provided values.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE13accessibility5label5value4hint10identifier6traits0F9FrameSizeAD013AccessibilityC0VSSSg_A3NShyAM5TraitOGSo6CGSizeVSgtF":{"name":"accessibility(label:value:hint:identifier:traits:accessibilityFrameSize:)","abstract":"\u003cp\u003eWraps the receiver in an accessibility element with the provided values.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE18accessibilityFocus2onAaB_pAD013AccessibilityG0V7TriggerC_tF":{"name":"accessibilityFocus(on:)","abstract":"\u003cp\u003eEnables VoiceOver focus to jump to the wrapped element via the trigger.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE12onLinkTappedyAaB_py10Foundation3URLVcF":{"name":"onLinkTapped(_:)","abstract":"\u003cp\u003eHandle links opened in any \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AttributedLabel.html\"\u003eAttributedLabel\u003c/a\u003e\u003c/code\u003e within this element using the provided closure.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE3box10background7corners11cornerCurve7borders6shadow12clipsContentAD3BoxVSo7UIColorC_AM11CornerStyleOAM0qJ0OAM06BorderR0OAM06ShadowR0OSbtF":{"name":"box(background:corners:cornerCurve:borders:shadow:clipsContent:)","abstract":"\u003cp\u003eWraps the element in a box to provide basic styling.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE11editingMenu4show4withAD07EditingG0VAI7GestureO_SayAD0jG4ItemVGyXEtF":{"name":"editingMenu(show:with:)","abstract":"\u003cp\u003eAllows showing the system\u0026rsquo;s \u003ccode\u003eUIMenuController\u003c/code\u003e editing menu upon long press of the wrapped element.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10scrollable_9configureAD10ScrollViewVAH11ContentSizeO_yAHzXEtF":{"name":"scrollable(_:configure:)","abstract":"\u003cp\u003eWraps the element in a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ScrollView.html\"\u003eScrollView\u003c/a\u003e\u003c/code\u003e to allow it to be scrolled","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE8tappable5onTapAD8TappableVyyc_tF":{"name":"tappable(onTap:)","abstract":"\u003cp\u003eWraps the element and calls the provided closure when tapped.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10transition8onAppear0G9Disappear0G6LayoutAD19TransitionContainerVAA010VisibilityK0VSg_AmA0jK0OtF":{"name":"transition(onAppear:onDisappear:onLayout:)","abstract":"\u003cp\u003eWraps the element in a transition container to provide an animated transition.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html#/s:11BlueprintUI7ElementP0A16UICommonControlsE10transitionyAD19TransitionContainerVAA010VisibilityG0VF":{"name":"transition(_:)","abstract":"\u003cp\u003eWraps the element in a transition container to provide an animated transition when its visibility changes.\u003c/p\u003e","parent_name":"Element"},"Protocols/Element.html":{"name":"Element","abstract":"\u003cp\u003eConforming types represent a rectangular content area in a two-dimensional"},"Protocols/ProxyElement.html":{"name":"ProxyElement","abstract":"\u003cp\u003eCustom elements commonly use another element to actually display content. For example, a profile element might"},"Structs/ElementContent.html":{"name":"ElementContent","abstract":"\u003cp\u003eRepresents the content of an element.\u003c/p\u003e"},"Structs/ViewDescription.html":{"name":"ViewDescription","abstract":"\u003cp\u003eContains a \u003cem\u003edescription\u003c/em\u003e of a UIView instance. A description includes"},"Enums/LayoutTransition.html":{"name":"LayoutTransition","abstract":"\u003cp\u003eThe transition used when layout attributes change for a view during an"},"Structs/VisibilityTransition.html":{"name":"VisibilityTransition","abstract":"\u003cp\u003eThe transition used when a view is inserted or removed during an update cycle.\u003c/p\u003e"},"Creating%20Custom%20Elements.html":{"name":"Creating Custom Elements"},"Displaying%20Elements.html":{"name":"Displaying Elements"},"Common%20Elements.html":{"name":"Common Elements"},"Environment.html":{"name":"Environment"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Extensions.html":{"name":"Extensions","abstract":"\u003cp\u003eThe following extensions are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"},"Typealiases.html":{"name":"Type Aliases","abstract":"\u003cp\u003eThe following type aliases are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/undocumented.json b/undocumented.json new file mode 100644 index 000000000..872bd0f41 --- /dev/null +++ b/undocumented.json @@ -0,0 +1,6 @@ +{ + "warnings": [ + + ], + "source_directory": "/Users/runner/work/Blueprint/Blueprint" +} \ No newline at end of file