internal List <AdaptiveElement> TransformBlocksToElements(IEnumerable <AdaptiveBlock> blocks, AdaptiveBlockTransformContext context)
        {
            List <AdaptiveElement> elements = new List <AdaptiveElement>();

            int count = blocks.Count();

            for (int i = 0; i < count; i++)
            {
                var b = blocks.ElementAt(i);

                if (b.Hints.Column && context.Transformer.Properties.AllowsColumns)
                {
                    var columnGroup  = blocks.Skip(i).TakeWhile(x => x.Hints.Column).ToList();
                    var innerContext = context.CloneForChildren(
                        isColumnContent: true);
                    elements.AddRange(TransformGroupAsColumnsToElements(columnGroup, innerContext));
                    i += columnGroup.Count - 1;
                }
                else if (b.Hints.FactSet && context.Transformer.Properties.AllowsFactSets)
                {
                    var factSetGroup = blocks.Skip(i).TakeWhile(x => x.Hints.FactSet).ToList();
                    var innerContext = context.CloneForChildren();
                    elements.AddRange(TransformGroupAsFactSetToElements(factSetGroup, innerContext));
                    i += factSetGroup.Count - 1;
                }
                else
                {
                    elements.AddRange(TransformBlockToElements(b, context.CloneForChildren()));
                }
            }

            return(elements);
        }
        internal List <AdaptiveElement> TransformInputsToElements(IEnumerable <BaseAdaptiveBlockElement> inputs, AdaptiveBlockTransformContext context)
        {
            List <AdaptiveElement> elements = new List <AdaptiveElement>();

            foreach (var input in inputs)
            {
                elements.AddRange(TransformBlockElementToElements(input, context.CloneForChildren()));
            }

            return(elements);
        }
        private List <AdaptiveElement> TransformGroupAsColumnsToElements(List <AdaptiveBlock> group, AdaptiveBlockTransformContext context)
        {
            AdaptiveColumnSet columnSet = new AdaptiveColumnSet();

            foreach (var block in group)
            {
                AdaptiveColumn column = new AdaptiveColumn();

                var innerContext = context.CloneForChildren(
                    isColumnContent: true);

                foreach (var el in context.Transformer.TransformBlockToElements(block, innerContext))
                {
                    column.Items.Add(el);
                }

                columnSet.Columns.Add(column);
            }

            return(new List <AdaptiveElement>()
            {
                columnSet
            });
        }