import { defineComponent, getCurrentInstance, createCommentVNode } from 'vue';
import { useGraphics } from '../composables';
import { image, scale, pixelOffset, eyeOffset, horizontalOrigin, verticalOrigin, heightReference, color, rotation, alignedAxis, sizeInMeters, width, height, scaleByDistance, translucencyByDistance, pixelOffsetScaleByDistance, disableDepthTestDistance, show, distanceDisplayCondition, imageSubRegion, dimensions, fill, material, outline, outlineColor, outlineWidth, shadows, positions, extrudedHeight, extrudedHeightReference, cornerType, granularity, classificationType, zIndex, length, topRadius, bottomRadius, numberOfVerticalLines, slices, semiMajorAxis, semiMinorAxis, stRotation, radii, innerRadii, minimumClock, maximumClock, minimumCone, maximumCone, stackPartitions, slicePartitions, subdivisions, text, font, labelStyle, showBackground, backgroundColor, backgroundPadding, fillColor, uri, minimumPixelSize, maximumScale, incrementallyLoadTextures, runAnimations, clampAnimations, silhouetteColor, silhouetteSize, colorBlendMode, colorBlendAmount, imageBasedLightingFactor, lightColor, nodeTransformations, articulations, clippingPlanes, plane, pixelSize, hierarchy, perPositionHeight, closeTop, closeBottom, arcType, depthFailMaterial, clampToGround, shape, coordinates, maximumScreenSpaceError, minimumHeights, maximumHeights } from '../utils/cesium-props';
import { kebabCase } from '../utils/util';
import { makeCartesian2 } from '../utils/cesium-helpers';

var VcGraphicsBillboard = defineComponent({
    name: 'VcGraphicsBillboard',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, image), scale), pixelOffset), eyeOffset), horizontalOrigin), verticalOrigin), heightReference), color), rotation), alignedAxis), sizeInMeters), width), height), scaleByDistance), translucencyByDistance), pixelOffsetScaleByDistance), disableDepthTestDistance), show), distanceDisplayCondition), imageSubRegion),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'BillboardGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsBox = defineComponent({
    name: 'VcGraphicsBox',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), dimensions), heightReference), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'BoxGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsCorridor = defineComponent({
    name: 'VcGraphicsCorridor',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), positions), width), height), heightReference), extrudedHeight), extrudedHeightReference), cornerType), granularity), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition), classificationType), zIndex),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'CorridorGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsCylinder = defineComponent({
    name: 'VcGraphicsCylinder',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), length), topRadius), bottomRadius), heightReference), fill), material), outline), outlineColor), outlineWidth), numberOfVerticalLines), slices), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'CylinderGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsEllipse = defineComponent({
    name: 'VcGraphicsEllipse',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), semiMajorAxis), semiMinorAxis), height), heightReference), extrudedHeight), extrudedHeightReference), rotation), stRotation), granularity), fill), material), outline), outlineColor), outlineWidth), numberOfVerticalLines), shadows), distanceDisplayCondition), classificationType), zIndex),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'EllipseGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsEllipsoid = defineComponent({
    name: 'VcGraphicsEllipsoid',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), radii), innerRadii), minimumClock), maximumClock), minimumCone), maximumCone), heightReference), fill), material), outline), outlineColor), outlineWidth), stackPartitions), slicePartitions), subdivisions), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'EllipsoidGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsLabel = defineComponent({
    name: 'VcGraphicsLabel',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), text), font), labelStyle), scale), showBackground), backgroundColor), backgroundPadding), pixelOffset), eyeOffset), horizontalOrigin), verticalOrigin), heightReference), fillColor), outlineColor), outlineWidth), translucencyByDistance), pixelOffsetScaleByDistance), scaleByDistance), distanceDisplayCondition), disableDepthTestDistance),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'LabelGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsModel = defineComponent({
    name: 'VcGraphicsModel',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), uri), scale), minimumPixelSize), maximumScale), incrementallyLoadTextures), runAnimations), clampAnimations), shadows), heightReference), silhouetteColor), silhouetteSize), color), colorBlendMode), colorBlendAmount), imageBasedLightingFactor), lightColor), distanceDisplayCondition), nodeTransformations), articulations), clippingPlanes),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'ModelGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsPath = defineComponent({
    name: 'VcGraphicsPath',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), { leadTime: [Number, Object, Function], trailTime: [Number, Object, Function] }), width), { resolution: {
            type: [Number, Object, Function],
            default: 60
        } }), material), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PathGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsPlane = defineComponent({
    name: 'VcGraphicsPlane',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), plane), { dimensions: {
            type: [Object, Array, Function],
            watcherOptions: {
                cesiumObjectBuilder: makeCartesian2
            }
        } }), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PlaneGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsPoint = defineComponent({
    name: 'VcGraphicsPoint',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), pixelSize), heightReference), color), outlineColor), outlineWidth), scaleByDistance), translucencyByDistance), distanceDisplayCondition), disableDepthTestDistance),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PointGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsPolygon = defineComponent({
    name: 'VcGraphicsPolygon',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), hierarchy), height), heightReference), extrudedHeight), extrudedHeightReference), stRotation), granularity), fill), material), outline), outlineColor), outlineWidth), perPositionHeight), closeTop), closeBottom), arcType), shadows), distanceDisplayCondition), classificationType), zIndex),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PolygonGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsPolyline = defineComponent({
    name: 'VcGraphicsPolyline',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), positions), width), granularity), material), depthFailMaterial), arcType), clampToGround), shadows), distanceDisplayCondition), classificationType), zIndex),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PolylineGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode();
    }
});

var VcGraphicsPolylineVolume = defineComponent({
    name: 'VcGraphicsPolylineVolume',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), positions), shape), cornerType), granularity), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'PolylineVolumeGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsRectangle = defineComponent({
    name: 'VcGraphicsRectangle',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), coordinates), height), heightReference), extrudedHeight), extrudedHeightReference), rotation), stRotation), granularity), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition), classificationType), zIndex),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'RectangleGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsTileset = defineComponent({
    name: 'VcGraphicsTileset',
    props: Object.assign(Object.assign(Object.assign({}, show), uri), maximumScreenSpaceError),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'Cesium3DTilesetGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

var VcGraphicsWall = defineComponent({
    name: 'VcGraphicsWall',
    props: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, show), positions), minimumHeights), maximumHeights), granularity), fill), material), outline), outlineColor), outlineWidth), shadows), distanceDisplayCondition),
    emits: ['beforeLoad', 'ready', 'destroyed'],
    setup(props, ctx) {
        const instance = getCurrentInstance();
        instance.cesiumClass = 'WallGraphics';
        useGraphics(props, ctx, instance);
        return () => createCommentVNode(kebabCase(instance.proxy.$options.name));
    }
});

const components = [
    VcGraphicsBillboard,
    VcGraphicsBox,
    VcGraphicsCorridor,
    VcGraphicsCylinder,
    VcGraphicsEllipse,
    VcGraphicsEllipsoid,
    VcGraphicsLabel,
    VcGraphicsModel,
    VcGraphicsPath,
    VcGraphicsPlane,
    VcGraphicsPoint,
    VcGraphicsPolygon,
    VcGraphicsPolyline,
    VcGraphicsPolylineVolume,
    VcGraphicsRectangle,
    VcGraphicsTileset,
    VcGraphicsWall
];
const install = (app) => {
    components.forEach(cmp => {
        app.component(cmp.name, cmp);
    });
};
var index = {
    install
};

export default index;
export { VcGraphicsBillboard, VcGraphicsBox, VcGraphicsCorridor, VcGraphicsCylinder, VcGraphicsEllipse, VcGraphicsEllipsoid, VcGraphicsLabel, VcGraphicsModel, VcGraphicsPath, VcGraphicsPlane, VcGraphicsPoint, VcGraphicsPolygon, VcGraphicsPolyline, VcGraphicsPolylineVolume, VcGraphicsRectangle, VcGraphicsTileset, VcGraphicsWall };
