// TODO: move backend types to constants and import from there import { DeviceType as DeviceTypeMap, comparators as ComparatorsMap, dataTypes as DataTypesMap, } from '@adalo/constants' import { ImageResizeMode, LayoutChangeEvent } from 'react-native' export type DeviceType = typeof DeviceTypeMap[keyof typeof DeviceTypeMap] export type Comparator = | typeof ComparatorsMap[keyof typeof ComparatorsMap] | undefined export type DataType = typeof DataTypesMap[keyof typeof DataTypesMap] export type ImageResizeModeForBlurhash = Exclude export interface BlurhashMetadataRemote { urlHash: string blurHash: string blurHashWidth: number width: number height: number } export interface BlurhashMetadataLocal { blurHash: string width: number height: number blurHashWidth: number blurHashHeight: number resizeMode: ImageResizeModeForBlurhash } export interface Attributes { name: string variableHeight: boolean zIndex: number width: number height: number y: number x: number borderWidth?: number updatedPosition?: { x: number y: number } imageType?: string filename1x?: { url: string metadata?: BlurhashMetadataRemote } imageBinding?: { options?: { placeholderImage?: string placeholderImageEnabled?: boolean placeholderImageMetadata?: BlurhashMetadataRemote } } imageResize?: ImageResizeMode // Custom List attributes columnCount?: number rowMargin?: number masonry?: boolean // for LIBRARY_COMPONENT type libraryName: string componentName: string } export interface RunnerObject { shared: { [DeviceTypeMap.MOBILE]: boolean [DeviceTypeMap.TABLET]: boolean [DeviceTypeMap.DESKTOP]: boolean } id: string attributes: Attributes type: string children: RunnerObject[] layout: Layout buildLayoutMetadata: BuildLayoutMetadata positioning: string responsivity?: { horizontalPositioning: string verticalPositioning: string horizontalScaling: string verticalScaling: string } } export type TransformValue = { translateX: number } | { translateY: number } export interface Layout { width?: string | number height?: string | number left?: string | number top?: number | string bottom?: string | number right?: string | number marginLeft?: string | number marginTop?: string | number marginBottom?: string | number position?: 'absolute' | 'relative' transform?: TransformValue[] zIndex?: number overflow?: 'hidden' | 'visible' } export interface BuildLayoutMetadata { minwidth?: number minwidthLeft?: string // percentage minwidthMarginLeft?: number // TODO(michael-adalo): could support percentage in future maxwidth?: number maxwidthLeft?: string // percentage maxwidthMarginLeft?: number // TODO(michael-adalo): could support percentage in future } export interface LayoutMetadata { derivedWidth?: number minwidthConstrained?: boolean maxwidthConstrained?: boolean type: string columnCount?: Attributes['columnCount'] rowMargin?: Attributes['rowMargin'] masonry?: boolean index?: number } export interface Screen { id: string height: number statusBarStyle: string } export interface LayoutGuides { top: number bottom: number } export enum ComponentFixedPosition { TOP = 'TOP', BOTTOM = 'BOTTOM', } export interface ImageBlurhashProps { object: RunnerObject source: string componentProps: any layout: LayoutChangeEvent['nativeEvent']['layout'] } export interface LibraryComponentManifest { childComponents?: Record[] defaultHeight: number defaultWidth: number displayName: string icon: string name: string props: Record[] resizeX?: boolean resizeY?: boolean [key: string]: any } export type Nullable = T | null export type Optional = T | undefined