Different result between plasmic preview with localhost/deploy

I have a project in which I registered code components and display them in Plasmic Studio via Plasmic Host. When developing in Plasmic and previewing the project within Plasmic, everything works correctly. However, if I run the local project and view the result, it is completely different, in fact it seems that my code components do not appear. In the same way, if I deploy my project in Vercel, the display is the same as when I view it locally. What I’m I missing of?

Plasmic Studio preview:

Localhost / vercel deployed view:

Hey @andres_murillo, when viewing content in Studio, we use the CSS styles present on the /plasmic-host page. Is it possible the pages aren’t loading the same CSS?

How can I make sure of that?

The styles appear to be being applied correctly. What doesn’t seem to be displaying well are the coded components. For example, the card that wraps the login form in the image is a coded component. In my local url, neither the card nor its content is displayed.

Got it. Yeah if you don’t see any content at all, maybe something is up with your component registration. Are you using loader or codegen?

I’m using loader.

I created a npm package in order to have all my code components there as a design system. That package is installed in my project. In studio, all code components are visible and function as expected. But only on local or deployed version is where this issue happens.

Example of a code component from my npm package:

import React from "react";
import registerComponent, {
    CodeComponentMeta,
} from "@plasmicapp/host/registerComponent";

import { Registerable } from "./registerable";
import { theme } from "antd";
import { Icon } from "./registerIcon";

interface DropdownItemProps {
    leftSection : any;
    rightSection : any;
    label : string;
    isSelected : boolean;
    onClick : any;
    onIsSelectedChange : any;
    className : string;
    selectedPosition : "left" | "right";
}

export const DropdownItem = ({
    leftSection,
    rightSection,
    label,
    isSelected,
    selectedPosition,
    onClick,
    className,
} : DropdownItemProps ) => {

    const { token } = theme.useToken();

    const dropdownItemStyles : React.CSSProperties = {
        display: "flex",
        flexDirection: "row",
        alignItems: "center",
        justifyContent: "center",
        padding: "0px 8px",
        gap: "12px",
        borderRadius: "4px",
        cursor: "pointer",
        transition : "all 0.3s ease-in-out",
        background : token.colorBgContainer,
        maxHeight : "34px",
        minHeight : "34px",
        margin : "2px",
    };

    const labelStyle : React.CSSProperties = {
        fontSize: "14px",
        fontWeight: isSelected ? "500" : "400",
        lineHeight: "20px",
        color: token.colorText,
        width: "100%",
        maxWidth: "100%",
        whiteSpace: "pre",
        textOverflow : "ellipsis",
        overflow : "hidden",
    };

    return (
        <div
            className={`dropdown-item ${className}`}
            style={dropdownItemStyles}
            onClick={ () => onClick() }
        >
            { (isSelected && selectedPosition === "left") && (
                <Icon
                    size={16}
                    variant="duotone"
                    icon="CheckCircle"
                    color={token.colorPrimary}
                />
            )}
            {leftSection}
            <p className="dropdown-item-label" style={labelStyle}>{label}</p>
            {rightSection}
            { (isSelected && selectedPosition === "right") && (
                <Icon
                    size={16}
                    variant="duotone"
                    icon="CheckCircle"
                    color={token.colorPrimary}
                />
            )}
        </div>
    );
};

export const dropdownItemMeta: CodeComponentMeta<DropdownItemProps> = {
    name: "DropdownItem",
    displayName: "Dropdown Item",
    states : {
        isSelected : {
            type : "writable",
            variableType : "boolean",
            valueProp : "isSelected",
            onChangeProp : "onIsSelectedChange",
        },
    },
    props: {
        label : {
            type : "string",
            defaultValue : "Dropdown Item",
        },
        isSelected : {
            type : "boolean",
            defaultValue : false,
        },
        selectedPosition : {
            type : "choice",
            options : ["left", "right"],
            defaultValue : "right",
            advanced : true,
        },
        rightSection : {
            type : "slot",
            hidePlaceholder : true,
        },
        leftSection : {
            type : "slot",
            defaultValue: [
                {
                    type: "component",
                    name: "Icon",
                },
            ],
            hidePlaceholder : true,
        },
        onClick : {
            type : "eventHandler",
            argTypes : [],
        },
        onIsSelectedChange : {
            type : "eventHandler",
            argTypes : [],
        },
    },
    importPath: "inprodi-design-system",
    importName: "DropdownItem",
};

export function registerDropdownItem(
    loader?: Registerable,
    customDropdownItemMeta?: CodeComponentMeta<DropdownItemProps>
) {
    const doRegisterComponent: typeof registerComponent = (...args) =>
        loader ? loader.registerComponent(...args) : registerComponent(...args);
    doRegisterComponent(DropdownItem, customDropdownItemMeta ?? dropdownItemMeta);
}

Example of how code components are registered in index of npm package:

import { Registerable } from "./registerable";
import { registerAdvancedTable } from "./registerAdvancedTable";
import { registerAdvancedTableCell } from "./registerAdvancedTableCell";
import { registerAdvancedTableColumn } from "./registerAdvancedTableColumn";
import { registerAutoComplete } from "./registerAutoComplete";
import { registerAvatar } from "./registerAvatar";
import { registerButton } from "./registerButton";
import { registerCard } from "./registerCard";
import { registerConfirmation } from "./registerConfirmation";
import { registerDivider } from "./registerDivider";
import { registerDrawer } from "./registerDrawer";
import { registerDropdown } from "./registerDropdown";
import { registerDropdownItem } from "./registerDropdownItem";
import { registerForm } from "./registerForm";
import { registerFormField } from "./registerFormField";
import { registerIcon } from "./registerIcon";
import { registerInput } from "./registerInput";
import { registerLayout } from "./registerLayout";
import { registerPasswordInput } from "./registerPasswordInput";
import { registerProgress } from "./registerProgress";
import { registerRate } from "./registerRate";
import { registerSegmented } from "./registerSegmented";
import { registerSelect } from "./registerSelect";
import { registerSkeleton } from "./registerSkeleton";
import { registerSlider } from "./registerSlider";
import { registerStat } from "./registerStat";
import { registerTag } from "./registerTag";

export function registerAll(loader?: Registerable) {
  registerTag(loader);
  registerStat(loader);
  registerCard(loader);
  registerForm(loader);
  registerIcon(loader);
  registerRate(loader);
  registerInput(loader);
  registerSelect(loader);
  registerDrawer(loader);
  registerAvatar(loader);
  registerButton(loader);
  registerLayout(loader);
  registerSlider(loader);
  registerDivider(loader);
  registerDropdown(loader);
  registerSkeleton(loader);
  registerProgress(loader);
  registerSegmented(loader);
  registerFormField(loader);
  registerConfirmation(loader);
  registerAutoComplete(loader);
  registerDropdownItem(loader);
  registerPasswordInput(loader);
  registerAdvancedTable(loader);
  registerAdvancedTableCell(loader);
  registerAdvancedTableColumn(loader);
};

For a reason, only in my local view is when this happens. Plasmic studio works perfectly in edit and preview mode.

Can you share a Vercel deploy URL? Maybe I can glean something from that.

There you go:

https://vizion-5hg886w05-inprodi-web-studios-projects.vercel.app/auth/login