@superblocksteam/library 2.0.48-next.0 → 2.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{early-console-buffer-DWTLgla0.js → early-console-buffer-Bd5jqqBJ.js} +2 -2
- package/dist/{early-console-buffer-DWTLgla0.js.map → early-console-buffer-Bd5jqqBJ.js.map} +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -49
- package/dist/index.js.map +1 -1
- package/dist/{logs-DDh7Anxs.js → logs-BA3qqo2m.js} +2 -2
- package/dist/{logs-DDh7Anxs.js.map → logs-BA3qqo2m.js.map} +1 -1
- package/dist/{root-store-DSXdJ9lh.js → root-store-Cc3dO2jP.js} +14 -4
- package/dist/{root-store-DSXdJ9lh.js.map → root-store-Cc3dO2jP.js.map} +1 -1
- package/dist/root-store-xviorlO5.js +4 -0
- package/dist/utils-BVE4VhSk.js +3 -0
- package/dist/{utils-CCBWAYIM.js → utils-xmrGF_mk.js} +2 -2
- package/dist/{utils-CCBWAYIM.js.map → utils-xmrGF_mk.js.map} +1 -1
- package/package.json +2 -4
- package/dist/root-store-4FotQ8o2.js +0 -4
- package/dist/utils-BCrSLIhM.js +0 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["VERTICAL_ALIGNMENT_MAP: Record<\n VerticalAlignment<\"vertical\">,\n string\n>","HORIZONTAL_ALIGNMENT_MAP: Record<\n HorizontalAlignment<\"horizontal\">,\n string\n>","layoutStyle: CSSProperties","ThemeProvider: React.FC<\n React.PropsWithChildren<{\n theme: UserAccessibleTheme;\n }>\n>","useTheme","INSTANCE_ID_ATTRIBUTE","computed","ComponentInfoProvider: React.FC<\n React.PropsWithChildren<ComponentInfo>\n>","rootStore","instanceId","sourceId","BASE_THEME_EXISTING_APPS_PADDING: Padding","Dim","PADDING_PRESETS_V1_THEME: Record<\n PaddingPresetNameWithClassic,\n PaddingPreset\n>","PADDING_PRESETS_V3_THEME: Record<PaddingPresetName, PaddingPreset>","PADDING_PRESETS_BY_THEME_VERSION: Record<\n number,\n Record<PaddingPresetName, PaddingPreset>\n>","DEFAULT_TYPOGRAPHIES_LEGACY: Typographies","DEFAULT_TYPOGRAPHIES_NEW: Typographies","DEFAULT_TYPOGRAPHIES_BY_VERSION: Record<number, Typographies>","noBorder: (theme: UserAccessibleTheme) => Border","Dim","noBorderOject: (theme: UserAccessibleTheme) => PerSideBorder","EMPTY_RADIUS: PerCornerBorderRadius","DEFAULT_SYSTEM_RADIUS: PerCornerBorderRadius","BASE_THEME_V5: UserDefinedThemeWithTypography","BASE_THEMES_BY_VERSION: Record<\n number,\n UserDefinedThemeWithPalette\n>","styles: CSSProperties","border","borderRadius","Dim","padding","backgroundStyle: CSSProperties","useTheme","border","borderRadius","padding","rootStore","bindingIds: Record<string, Readonly<BindingIdentifier>>","getBinding","isEqual","ScopeProvider: React.FC<React.PropsWithChildren<State>>","rootStore","Component","useTheme","rootStore","LEGACY_AVAILABLE_FONTS: Record<string, FontFamily>","rule","INSTANCE_ID_ATTRIBUTE","border","borderRadius","Dim","spacing","padding","rootStore","shouldScrollContents","usePassthroughProps","useEditor","useTheme","useAlignmentStyles","containerStyle: CSSProperties","Button","ErrorIcon","CloseIcon","StyledClarkIcon: React.FC","ClarkIcon","ErrorMessage","rootStore","AiStarsIcon","ErrorBoundary","ActionsProvider: React.FC<\n React.PropsWithChildren<{\n actions: ReturnType<typeof createEntityActions>;\n }>\n>","INSTANCE_ID_ATTRIBUTE","cachedRect: DOMRect | null","context","updateEntity","rootStore","useTheme","rootStore","Dim","Component","loading","INSTANCE_ID_ATTRIBUTE","ErrorBoundary","ReactiveComponent","rootStore","rootStore","instanceRestrictions: Array<\n DropRestriction<DnDInstanceRestrictionParams>\n>","typeRestrictions: Array<DropRestriction<DnDTypeRestrictionParams>>","rootStore","safeDimensions: {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo; // TODO remove this once we get rid of legacy Icon widget\n }","Property","size","depth","editStore","targetNode: HTMLElement | null","defaultContext: InteractionContextType","context","throttle","timeoutId: ReturnType<typeof setTimeout>","rootStore","editorConfig","canResizeHeight","canResizeWidth","ErrorIcon","HideIcon","NamePill: ReturnType<typeof observer<NamePillProps>>","TooltipRoot","AiStarsIcon","NamePill","canResizeWidth","canResizeHeight","observer","components: { instanceId: SbInstance; sourceId: SbElement }[]","selectedRects: SelectionInfo[]","rootStore","hoveredPills: SbInstance[]","hoveredActual: SbInstance[]","INSTANCE_ID_ATTRIBUTE","rootStore","throttle","DropLayer","stableEffectOptions: UseStableEffectOptions","Dim","stableEffectOptions","context","stableEffectOptions: UseStableEffectOptions","widgetMeta: InternalRuntimeWidgetMeta","stableEffectOptions","metaChildren: Array<InternalChildElement>","reactChildren: Array<ReactNode>","EditWrapper","editStore","isEmpty","INSTANCE_ID_ATTRIBUTE","NO_CONTENT_ATTRIBUTE","InvisiblePattern","DroppableWidget","InteractionLayer","defaultBorderStyle: BorderStyleBlock","Dim","bodyTypeface: TextStyleBlock","defaultPadding: Padding","padding","builtinBodyTypeface: TextStyleBlock","EXCLUDED_PROPERTIES: Record<string, string[]>","CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>>","context","lines: string[]","prop","generatedInterfaces: string[]","derivedProps: Array<PropContainer>","metaProps: Array<PropContainer>","props","serverUrl: string","timeoutId: ReturnType<typeof setTimeout> | undefined","stopSocketHeartbeat: (() => void) | undefined","rootStore","operationAPI","stableEffectOptions: UseStableEffectOptions","Dim","rootStore","_processedTransactions","SbComponent","INSTANCE_ID_ATTRIBUTE","rootStore","instanceId","EditWrapper","Component","ReactiveComponent","defaultEditorConfig: EditorConfig","catalog: Catalog","config","Entity","editorConfig: EditorConfig","propertiesDefinition","Dim","rootStore","editorConfig","editorConfig: EditorConfig","propertiesDefinition","rootStore","allSections: Record<string, Section<any>>","propertiesDefinition","propertiesDefinition","StateVarPersistence","propertiesDefinition","rootStore","buildError: BuildError","ErrorMessage","rootStore","Property","properties: PropertyValues<any> & Record<string, PropertyInfo>","size","context: CreationContext","context","editorTemplateCreateRequest","baseProperties","otherComponentsUpdates","fixCursorSnapOffset: CollisionDetection","Property","Dim","rootStore","possibleNewComponentId: SbElement | undefined","pointerConfig: PointerSensorOptions","collisionDetection","runtimeEntitiesManager: RuntimeEntitiesManager","action","payload: ReparentRequest","payload: DeleteRequest","operation","asSetProperties: SetPropertiesRequest","payload: SetPropertiesRequest","rootStore","renameRequest: RenameElementRequest","SourceUpdateApi","editStore: EditStore","runtimeEntitiesManager: RuntimeEntitiesManager","entityManager: IEntityManager","componentsManager: ComponentRegistry","propertiesDefinition","allUpdates: Record<\n SbElement,\n {\n props?: Record<string, PropertyInfo<unknown>>;\n meta?: Record<string, unknown>;\n }\n >","propUpdates: Record<\n SbElement,\n Record<string, PropertyInfo<unknown>>\n >","metaUpdates: Record<SbElement, Record<string, unknown>>","lookup: Record<string, Prop<any, any>>","cachedGetters: Record<K, IComputedValue<T>>","computed","SB","rootStore","nameManager: NameManager","widgetChildren: Array<ChildElement>","acc","nameManager: NameManager","entityManager: IEntityManager","RuntimeWidgetsManager","ops: Record<SbElement, OptimisticAction[]>","changes","rootStore","rootStore","childRect","placeholders: StackPlaceholderPos[]","offsetPx: number","DEFAULT_PREVIEW_SIZE: typeof this._draggingWidgetSize","root: RootStore","Dim","canResizeWidth","canResizeHeight","properties: Record<string, PropertyInfo<unknown>>","Property","root: RootStore","editStore: EditStore","computed","UIStore","OperationManager","RuntimeEntitiesManager","PropertiesPanelManager","InteractionLayerManager","ConnectionManager","rootStore","useHotkeysOriginal","IframeConnected","handleInit: IframeEventHandler<\"sb-init\">","sourceUpdateApi","handleDragStart: IframeEventHandler<\"dragstart\">","rootStore","WithUserWrapper","timeout: NodeJS.Timeout","bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n >","updateActiveAgentsListener: IframeEventHandler<\n \"sb-update-active-agents\"\n >","retrievePropertyPanelPropsListener: IframeEventHandler<\n \"sb-retrieve-property-panel-props\"\n >","editOperationAcknowledgeListener: IframeEventHandler<\n \"sb-edit-operation-acknowledge\"\n >","updatePropertyWithEffectsListener: IframeEventHandler<\n \"sb-update-property-with-effects\"\n >","createComponentListener: IframeEventHandler<\n \"sb-create-component\"\n >","error","toggleLivePreviewListener: IframeEventHandler<\n \"sb-toggle-live-preview\"\n >","globalSyncListener: IframeEventHandler<\"sb-global-sync\">","navigateToListener: IframeEventHandler<\"route-change\">","generatePath","aiUpdatesListener: IframeEventHandler<\"ai-updates\">","action","sourceIds: SbElement[]","Auth0Wrapper","EmbedWrapper","timeout: NodeJS.Timeout","rootStore","bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n >","globalSyncListener: IframeEventHandler<\"sb-global-sync\">","navigateToListener: IframeEventHandler<\"route-change\">","generatePath","action","ErrorMessage","VARIABLES: Record<string, string>","VARIABLE_VALUES: Record<keyof typeof VARIABLES, string>","componentVariables: Record<string, string>","componentVariableValues: Record<string, string>","registry: Record<string, string>","loadApisIntoLibrary","Auth0Wrapper","EditorAuth0Wrapper","AppAuth0Wrapper","EmbedWrapper","EditorEmbedWrapper","AppEmbedWrapper","SbProvider","resolvePromiseListener: IframeEventHandler<\"resolve-promise\">","rejectPromiseListener: IframeEventHandler<\"reject-promise\">","finalUrl: string","logoutResult: any","Component","rootStore","Component","useThemeInternal","ErrorBoundary","mobxComputed","fn","ErrorMessage","useEditor","GeneralErrorImage","AppNotFoundImage","ServerError500Image","ForbiddenErrorImage","LoginErrorImage","ErrorComponent","EXPANDED: React.CSSProperties","useEditor","InteractionLayer","LibraryEarlyConsoleBuffer"],"sources":["../src/lib/user-facing/component-base/constants.ts","../src/lib/hooks/use-alignment-styles.tsx","../src/lib/internal-details/theme-context.tsx","../src/lib/user-facing/component-base/use-passthrough-props.ts","../src/lib/hooks/use-observer-memo.ts","../src/lib/internal-details/component-info-context.tsx","../src/lib/user-facing/hooks/use-editor.tsx","../src/lib/user-facing/themes/padding-constants.ts","../src/lib/user-facing/themes/typography-constants.ts","../src/lib/user-facing/themes/constants.ts","../src/lib/user-facing/themes/generate-class-name.ts","../src/lib/user-facing/themes/generate-border-styles.ts","../src/lib/user-facing/themes/generatedStyles/generate-padding-style.ts","../src/lib/user-facing/themes/generatedStyles/generate-component-styles.ts","../src/lib/user-facing/state/create-bindable-entity-proxy.ts","../src/lib/user-facing/state/create-scope.ts","../src/lib/hooks/use-stable-effect.ts","../src/lib/internal-details/scope/scope-context.tsx","../src/lib/internal-details/scope/scope.tsx","../src/lib/internal-details/scope/global.tsx","../src/lib/user-facing/themes/typeface-constants.ts","../src/lib/user-facing/themes/typefaces/utils.tsx","../src/lib/user-facing/styling/style-as-class.ts","../src/lib/user-facing/themes/utils.ts","../src/lib/user-facing/properties-panel/mixins/appearance-properties.ts","../src/lib/user-facing/properties-panel/mixins/appearance.ts","../src/lib/user-facing/properties-panel/mixins/layout-section.ts","../src/lib/user-facing/properties-panel/mixins/loading.ts","../src/lib/user-facing/components/stack/stack-classes.ts","../src/lib/user-facing/components/stack/index.tsx","../src/lib/user-facing/components/container/index.tsx","../src/lib/internal-details/internal-components/spinner.tsx","../src/lib/internal-details/css-constants.ts","../src/edit-mode/dnd/hooks/use-component-draggable.ts","../src/edit-mode/dnd/use-draggable-widget.ts","../src/lib/internal-details/draggable-context-provider.tsx","../src/lib/user-facing/assets/icons/close.svg","../src/lib/user-facing/layers.ts","../src/edit-mode/duplicated-name-popover.tsx","../src/lib/user-facing/assets/images/clark.svg","../src/lib/internal-details/internal-components/common.ts","../src/edit-mode/assets/ai-stars.svg","../src/lib/internal-details/internal-components/fix-with-clark-button.tsx","../src/lib/user-facing/component-base/error-boundary.tsx","../src/lib/internal-details/actions-context.tsx","../src/lib/internal-details/component-suspense-style-context.tsx","../src/lib/internal-details/entities-state.ts","../src/lib/internal-details/lib/evaluator/suspense-helpers.ts","../src/lib/internal-details/lib/evaluator/use-shallow-mobx-observer.ts","../src/lib/internal-details/lib/suspense/suspense-fallback.tsx","../src/lib/internal-details/remove-bindings.tsx","../src/lib/internal-details/reactive-component.tsx","../src/lib/internal-details/editor-reactive-component.tsx","../src/lib/utils/is-component-type-detached.ts","../src/lib/utils/widget-wrapper-naming.ts","../src/edit-mode/assets/canvasInvisible.svg","../src/edit-mode/dnd/hooks/use-component-droppable.ts","../src/edit-mode/interaction-utils.ts","../src/edit-mode/dnd/hooks/use-widget-node-ref.ts","../src/edit-mode/dnd/utils.ts","../src/edit-mode/dnd/droppable-widget.tsx","../src/edit-mode/hooks/use-right-click-menu.ts","../src/edit-mode/identifier-context.tsx","../src/edit-mode/interaction-layer/interaction-context.tsx","../src/lib/internal-details/lib/throttle.ts","../src/lib/user-facing/constants.ts","../src/edit-mode/dnd/stack-drop.tsx","../src/edit-mode/dnd/drop-layer.tsx","../src/edit-mode/extended-clickable-area.ts","../src/lib/user-facing/assets/icons/hide.svg","../src/edit-mode/resize-capabilities.ts","../src/edit-mode/interaction-layer/interaction-rect-name-pill.tsx","../src/edit-mode/interaction-layer/interaction-rect-actions.tsx","../src/edit-mode/interaction-layer/interaction-rect-handles.tsx","../src/edit-mode/interaction-layer/use-viewport-intersection.ts","../src/edit-mode/interaction-layer/interaction-rect.tsx","../src/edit-mode/interaction-layer/interaction-layer.tsx","../src/edit-mode/roots.tsx","../src/lib/internal-details/is-sb-component.tsx","../src/lib/utils/children.ts","../src/edit-mode/runtime-edit-tracking.ts","../src/edit-mode/edit-wrapper.tsx","../src/lib/user-facing/themes/generate-colors.ts","../src/lib/user-facing/themes/generate-typographies.ts","../src/lib/user-facing/themes/generate-theme.ts","../src/lib/user-facing/themes/default-theme.ts","../src/docs-utils/generate-docs-utils.ts","../src/edit-mode/async-socket.ts","../src/edit-mode/source-update-api.ts","../src/lib/internal-details/component-docs-service.ts","../src/lib/internal-details/identifier-normalizer.ts","../src/lib/internal-details/use-track-runtime-widget.ts","../src/lib/internal-details/sb-wrapper.tsx","../src/lib/user-facing/components/page/editor.ts","../src/lib/user-facing/components/page/props.ts","../src/lib/user-facing/components/page/index.tsx","../src/lib/user-facing/components/app/editor.ts","../src/lib/user-facing/components/app/props.ts","../src/lib/user-facing/components/app/index.tsx","../src/lib/user-facing/components/custom/register-custom-component.tsx","../src/lib/user-facing/entities/variable/props.ts","../src/lib/user-facing/entities/variable/index.ts","../src/lib/user-facing/entities/timer/props.ts","../src/lib/user-facing/entities/timer/index.ts","../src/lib/user-facing/entities/api/suspensible-api.ts","../src/lib/user-facing/entities/api/props.ts","../src/lib/user-facing/entities/api/index.ts","../src/lib/internal-details/lib/features/injected-features.ts","../src/edit-mode/build-error-notification.tsx","../src/edit-mode/dnd/is-nestable.ts","../src/edit-mode/create-component.ts","../src/edit-mode/dnd/collision-detection.ts","../src/edit-mode/dnd/handle-stack-drop.ts","../src/edit-mode/dnd/hooks/use-handle-dnd-events.ts","../src/edit-mode/dnd/dnd-provider.tsx","../src/edit-mode/dnd/new-components-drag-layer.tsx","../src/edit-mode/features/ai-store.ts","../src/edit-mode/features/connection-manager.ts","../src/edit-mode/features/interaction-layer-manager.ts","../src/edit-mode/features/operation-store.ts","../src/edit-mode/features/properties-panel-manager.ts","../src/lib/internal-details/lib/mobx-cached-getter.ts","../src/edit-mode/properties.ts","../src/edit-mode/features/runtime-widgets-manager.ts","../src/edit-mode/features/runtime-entities-manager.ts","../src/lib/utils/is-component-stacklike.ts","../src/lib/utils/get-component-layout.ts","../src/lib/utils/is-component-vstack.ts","../src/edit-mode/dnd/stack-utils.ts","../src/edit-mode/dnd/stack-store.ts","../src/edit-mode/features/drag-and-drop-store.ts","../src/edit-mode/features/resizing-store.ts","../src/edit-mode/features/ui-store.ts","../src/edit-mode/edit-store.ts","../src/lib/hooks/use-editor-hotkeys.ts","../src/lib/hooks/use-key-pressed.ts","../src/edit-mode/editor-hotkeys.tsx","../src/edit-mode/iframe-wrappers.tsx","../src/lib/internal-details/app-wrappers.tsx","../src/lib/internal-details/internal-components/error-boundary/index.tsx","../src/lib/internal-details/routing.ts","../src/lib/user-facing/styling/styles.ts","../src/lib/user-facing/sb-provider.tsx","../src/lib/user-facing/global-functions.ts","../src/lib/user-facing/hooks/use-popover-roots.ts","../src/lib/user-facing/components/page/register-page.ts","../src/lib/user-facing/components/app/register-app.tsx","../src/lib/internal-details/entities.ts","../src/lib/user-facing/hooks/use-update-properties.ts","../src/lib/user-facing/hooks/use-theme.tsx","../src/lib/user-facing/state/observable-computed.tsx","../src/lib/user-facing/state/computed.ts","../src/lib/internal-details/internal-components/route-load-error.tsx","../src/lib/user-facing/hooks/use-dialog-editing.tsx","../src/lib/user-facing/error-pages/constants.ts","../src/lib/user-facing/assets/images/errors/403-image.svg","../src/lib/user-facing/assets/images/errors/404-image.svg","../src/lib/user-facing/assets/images/errors/500-image.svg","../src/lib/user-facing/assets/images/errors/general-error.svg","../src/lib/user-facing/assets/images/errors/login-error.svg","../src/lib/user-facing/error-pages/error-component.tsx","../src/lib/user-facing/error-pages/page-not-found.tsx","../src/lib/user-facing/component-base/droppable-container.tsx","../src/lib/index.ts"],"sourcesContent":["export type ContainerLayout = \"vertical\" | \"horizontal\";\n\nexport type ContainerVariant = \"none\" | \"card\";\n\nexport type VerticalAlignment<\n LayoutType extends \"vertical\" | \"horizontal\" | undefined = undefined,\n> = LayoutType extends \"horizontal\"\n ? \"top\" | \"center\" | \"bottom\" | \"stretch\"\n : \"top\" | \"center\" | \"bottom\" | \"space-between\" | \"space-around\";\n\nexport type HorizontalAlignment<\n LayoutType extends \"vertical\" | \"horizontal\" | undefined = undefined,\n> = LayoutType extends \"vertical\"\n ? \"left\" | \"center\" | \"right\" | \"stretch\"\n : \"left\" | \"center\" | \"right\" | \"space-between\" | \"space-around\";\n\nexport const VERTICAL_ALIGNMENT_MAP: Record<\n VerticalAlignment<\"vertical\">,\n string\n> = {\n top: \"flex-start\",\n center: \"center\",\n bottom: \"flex-end\",\n \"space-between\": \"space-between\",\n \"space-around\": \"space-around\",\n};\n\nexport const HORIZONTAL_ALIGNMENT_MAP: Record<\n HorizontalAlignment<\"horizontal\">,\n string\n> = {\n left: \"flex-start\",\n center: \"center\",\n right: \"flex-end\",\n \"space-between\": \"space-between\",\n \"space-around\": \"space-around\",\n};\n","import {\n HORIZONTAL_ALIGNMENT_MAP,\n VERTICAL_ALIGNMENT_MAP,\n type VerticalAlignment,\n type HorizontalAlignment,\n} from \"../user-facing/component-base/constants.js\";\nimport type { ContainerLayout } from \"../user-facing/component-base/constants.js\";\nimport type { CSSProperties } from \"react\";\n\nconst useAlignmentStyles = ({\n layout,\n verticalAlign,\n horizontalAlign,\n}: {\n layout?: ContainerLayout;\n verticalAlign?: VerticalAlignment;\n horizontalAlign?: HorizontalAlignment;\n}) => {\n const layoutStyle: CSSProperties = {};\n\n if (layout === \"vertical\") {\n if (verticalAlign) {\n layoutStyle.justifyContent = VERTICAL_ALIGNMENT_MAP[verticalAlign];\n }\n if (horizontalAlign) {\n layoutStyle.alignItems = HORIZONTAL_ALIGNMENT_MAP[horizontalAlign];\n }\n } else if (layout === \"horizontal\") {\n if (horizontalAlign) {\n layoutStyle.justifyContent = HORIZONTAL_ALIGNMENT_MAP[horizontalAlign];\n }\n if (verticalAlign) {\n layoutStyle.alignItems = VERTICAL_ALIGNMENT_MAP[verticalAlign];\n }\n }\n\n return layoutStyle;\n};\n\nexport default useAlignmentStyles;\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\nconst ThemeContext = createContext<{\n theme: UserAccessibleTheme;\n}>(null!);\n\nexport const ThemeProvider: React.FC<\n React.PropsWithChildren<{\n theme: UserAccessibleTheme;\n }>\n> = ({ theme, children }) => {\n const value = useMemo(() => {\n return { theme };\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const useTheme = () => {\n return useContext(ThemeContext);\n};\n","import {\n ROOT_WIDGET_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_DISABLE_DND,\n} from \"@superblocksteam/library-shared\";\nimport { useMemo } from \"react\";\n\nexport type StrictElementPassthroughProps = React.HTMLAttributes<HTMLElement> &\n Record<`${string}-${string}`, any> & {\n ref?: (el: HTMLElement | null) => void;\n };\nexport type ElementPassthroughProps = Record<string, any>;\n\nconst PASSTHROUGH_KEYS = [\n \"type\",\n \"style\",\n \"data-test\",\n \"className\",\n SOURCE_ID_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_DISABLE_DND,\n];\n\nconst usePassthroughProps = (\n props: Record<string, unknown>,\n): ElementPassthroughProps => {\n const passThroughItems = PASSTHROUGH_KEYS.map((key) => props[key]);\n\n return useMemo(() => {\n return passThroughItems.reduce<ElementPassthroughProps>(\n (acc, item, index) => {\n if (item !== undefined) {\n const key = PASSTHROUGH_KEYS[index] as keyof ElementPassthroughProps;\n acc[key] =\n item as ElementPassthroughProps[keyof ElementPassthroughProps];\n }\n return acc;\n },\n {} as ElementPassthroughProps,\n );\n // the length of this array is fixed and corresponds to each potential passthrough\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, passThroughItems);\n};\n\nexport default usePassthroughProps;\n","import { computed, reaction } from \"mobx\";\nimport { useEffect, useMemo, useState, useRef } from \"react\";\nimport type { IComputedValue } from \"mobx\";\n\n/**\n * The component that uses this hook must be wrapped `observer`, otherwise state changes will not\n * cause this hook to re-run.\n */\nexport const useObserverMemo = <T>(fn: () => T, deps: any[]) => {\n return useMemo<IComputedValue<T>>(() => {\n return computed(fn);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps).get();\n};\n\n/**\n * Like useObserverMemo, but does not require the component to be wrapped in an observer.\n * It is recommended to use useObserverMemo instead.\n * @see useObserverMemo\n *\n * Note: This implementation uses MobX reactions to track both observable changes and\n * dependency changes.\n */\nexport const useStandaloneObserverMemo = <T>(fn: () => T, deps: any[]) => {\n const fnRef = useRef(fn);\n fnRef.current = fn;\n\n const [result, setResult] = useState<T>(fnRef.current);\n useEffect(\n () =>\n reaction(() => fnRef.current(), setResult, {\n fireImmediately: true,\n name: \"useStandaloneObserverMemo\",\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n deps,\n );\n\n return result;\n};\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ComponentInfo = {\n sourceId: SbElement;\n instanceId: SbInstance;\n name: string;\n};\n\nconst ComponentInfoContext = createContext<ComponentInfo>(null!);\n\nexport const ComponentInfoProvider: React.FC<\n React.PropsWithChildren<ComponentInfo>\n> = ({ sourceId, instanceId, name, children }) => {\n const componentInfo = useMemo(\n () => ({ sourceId, name, instanceId }),\n [sourceId, instanceId, name],\n );\n return (\n <ComponentInfoContext.Provider value={componentInfo}>\n {children}\n </ComponentInfoContext.Provider>\n );\n};\n\nexport const useComponentInfo = () => {\n return useContext(ComponentInfoContext);\n};\n","import { getEditStore } from \"../../../edit-mode/get-edit-store.js\";\nimport { useStandaloneObserverMemo } from \"../../hooks/use-observer-memo.js\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.jsx\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport type EditorFeatures = {\n /**\n * Whether drag and drop functionality is enabled\n */\n dragAndDrop: boolean;\n\n /**\n * Whether nudging elements with arrow keys is enabled\n */\n nudging: boolean;\n\n /**\n * The currently selected widget\n */\n selectWidget: SbInstance | null;\n};\n\nexport type FeatureState<T> = {\n value: T;\n set: (value: T) => void;\n};\n\nexport type RecordFeatureState<T> = {\n [K in keyof T]: FeatureState<T[K]>;\n};\n\ntype HookResult = {\n features: RecordFeatureState<EditorFeatures>;\n isEditing: boolean;\n};\n\n/**\n * Hook that provides access to editor-specific features.\n *\n * This hook allows you to control editor-only functionality on a per-widget basis.\n * Note: These features only work in editor mode and have no effect in deployed apps.\n *\n * @example\n * // Disable drag and drop for a widget\n * const { features } = useEditor();\n * features.dragAndDrop.set(false);\n *\n * // Disable nudging with arrow keys\n * features.nudging.set(false);\n */\nconst useEditor = (): HookResult => {\n // TODO (alex): use instanceId instead\n const { sourceId } = useComponentInfo();\n const result = useStandaloneObserverMemo(() => {\n const dndStore = rootStore.editStore?.ui.dnd;\n if (!dndStore) {\n // If we're not in edit mode, this is a no-op. However, this hook should still be part of the user-facing code\n return {\n features: {\n dragAndDrop: { value: false, set: () => {} },\n nudging: { value: false, set: () => {} },\n selectWidget: { value: null, set: () => {} },\n },\n isEditing: false,\n };\n }\n\n const editStore = getEditStore();\n\n // Get the instanceId for this component\n const instanceId =\n editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n\n const canDrag = instanceId ? dndStore.canDragWidget(instanceId) : false;\n const canNudge = instanceId ? dndStore.canNudgeWidget(instanceId) : false;\n\n const selectedInstanceIds = editStore.ui.getSelectedInstanceIds();\n return {\n features: {\n dragAndDrop: {\n value: canDrag,\n set: (value: boolean) => {\n dndStore.setWidgetFeatures(sourceId, {\n dragAndDrop: value,\n });\n },\n },\n nudging: {\n value: canNudge,\n set: (value: boolean) => {\n dndStore.setWidgetFeatures(sourceId, {\n nudging: value,\n });\n },\n },\n selectWidget: {\n value: selectedInstanceIds.length > 0 ? selectedInstanceIds[0] : null,\n set: (instanceId: SbInstance | null) => {\n if (instanceId) {\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (!sourceId) {\n return;\n }\n // this is for detached component to get selected when opened by trigger component or navigation side bar\n editStore.ui.selectWidget(instanceId);\n editStore.ui.setFocusedSourceId(sourceId);\n } else {\n editStore.ui.selectWidget(null);\n editStore.ui.setFocusedSourceId(null);\n }\n },\n },\n },\n isEditing: Boolean(editStore.isInitialized) && !editStore.isLivePreview,\n } satisfies HookResult;\n }, [sourceId]);\n return result;\n};\n\nexport default useEditor;\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\ntype PaddingPreset = {\n value: Padding;\n label: string;\n shortLabel?: string;\n};\n\ntype PaddingPresetName = \"none\" | \"small\" | \"medium\" | \"large\";\ntype PaddingPresetNameWithClassic = PaddingPresetName | \"classic\";\n\nexport const BASE_THEME_EXISTING_APPS_PADDING: Padding = {\n top: Dim.px(11),\n bottom: Dim.px(11),\n left: Dim.px(16),\n right: Dim.px(16),\n};\n\nconst PADDING_PRESETS_V1_THEME: Record<\n PaddingPresetNameWithClassic,\n PaddingPreset\n> = {\n none: {\n value: {\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n },\n label: \"None\",\n shortLabel: \"None\",\n },\n small: {\n value: {\n top: Dim.px(5),\n bottom: Dim.px(5),\n left: Dim.px(5),\n right: Dim.px(5),\n },\n label: \"Small (0.5x)\",\n shortLabel: \"S (0.5x)\",\n },\n medium: {\n value: {\n top: Dim.px(11),\n bottom: Dim.px(11),\n left: Dim.px(11),\n right: Dim.px(11),\n },\n label: \"Medium (1x)\",\n shortLabel: \"M (1x)\",\n },\n large: {\n value: {\n top: Dim.px(23),\n bottom: Dim.px(23),\n left: Dim.px(23),\n right: Dim.px(23),\n },\n label: \"Large (2x)\",\n shortLabel: \"L (2x)\",\n },\n classic: {\n value: BASE_THEME_EXISTING_APPS_PADDING,\n label: `Classic`,\n },\n};\n\nconst PADDING_PRESETS_V2_THEME = PADDING_PRESETS_V1_THEME;\n\nconst PADDING_PRESETS_V3_THEME: Record<PaddingPresetName, PaddingPreset> = {\n none: {\n value: {\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n },\n label: \"None (0px)\",\n shortLabel: \"None (0px)\",\n },\n small: {\n value: {\n top: Dim.px(6),\n bottom: Dim.px(6),\n left: Dim.px(6),\n right: Dim.px(6),\n },\n label: \"Small (6px)\",\n shortLabel: \"S (6px)\",\n },\n medium: {\n value: {\n top: Dim.px(12),\n bottom: Dim.px(12),\n left: Dim.px(12),\n right: Dim.px(12),\n },\n label: \"Medium (12px)\",\n shortLabel: \"M (12px)\",\n },\n large: {\n value: {\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n },\n label: \"Large (24px)\",\n shortLabel: \"L (24px)\",\n },\n};\n\nconst PADDING_PRESETS_V4_THEME = PADDING_PRESETS_V3_THEME;\nconst PADDING_PRESETS_V5_THEME = PADDING_PRESETS_V3_THEME;\n\nexport const PADDING_PRESETS_BY_THEME_VERSION: Record<\n number,\n Record<PaddingPresetName, PaddingPreset>\n> = {\n 1: PADDING_PRESETS_V1_THEME,\n 2: PADDING_PRESETS_V2_THEME,\n 3: PADDING_PRESETS_V3_THEME,\n 4: PADDING_PRESETS_V4_THEME,\n 5: PADDING_PRESETS_V5_THEME,\n};\n","import type {\n NonCustomTypography,\n TextStyleBlock,\n Typographies,\n} from \"@superblocksteam/library-shared/types\";\nimport type { DropdownOption } from \"@superblocksteam/shared\";\n\ntype PropertiesByTypography = Record<string, Array<keyof TextStyleBlock>>;\n\nexport const USER_SELECTABLE_VARIANTS: Array<NonCustomTypography> = [\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"body1\",\n \"body2\",\n \"body3\",\n \"label\",\n \"inputLabel\",\n \"inputText\",\n];\n\nexport const TYPOGRAPHY_KEYS: Array<keyof Omit<Typographies, \"custom\">> = [\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"body1\",\n \"body2\",\n \"body3\",\n \"label\",\n \"buttonLabel\",\n \"inputLabel\",\n \"inputText\",\n \"inputPlaceholder\",\n \"link\",\n \"code\",\n];\n\nexport const DEFAULT_INPUT_TEXT_STYLE_VARIANT: keyof Typographies = \"inputText\";\nexport const DEFAULT_HEADER_TEXT_STYLE_VARIANT: keyof Typographies = \"heading3\";\nexport const SB_CUSTOM_TEXT_STYLE = \"SB_CUSTOM_TEXT_STYLE\";\n\nexport type UnitOption = {\n label: string;\n value: string;\n numberless?: boolean;\n} & Partial<DropdownOption>;\n\nconst SCALE_HELP_TEXT_LINE_HEIGHT =\n \"A value to be multiplied by font size. Equivalent to unitless in CSS\";\nconst SCALE_HELP_TEXT_LETTER_SPACING =\n \"A value to be multiplied by font size. Equivalent to em in CSS\";\n\nconst PIXEL_OPTION: UnitOption = {\n label: \"Pixels\",\n value: \"px\",\n subText: \"Fixed value that remains constant\",\n};\n\nconst EM_OPTION: UnitOption = {\n label: \"Scale\",\n value: \"em\",\n subText: SCALE_HELP_TEXT_LETTER_SPACING,\n};\n\nconst SCALE_OPTION: UnitOption = {\n label: \"Scale\",\n value: \"\",\n subText: SCALE_HELP_TEXT_LINE_HEIGHT,\n};\n\nconst NORMAL_OPTION: UnitOption = {\n label: \"Normal\",\n value: \"normal\",\n numberless: true,\n subText: \"Browser default for the font family\",\n};\n\nexport const LINE_HEIGHT_UNIT_OPTIONS = [\n PIXEL_OPTION,\n SCALE_OPTION,\n NORMAL_OPTION,\n];\n\nexport const LETTER_SPACING_UNIT_OPTIONS = [\n PIXEL_OPTION,\n EM_OPTION,\n NORMAL_OPTION,\n];\n\nexport const TEXT_TRANSFORM_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Uppercase\", value: \"uppercase\" },\n { label: \"Lowercase\", value: \"lowercase\" },\n { label: \"Capitalize\", value: \"capitalize\" },\n];\n\nexport const FONT_WEIGHT_OPTIONS = [\n {\n label: \"Thin (100)\",\n value: 100,\n },\n {\n label: \"Extra light (200)\",\n value: 200,\n },\n {\n label: \"Light (300)\",\n value: 300,\n },\n {\n label: \"Normal (400)\",\n value: 400,\n },\n {\n label: \"Medium (500)\",\n value: 500,\n },\n {\n label: \"Semi-bold (600)\",\n value: 600,\n },\n {\n label: \"Bold (700)\",\n value: 700,\n },\n {\n label: \"Extra bold (800)\",\n value: 800,\n },\n {\n label: \"Black (900)\",\n value: 900,\n },\n];\n\nexport const FONT_STYLE_OPTIONS = [\n { label: \"Normal\", value: \"normal\" },\n { label: \"Italic\", value: \"italic\" },\n];\n\nexport const DISABLED_PROPERTIES_BY_TYPOGRAHY: PropertiesByTypography = {\n code: [\"textColor\"],\n};\n\nexport const LOCKED_PROPERTIES_BY_TYPOGRAHY: PropertiesByTypography = {\n link: [\n \"fontSize\",\n \"lineHeight\",\n \"fontFamily\",\n \"letterSpacing\",\n \"textTransform\",\n ],\n inputPlaceholder: [\n \"fontSize\",\n \"lineHeight\",\n \"fontFamily\",\n \"fontStyle\",\n \"letterSpacing\",\n \"textTransform\",\n ],\n buttonLabel: [\"textColor\"],\n};\n\nexport const LOCKED_TOOLTIP_BY_TYPOGRAPHY: Record<string, string> = {\n link: \"Inherited from the text in which the link is included\",\n inputPlaceholder:\n \"Inherited from the input text where the placeholder is shown\",\n buttonLabel: \"Inherited based on the button variant\",\n};\n\nexport const DEFAULT_TYPOGRAPHIES_LEGACY: Typographies = {\n heading1: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"36px\",\n fontWeight: 500,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading2: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"28px\",\n fontWeight: 500,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading3: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"22px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n lineHeight: \"26px\",\n },\n heading4: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"18px\",\n lineHeight: \"24px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n },\n heading5: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"16px\",\n lineHeight: 1.2,\n fontWeight: 500,\n letterSpacing: \"0em\",\n },\n heading6: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"14px\",\n lineHeight: \"16px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n },\n body1: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"16px\",\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: \"0em\",\n },\n body2: {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"16px\",\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n letterSpacing: \"normal\",\n },\n body3: {\n fontSize: \"12px\",\n fontWeight: 400,\n lineHeight: \"14px\",\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n letterSpacing: \"normal\",\n },\n label: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"13px\",\n fontWeight: 500,\n lineHeight: \"16px\",\n letterSpacing: \"normal\",\n },\n inputLabel: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n disabled: \"colors.neutral300\",\n error: \"colors.danger\",\n },\n fontSize: \"13px\",\n fontWeight: 500,\n lineHeight: 1.5,\n letterSpacing: \"normal\",\n },\n buttonLabel: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"primary500\",\n },\n fontSize: \"14px\",\n fontWeight: 500,\n lineHeight: \"16px\",\n letterSpacing: \"normal\",\n },\n inputText: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: 1.2,\n letterSpacing: \"normal\",\n },\n inputPlaceholder: {\n fontWeight: 400,\n textColor: {\n default: \"colors.neutral300\",\n },\n // everything else is inherited\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n lineHeight: \"inherit\",\n letterSpacing: \"inherit\",\n fontStyle: \"inherit\",\n textTransform: \"inherit\",\n textDecoration: \"inherit\",\n },\n link: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.primary500\",\n },\n fontSize: \"inherit\",\n fontWeight: 400,\n lineHeight: \"inherit\",\n textDecoration: \"none\",\n letterSpacing: \"inherit\",\n textTransform: \"inherit\",\n },\n code: {\n fontFamily: \"Roboto Mono\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"13px\",\n fontWeight: 400,\n lineHeight: 1.4,\n letterSpacing: \"normal\",\n },\n};\n\nexport const DEFAULT_TYPOGRAPHIES_NEW: Typographies = {\n ...DEFAULT_TYPOGRAPHIES_LEGACY,\n heading3: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading3,\n fontSize: \"24px\",\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading4: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading4,\n fontSize: \"20px\",\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n },\n heading6: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading6,\n lineHeight: 1.2,\n },\n body2: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.body2,\n lineHeight: 1.5,\n },\n body3: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.body3,\n lineHeight: 1.5,\n },\n label: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.label,\n lineHeight: 1.5,\n fontSize: \"14px\",\n },\n inputLabel: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.inputLabel,\n lineHeight: 1.5,\n fontSize: \"14px\",\n },\n buttonLabel: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.buttonLabel,\n lineHeight: 1.2,\n },\n code: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.code,\n lineHeight: 1.2,\n },\n};\n\nexport const DEFAULT_TYPOGRAPHIES_BY_VERSION: Record<number, Typographies> = {\n 1: DEFAULT_TYPOGRAPHIES_LEGACY,\n 2: DEFAULT_TYPOGRAPHIES_LEGACY,\n 3: DEFAULT_TYPOGRAPHIES_LEGACY,\n 4: DEFAULT_TYPOGRAPHIES_LEGACY,\n 5: DEFAULT_TYPOGRAPHIES_NEW,\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\n\nimport { ThemeMode } from \"@superblocksteam/library-shared/types\";\nimport { colors } from \"../styling/colors.js\";\nimport { PADDING_PRESETS_BY_THEME_VERSION } from \"./padding-constants.js\";\n\nimport { DEFAULT_TYPOGRAPHIES_NEW } from \"./typography-constants.js\";\nimport type {\n Border,\n PerCornerBorderRadius,\n PerSideBorder,\n Typographies,\n UserAccessibleTheme,\n UserDefinedPalette,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const CURRENT_THEME_VERSION = 5;\n\nexport const LIGHT_APP_BG = colors.GREY_25;\nexport const DARK_APP_BG = \"#131516\";\n\nconst DEFAULT_DARK_PALETTE = {\n primaryColor: colors.ACCENT_BLUE_500,\n appBackgroundColor: DARK_APP_BG,\n};\n\nconst DEFAULT_LIGHT_PALETTE = {\n primaryColor: colors.ACCENT_BLUE_500,\n appBackgroundColor: LIGHT_APP_BG,\n};\n\nexport const noBorder: (theme: UserAccessibleTheme) => Border = (theme) => ({\n width: Dim.px(0),\n style: \"solid\",\n color: theme.colors.neutral100,\n});\n\nconst onePixelTransparentBorder: () => Border = () => ({\n width: Dim.px(1),\n style: \"solid\",\n color: \"transparent\",\n});\n\nconst defaultContainerBorder: (theme: UserAccessibleTheme) => Border = (\n theme,\n) => ({\n width: Dim.px(1),\n style: \"solid\",\n color: theme.colors.neutral100,\n});\n\nexport const noBorderOject: (theme: UserAccessibleTheme) => PerSideBorder = (\n theme,\n) => ({\n left: noBorder(theme),\n right: noBorder(theme),\n top: noBorder(theme),\n bottom: noBorder(theme),\n});\n\nexport const onePixelTransparentBorderObject: () => PerSideBorder = () => ({\n left: onePixelTransparentBorder(),\n right: onePixelTransparentBorder(),\n top: onePixelTransparentBorder(),\n bottom: onePixelTransparentBorder(),\n});\n\nexport const EMPTY_RADIUS: PerCornerBorderRadius = {\n topLeft: Dim.px(0),\n topRight: Dim.px(0),\n bottomLeft: Dim.px(0),\n bottomRight: Dim.px(0),\n};\n\nexport const DEFAULT_SYSTEM_RADIUS: PerCornerBorderRadius = {\n topLeft: Dim.px(4),\n topRight: Dim.px(4),\n bottomLeft: Dim.px(4),\n bottomRight: Dim.px(4),\n};\n\nexport const defaultContainerBorderObject: (\n theme: UserAccessibleTheme,\n) => PerSideBorder = (theme) => ({\n left: defaultContainerBorder(theme),\n right: defaultContainerBorder(theme),\n top: defaultContainerBorder(theme),\n bottom: defaultContainerBorder(theme),\n});\n\nexport type UserDefinedThemeWithPalette = UserDefinedTheme & {\n palette: {\n dark: UserDefinedPalette;\n light: UserDefinedPalette;\n };\n};\n\ntype UserDefinedThemeWithTypography = UserDefinedThemeWithPalette & {\n typographies: Typographies; // make required\n};\n\nexport type UserDefinedThemeWithVersion = (\n | UserDefinedTheme\n | UserDefinedThemeWithPalette\n | UserDefinedThemeWithTypography\n) & {\n version: number;\n};\n\n// export const BASE_THEME_EXISTING_APPS: UserDefinedThemeWithPalette = {\n// typeFace: \"Roboto\",\n// borderRadius: { value: 4, mode: \"px\" },\n// mode: ThemeMode.LIGHT,\n// primaryColor: colors.ACCENT_BLUE_500,\n// padding: BASE_THEME_EXISTING_APPS_PADDING,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// version: 1,\n// };\n\n// BASE_THEME_EXISTING_APPS represents the styles used for apps before theming was released\n// const BASE_THEME_V1 = BASE_THEME_EXISTING_APPS;\n\n// const BASE_THEME_V2: UserDefinedThemeWithPalette = {\n// typeFace: \"Roboto\",\n// borderRadius: Dim.px(4),\n// mode: ThemeMode.AUTO,\n// primaryColor: colors.ACCENT_BLUE_500,\n// padding: PADDING_PRESETS_BY_THEME_VERSION[2].medium.value,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// version: 2,\n// };\n\n// const BASE_THEME_V3: UserDefinedThemeWithPalette = {\n// // Same as v2 except padding\n// typeFace: \"Roboto\",\n// borderRadius: { value: 4, mode: \"px\" },\n// mode: ThemeMode.AUTO,\n// primaryColor: colors.ACCENT_BLUE_500,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// padding: PADDING_PRESETS_BY_THEME_VERSION[3].medium.value,\n// version: 3,\n// };\n\n// with typography but using legacy typographies\n// const BASE_THEME_V4: UserDefinedThemeWithTypography = {\n// ...BASE_THEME_V3,\n// typographies: DEFAULT_TYPOGRAPHIES_LEGACY,\n// version: 4,\n// };\n\n// update typogrpahies to match new design system\nexport const BASE_THEME_V5: UserDefinedThemeWithTypography = {\n typeFace: \"Roboto\",\n borderRadius: Dim.px(8),\n mode: ThemeMode.LIGHT,\n primaryColor: colors.ACCENT_BLUE_500,\n padding: PADDING_PRESETS_BY_THEME_VERSION[5].medium.value,\n spacing: Dim.px(12),\n palette: {\n dark: DEFAULT_DARK_PALETTE,\n light: DEFAULT_LIGHT_PALETTE,\n },\n typographies: DEFAULT_TYPOGRAPHIES_NEW,\n version: 5,\n};\n\nexport const BASE_THEMES_BY_VERSION: Record<\n number,\n UserDefinedThemeWithPalette\n> = {\n // 1: BASE_THEME_V1,\n // 2: BASE_THEME_V2,\n // 3: BASE_THEME_V3,\n // 4: BASE_THEME_V4,\n 5: BASE_THEME_V5,\n};\n\nexport const BASE_THEME_NEW_APPS =\n BASE_THEMES_BY_VERSION[CURRENT_THEME_VERSION];\n\nexport const CODE_EDITOR_LIGHT_COLORS = {\n text: \"#2e383c\",\n comment: \"#c0c0c0\",\n property: \"#7a7a7a\",\n number: \"#ccabd4\",\n tag: \"#9c3328\",\n string: \"#18a0fb\",\n variable: \"#929adc\",\n keyword: \"#91c9e4\",\n builtin: \"#e5ab64\",\n};\n\nexport const CODE_EDITOR_DARK_COLORS = {\n text: \"#eaeaea\",\n comment: \"#7a7a7a\",\n property: \"#b3b3b3\",\n number: \"#f3b7f9\", // Brighter version of the previous color for contrast\n tag: \"#f76e61\", // Brightened for visibility against dark background\n string: \"#4fb7ff\", // A more luminous blue for better visibility\n variable: \"#b8b8ff\", // Brighter version for visibility\n keyword: \"#b1e4ff\", // A more luminous shade to stand out on dark\n builtin: \"#ffb68a\", // Brightened for better contrast\n};\n\nexport const LIGHT_MODE_NEUTRALS = [\n \"#FFFFFF\", // neutral\n \"#F9FAFB\", // 25\n \"#F3F4F6\", // 50\n \"#E8EAED\", // 100\n \"#C6CAD2\", // 200\n \"#A4AAB7\", // 300\n \"#818A9C\", // 400\n \"#6C7689\", // 500\n \"#454D5F\", // 700\n \"#1F2633\", // 900\n];\n\nexport const DARK_MODE_NEUTRALS = [\n \"#1C1F21\", // neutral\n \"#1E2224\", // 25\n \"#262A2C\", // 50\n \"#2F3437\", // 100\n \"#393F42\", // 200\n \"#545E63\", // 300\n \"#677379\", // 400\n \"#859197\", // 500\n \"#DEE1E3\", // 700\n \"#FFFFFF\", // 900\n];\n\nexport const BOX_SHADOWS = {\n popover: {\n light:\n \"0px 0px 1px 0px rgba(34, 39, 47, 0.32), 0px 12px 32px -8px rgba(34, 39, 47, 0.16), 0px 1px 3px 0px rgba(34, 39, 47, 0.12)\",\n dark: \"0px 0px 1px 0px rgba(200, 200, 200, 0.32), 0px 12px 32px -8px rgba(200, 200, 200, 0.16), 0px 1px 3px 0px rgba(200, 200, 200, 0.12)\",\n },\n modal: {\n light:\n \"0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05)\",\n dark: \"0 3px 6px -4px rgba(160, 160, 160, 0.03), 0 6px 16px 0 rgba(160, 160, 160, 0.01)\",\n },\n};\n\nexport const INPUT_PADDING = {\n left: Dim.px(10),\n right: Dim.px(10),\n top: Dim.px(8),\n bottom: Dim.px(8),\n};\n\nexport const DROPDOWN_PADDING = INPUT_PADDING;\nexport const BUTTON_PADDING = INPUT_PADDING;\n\nexport const KEY_VALUE_PADDING = {\n left: Dim.px(20),\n right: Dim.px(20),\n top: Dim.px(12),\n bottom: Dim.px(12),\n};\n\nexport const KEY_VALUE_SPACING = Dim.px(24);\n","// Before you change how this works\n// This className is used for the following:\n// 1. Resize bounds\n// 2. Property pane reference for positioning\n// superblocks_widget_0 is also used for setting background color of canvas root\nexport const generateClassName = (seed?: string) => {\n return `superblocks_widget_${seed}`;\n};\n\nexport const getCanvasClassName = () => \"canvas\";\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport type {\n PerSideBorder,\n PerCornerBorderRadius,\n} from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nexport const createPerSideBorder = ({\n color,\n width,\n}: {\n color: string;\n width: number;\n}): PerSideBorder => {\n const borderSide = {\n color,\n width: Dim.px(width),\n };\n\n return {\n top: borderSide,\n right: borderSide,\n bottom: borderSide,\n left: borderSide,\n };\n};\n\nexport const generateBorderStyleObject = ({\n border,\n fallbackBorderColor,\n borderRadius,\n overrideBorderColor,\n}: {\n border?: PerSideBorder;\n fallbackBorderColor?: string;\n borderRadius?: PerCornerBorderRadius;\n overrideBorderColor?: string;\n}): CSSProperties => {\n return {\n ...generateBorderWidthAndColorStyleObject({\n border,\n fallbackBorderColor,\n overrideBorderColor,\n }),\n ...generateBorderRadiusStyleObject({ borderRadius }),\n };\n};\n\nconst generateBorderWidthAndColorStyleObject = ({\n border,\n fallbackBorderColor,\n overrideBorderColor,\n}: {\n border?: PerSideBorder;\n fallbackBorderColor?: string;\n overrideBorderColor?: string;\n borderRadius?: PerCornerBorderRadius;\n}): CSSProperties => {\n const styles: CSSProperties = {};\n /**\n * In legacy code, `border` was undefined if not user set,\n * so PRIMARY_BUTTON got the fallbackBorderColor.\n * This is required for a consistent UX (set 1px solid same color as background when there is no user set border for Primary)\n *\n * We need to apply this in code-mode as well when there user did not set any border themselves.\n */\n if (!border && fallbackBorderColor) {\n styles.borderColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderTopColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderRightColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderBottomColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderLeftColor = overrideBorderColor ?? fallbackBorderColor;\n }\n\n if (border?.left) {\n styles.borderLeftColor =\n overrideBorderColor ?? border.left.color ?? fallbackBorderColor;\n styles.borderLeftWidth = border.left.width\n ? `${border.left.width.value ?? 0}${border.left.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderLeftStyle = border.left.style ?? \"solid\";\n }\n if (border?.right) {\n styles.borderRightColor =\n overrideBorderColor ?? border.right.color ?? fallbackBorderColor;\n styles.borderRightWidth = border.right.width\n ? `${border.right.width.value ?? 0}${border.right.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderRightStyle = border.right.style ?? \"solid\";\n }\n if (border?.top) {\n styles.borderTopColor =\n overrideBorderColor ?? border.top.color ?? fallbackBorderColor;\n styles.borderTopWidth = border.top.width\n ? `${border.top.width.value ?? 0}${border.top.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderTopStyle = border.top.style ?? \"solid\";\n }\n if (border?.bottom) {\n styles.borderBottomColor =\n overrideBorderColor ?? border.bottom.color ?? fallbackBorderColor;\n styles.borderBottomWidth = border.bottom.width\n ? `${border.bottom.width.value ?? 0}${border.bottom.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderBottomStyle = border.bottom.style ?? \"solid\";\n }\n return styles;\n};\n\nexport const generateBorderRadiusStyleObject = ({\n borderRadius,\n}: {\n borderRadius?: PerCornerBorderRadius;\n}): CSSProperties => {\n const styles: CSSProperties = {};\n if (borderRadius?.topLeft) {\n styles.borderTopLeftRadius = `${\n borderRadius.topLeft.value ?? 0\n }${borderRadius.topLeft.mode ?? \"px\"}`;\n }\n if (borderRadius?.topRight) {\n styles.borderTopRightRadius = `${\n borderRadius.topRight.value ?? 0\n }${borderRadius.topRight.mode ?? \"px\"}`;\n }\n if (borderRadius?.bottomLeft) {\n styles.borderBottomLeftRadius = `${\n borderRadius.bottomLeft.value ?? 0\n }${borderRadius.bottomLeft.mode ?? \"px\"}`;\n }\n if (borderRadius?.bottomRight) {\n styles.borderBottomRightRadius = `${\n borderRadius.bottomRight.value ?? 0\n }${borderRadius.bottomRight.mode ?? \"px\"}`;\n }\n return styles;\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { css } from \"styled-components\";\nimport { getVariableName } from \"./styles-utils.js\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\nimport type { CSSProperties } from \"react\";\n\nexport const ZERO_PADDING = {\n left: Dim.px(0),\n right: Dim.px(0),\n top: Dim.px(0),\n bottom: Dim.px(0),\n};\n\nexport const generatePaddingCss = (padding?: Padding) => css`\n padding-left: ${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"};\n padding-right: ${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"};\n padding-top: ${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"};\n padding-bottom: ${padding?.bottom?.value ?? 0}${padding?.bottom?.mode ?? \"px\"};\n`;\n\nexport const generatePaddingStyleObject = (\n padding?: Padding,\n): CSSProperties => ({\n paddingLeft: `${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"}`,\n paddingRight: `${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"}`,\n paddingTop: `${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"}`,\n paddingBottom: `${padding?.bottom?.value ?? 0}${\n padding?.bottom?.mode ?? \"px\"\n }`,\n});\n\nexport const INPUT_PADDING_TOP_NAME = \"padding-top\";\nexport const INPUT_PADDING_RIGHT_NAME = \"padding-right\";\nexport const INPUT_PADDING_BOTTOM_NAME = \"padding-bottom\";\nexport const INPUT_PADDING_LEFT_NAME = \"padding-left\";\n\nexport const generatePaddingVariableDeclarationCss = (prefix?: string) => `\n padding-left: var(${getVariableName(INPUT_PADDING_LEFT_NAME, prefix)});\n padding-right: var(${getVariableName(INPUT_PADDING_RIGHT_NAME, prefix)});\n padding-top: var(${getVariableName(INPUT_PADDING_TOP_NAME, prefix)});\n padding-bottom: var(${getVariableName(INPUT_PADDING_BOTTOM_NAME, prefix)});\n`;\n\nexport const generatePaddingVariableAssignmentStyleObject = (\n padding?: Padding,\n prefix?: string,\n): { [key: `--${string}`]: string } => ({\n [getVariableName(INPUT_PADDING_TOP_NAME, prefix)]:\n `${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_RIGHT_NAME, prefix)]:\n `${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_BOTTOM_NAME, prefix)]:\n `${padding?.bottom?.value ?? 0}${padding?.bottom?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_LEFT_NAME, prefix)]:\n `${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"}`,\n});\n","import { useMemo, type CSSProperties } from \"react\";\nimport { useTheme } from \"../../../internal-details/theme-context.js\";\nimport { generateBorderStyleObject } from \"../generate-border-styles.js\";\nimport { generatePaddingStyleObject } from \"./generate-padding-style.js\";\n\nimport type {\n GeneratedTheme,\n Padding,\n PerCornerBorderRadius,\n PerSideBorder,\n UserAccessibleTheme,\n} from \"@superblocksteam/library-shared/types\";\n\ntype StyleProps = {\n border?: PerSideBorder;\n borderRadius?: PerCornerBorderRadius;\n backgroundColor?: string;\n padding?: Padding;\n fallbackBorderColor?: string;\n};\n\nconst computeWrapperStyle = (\n props: StyleProps,\n): {\n borderStyle: CSSProperties;\n backgroundStyle: CSSProperties;\n paddingStyle: CSSProperties;\n allStyles: CSSProperties;\n} => {\n const borderStyle =\n generateBorderStyleObject({\n border: props.border,\n borderRadius: props.borderRadius,\n fallbackBorderColor: props.fallbackBorderColor,\n }) ?? {};\n\n const paddingStyle = generatePaddingStyleObject(props.padding) ?? {};\n\n const backgroundStyle: CSSProperties = {};\n if (props.backgroundColor) {\n // note, important that it's background rather than backgroundColor. This needs to match the defaultAppBg assigned in ModalComponent.tsx\n backgroundStyle.background = props.backgroundColor;\n }\n return {\n borderStyle,\n backgroundStyle,\n paddingStyle,\n allStyles: { ...borderStyle, ...backgroundStyle, ...paddingStyle },\n };\n};\n\nexport type ComputeStyleProps = {\n border?: PerSideBorder;\n borderRadius?: PerCornerBorderRadius;\n backgroundColor?: string;\n padding?: Padding;\n fallbackBorderColorThemeKey?: keyof GeneratedTheme[\"colors\"];\n fallbackBackgroundColorThemeKey?: keyof GeneratedTheme[\"colors\"];\n};\n\nconst resolveDefaultColor = (\n theme: UserAccessibleTheme,\n key: undefined | keyof GeneratedTheme[\"colors\"],\n fallbackColor: string,\n): string => {\n if (key) {\n const value = theme.colors[key];\n if (typeof value === \"string\") {\n return value;\n }\n }\n return fallbackColor;\n};\n\nexport const useComputeComponentStyles = (props: ComputeStyleProps) => {\n const { theme } = useTheme();\n\n const {\n border,\n borderRadius,\n backgroundColor,\n padding,\n fallbackBorderColorThemeKey,\n fallbackBackgroundColorThemeKey,\n } = props;\n\n const fallbackBackgroundColor = resolveDefaultColor(\n theme,\n fallbackBackgroundColorThemeKey,\n \"transparent\",\n );\n\n const fallbackBorderColor = resolveDefaultColor(\n theme,\n fallbackBorderColorThemeKey,\n theme.colors.neutral100,\n );\n\n return useMemo(() => {\n return computeWrapperStyle({\n borderRadius,\n border,\n fallbackBorderColor,\n backgroundColor: backgroundColor || fallbackBackgroundColor,\n padding,\n });\n }, [\n border,\n borderRadius,\n fallbackBorderColor,\n padding,\n fallbackBackgroundColor,\n backgroundColor,\n ]);\n};\n","import { withBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport {\n type BindingIdentifier,\n BindingMetaSymbol,\n type Entity,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const createBindableEntityProxy = (\n entityAccessor: () => Entity | undefined,\n identifier: BindingIdentifier,\n) => {\n return new Proxy(\n withBindingIdentifier(\n {\n entity: entityAccessor(),\n },\n identifier,\n ),\n {\n get(_target, prop) {\n if (prop === BindingMetaSymbol) {\n return identifier;\n }\n const entity = entityAccessor();\n\n if (prop === \"toJSON\") {\n return () => {\n if (!entity) return null;\n const keys = Object.keys(entity);\n return keys.reduce(\n (acc, key) => {\n if (key === \"bind\") return acc;\n const value = entity[key];\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n };\n }\n\n return entity?.[prop as string];\n },\n\n set(_target, prop, value) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n entity[prop as string] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n delete entity[prop as string];\n return true;\n },\n has(_target, prop) {\n if (prop === BindingMetaSymbol) {\n return true;\n }\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n return prop in entity;\n },\n ownKeys(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return [];\n }\n return Object.keys(entity);\n },\n getOwnPropertyDescriptor(target, prop) {\n const entity = entityAccessor();\n if (!entity) {\n return undefined;\n }\n const descriptor = Object.getOwnPropertyDescriptor(entity, prop);\n // We've gotta follow the invariant rules here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n // Otherwise non-configurable properties will get through and cause runtime errors.\n // We probably don't need to check that target has it, its just a trap object, but lets be thorough.\n if (descriptor && !descriptor.configurable) {\n const targetDescriptor = Object.getOwnPropertyDescriptor(\n target,\n prop,\n );\n if (!targetDescriptor || targetDescriptor.configurable) {\n return undefined;\n }\n }\n return descriptor;\n },\n defineProperty(_target, prop, descriptor) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.defineProperty(entity, prop as string, descriptor);\n return true;\n },\n preventExtensions(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.preventExtensions(entity);\n return true;\n },\n isExtensible(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n return Object.isExtensible(entity);\n },\n getPrototypeOf(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return null;\n }\n return Object.getPrototypeOf(entity);\n },\n setPrototypeOf(_target, proto) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.setPrototypeOf(entity, proto);\n return true;\n },\n },\n );\n};\n","import { getStableScopeId } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport { createBindableEntityProxy } from \"./create-bindable-entity-proxy.js\";\nimport type { ScopeInstance } from \"./types.js\";\nimport type {\n BindingIdentifier,\n WithBindingIdentifier,\n} from \"@superblocksteam/library-shared/types\";\n\nconst existingScopeIds = new Set<string>();\n\ntype ScopeOptions = {\n parentScopeId?: string; // will be undefined for global scopes\n name: string;\n};\n\ntype InternalScopeOptions = ScopeOptions & {\n scopeId?: string;\n};\n\nexport function internalCreateScope<\n _Bindables extends Record<string, any>,\n SO extends InternalScopeOptions = InternalScopeOptions,\n>(\n getInitialEntities: ({\n entities,\n }: {\n entities: Record<string, any>;\n }) => Record<string, any>, // TODO later, like variables, apis\n options: SO,\n) {\n return createScope(getInitialEntities, options);\n}\n\nexport function createScope<\n _Bindables extends Record<string, any>,\n SO extends ScopeOptions = ScopeOptions,\n>(\n getInitialEntities: ({\n entities,\n }: {\n entities: Record<string, any>;\n }) => Record<string, any>, // TODO later, like variables, apis\n options: SO,\n): ScopeInstance<_Bindables> {\n const { parentScopeId, name } = options;\n if (!name) {\n throw new Error(\"Scope name is required\");\n }\n // sc- is a temporary addition to make sure name overlap doesn't trick us into thinking that things work\n // because otherwise predictableNameGenerator generates the same value that registerScope does\n const stableScopeId =\n (options as InternalScopeOptions).scopeId ?? getStableScopeId(name);\n if (existingScopeIds.has(stableScopeId)) {\n // throw new Error(`Scope with name ${name} already exists`);\n // TODO: createScope lifecycle\n console.warn(`Scope with name ${name} already exists`);\n }\n existingScopeIds.add(stableScopeId);\n\n const scopeId = rootStore.entityManager.createScope({\n parentScopeId,\n name,\n scopeId: stableScopeId,\n });\n\n const bindingIds: Record<string, Readonly<BindingIdentifier>> = {};\n const getBinding = (key: string) => {\n if (bindingIds[key]) {\n return bindingIds[key];\n }\n bindingIds[key] = {\n entityName: key,\n scopeId,\n };\n return bindingIds[key];\n };\n\n const entities = new Proxy(\n {} as _Bindables & Record<string, WithBindingIdentifier>,\n {\n get(_target, key) {\n if (typeof key !== \"string\") {\n return undefined; // no symbols allowed for now\n }\n return createBindableEntityProxy(\n () =>\n rootStore.entityManager.getEntity(\n scopeId,\n {\n value: key as string,\n isAnonymous: false,\n },\n {\n useSuspense: true,\n },\n ),\n getBinding(key),\n );\n },\n },\n );\n\n const safeGetInitialEntities =\n typeof getInitialEntities === \"function\"\n ? getInitialEntities\n : () =>\n typeof getInitialEntities === \"object\" ? getInitialEntities : {};\n\n return {\n entities,\n initialEntities: safeGetInitialEntities({ entities }),\n scopeInfo: {\n scopeId,\n name,\n parentScopeId,\n },\n };\n}\n","import { useEffect, useRef } from \"react\";\nimport type React from \"react\";\n\ntype isType = (a: unknown) => boolean;\n\ntype isEqual = (a: any, b: any) => boolean;\n\n/**\n * Options for the useStableEffect hook.\n */\nexport interface UseStableEffectOptions {\n customEqualChecks?: [isType, isEqual][];\n ignoreKeys?: string[];\n cold?: boolean; // If true, Runs the effect after the first render\n}\n\n/**\n * Custom hook that runs an effect only when specified properties of an object change.\n *\n * @param effect - The effect callback to run.\n * @param obj - The object whose properties are checked for changes.\n * @param options - Optional custom equality checks and keys to ignore when checking for changes.\n */\nconst useStableEffect = (\n effect: React.EffectCallback,\n obj: { [key: string]: unknown },\n options: UseStableEffectOptions = {},\n) => {\n const { customEqualChecks = [], ignoreKeys = [] } = options;\n const ref = useRef<{ [key: string]: unknown }>({ ...obj });\n\n const propsChanged = !Object.keys(obj).every((key) => {\n if (ignoreKeys.includes(key)) {\n return true;\n }\n if (!(key in ref.current)) {\n return false;\n }\n\n const val = obj[key];\n const old = ref.current[key];\n for (const [isType, isEqual] of customEqualChecks) {\n if (isType(val) && isType(old)) {\n return isEqual(val, old);\n }\n }\n\n return Object.is(val, old);\n });\n\n const propRemoved = Object.keys(ref.current).some((key) => !(key in obj));\n\n if (propsChanged || propRemoved) {\n ref.current = { ...obj };\n }\n\n const isFirstRun = useRef(true);\n useEffect(() => {\n if (!options.cold && isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n effect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current]);\n\n if (!options.cold && isFirstRun.current) {\n effect();\n }\n};\n\nexport default useStableEffect;\n","import React, { createContext, useContext } from \"react\";\nimport { GLOBAL_SCOPE_ID } from \"../lib/evaluator/entity-manager.js\";\nimport type { ScopeId } from \"../lib/evaluator/base-entity-manager.js\";\n\ntype State = {\n scopeId: ScopeId;\n};\n\nconst ScopeContext = createContext<State>({\n scopeId: GLOBAL_SCOPE_ID,\n});\n\nexport const ScopeProvider: React.FC<React.PropsWithChildren<State>> = ({\n scopeId,\n children,\n}) => {\n return (\n <ScopeContext.Provider value={{ scopeId }}>\n {children}\n </ScopeContext.Provider>\n );\n};\n\nexport const useScope = () => {\n const scopeInfo = useContext(ScopeContext);\n return scopeInfo ?? { scopeId: GLOBAL_SCOPE_ID };\n};\n","import { predictableNameGenerator } from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport React, { useRef } from \"react\";\nimport { useState } from \"react\";\nimport useStableEffect from \"../../hooks/use-stable-effect.js\";\nimport { getName } from \"../lib/evaluator/names.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport { ScopeProvider, useScope } from \"./scope-context.jsx\";\nimport type { SbApi } from \"../../user-facing/entities/api/index.js\";\nimport type { Timer } from \"../../user-facing/entities/timer/index.js\";\nimport type { StateVar } from \"../../user-facing/entities/variable/index.js\";\nimport type { ScopeInstance } from \"../../user-facing/state/types.js\";\nimport type { SbEvent } from \"../entities.js\";\nimport type { ScopeOptions } from \"@superblocksteam/library-shared/types\";\n\nexport type ScopedEntity =\n | ReturnType<typeof Timer>\n | ReturnType<typeof StateVar>\n | ReturnType<typeof SbEvent>\n | ReturnType<typeof SbApi>;\n\nexport type Scope = {\n [key: string]: ScopedEntity;\n};\n\nfunction initializeEntities(\n scopeId: string,\n initialEntities: ScopeInstance<any>[\"initialEntities\"],\n) {\n Object.entries(initialEntities).forEach(([name, { type, ...rest }]) => {\n if (!type) {\n console.warn(\"Initial entity has no type\", { name });\n return;\n }\n const internalName = getName(name);\n const entity = rootStore.entityManager.getEntity(scopeId, internalName);\n const entityIsInOurScope = entity && scopeId === entity.scopeId;\n\n if (entity && entityIsInOurScope) {\n rootStore.entityManager.updateEntity({\n scopeId,\n name: internalName,\n props: rest,\n });\n } else {\n rootStore.entityManager.createEntity({\n scopeId,\n name: internalName,\n props: rest,\n type,\n });\n // Handle timer auto-start\n if (\n type === \"Timer\" &&\n rest.startOnPageLoad &&\n typeof entity === \"object\" &&\n typeof entity?.start === \"function\"\n ) {\n entity.start();\n }\n }\n });\n}\n\n// @refresh reset\nexport function registerScope<T>(\n Component: React.FC<T>,\n scopeDef: ScopeInstance<any>,\n options?: ScopeOptions,\n): React.FC<React.JSX.IntrinsicAttributes & T> {\n const componentName = Component.displayName || Component.name;\n const scopeInfo = scopeDef.scopeInfo;\n\n const ScopedComponent = function ScopedComponent(\n props: React.JSX.IntrinsicAttributes & T,\n ) {\n const parentScope = useScope();\n const stableScopeId = useRef(\n predictableNameGenerator(`sc-${componentName}`),\n );\n const initialized = useRef(false);\n const initialEntities = useRef(scopeDef.initialEntities);\n const [scopeId, _setScopeId] = useState<string>(() => {\n if (scopeInfo.scopeId) {\n return scopeInfo.scopeId;\n }\n\n const newScopeId = rootStore.entityManager.createScope({\n parentScopeId: parentScope.scopeId,\n name: scopeInfo.name,\n scopeId: stableScopeId.current,\n });\n\n return newScopeId;\n });\n\n if (!initialized.current) {\n initializeEntities(scopeId, scopeDef.initialEntities);\n }\n initialized.current = true;\n\n if (!isEqual(initialEntities.current, scopeDef.initialEntities)) {\n initialEntities.current = scopeDef.initialEntities;\n initializeEntities(scopeId, scopeDef.initialEntities);\n }\n\n if (!initialized.current) {\n initializeEntities(scopeId, scopeDef.initialEntities);\n initialized.current = true;\n }\n\n useStableEffect(\n () => {\n const currentScopeId = scopeId;\n if (!currentScopeId) {\n return;\n }\n\n options?.onScopeLoaded?.(scopeId);\n },\n {\n initialEntities: scopeDef.initialEntities,\n scopeInfo: scopeDef.scopeInfo,\n scopeId,\n },\n {\n cold: true,\n customEqualChecks: [\n [(a) => typeof a === \"object\" && a !== null, (a, b) => isEqual(a, b)],\n ],\n },\n );\n if (!scopeId) {\n return null;\n }\n return (\n <ScopeProvider scopeId={scopeId}>\n <Component {...props} />\n </ScopeProvider>\n );\n };\n\n return ScopedComponent;\n}\n","import { useEffect } from \"react\";\nimport { internalCreateScope } from \"../../user-facing/state/create-scope.js\";\nimport { GLOBAL_SCOPE_ID } from \"../lib/evaluator/entity-manager.js\";\nimport { getName } from \"../lib/evaluator/names.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport { useTheme } from \"../theme-context.jsx\";\nimport { registerScope } from \"./scope.js\";\nimport type { Global as GlobalType } from \"./types.js\";\nimport type {\n Theme as BaseTheme,\n UserAccessibleTheme,\n} from \"@superblocksteam/library-shared/types\";\n\n// The global scope is actually created in the entity manager, but we also need this here\n// for users to be able to access the global scope entities as imports\nconst InternalGlobalScope = internalCreateScope(() => ({}), {\n name: GLOBAL_SCOPE_ID,\n scopeId: GLOBAL_SCOPE_ID,\n});\n\nexport const GlobalScope = registerScope(\n ({ children }: { children: React.ReactNode }) => {\n const { theme } = useTheme();\n\n useEffect(() => {\n const name = getName(\"Theme\");\n const existingTheme = rootStore.entityManager.getEntity(\n GLOBAL_SCOPE_ID,\n name,\n );\n if (existingTheme) {\n rootStore.entityManager.updateEntity({\n name,\n props: theme,\n scopeId: GLOBAL_SCOPE_ID,\n });\n } else {\n rootStore.entityManager.createEntity({\n name,\n type: \"theme\",\n props: theme,\n scopeId: GLOBAL_SCOPE_ID,\n });\n }\n }, [theme]);\n\n // TODO: add all the other stuff we need here\n\n return <>{children}</>;\n },\n InternalGlobalScope,\n);\n\nexport const updateGlobalScope = (global: Record<string, unknown>) => {\n rootStore.entityManager.updateEntity({\n name: getName(\"Global\"),\n props: global as any,\n scopeId: GLOBAL_SCOPE_ID,\n });\n};\n\nexport type AppTheme = BaseTheme;\n\n// We need to proxy the underlying scope entities proxy because we need lazy access to the underlying entity manager\n// entities, otherwise things aren't reactive/bound correctly\nfunction createEntityProxy<T>(entityName: string): T {\n return new Proxy(\n {},\n {\n get(_target, prop: string) {\n const entity = InternalGlobalScope.entities[entityName];\n return entity?.[prop as keyof typeof entity];\n },\n },\n ) as T;\n}\n\nexport const Theme = createEntityProxy<UserAccessibleTheme>(\"Theme\");\nexport const Global = createEntityProxy<GlobalType>(\"Global\");\nexport const Embed = createEntityProxy<any>(\"Embed\");\nexport const Env = createEntityProxy<any>(\"Env\");\n","import type { FontFamily } from \"@superblocksteam/library-shared/types\";\n\nexport const LEGACY_AVAILABLE_FONTS: Record<string, FontFamily> = {\n Roboto: {\n name: \"Roboto\",\n weights: [100, 300, 400, 500, 700, 900],\n type: \"google\",\n key: \"Roboto\",\n },\n Inter: {\n name: \"Inter\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n\n type: \"google\",\n key: \"Inter\",\n },\n Poppins: {\n name: \"Poppins\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Poppins\",\n },\n \"Noto Sans\": {\n name: \"Noto Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Noto Sans\",\n },\n \"Work Sans\": {\n name: \"Work Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Work Sans\",\n },\n \"DM Sans\": {\n name: \"DM Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"DM Sans\",\n },\n \"Roboto Mono\": {\n name: \"Roboto Mono\",\n weights: [100, 200, 300, 400, 500, 600, 700],\n type: \"google\",\n key: \"Roboto Mono\",\n },\n};\n\nexport const DEFAULT_FONT_WEIGHTS = [300, 400, 500, 700];\n","import {\n DEFAULT_FONT_WEIGHTS,\n LEGACY_AVAILABLE_FONTS,\n} from \"../typeface-constants.js\";\nimport type { GeneratedTheme } from \"@superblocksteam/library-shared/types\";\n\nimport type { FontFamily } from \"@superblocksteam/shared\";\n\ntype ErrorResponse = {\n message: string;\n isValid: false;\n};\ntype SuccessResponse = {\n fontFamilies: Record<string, FontFamily>;\n isValid: true;\n};\n\nconst fontWeightNameToValue: Record<string, number> = {\n thin: 100,\n lighter: 100,\n extralight: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n extrabold: 800,\n black: 900,\n bolder: 900,\n};\n\nconst getWeightValue = (weight: string): number => {\n const weightValue = parseInt(weight, 10);\n if (isNaN(weightValue)) {\n return fontWeightNameToValue[weight.toLowerCase()] || 400;\n }\n return weightValue;\n};\n\nexport function extractFontFamilyNames(cssContent?: string): Array<{\n name: string;\n weights: Array<number>;\n}> {\n if (!cssContent) return [];\n const fontFamilyData: Record<string, number[]> = {};\n const fontFaceRegex =\n /@font-face\\s*{[^}]*font-family:\\s*['\"]?([^'\";]+)['\"]?[^}]*}/g;\n const fontWeightRegex =\n /font-weight:\\s*(normal|bolder|bold|lighter|light|[1-9]00)(?:\\s+([1-9]00))?/gi;\n let match;\n\n while ((match = fontFaceRegex.exec(cssContent)) !== null) {\n const fontFamily = match[1];\n const fontBlock = match[0];\n const weights = [];\n let weightMatch;\n if (!fontFamily || !fontFamily.trim()) continue;\n\n while ((weightMatch = fontWeightRegex.exec(fontBlock)) !== null) {\n const startWeight = getWeightValue(weightMatch[1]);\n const endWeight = weightMatch[2]\n ? getWeightValue(weightMatch[2])\n : startWeight;\n for (let weight = startWeight; weight <= endWeight; weight += 100) {\n weights.push(weight);\n }\n }\n\n // Ensure uniqueness of font weights\n const uniqueWeights = [...new Set(weights)];\n\n fontFamilyData[fontFamily] = fontFamilyData[fontFamily]\n ? [...new Set([...fontFamilyData[fontFamily], ...uniqueWeights])]\n : uniqueWeights;\n }\n\n return Object.entries(fontFamilyData).map(([name, weights]) => {\n weights.sort();\n return {\n name,\n weights: weights.length === 0 ? [400] : weights,\n };\n });\n}\n\nexport async function validateAndParseCustomFontUrl(\n _url: string,\n): Promise<SuccessResponse | ErrorResponse> {\n if (!_url) {\n return {\n message: \"URL is required\",\n isValid: false,\n };\n }\n let url = _url;\n // if its not a valid url\n if (!_url.startsWith(\"http://\") && !_url.startsWith(\"https://\")) {\n url = `https://${_url}`;\n }\n try {\n new URL(url);\n } catch (_e) {\n return {\n message: \"Invalid URL\",\n isValid: false,\n };\n }\n // get the url and ensure that the response type is text/css\n try {\n const response = await fetch(url);\n // if response is not 200\n if (!response.ok) {\n return {\n message: \"Failed to fetch valid CSS file\",\n isValid: false,\n };\n }\n if (!response.headers.get(\"content-type\")?.includes(\"text/css\")) {\n return {\n message: \"URL should point to a CSS file\",\n isValid: false,\n };\n }\n const cssContent = await response.text();\n\n // Validate and extract font family names\n const fontFamilyNames = extractFontFamilyNames(cssContent);\n\n if (fontFamilyNames.length === 0) {\n return {\n message: \"No font families found in the CSS file\",\n isValid: false,\n };\n }\n const fontFamilies = fontFamilyNames.reduce(\n (acc, { name, weights }) => {\n acc[name] = {\n name,\n type: \"custom\",\n key: name, // this needs to be unique\n url,\n weights,\n };\n return acc;\n },\n {} as Record<string, FontFamily>,\n );\n\n return {\n fontFamilies,\n isValid: true,\n };\n } catch (_e) {\n return {\n message: \"Failed to fetch valid CSS file\",\n isValid: false,\n };\n }\n}\n\nconst linkQuerySelector = (fontName: string, isTemporary?: boolean) => {\n return `link[data-font${isTemporary ? \"-temp\" : \"\"}=\"${fontName}\"]`;\n};\n\nexport function loadFont(\n themeFont: FontFamily,\n options?: { isTemporary: boolean },\n) {\n if (themeFont.type === \"google\") {\n const fontName = themeFont.key;\n const weights = (themeFont.weights ?? DEFAULT_FONT_WEIGHTS).join(\",\");\n // Check if the font is already loaded\n const existingLink = document.querySelector(\n linkQuerySelector(fontName, options?.isTemporary),\n );\n if (existingLink) {\n return; // Font is already loaded\n }\n\n // Create a new link element\n const link = document.createElement(\"link\");\n link.href = `https://fonts.googleapis.com/css?family=${fontName}:${weights}${\n options?.isTemporary ? \"&display=swap\" : \"\"\n }`;\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.dataset.font = fontName; // Custom attribute to easily identify the link later\n\n // Append the link element to the document head\n document.head.appendChild(link);\n } else if (themeFont.type === \"custom\" && themeFont.url) {\n const fontName = themeFont.key;\n const existingLink = document.querySelector(\n linkQuerySelector(fontName, options?.isTemporary),\n );\n if (existingLink) {\n return; // Font is already loaded\n }\n // Create a new <link> element for the font URL\n const link = document.createElement(\"link\");\n link.href = themeFont.url;\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.dataset.font = fontName; // Custom attribute to easily identify the link later\n document.head.appendChild(link);\n }\n}\n\nexport function removeFont(\n fontKey: string,\n options?: { isTemporary: boolean },\n) {\n const link = document.querySelector(\n linkQuerySelector(fontKey, options?.isTemporary),\n );\n if (link) {\n link.remove();\n }\n}\n\nexport function loadThemeFonts(generatedTheme: GeneratedTheme) {\n const availableFonts = generatedTheme.availableFonts;\n Object.values(availableFonts).forEach((font) => loadFont(font));\n // remove fonts that are not used in the theme\n const existingLinks = document.querySelectorAll(\"link[data-font]\");\n existingLinks.forEach((link) => {\n const fontKey = link.getAttribute(\"data-font\");\n if (fontKey && !availableFonts[fontKey]) {\n link.remove();\n }\n });\n}\n\nexport const getAvailableFontFamilies = (\n themeFontFamilies?: Record<string, FontFamily>,\n): Record<string, FontFamily> => {\n return themeFontFamilies ?? LEGACY_AVAILABLE_FONTS;\n};\n\nexport const getFontFamilyOptions = (\n themeFontFamilies?: Record<string, FontFamily>,\n) => {\n const options = Object.values(\n getAvailableFontFamilies(themeFontFamilies),\n ).map((font) => ({\n // TODO(code-mode): Add styling to the label depending on the font family\n label: font.name,\n value: font.key,\n }));\n options.sort((a, b) => a.value.localeCompare(b.value));\n return options;\n};\n","import { compile, serialize, stringify, prefixer, middleware } from \"stylis\";\n\nconst insertStyleRule = (rule: string) => {\n // Check if we're in a browser environment\n if (typeof window !== \"undefined\" && window.document) {\n const styleTag = window.document.createElement(\"style\");\n styleTag.appendChild(window.document.createTextNode(rule));\n window.document.head.appendChild(styleTag);\n }\n};\n// Hash the style string to create a predictable namespace\n// See https://stackoverflow.com/a/52171480/610632\nconst cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};\n\n// Allows you to choose the prefix for the classname\nexport const styleWithPrefix =\n (prefix: string) =>\n (strings: TemplateStringsArray, ...params: string[]) => {\n const style = String.raw(strings, ...params);\n // Classnames must start with a letter\n const namespace = prefix + cyrb53(style).toString(36); // alphanumeric\n const parsed = serialize(\n compile(`.${namespace}{${style}}`),\n middleware([prefixer, stringify]),\n );\n insertStyleRule(parsed);\n return namespace;\n };\n\nexport const styleAsClass = styleWithPrefix(\"s\");\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { CUSTOM_THEME_TYPOGRAPHY_KEY } from \"@superblocksteam/library-shared/types\";\nimport { styleWithPrefix } from \"../styling/style-as-class.js\";\nimport { CLASS_NAMES } from \"./classnames.js\";\nimport { DEFAULT_TYPOGRAPHIES_BY_VERSION } from \"./typography-constants.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\nimport type React from \"react\";\n\n// Memoization utility for CSS class generation\nconst createMemoizedClassGenerator = <T extends readonly any[]>(\n generator: (...args: T) => string,\n): ((...args: T) => string) => {\n const cache = new Map<string, string>();\n\n return (...args: T): string => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key)!;\n }\n\n const result = generator(...args);\n cache.set(key, result);\n return result;\n };\n};\n\nexport const getCustomTypographyAccessor = (typographyKey: string) => {\n return `${CUSTOM_THEME_TYPOGRAPHY_KEY}.${typographyKey}.styles`;\n};\n\nexport const getCustomTypographyNameFromAccessor = (accessor: string) => {\n return accessor\n .replace(`${CUSTOM_THEME_TYPOGRAPHY_KEY}.`, \"\")\n .replace(\".styles\", \"\");\n};\n\nexport const getCustomTypographyClassname = (typographyKey: string) => {\n return `sb-custom-${typographyKey}`;\n};\n\nexport const getTextCssClassFromVariant = (\n textStyleVariant?: string,\n): string => {\n switch (textStyleVariant) {\n case \"heading1\":\n return CLASS_NAMES.HEADING1;\n case \"heading2\":\n return CLASS_NAMES.HEADING2;\n case \"heading3\":\n return CLASS_NAMES.HEADING3;\n case \"heading4\":\n return CLASS_NAMES.HEADING4;\n case \"heading5\":\n return CLASS_NAMES.HEADING5;\n case \"heading6\":\n return CLASS_NAMES.HEADING6;\n case \"body1\":\n return CLASS_NAMES.BODY1;\n case \"body2\":\n return CLASS_NAMES.BODY2;\n case \"body3\":\n return CLASS_NAMES.BODY3;\n case \"link\":\n return CLASS_NAMES.LINK;\n case \"label\":\n return CLASS_NAMES.LABEL;\n case \"inputLabel\":\n return CLASS_NAMES.INPUT_LABEL;\n case \"inputText\":\n return CLASS_NAMES.INPUT_TEXT;\n case \"inputPlaceholder\":\n return CLASS_NAMES.INPUT_PLACEHOLDER;\n case \"buttonLabel\":\n return CLASS_NAMES.BUTTON_LABEL;\n case \"code\":\n return CLASS_NAMES.CODE_TEXT;\n case undefined:\n return CLASS_NAMES.BODY1;\n default:\n // custom items are keyed like `custom.custom-item.styles`\n return getCustomTypographyClassname(\n getCustomTypographyNameFromAccessor(textStyleVariant),\n );\n }\n};\n\nexport const camelCaseToSentenceCase = (input: string): string => {\n return input\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // Insert spaces before uppercase letters\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1 $2\") // Handle cases where there are consecutive uppercase letters\n .replace(/([a-zA-Z])([0-9])/g, \"$1 $2\") // Add spaces between letters and numbers\n .toLowerCase() // Convert the entire string to lower case\n .replace(/^./, (str) => str.toUpperCase()); // Capitalize the first letter\n};\n\nexport const extractPixels = (pxValue: string | number): number => {\n if (typeof pxValue === \"number\") {\n return pxValue;\n }\n const pixels = parseInt(pxValue.replace(\"px\", \"\"), 10);\n if (isNaN(pixels)) {\n return 14; // return some reasonable default\n }\n return pixels;\n};\n\nconst isPixelString = (value: any): boolean => {\n if (typeof value !== \"string\") return false;\n const pixelRegex = /^\\d+px$/;\n return pixelRegex.test(value);\n};\n\nexport const getLineHeightInPixels = (\n lineHeight: string | number,\n fontSize: number,\n): number => {\n if (isPixelString(lineHeight)) {\n return extractPixels(String(lineHeight));\n }\n if (lineHeight === \"normal\") {\n return 1.2 * fontSize; // depends on browser & font family, but should be close enough\n }\n // otherwise it's a number so multiply\n return Number(lineHeight) * fontSize;\n};\n\nexport const isColorToken = (value?: string) => {\n if (!value) return false;\n // if it matches the format \"colors.xxx\" then it's a color token\n return value.startsWith(\"colors.\");\n};\n\nexport function getDefaultTypographies(themeVersion?: number) {\n return DEFAULT_TYPOGRAPHIES_BY_VERSION[themeVersion || 2];\n}\n\nexport function generatePaddingStyle(padding: Padding): string {\n if (!padding) return \"\";\n const top = padding.top?.value ?? 0;\n const right = padding.right?.value ?? 0;\n const bottom = padding.bottom?.value ?? 0;\n const left = padding.left?.value ?? 0;\n return `${top}px ${right}px ${bottom}px ${left}px`;\n}\n\nexport function dimToCSS(\n dim: Dim,\n dimension:\n | \"width\"\n | \"height\"\n | \"minWidth\"\n | \"minHeight\"\n | \"maxWidth\"\n | \"maxHeight\",\n primary = true,\n): React.CSSProperties {\n switch (dim.mode) {\n case \"fit\":\n return { [dimension]: \"fit-content\" };\n case \"fill\":\n if (!primary)\n return {\n alignSelf: \"stretch\",\n [dimension]: \"unset\",\n };\n return { flex: dim.value ?? 1 };\n case \"px\":\n return { [dimension]: `${dim.value}px` };\n case \"%\":\n return { [dimension]: `${dim.value}%` };\n default:\n return {};\n }\n}\n\nconst Classes = {\n minHeightZero: styleWithPrefix(\"sb-min-height-zero\")`\n @layer components {\n min-height: 0;\n }\n `,\n minWidthZero: styleWithPrefix(\"sb-min-width-zero\")`\n @layer components {\n min-width: 0;\n }\n `,\n fillWidthParent: styleWithPrefix(\"sb-fill-width-parent\")`\n @layer components {\n width: -webkit-fill-available;\n }\n `,\n fillHeightParent: styleWithPrefix(\"sb-fill-height-parent\")`\n @layer components {\n height: -webkit-fill-available;\n }\n `,\n // For height we never want to shrink fit-content items\n fitPrimaryHeight: styleWithPrefix(\"sb-fit-primary-height\")`\n @layer components {\n flex-basis: auto;\n flex-shrink: 0;\n }\n `,\n // For width we are ok with shrinking fit-content items\n fitPrimaryWidth: styleWithPrefix(\"sb-fit-primary-width\")`\n @layer components {\n flex-basis: auto;\n }\n `,\n fitSecondaryWidth: styleWithPrefix(\"sb-fit-secondary-width\")`\n @layer components {\n max-width: -webkit-fill-available;\n }\n `,\n fitSecondaryHeight: styleWithPrefix(\"sb-fit-secondary-height\")`\n @layer components {\n max-height: -webkit-fill-available;\n }\n `,\n fitWidth: styleWithPrefix(\"sb-fit-width\")`\n @layer components {\n min-width: auto;\n }\n `,\n fitHeight: styleWithPrefix(\"sb-fit-height\")`\n @layer components {\n min-height: auto;\n }\n `,\n\n fillPrimary: createMemoizedClassGenerator(\n (flex: number = 1, basis: string | number = \"auto\") => {\n const styleFunction = styleWithPrefix(`sb-fill-primary-${flex}-${basis}`);\n return styleFunction`\n @layer components {\n flex: ${String(flex)};\n flex-shrink: 1;\n flex-basis: ${String(basis)};\n }\n `;\n },\n ),\n\n pxPrimary: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-primary-${pxValue}`);\n return styleFunction`\n @layer components {\n flex-shrink: 0; \n flex-basis: ${String(pxValue)}px;\n }\n `;\n }),\n\n pxWidth: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-width-${pxValue}`);\n return styleFunction`\n @layer components {\n width: ${String(pxValue)}px;\n min-width: ${String(pxValue)}px;\n }\n `;\n }),\n\n pxHeight: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-height-${pxValue}`);\n return styleFunction`\n @layer components {\n height: ${String(pxValue)}px;\n min-height: ${String(pxValue)}px;\n }\n `;\n }),\n\n percentPrimary: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-primary-${percentValue}`);\n return styleFunction`\n @layer components {\n flex-shrink: 0; \n flex-basis: ${String(percentValue)}%;\n }\n `;\n }),\n\n percentWidth: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-width-${percentValue}`);\n return styleFunction`\n @layer components {\n width: ${String(percentValue)}%;\n min-width: ${String(percentValue)}%;\n }\n `;\n }),\n\n percentHeight: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-height-${percentValue}`);\n return styleFunction`\n @layer components {\n height: ${String(percentValue)}%;\n min-height: ${String(percentValue)}%;\n }\n `;\n }),\n};\n\n/**\n * Recursively finds the first parent element that doesn't have display: contents\n * @param element The starting element to search from\n * @returns The first parent element without display: contents, or null if not found\n */\nconst findFirstLayoutParent = (element: Element): Element | null => {\n let currentElement = element.parentElement;\n\n while (currentElement) {\n const computedStyles = window.getComputedStyle(currentElement);\n\n // If this parent doesn't have display: contents, it's a layout parent\n if (computedStyles.display !== \"contents\") {\n return currentElement;\n }\n\n // Move up to the next parent\n currentElement = currentElement.parentElement;\n }\n\n return null;\n};\n\n/**\n * Finds the layout parent of an element using its instance ID and determines the flex direction\n * @param instanceId The current element's instance ID\n * @returns The flex direction of the layout parent element, or undefined if not found or not flex\n */\nconst getParentFlexDirection = (\n instanceId?: string,\n): \"row\" | \"column\" | undefined => {\n if (typeof window === \"undefined\" || !instanceId) {\n return undefined;\n }\n\n try {\n // Query for the current element by its instance ID\n const currentElement = document.querySelector(\n `[${INSTANCE_ID_ATTRIBUTE}=\"${instanceId}\"]`,\n );\n\n if (!currentElement) {\n return undefined;\n }\n\n // Find the first parent that doesn't have display: contents\n const layoutParent = findFirstLayoutParent(currentElement);\n\n if (!layoutParent) {\n return undefined;\n }\n\n // Get computed styles to check if it's using flex layout\n const computedStyles = window.getComputedStyle(layoutParent);\n const display = computedStyles.display;\n\n // Check if the parent is using flex layout\n if (display !== \"flex\" && display !== \"inline-flex\") {\n return undefined;\n }\n\n // Extract the flex direction\n const flexDirection = computedStyles.flexDirection;\n\n // Return normalized direction values\n if (flexDirection === \"column\" || flexDirection === \"column-reverse\") {\n return \"column\";\n } else if (flexDirection === \"row\" || flexDirection === \"row-reverse\") {\n return \"row\";\n }\n\n // Default flex direction is row\n return \"row\";\n } catch {\n // Fail silently in case of any DOM query errors\n return undefined;\n }\n};\n\nexport const getWidthHeightInfo = (\n dim: Dim,\n dimension: \"width\" | \"height\",\n instanceId?: string,\n): {\n classnames: string[];\n} => {\n const direction = getParentFlexDirection(instanceId);\n\n const primaryDimension =\n direction === \"column\" ? dimension === \"height\" : dimension === \"width\";\n if (!dim) return { classnames: [] };\n\n switch (dim.mode) {\n case \"fit\":\n if (direction === undefined) {\n if (dimension === \"width\") return { classnames: [Classes.fitWidth] };\n return { classnames: [Classes.fitHeight] };\n }\n\n if (primaryDimension) {\n if (dimension === \"height\")\n return { classnames: [Classes.fitPrimaryHeight] };\n else return { classnames: [Classes.fitPrimaryWidth] };\n }\n if (dimension === \"width\")\n return { classnames: [Classes.fitSecondaryWidth] };\n return { classnames: [Classes.fitSecondaryHeight] };\n case \"fill\":\n // When direction is unknown, use fill parent as backup\n if (direction === undefined) {\n if (dimension === \"width\")\n return { classnames: [Classes.fillWidthParent] };\n return { classnames: [Classes.fillHeightParent] };\n }\n\n if (primaryDimension) {\n const classnames = [\n Classes.fillPrimary(dim.value ?? 1, dim.basis ?? 0),\n ];\n if (dim.basis === 0 && dimension === \"height\") {\n classnames.push(Classes.minHeightZero);\n }\n if (dim.basis === 0 && dimension === \"width\") {\n classnames.push(Classes.minWidthZero);\n }\n\n return { classnames };\n }\n if (dimension === \"width\")\n return { classnames: [Classes.fillWidthParent] };\n return { classnames: [Classes.fillHeightParent] };\n case \"px\": {\n const pxValue = dim.value ?? 0;\n if (primaryDimension) {\n return { classnames: [Classes.pxPrimary(pxValue)] };\n }\n if (dimension === \"width\") {\n return { classnames: [Classes.pxWidth(pxValue)] };\n }\n return { classnames: [Classes.pxHeight(pxValue)] };\n }\n case \"%\": {\n const percentValue = dim.value ?? 0;\n if (primaryDimension) {\n return { classnames: [Classes.percentPrimary(percentValue)] };\n }\n if (dimension === \"width\") {\n return { classnames: [Classes.percentWidth(percentValue)] };\n }\n return { classnames: [Classes.percentHeight(percentValue)] };\n }\n default:\n return { classnames: [] };\n }\n};\n","import { get } from \"lodash\";\nimport { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { BASE_THEME_NEW_APPS } from \"../../themes/constants.js\";\nimport { getFontFamilyOptions } from \"../../themes/typefaces/utils.jsx\";\nimport {\n FONT_STYLE_OPTIONS,\n SB_CUSTOM_TEXT_STYLE,\n FONT_WEIGHT_OPTIONS,\n LINE_HEIGHT_UNIT_OPTIONS,\n LETTER_SPACING_UNIT_OPTIONS,\n TEXT_TRANSFORM_OPTIONS,\n} from \"../../themes/typography-constants.js\";\nimport { camelCaseToSentenceCase } from \"../../themes/utils.js\";\nimport {\n DEFAULT_INPUT_WIDGET_INPUT_STYLE_VARIANT,\n DEFAULT_INPUT_WIDGET_LABEL_STYLE_VARIANT,\n} from \"../../utils/form.js\";\nimport { Prop } from \"../props-builder.js\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type { TextStyleWithVariant } from \"@superblocksteam/library-shared/types\";\n\nexport const createTextStyleCompositeBase = () => ({\n variant: Prop.string(),\n textColor: Prop.composite({\n default: Prop.string(),\n }),\n fontFamily: Prop.string().propertiesPanel({\n label: \"Font family\",\n controlType: \"DROP_DOWN\",\n options: getFontFamilyOptions(BASE_THEME_NEW_APPS.availableFonts),\n }),\n fontSize: Prop.dimension().propertiesPanel({\n label: \"Font size\",\n unitOptions: [\n {\n label: \"Pixels\",\n value: \"px\",\n subText: \"Fixed value that remains constant\",\n },\n ],\n precision: 0,\n controlType: \"INPUT_NUMBER\",\n minValue: 1,\n }),\n fontWeight: Prop.number().propertiesPanel({\n label: \"Font weight\",\n controlType: \"DROP_DOWN\",\n // filter available options based on the font family\n options: FONT_WEIGHT_OPTIONS,\n }),\n fontStyle: Prop.string().propertiesPanel({\n label: \"Font style\",\n controlType: \"DROP_DOWN\",\n options: FONT_STYLE_OPTIONS,\n }),\n // TODO: this doesn't work as expected. We need to find a way to implement\n // transformValueOnUnitChange function for this and letter spacing\n // todo add warning\n lineHeight: Prop.string().propertiesPanel({\n label: \"Line height\",\n defaultUnit: \"\",\n controlType: \"INPUT_NUMBER\",\n unitOptions: LINE_HEIGHT_UNIT_OPTIONS,\n }),\n letterSpacing: Prop.number().propertiesPanel({\n label: \"Letter spacing\",\n defaultUnit: \"em\",\n unitOptions: LETTER_SPACING_UNIT_OPTIONS,\n controlType: \"INPUT_NUMBER\",\n }),\n textTransform: Prop.string().propertiesPanel({\n label: \"Text transform\",\n controlType: \"DROP_DOWN\",\n options: TEXT_TRANSFORM_OPTIONS,\n }),\n});\n\nexport const basePropertiesPaneDisplay: PropertiesPanelDisplay<TextStyleWithVariant> =\n {\n label: \"Style\",\n controlType: \"TEXT_STYLE\",\n options: function (this) {\n return [\n ...Object.entries(Theme.typographies ?? {}).flatMap(\n ([key, typography]) => {\n return {\n label: (typography.name ??\n camelCaseToSentenceCase(key)) as string,\n value: key,\n subText: typography.fontSize,\n subTextPosition: \"right\",\n };\n },\n ),\n {\n label: \"Custom\",\n value: SB_CUSTOM_TEXT_STYLE, // Inline custom styling\n },\n ];\n },\n childrenDisplayMode: {\n type: \"popover\",\n title: \"Edit custom typography\",\n panelIdPropertyName: \"textStyle\",\n },\n enableTextColorConfig: true,\n defaultValue: function (this: any, _state: any, path: string) {\n const variant = get(this, path)?.variant;\n\n const defaultTextColor = Theme.typographies[variant].textColor.default;\n\n return {\n variant,\n textColor: {\n default: defaultTextColor,\n },\n } as TextStyleWithVariant;\n },\n };\n\nexport const textStyleProp = ({\n baseProp = createTextStyleCompositeBase(),\n propertiesPanel,\n}: {\n baseProp?: ReturnType<typeof createTextStyleCompositeBase>;\n propertiesPanel?: Omit<\n Partial<PropertiesPanelDisplay<TextStyleWithVariant, \"TEXT_STYLE\">>,\n \"controlType\"\n >;\n} = {}) =>\n Prop.composite(baseProp)\n .readAndWrite()\n .propertiesPanel({\n ...basePropertiesPaneDisplay,\n ...propertiesPanel,\n isJSConvertible: false,\n })\n .docs({\n description:\n \"Configures the text styling including font family, size, weight, color, and other typography properties\",\n }) as Prop<TextStyleWithVariant>;\n\nexport const colorProp = (\n schema: Omit<\n Partial<PropertiesPanelDisplay<string, \"COLOR_PICKER\">>,\n \"controlType\"\n >,\n) => {\n return Prop.string()\n .readAndWrite()\n .propertiesPanel({\n ...schema,\n controlType: \"COLOR_PICKER\",\n isJSConvertible: true,\n })\n .docs({\n description:\n \"Allows selection of a color value using a color picker interface\",\n });\n};\n\nexport const labelTextStyle = () =>\n textStyleProp({\n propertiesPanel: {\n label: \"Label style\",\n isVisible: function (this: any) {\n return !!this.label;\n },\n },\n }).default(() => ({\n variant: DEFAULT_INPUT_WIDGET_LABEL_STYLE_VARIANT,\n }));\n\nexport const inputTextStyle = () =>\n textStyleProp({\n propertiesPanel: {\n label: \"Input style\",\n },\n }).default(() => ({\n variant: DEFAULT_INPUT_WIDGET_INPUT_STYLE_VARIANT,\n }));\n","import { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { Prop } from \"../props-builder.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type {\n BorderStyleBlock,\n PerCornerBorderRadius,\n PerSideBorder,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const createPerSideBorder = (\n border: BorderStyleBlock,\n): PerSideBorder => {\n return {\n left: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n right: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n top: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n bottom: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n };\n};\n\nexport const border = (\n propertiesPanelConfig: Partial<\n Partial<PropertiesPanelDisplay<PerSideBorder, \"BORDER_CONTROL\">>\n > = {},\n) => {\n return Prop.any<PerSideBorder>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Border\",\n controlType: \"BORDER_CONTROL\",\n description: \"Controls the border of the component\",\n visibility: \"SHOW_NAME\",\n isRemovable: true,\n defaultOnAdd: () => createPerSideBorder(Theme.defaultBorder),\n isJSConvertible: false,\n ...propertiesPanelConfig,\n })\n .docs({\n description:\n \"Component border styling including color, width, and style for all sides\",\n });\n};\n\nexport const createBorderRadiusObject = (\n borderRadius: Dim<\"px\" | \"%\">,\n): PerCornerBorderRadius => {\n return {\n topLeft: borderRadius,\n topRight: borderRadius,\n bottomRight: borderRadius,\n bottomLeft: borderRadius,\n };\n};\n\nexport const borderRadius = (\n propertiesPanelConfig: Partial<\n Partial<\n PropertiesPanelDisplay<PerCornerBorderRadius, \"BORDER_RADIUS_CONTROL\">\n >\n > = {},\n) => {\n return Prop.any<PerCornerBorderRadius>()\n .default(() => {\n const borderRadius = Theme.defaultBorder.borderRadius;\n return borderRadius.value !== 0\n ? createBorderRadiusObject(borderRadius)\n : undefined;\n })\n .readAndWrite()\n .propertiesPanel({\n label: \"Border radius\",\n controlType: \"BORDER_RADIUS_CONTROL\",\n description: \"Controls the border radius of the component\",\n visibility: \"SHOW_NAME\",\n isRemovable: true,\n defaultOnAdd: () =>\n createBorderRadiusObject(Theme.defaultBorder.borderRadius),\n isJSConvertible: false,\n ...propertiesPanelConfig,\n })\n .docs({\n description:\n \"Component border radius settings for each corner (top-left, top-right, bottom-right, bottom-left)\",\n });\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { BASE_THEME_NEW_APPS } from \"../../themes/constants.js\";\nimport { Prop, PropsPanelCategory, Section } from \"../props-builder.js\";\nimport type {\n ContainerLayout,\n HorizontalAlignment,\n VerticalAlignment,\n} from \"../../component-base/constants.js\";\nimport type { DimModes } from \"@superblocksteam/library-shared\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type { ScopedState } from \"@superblocksteam/library-shared/types\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\n/**\n * Sets width default to `fill` if no default width config provided.\n * Sets height default to `fit` if no default height config provided.\n */\nexport const size = ({\n defaults,\n showWidth,\n showHeight,\n}: {\n defaults?: {\n width?: Dim<DimModes>;\n height?: Dim<DimModes>;\n };\n showWidth?: (this: any, s: ScopedState) => boolean;\n showHeight?: (this: any, s: ScopedState) => boolean;\n} = {}) => {\n // Default behavior must match library/src/lib/internal-details/reactive-component.tsx\n let heightProperty = Prop.dimension().readAndWrite().propertiesPanel({\n label: \"Height\",\n controlType: \"HEIGHT_DROPDOWN\",\n isVisible: showHeight,\n });\n\n if (defaults?.height === undefined) {\n heightProperty = heightProperty.default(Dim.fit());\n } else {\n heightProperty = heightProperty.default(defaults.height);\n }\n heightProperty = heightProperty.docs({\n description: \"Sets the height of the component\",\n });\n\n let widthProperty = Prop.dimension().readAndWrite().propertiesPanel({\n label: \"Width\",\n controlType: \"WIDTH_DROPDOWN\",\n isVisible: showWidth,\n });\n\n if (defaults?.width === undefined) {\n widthProperty = widthProperty.default(Dim.fill());\n } else {\n widthProperty = widthProperty.default(defaults.width);\n }\n widthProperty = widthProperty.docs({\n description: \"Sets the width of the component\",\n });\n\n const sizeProps = {\n width: widthProperty,\n height: heightProperty,\n };\n\n return sizeProps;\n};\n\n/** @deprecated Using it will override the defaults values defined in size() for width */\nexport const widthWithoutFit = () => {\n return {\n width: Prop.dimension<Dim<Exclude<DimModes, \"fit\">>>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Width\",\n controlType: \"WIDTH_DROPDOWN\",\n })\n .docs({\n description:\n \"Sets the width of the component (excluding fit-content mode)\",\n }),\n };\n};\n\nexport const shouldScrollContents = (defaultValue = false) => ({\n shouldScrollContents: Prop.boolean()\n .readAndWrite()\n .propertiesPanel({\n label: \"Scroll contents\",\n controlType: \"SWITCH\",\n })\n .default(defaultValue)\n .docs({\n description: `Enables scrolling when content exceeds the container bounds (true applies overflow: auto, false applies nothing)`,\n }),\n});\n\nexport const visible = () => ({\n isVisible: Prop.boolean()\n .default(true)\n .readAndWrite()\n .propertiesPanel({\n label: \"Visible\",\n })\n .docs({\n description: \"Controls whether the component is visible on the page\",\n }),\n});\n\nexport const spacing = (\n options?: { default?: Dim<\"px\"> } & Partial<\n PropertiesPanelDisplay<Dim<\"px\">, \"SPACING_CONTROL\">\n >,\n) => {\n const { default: defaultSpacing, ...rest } = options ?? {};\n const themeValue = options?.themeValue ?? BASE_THEME_NEW_APPS.spacing;\n if (typeof themeValue === \"function\") {\n // Note: we don't support accessing the theme in `default()` yet\n throw new Error(\"Not implemented yet: theme value cannot be a function\");\n }\n\n let spacing = Prop.dimension<Dim<\"px\">>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Spacing\",\n description:\n \"Space between components in container. If the alignment is space-between or space-around, this is the minimum spacing between items\",\n controlType: \"SPACING_CONTROL\",\n themeValue: themeValue ?? Theme.spacing,\n ...rest,\n })\n .docs({\n description: \"Sets the space between child components in the container\",\n }) as Prop<Dim<\"px\">, false>;\n\n if (defaultSpacing || themeValue) {\n spacing = spacing.default(defaultSpacing ?? themeValue);\n }\n\n return { spacing };\n};\n\nexport const padding = (\n options?: { default?: Padding | ((this: any) => Padding) } & Partial<\n PropertiesPanelDisplay<Padding, \"PADDING_CONTROL\">\n >,\n) => {\n const { default: defaultP, ...rest } = options ?? {};\n const themeValue = options?.themeValue ?? BASE_THEME_NEW_APPS.padding;\n\n if (typeof themeValue === \"function\") {\n // Note: we don't support accessing the theme in `default()` yet\n throw new Error(\"Not implemented yet: theme value cannot be a function\");\n }\n\n let padding = Prop.any<Padding>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Padding\",\n description: \"The padding for the component\",\n controlType: \"PADDING_CONTROL\",\n themeValue: function (this: any) {\n return themeValue ?? Theme.padding;\n },\n ...rest,\n })\n .default(themeValue)\n .docs({\n description: \"Sets the internal spacing around the component's content\",\n }) as Prop<Padding, true>;\n\n if (defaultP || themeValue) {\n padding = padding.default(defaultP ?? themeValue);\n }\n\n return { padding };\n};\n\nexport const margin = () => ({\n margin: Prop.any<\n | {\n top: Dim<\"px\">;\n bottom: Dim<\"px\">;\n left: Dim<\"px\">;\n right: Dim<\"px\">;\n }\n | undefined\n >()\n .default({\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n })\n .readAndWrite()\n .propertiesPanel({\n label: \"Margin\",\n controlType: \"MARGIN_CONTROL\",\n isRemovable: true,\n visibility: \"SHOW_NAME\",\n })\n .docs({ description: \"Sets the external spacing around the component\" }),\n});\n\nexport const getAlignmentProps = <\n LayoutType extends \"vertical\" | \"horizontal\",\n>() => {\n return {\n // TODO: make default and options dynamic\n verticalAlign: Prop.string<VerticalAlignment<LayoutType>>()\n .readAndWrite()\n .default(function (this: { layout: LayoutType }) {\n // Flexbox defaults: justify-content: flex-start, align-items: stretch\n // For horizontal layout (flex-direction: row): verticalAlign controls align-items (cross-axis) -> default stretch\n // For vertical layout (flex-direction: column): verticalAlign controls justify-content (main-axis) -> default top (flex-start)\n return this.layout === \"horizontal\"\n ? (\"stretch\" as VerticalAlignment<LayoutType>)\n : (\"top\" as VerticalAlignment<LayoutType>);\n })\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n // TODO: When providing static options for a variant, the last variant is overriding\n // the options. Until we fix it, we use dynamic options as a woraround.\n options: function (this: { layout: LayoutType }) {\n const layoutType = this.layout;\n\n return [\n {\n label: \"\",\n value: \"top\",\n icon: \"VERTICAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"VERTICAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n // Add stretch for horizontal layout (cross-axis alignment)\n ...(layoutType === \"horizontal\"\n ? [\n {\n label: \"\",\n value: \"stretch\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ]\n : []),\n // Add space-between/around for vertical layout (main-axis alignment)\n ...(layoutType === \"vertical\"\n ? [\n {\n label: \"\",\n value: \"space-between\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ]\n : []),\n ];\n },\n })\n .docs({\n description:\n \"Controls the vertical alignment of child components within the container, defaults to top for vertical layout and stretch for horizontal layout\",\n }),\n // TODO: make default and options dynamic\n horizontalAlign: Prop.string<HorizontalAlignment<LayoutType>>()\n .readAndWrite()\n .default(function (this: { layout: LayoutType }) {\n // Flexbox defaults: justify-content: flex-start, align-items: stretch\n // For vertical layout (flex-direction: column): horizontalAlign controls align-items (cross-axis) -> default stretch\n // For horizontal layout (flex-direction: row): horizontalAlign controls justify-content (main-axis) -> default left (flex-start)\n return this.layout === \"horizontal\"\n ? (\"left\" as HorizontalAlignment<LayoutType>)\n : (\"stretch\" as HorizontalAlignment<LayoutType>);\n })\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n // TODO: When providing static options for a variant, the last variant is overriding\n // the options. Until we fix it, we use dynamic options as a woraround.\n options: function (this: { layout: LayoutType }) {\n const layoutType = this.layout;\n\n return [\n {\n label: \"\",\n value: \"left\",\n icon: \"HORIZONTAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"HORIZONTAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n // Add stretch for vertical layout (cross-axis alignment)\n ...(layoutType === \"vertical\"\n ? [\n {\n label: \"\",\n value: \"stretch\" as HorizontalAlignment<LayoutType>,\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ]\n : []),\n // Add space-between/around for horizontal layout (main-axis alignment)\n ...(layoutType === \"horizontal\"\n ? [\n {\n label: \"\",\n value: \"space-between\" as HorizontalAlignment<LayoutType>,\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\" as HorizontalAlignment<LayoutType>,\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ]\n : []),\n ];\n },\n })\n .docs({\n description:\n \"Controls the horizontal alignment of child components within the container, defaults to left for horizontal layout and stretch for vertical layout\",\n }),\n };\n};\n\nexport const containerLayout = (sizeProps?: Record<string, Prop<any, any>>) =>\n Prop.union({\n shared: {\n layout: Prop.string<ContainerLayout>()\n .readAndWrite()\n .default(\"vertical\")\n .onEdit(({ sourceId, updates }) => {\n const baseUpdate = {\n [sourceId]: {\n props: updates,\n meta: {},\n },\n };\n const editStore = rootStore.editStore;\n if (!editStore) {\n return baseUpdate;\n }\n\n // Layout update logic\n // we can return baseUpdate directly without complex layout conversion logic\n return baseUpdate;\n })\n .propertiesPanel({\n label: \"Layout\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"vertical\",\n icon: \"LAYOUT_VERTICAL_ARROWS\",\n tooltip: \"Vertical\",\n },\n {\n label: \"\",\n value: \"horizontal\",\n icon: \"LAYOUT_HORIZONTAL_ARROWS\",\n tooltip: \"Horizontal\",\n },\n ],\n })\n .docs({\n description:\n \"Controls how child components are arranged - vertical stack or horizontal row\",\n }),\n },\n variants: [\n {\n layout: Prop.literal(\"vertical\"),\n ...getAlignmentProps<\"vertical\">(),\n ...sizeProps,\n },\n {\n layout: Prop.literal(\"horizontal\"),\n ...getAlignmentProps<\"horizontal\">(),\n ...sizeProps,\n },\n ] as const,\n });\n\nexport const basicLayout = ({\n sizeParams = {},\n}: {\n sizeParams?: Parameters<typeof size>[0];\n} = {}) =>\n Section.category(PropsPanelCategory.Layout)\n .add(size(sizeParams))\n .add(visible());\n","import { Prop } from \"../props-builder.js\";\n\nexport const loading = () =>\n Prop.boolean()\n .default(undefined)\n .readAndWrite()\n .propertiesPanel({\n label: \"Loading\",\n controlType: \"RADIO_BUTTON_GROUP\",\n description:\n \"Whether the component is loading, switch to code mode to set the loading state based whatever you want\",\n options: [\n {\n label: \"Off\",\n value: false,\n showTooltip: false,\n },\n {\n label: \"On\",\n value: true,\n showTooltip: false,\n },\n {\n label: \"Auto\",\n tooltip: \"Loading state is based on if referenced data is loading\",\n showTooltip: true,\n value: undefined,\n },\n ],\n })\n .docs({\n description:\n \"Controls the loading state of the component - off, on, or auto-detected based on data loading\",\n });\n","import { useMemo } from \"react\";\nimport { styleWithPrefix } from \"../../styling/style-as-class.js\";\nimport type {\n VerticalAlignment,\n HorizontalAlignment,\n} from \"../../component-base/constants.js\";\n\n// Stack utility classes - created once\nexport const STACK_CLASSES = {\n base: styleWithPrefix(\"sb-stack-base\")`\n @layer components {\n display: flex;\n position: relative;\n box-sizing: border-box;\n }\n `,\n\n // Direction classes\n directionColumn: styleWithPrefix(\"sb-direction-column\")`\n @layer components {\n flex-direction: column;\n }\n `,\n\n directionRow: styleWithPrefix(\"sb-direction-row\")`\n @layer components {\n flex-direction: row;\n }\n `,\n\n // Justify content classes\n justifyStart: styleWithPrefix(\"sb-justify-start\")`\n @layer components {\n justify-content: flex-start;\n }\n `,\n\n justifyCenter: styleWithPrefix(\"sb-justify-center\")`\n @layer components {\n justify-content: center;\n }\n `,\n\n justifyEnd: styleWithPrefix(\"sb-justify-end\")`\n @layer components {\n justify-content: flex-end;\n }\n `,\n\n justifySpaceBetween: styleWithPrefix(\"sb-justify-space-between\")`\n @layer components {\n justify-content: space-between;\n }\n `,\n\n justifySpaceAround: styleWithPrefix(\"sb-justify-space-around\")`\n @layer components {\n justify-content: space-around;\n }\n `,\n\n // Align items classes\n alignStart: styleWithPrefix(\"sb-align-start\")`\n @layer components {\n align-items: flex-start;\n }\n `,\n\n alignCenter: styleWithPrefix(\"sb-align-center\")`\n @layer components {\n align-items: center;\n }\n `,\n\n alignEnd: styleWithPrefix(\"sb-align-end\")`\n @layer components {\n align-items: flex-end;\n }\n `,\n\n alignStretch: styleWithPrefix(\"sb-align-stretch\")`\n @layer components {\n align-items: stretch;\n }\n `,\n\n // Overflow class\n overflowAuto: styleWithPrefix(\"sb-overflow-auto\")`\n @layer components {\n overflow: auto;\n }\n `,\n};\n\n// Stack style generator using utility classes\nexport interface StackStyleProps {\n direction: \"column\" | \"row\";\n verticalAlign?:\n | VerticalAlignment<\"vertical\">\n | VerticalAlignment<\"horizontal\">;\n horizontalAlign?:\n | HorizontalAlignment<\"vertical\">\n | HorizontalAlignment<\"horizontal\">;\n shouldScrollContents?: boolean;\n}\n\nexport const useStackClasses = (props: StackStyleProps): string[] => {\n const { direction, verticalAlign, horizontalAlign, shouldScrollContents } =\n props;\n return useMemo(() => {\n const layout = direction === \"column\" ? \"vertical\" : \"horizontal\";\n\n const classes = [STACK_CLASSES.base];\n\n // Direction\n classes.push(\n direction === \"column\"\n ? STACK_CLASSES.directionColumn\n : STACK_CLASSES.directionRow,\n );\n\n // Alignment logic\n if (layout === \"vertical\") {\n // For vertical layout: verticalAlign controls justify-content, horizontalAlign controls align-items\n if (verticalAlign) {\n switch (verticalAlign) {\n case \"top\":\n classes.push(STACK_CLASSES.justifyStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.justifyCenter);\n break;\n case \"bottom\":\n classes.push(STACK_CLASSES.justifyEnd);\n break;\n case \"space-between\":\n classes.push(STACK_CLASSES.justifySpaceBetween);\n break;\n case \"space-around\":\n classes.push(STACK_CLASSES.justifySpaceAround);\n break;\n }\n }\n if (horizontalAlign) {\n switch (horizontalAlign) {\n case \"left\":\n classes.push(STACK_CLASSES.alignStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.alignCenter);\n break;\n case \"right\":\n classes.push(STACK_CLASSES.alignEnd);\n break;\n case \"stretch\":\n classes.push(STACK_CLASSES.alignStretch);\n break;\n }\n }\n } else if (layout === \"horizontal\") {\n // For horizontal layout: horizontalAlign controls justify-content, verticalAlign controls align-items\n if (horizontalAlign) {\n switch (horizontalAlign) {\n case \"left\":\n classes.push(STACK_CLASSES.justifyStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.justifyCenter);\n break;\n case \"right\":\n classes.push(STACK_CLASSES.justifyEnd);\n break;\n case \"space-between\":\n classes.push(STACK_CLASSES.justifySpaceBetween);\n break;\n case \"space-around\":\n classes.push(STACK_CLASSES.justifySpaceAround);\n break;\n }\n }\n if (verticalAlign) {\n switch (verticalAlign) {\n case \"top\":\n classes.push(STACK_CLASSES.alignStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.alignCenter);\n break;\n case \"bottom\":\n classes.push(STACK_CLASSES.alignEnd);\n break;\n case \"stretch\":\n classes.push(STACK_CLASSES.alignStretch);\n break;\n }\n }\n }\n\n // Overflow\n if (shouldScrollContents) {\n classes.push(STACK_CLASSES.overflowAuto);\n }\n\n return classes;\n }, [direction, verticalAlign, horizontalAlign, shouldScrollContents]);\n};\n","import { observer } from \"mobx-react-lite\";\nimport React from \"react\";\n\n// https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n// fixes the automatic type inferences for stack components\n\nimport { colorProp } from \"../../properties-panel/mixins/appearance-properties.js\";\nimport {\n border,\n borderRadius,\n} from \"../../properties-panel/mixins/appearance.js\";\nimport {\n margin,\n visible,\n size,\n padding,\n spacing,\n shouldScrollContents,\n} from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport { Prop, Section } from \"../../properties-panel/props-builder.js\";\nimport { PropsPanelCategory } from \"../../properties-panel/props-builder.js\";\nimport { useStackClasses } from \"./stack-classes.js\";\nimport type {\n HorizontalAlignment,\n VerticalAlignment,\n} from \"../../component-base/constants.js\";\nimport type { InternalPropsWithOptional } from \"../../properties-panel/props-builder.js\";\n\n/**\n * TODO:\n * - add more container props here, currently if any props has default, the container will need to fill missing attributes which is not ideal\n */\n\n// @refresh reset\nconst commonLayoutProps = {\n ...spacing(),\n ...padding(),\n ...size(),\n ...margin(),\n ...shouldScrollContents(true),\n ...visible(),\n};\n\nconst appearance = Section.category(PropsPanelCategory.Appearance).children({\n backgroundColor: colorProp({\n label: \"Background\",\n description: \"Changes the color of the background\",\n }),\n border: border(),\n borderRadius: borderRadius(),\n loading: loading(),\n});\n\nconst _propertiesDefinitionVStack = {\n layout: Section.category(PropsPanelCategory.Layout).add({\n verticalAlign: Prop.string<VerticalAlignment<\"vertical\">>()\n .readAndWrite()\n .default(\"top\") // Matches flexbox default (justify-content: flex-start)\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"top\",\n icon: \"VERTICAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"VERTICAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n {\n label: \"\",\n value: \"space-between\",\n icon: \"VERTICAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\",\n icon: \"VERTICAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ],\n }),\n horizontalAlign: Prop.string<HorizontalAlignment<\"vertical\">>()\n .readAndWrite()\n .default(\"stretch\") // Matches flexbox default (align-items: stretch)\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"left\",\n icon: \"VERTICAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"VERTICAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n {\n label: \"\",\n value: \"stretch\",\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ],\n }),\n ...commonLayoutProps,\n }),\n appearance,\n};\n\nconst _propertiesDefinitionHStack = {\n layout: Section.category(PropsPanelCategory.Layout).add({\n verticalAlign: Prop.string<VerticalAlignment<\"horizontal\">>()\n .readAndWrite()\n .default(\"stretch\") // Matches flexbox default (align-items: stretch)\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"top\",\n icon: \"HORIZONTAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"HORIZONTAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n {\n label: \"\",\n value: \"stretch\",\n icon: \"HORIZONTAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ],\n }),\n horizontalAlign: Prop.string<HorizontalAlignment<\"horizontal\">>()\n .readAndWrite()\n .default(\"left\") // Matches flexbox default (justify-content: flex-start)\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"left\",\n icon: \"HORIZONTAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"HORIZONTAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n {\n label: \"\",\n value: \"space-between\",\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\",\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ],\n }),\n ...commonLayoutProps,\n }),\n appearance,\n};\n\n// Define a type alias for the properties you want to make optional\ntype OptionalProps =\n | \"verticalAlign\"\n | \"horizontalAlign\"\n | \"margin\"\n | \"padding\"\n | \"spacing\"\n | \"backgroundColor\"\n | \"border\"\n | \"borderRadius\"\n | \"shouldScrollContents\"\n | \"loading\";\n\ntype InternalVStackProps = InternalPropsWithOptional<\n typeof _propertiesDefinitionVStack,\n OptionalProps\n>;\n\ntype InternalHStackProps = InternalPropsWithOptional<\n typeof _propertiesDefinitionHStack,\n OptionalProps\n> & {\n [key: string]: any;\n};\n\nconst InternalStack = observer(\n ({\n direction = \"column\",\n spacing,\n children,\n shouldScrollContents,\n className,\n ...props\n }:\n | (InternalVStackProps & {\n direction: \"column\";\n })\n | (InternalHStackProps & {\n direction: \"row\";\n })) => {\n const { height, width, ...rest } = props;\n\n const stackClasses = useStackClasses({\n direction,\n verticalAlign: props.verticalAlign,\n horizontalAlign: props.horizontalAlign,\n shouldScrollContents,\n });\n\n const combinedClassName = [...stackClasses, className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={combinedClassName}\n {...rest}\n ref={props.dropTargetRef as React.LegacyRef<HTMLDivElement>}\n >\n {children}\n </div>\n );\n },\n);\n\nexport const InternalVStack = (props: InternalVStackProps) => {\n const { verticalAlign, ...rest } = props;\n return (\n <InternalStack\n direction={\"column\"}\n {...rest}\n verticalAlign={verticalAlign ?? \"top\"}\n />\n );\n};\n\nexport const InternalHStack = (props: InternalHStackProps) => {\n const { verticalAlign, ...rest } = props;\n return (\n <InternalStack\n direction=\"row\"\n {...rest}\n verticalAlign={verticalAlign ?? \"stretch\"}\n />\n );\n};\n","import { isEmpty } from \"lodash\";\nimport { useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport useAlignmentStyles from \"../../../hooks/use-alignment-styles.jsx\";\nimport { useTheme } from \"../../../internal-details/theme-context.jsx\";\nimport usePassthroughProps from \"../../component-base/use-passthrough-props.js\";\nimport useEditor from \"../../hooks/use-editor.js\";\nimport { CLASS_NAMES } from \"../../themes/classnames.js\";\nimport { noBorderOject } from \"../../themes/constants.js\";\nimport {\n generateClassName,\n getCanvasClassName,\n} from \"../../themes/generate-class-name.js\";\n\nimport { useComputeComponentStyles } from \"../../themes/generatedStyles/generate-component-styles.js\";\nimport { InternalHStack, InternalVStack } from \"../stack/index.jsx\";\nimport type { propertiesDefinition } from \"./props.js\";\nimport type { ContainerLayout } from \"../../component-base/constants.js\";\nimport type { InternalPropsWithOptional } from \"../../properties-panel/props-builder.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { PerSideBorder } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nconst EMPTY_CONTAINER_MIN_HEIGHT = 72;\n\ntype OptionalProps = \"backgroundColor\" | \"border\" | \"borderRadius\" | \"loading\";\n\ntype ContainerProps<T> = Omit<\n InternalPropsWithOptional<typeof propertiesDefinition, OptionalProps>,\n \"layout\"\n> & {\n layout: T;\n};\n\n// Minimal props for the unstyled container - just what's needed for layout switching\ntype UnstyledContainerProps = {\n layout: ContainerLayout;\n style?: CSSProperties;\n className?: string;\n children?: ReactNode;\n isVisible?: boolean;\n spacing?: Dim<\"px\">;\n columns?: number;\n rowHeight?: Dim<\"px\">;\n border?: PerSideBorder;\n};\n\nexport const UnstyledInternalContainer = (props: UnstyledContainerProps) => {\n const { layout = \"vertical\", children, isVisible = true, ...rest } = props;\n\n switch (layout) {\n case \"horizontal\":\n return (\n <InternalHStack\n margin={undefined}\n isVisible={isVisible}\n spacing={rest.spacing}\n {...rest}\n >\n {children}\n </InternalHStack>\n );\n case \"vertical\":\n default:\n return (\n <InternalVStack\n margin={undefined}\n isVisible={isVisible}\n spacing={rest.spacing}\n {...rest}\n >\n {children}\n </InternalVStack>\n );\n }\n};\n\nconst StyledContainerWrapper = styled.div`\n height: 100%;\n width: 100%;\n overflow: hidden;\n box-sizing: border-box;\n`;\n/**\n * TODO:\n * - interaciton rect of children will show outside of container if overflow\n * - move card style related defaultprops to props file and update dynamically when supported\n * - the spacing prop is not same type between stack and grid, enable when we clean it up\n * - consider border and padding for grid layout\n * - border style are showing some control default value even actually undefined. styles are coming from container classes but ideally we should set them as default props?\n * - move more props to inner layout component\n */\n\nexport const InternalContainer = <T extends ContainerLayout>(\n props: ContainerProps<T>,\n) => {\n const { style, ...passThroughProps } = usePassthroughProps(props);\n const { isEditing } = useEditor();\n\n const { theme } = useTheme();\n\n const componentClasses = useMemo(\n () => [\n \"container-component\",\n props.variant === \"card\"\n ? CLASS_NAMES.DEFAULT_CONTAINER_STYLE_CARD\n : CLASS_NAMES.DEFAULT_CONTAINER_STYLE_NONE,\n generateClassName(props.name),\n CLASS_NAMES.STYLED_SCROLLBAR,\n ...(props.shouldScrollContents ? [getCanvasClassName()] : []),\n ...(props.selected ? [CLASS_NAMES.ACTIVE_MODIFIER] : []),\n ],\n [props.variant, props.name, props.shouldScrollContents, props.selected],\n );\n\n const { borderStyle, paddingStyle, backgroundStyle } =\n useComputeComponentStyles({\n border: props.border,\n borderRadius: props.borderRadius,\n padding: props.padding,\n backgroundColor: props.backgroundColor,\n });\n\n const alignmentStyles = useAlignmentStyles({\n layout: props.layout as ContainerLayout,\n verticalAlign: props.verticalAlign,\n horizontalAlign: props.horizontalAlign,\n });\n\n const innerLayoutStyle = useMemo(\n () => ({\n ...alignmentStyles,\n // container wrapper already has correct height set, so inner has height to be 100%.\n height: \"100%\",\n width: \"100%\",\n }),\n [alignmentStyles],\n );\n\n const shouldApplyEmptyContainerMinHeight =\n isEditing && props.height?.mode !== \"px\" && isEmpty(props.children);\n\n const containerStyle: CSSProperties = useMemo(\n () => ({\n // ensures childrens auto sizing are calculated correctly against the container's implicit height\n // (mostly for flex children when the container has no set height [minHeight, maxHeight, auto height])\n display: \"grid\",\n gridTemplate: \"minmax(0px, 1fr) / minmax(0px, 1fr)\",\n ...borderStyle,\n ...paddingStyle,\n ...backgroundStyle,\n ...(props.shouldScrollContents ? { overflow: \"auto\" } : {}),\n ...style,\n ...(shouldApplyEmptyContainerMinHeight\n ? { minHeight: `${EMPTY_CONTAINER_MIN_HEIGHT}px` }\n : {}),\n }),\n [\n borderStyle,\n paddingStyle,\n backgroundStyle,\n props.shouldScrollContents,\n style,\n shouldApplyEmptyContainerMinHeight,\n ],\n );\n\n const classes = useMemo(\n () => [...componentClasses, props.className].join(\" \"),\n [componentClasses, props.className],\n );\n\n // we still need a container wrapper with sb id so the dnd drop works. If put on the conditional div, it will not work.\n return (\n <StyledContainerWrapper\n className={classes}\n style={containerStyle}\n {...passThroughProps}\n data-container-layout={props.layout}\n >\n <UnstyledInternalContainer\n layout={props.layout}\n spacing={props.spacing}\n columns={props.columns}\n rowHeight={props.rowHeight}\n isVisible={props.isVisible ?? true}\n style={innerLayoutStyle}\n border={noBorderOject(theme)}\n >\n {props.children}\n </UnstyledInternalContainer>\n </StyledContainerWrapper>\n );\n};\n\n// TODO unused?\n// export const Container = registerComponentInternal(\n// \"Container\",\n// {\n// propertiesDefinition,\n// },\n// InternalContainer,\n// )\n// .editorConfig(editorConfig)\n// .addEditorTemplate(editorTemplate);\n","import styled from \"styled-components\";\n\nexport const Spinner = styled.span`\n width: 50px;\n height: 50px;\n border: 4px solid #e0e1e5;\n border-bottom-color: #8c95a1;\n border-radius: 50%;\n display: inline-block;\n box-sizing: border-box;\n animation: rotation 0.5s linear infinite;\n\n @keyframes rotation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const FullPageSpinner = () => {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100svh\",\n width: \"100%\",\n }}\n >\n <Spinner />\n </div>\n );\n};\n","export const CSS_CLASSES = {\n SUSPENSE_FALLBACK: \"sb-suspense-fallback\",\n ANCHOR_NAME: \"sb-anchor-name\",\n} as const;\n","import { useDraggable } from \"@dnd-kit/core\";\nimport type { ComponentDraggableData } from \"../types\";\n\nexport function useComponentDraggable({\n instanceId,\n disableDrag,\n}: ComponentDraggableData & { disableDrag: boolean }): ReturnType<\n typeof useDraggable\n> {\n return useDraggable({\n id: instanceId,\n disabled: disableDrag,\n data: {\n instanceId,\n },\n });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useComponentDraggable } from \"./hooks/use-component-draggable.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport function useDraggableWidget(props: {\n instanceId: SbInstance;\n disableDrag?: boolean;\n}) {\n const editStore = getEditStore();\n\n const disableDrag =\n props.disableDrag || editStore.ui.dnd.isDraggingNewComponent;\n\n const specificWidgetDragDisabled = !editStore.ui.dnd.canDragWidget(\n props.instanceId,\n );\n\n const { setNodeRef, isDragging, listeners, attributes } =\n useComponentDraggable({\n instanceId: props.instanceId,\n disableDrag: disableDrag ?? false,\n });\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (e.target instanceof HTMLElement && e.target.dataset.ignoreDnd) {\n return;\n }\n if (specificWidgetDragDisabled) {\n e.stopPropagation();\n } else {\n listeners?.onPointerDown(e);\n }\n },\n [specificWidgetDragDisabled, listeners],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (specificWidgetDragDisabled) {\n e.stopPropagation();\n } else {\n listeners?.onPointerMove(e);\n }\n },\n [specificWidgetDragDisabled, listeners],\n );\n return useMemo(() => {\n return {\n ...listeners,\n ...attributes,\n className: \"sb-draggable-wrapper\",\n \"data-is-dragged\": isDragging,\n onPointerDown,\n onPointerMove,\n setNodeRef,\n };\n }, [\n listeners,\n attributes,\n isDragging,\n onPointerDown,\n onPointerMove,\n setNodeRef,\n ]);\n}\n","import { createContext, useCallback, useContext, useMemo } from \"react\";\nimport { useDraggableWidget } from \"../../edit-mode/dnd/use-draggable-widget.js\";\nimport type { IdentifierInfo } from \"./lib/features/name-manager\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { LegacyRef } from \"react\";\n\nconst DraggablePropsContext = createContext<{\n instanceId: SbInstance | undefined;\n props: {\n className?: string;\n ref: React.Ref<HTMLElement> | LegacyRef<HTMLElement> | null;\n } & React.HTMLAttributes<HTMLElement>;\n}>({\n instanceId: undefined,\n props: {\n className: undefined,\n ref: null,\n },\n});\n\nexport const DraggablePropsProvider = ({\n identifier,\n disableDrag,\n children,\n}: {\n identifier: IdentifierInfo;\n disableDrag: boolean;\n children: React.ReactNode;\n}) => {\n const draggableWidgetProps = useDraggableWidget({\n instanceId: identifier.instanceId,\n disableDrag,\n });\n\n const setNodeRef = draggableWidgetProps.setNodeRef;\n const handleRef = useCallback(\n (el: HTMLElement | null) => {\n setNodeRef(el);\n },\n [setNodeRef],\n );\n\n const value = useMemo(() => {\n return {\n instanceId: identifier.instanceId,\n props: {\n ...draggableWidgetProps,\n ref: handleRef,\n },\n };\n }, [draggableWidgetProps, handleRef, identifier.instanceId]);\n return (\n <DraggablePropsContext.Provider value={value}>\n {children}\n </DraggablePropsContext.Provider>\n );\n};\n\nconst EMPTY_PROPS = {};\nexport const useMyDraggableProps = (instanceId: SbInstance) => {\n const contextValue = useContext(DraggablePropsContext);\n if (contextValue.instanceId !== instanceId) {\n return EMPTY_PROPS;\n }\n return contextValue.props;\n};\n","<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4 12L12 4M4 4L12 12\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n","enum Indices {\n Layer0,\n Layer1,\n Layer2,\n Layer3,\n Layer4,\n Layer5,\n Layer6,\n Layer7,\n Layer8,\n Layer9,\n Layer10,\n Layer11,\n Layer12,\n Layer13,\n Layer14,\n LayerMax = 99999,\n}\n\n// the inside canvas layers and outside layers will not interfere with each other\n// TODO: split them into two Layer objects\nexport const Layers = {\n //-------------- inside canvas --------------\n\n dragPreview: Indices.Layer1,\n\n visibilityOverlay: Indices.Layer4,\n selectedRect: Indices.Layer4, // interaction rect\n focusedRect: Indices.Layer5,\n namePill: Indices.Layer6, // interaction rect name pill\n\n closeButton: Indices.Layer4, // modal or slideout close button\n stickySections: Indices.Layer3,\n scrollbars: Indices.Layer5, // for ScrollContainer, inside positionedWidget\n componentBorder: Indices.Layer3, // for containers\n resizeWrapper: Indices.Layer4, // inside positioned widget, always show\n // only show when focused/selected, in parallel with widgetName\n // selectedWrapper: Indices.Layer4,\n\n parentSelectedWrapper: Indices.Layer3,\n widgetResizer: Indices.Layer4, // widget resizer which is 4 edges and 4 corners\n // TODO: refactor the resizer below, looks like some is not needed.\n resizer: Indices.Layer6, // section column resizer and resizer disabled tooltip,\n dialog: Indices.Layer7, // for dialog component or detached components (such as slideouts, modals)\n\n widgetName: Indices.Layer4,\n selectionConstraintResize: Indices.Layer4, // min max height constraint\n canvasBreadCrumbPopover: Indices.Layer5,\n // layers for vstack dnd\n vstackDropPlaceholder: Indices.Layer2,\n focusedInput: Indices.Layer14, // blueprint control group focused input\n\n max: Indices.LayerMax,\n};\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { observer } from \"mobx-react-lite\";\nimport { useEffect, useId, useState } from \"react\";\nimport { useCallback } from \"react\";\nimport styled from \"styled-components\";\n\nimport CloseIcon from \"../lib/user-facing/assets/icons/close.svg\";\nimport ErrorIcon from \"../lib/user-facing/assets/icons/system-error.svg\";\nimport { Layers } from \"../lib/user-facing/layers.js\";\nimport { colors } from \"../lib/user-facing/styling/colors.js\";\nimport { CLASS_NAMES } from \"../lib/user-facing/themes/classnames.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\n\nconst PopoverContent = styled(Popover.Content)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-size: 14px;\n max-width: var(--radix-popover-content-available-width);\n padding: 6px 8px;\n background: white;\n border: 1px solid ${colors.GREY_25};\n z-index: ${Layers.dialog};\n box-shadow:\n hsl(206 22% 7% / 35%) 0px 10px 38px -10px,\n hsl(206 22% 7% / 20%) 0px 10px 20px -15px;\n`;\n\nconst PopoverClose = styled(Popover.Close)`\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n`;\n\nconst Form = styled.form`\n display: flex;\n gap: 8px;\n`;\n\nconst Input = styled.input`\n border: 1px solid ${colors.GREY_50};\n border-radius: 4px;\n padding: 4px 8px;\n font-size: 12px;\n`;\n\nconst Button = styled.button`\n border: 1px solid ${colors.ACCENT_BLUE_500};\n border-radius: 4px;\n padding: 4px 8px;\n background-color: ${colors.ACCENT_BLUE_500};\n color: white;\n transition: opacity 0.2s ease-in-out;\n font-size: 12px;\n\n &:hover {\n opacity: 0.8;\n }\n`;\n\nconst Text = styled.p`\n max-width: 15rem;\n`;\n\nexport const DuplicatedNamePopover = observer<{\n name: string;\n sourceId: SbElement;\n}>(({ name, sourceId }) => {\n const [newName, setNewName] = useState(name);\n\n const handleRename = useCallback(\n (evt: React.FormEvent<HTMLFormElement>) => {\n evt.preventDefault();\n evt.stopPropagation();\n getEditStore().operationManager.renameWidget({\n sourceId,\n newName,\n renameInAst: false,\n });\n },\n [newName, sourceId],\n );\n\n useEffect(() => {\n setNewName(name);\n }, [name]);\n\n const id = useId();\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <ErrorIcon style={{ color: \"red\" }} />\n </Popover.Trigger>\n <Popover.Portal>\n <PopoverContent>\n <Text>\n There are multiple components named <strong>{name}</strong>. Please\n provide a unique name to continue editing.\n </Text>\n <Form onSubmit={handleRename}>\n <label className=\"sr-only\" htmlFor={id}>\n New name\n </label>\n <Input\n type=\"text\"\n id={id}\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n autoCorrect=\"false\"\n />\n <Button\n className={`${CLASS_NAMES.BUTTON} ${CLASS_NAMES.PRIMARY_BUTTON}`}\n type=\"submit\"\n >\n Rename\n </Button>\n </Form>\n <PopoverClose aria-label=\"Close\">\n <CloseIcon />\n </PopoverClose>\n <Popover.Arrow className=\"PopoverArrow\" style={{ fill: \"white\" }} />\n </PopoverContent>\n </Popover.Portal>\n </Popover.Root>\n );\n});\n","<svg width=\"28\" height=\"20\" viewBox=\"0 0 28 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M20.4101 1.23853C17.6302 1.48173 15.5588 3.8863 15.7067 6.65157L18.3547 6.41988C18.5199 5.44519 19.325 4.66603 20.3558 4.57584C21.5806 4.46868 22.6602 5.37468 22.7674 6.59942C22.8594 7.65142 22.204 8.59642 21.2411 8.90995L21.4215 10.9716L21.4564 10.9921C22.0311 10.9419 22.6694 10.5377 23.0253 10.2436C24.6427 8.90661 24.7352 7.04449 24.7312 6.57165C24.7306 6.50857 24.7781 6.45461 24.841 6.44911L25.1108 6.42549C25.2166 6.41622 25.294 6.32392 25.2779 6.21892C25.21 5.77476 24.9744 4.64168 24.2597 3.80041C24.1964 3.72586 24.2411 3.60595 24.3386 3.59742L24.741 3.56221C24.8834 3.54975 24.9588 3.39563 24.8716 3.28231C24.3794 2.64217 22.8772 1.02267 20.4101 1.23853Z\" fill=\"url(#paint0_linear_735_5200)\"/>\n<path opacity=\"0.12\" d=\"M18.3328 6.98742C18.4399 8.21219 19.5197 9.11815 20.7444 9.011L21.2988 8.9625C20.6867 6.22284 19.3122 5.41204 19.3122 5.41204C19.4647 5.02627 20.3564 4.57581 20.3564 4.57581C19.1316 4.68296 18.2257 5.76269 18.3328 6.98742Z\" fill=\"#2A333D\"/>\n<path d=\"M6.64987 12.5642L6.69529 13.0564L6.46722 10.4494C5.43191 10.2861 4.60087 9.43595 4.50537 8.34472C4.39291 7.05918 5.34387 5.92583 6.62945 5.81337C7.39383 5.74649 8.10441 6.0556 8.57856 6.58745L11.1668 6.36103C10.4551 4.10391 8.25129 2.56222 5.79599 2.77703C3.32876 2.99288 2.13065 4.8486 1.75707 5.56449C1.69093 5.69126 1.79187 5.82995 1.93428 5.81749L2.33677 5.78226C2.43422 5.77372 2.4991 5.88407 2.44967 5.96849C1.89186 6.92107 1.85662 8.07787 1.86689 8.52707C1.86932 8.63326 1.96153 8.71072 2.06734 8.70145L2.33717 8.67787C2.40002 8.67237 2.45614 8.71726 2.46656 8.77949C2.54466 9.24587 2.95917 11.0636 4.78418 12.0994C5.18572 12.3273 6.07514 12.6145 6.64987 12.5642Z\" fill=\"url(#paint1_linear_735_5200)\"/>\n<path opacity=\"0.12\" d=\"M9.16108 7.93755C9.27354 9.22309 8.32258 10.3564 7.037 10.4689L6.45508 10.5198C6.58846 7.57624 7.86146 6.48755 7.86146 6.48755C7.63354 6.11659 6.62969 5.81347 6.62969 5.81347C7.91527 5.70101 9.04858 6.65197 9.16108 7.93755Z\" fill=\"#2A333D\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M21.7197 10.5433C21.2588 7.17688 19.0225 4.53246 15.0345 4.29123C14.926 4.28465 14.8717 4.28138 14.8331 4.25957C14.7984 4.24004 14.7721 4.21207 14.7547 4.17627C14.7353 4.13642 14.7353 4.08396 14.7353 3.97907V3.40726C14.7353 3.24855 14.5539 3.15816 14.4272 3.25371L13.4886 3.9615C13.3619 4.05704 13.1805 3.96665 13.1805 3.80796V3.44681C13.1805 3.28132 12.986 3.19286 12.862 3.30248C12.5925 3.54078 12.3235 3.77969 12.0552 4.01934C11.7949 4.252 11.6647 4.3683 11.5548 4.45011C11.4127 4.55592 11.4033 4.56207 11.2497 4.6503C11.131 4.71857 10.836 4.85477 10.2459 5.12715C7.45166 6.41715 6.1424 9.01238 6.39366 11.8842C6.82328 16.795 9.79797 18.5358 14.6601 18.1105C18.8747 17.7417 22.4177 15.6412 21.7197 10.5433ZM11.6391 10.2C11.7824 10.8209 11.4792 11.4211 10.9618 11.5405C10.4443 11.66 9.90866 11.2535 9.76532 10.6325C9.72401 10.4537 9.71978 10.2765 9.74705 10.112C9.83313 10.172 9.94328 10.1967 10.0535 10.1713C10.2605 10.1235 10.3895 9.91696 10.3418 9.71C10.3135 9.58746 10.2295 9.49219 10.1228 9.44484C10.2162 9.37223 10.3238 9.31942 10.4426 9.292C10.9601 9.17254 11.4957 9.57904 11.6391 10.2ZM18.6818 10.0523C19.1923 9.90592 19.4637 9.29065 19.2881 8.67811C19.1124 8.06554 18.5562 7.68761 18.0457 7.834C17.8998 7.87584 17.7734 7.956 17.6714 8.0635C17.7887 8.10177 17.8856 8.19569 17.9222 8.32331C17.9807 8.52746 17.8627 8.74046 17.6585 8.79904C17.5647 8.82592 17.469 8.81554 17.3872 8.77661C17.3812 8.91638 17.3977 9.06234 17.4395 9.20819C17.6152 9.82073 18.1714 10.1987 18.6818 10.0523ZM13.2339 13.6482L12.9811 10.7518C12.8867 9.67019 13.6397 8.69777 14.7106 8.51854C15.7814 8.33927 16.8101 9.01346 17.073 10.0668L17.7772 12.8876C18.1036 14.1952 17.2462 15.5034 15.917 15.7259C14.5879 15.9485 13.3511 14.9907 13.2339 13.6482Z\" fill=\"currentColor\"/>\n<path opacity=\"0.5\" d=\"M13.8809 14.0962C14.3767 14.5024 15.0394 14.7029 15.7267 14.5879C16.4141 14.4728 16.9753 14.0674 17.3119 13.5219C17.254 14.3216 16.6582 15.0169 15.822 15.1569C14.9857 15.2969 14.196 14.8335 13.8809 14.0962Z\" fill=\"url(#paint2_linear_735_5200)\"/>\n<path opacity=\"0.5\" d=\"M13.1914 13.1439C13.5758 14.1383 14.6198 14.7733 15.728 14.5878C16.8363 14.4023 17.6166 13.4619 17.6561 12.3965L17.7787 12.8875C18.1051 14.1951 17.2477 15.5033 15.9185 15.7258C14.5894 15.9483 13.3526 14.9906 13.2354 13.648L13.1914 13.1439Z\" fill=\"url(#paint3_linear_735_5200)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_735_5200\" x1=\"21.6358\" y1=\"4.1488\" x2=\"17.0271\" y2=\"8.78507\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\"/>\n<stop offset=\"1\" stop-color=\"currentColor\" stop-opacity=\"0.84\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_735_5200\" x1=\"4.53449\" y1=\"6.60276\" x2=\"10.6431\" y2=\"9.71249\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\"/>\n<stop offset=\"1\" stop-color=\"currentColor\" stop-opacity=\"0.84\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_735_5200\" x1=\"15.7877\" y1=\"13.8659\" x2=\"16.0042\" y2=\"15.0933\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\" stop-opacity=\"0.6\"/>\n<stop offset=\"1\" stop-color=\"currentColor\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_735_5200\" x1=\"15.7043\" y1=\"13.5969\" x2=\"16.0698\" y2=\"15.6702\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\" stop-opacity=\"0.6\"/>\n<stop offset=\"1\" stop-color=\"currentColor\"/>\n</linearGradient>\n</defs>\n</svg>\n","import styled from \"styled-components\";\nimport ClarkIcon from \"../../user-facing/assets/images/clark.svg\";\nimport { colors } from \"../../user-facing/styling/colors.js\";\nimport type React from \"react\";\n\nexport const ErrorIconContainer = styled.div`\n width: 60px;\n height: 60px;\n min-width: 60px;\n min-height: 60px;\n background: linear-gradient(135deg, #aab 0%, #000033 50%, #000066 100%);\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n flex-shrink: 0;\n animation: scaleIn 0.3s ease-out forwards;\n opacity: 0;\n box-shadow:\n 0 0 1px black,\n 0 4px 12px rgba(0, 85, 187, 0.15),\n 0 2px 4px rgba(0, 85, 187, 0.05);\n\n @keyframes scaleIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n`;\n\nexport const StyledClarkIcon: React.FC = styled(ClarkIcon)`\n width: 54px;\n height: 54px;\n color: white;\n margin-top: 3px;\n margin-left: 1px;\n animation: scaleIn 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n opacity: 0;\n\n @keyframes scaleIn {\n 0% {\n transform: scale(0.6);\n opacity: 0;\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n`;\n\nexport const ErrorTitle = styled.h2`\n font-family: Inter;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 24px;\n line-height: 1.35;\n text-align: center;\n margin-bottom: 6px;\n flex-shrink: 0;\n`;\n\nexport const ErrorMessage = styled.p`\n font-family: Inter;\n font-size: 14px;\n color: #6c7689;\n line-height: 1.5715;\n text-align: center;\n flex-shrink: 0;\n margin-top: 0;\n margin-bottom: 16px;\n`;\n\nexport const ErrorDetails = styled.details`\n margin-top: 24px;\n text-align: left;\n background-color: #f9fafb;\n border-radius: 6px;\n padding: 16px;\n box-shadow:\n 0px 0px 1px 0px #22272f52,\n 0px 1px 3px 0px #22272f1f;\n flex-shrink: 0;\n font-family: Inter;\n\n &[open] summary {\n margin-bottom: 12px;\n }\n`;\n\nexport const ErrorSummary = styled.summary`\n cursor: pointer;\n font-weight: 500;\n color: #374151;\n font-size: 14px;\n user-select: none;\n`;\n\nexport const ErrorStack = styled.pre`\n font-size: 12px;\n color: #dc2626;\n overflow: auto;\n white-space: pre-wrap;\n margin: 16px;\n font-family: monospace;\n`;\n\nexport const ErrorContainer = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n background: rgba(255, 255, 255, 0.5);\n pointer-events: auto;\n`;\n\nexport const ErrorContent = styled.div`\n max-width: 700px;\n padding: 40px;\n overflow-y: auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 20px;\n\n opacity: 0;\n animation: fadeIn 0.3s ease-out forwards;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nexport const SecondaryButton = styled.button`\n color: ${colors.GREY_700};\n border: 1px solid ${colors.GREY_100};\n width: fit-content;\n border-radius: 4px;\n padding: 6px 12px;\n cursor: pointer;\n height: fit-content;\n font-size: 12px;\n\n &:hover {\n opacity: 0.8;\n }\n\n &:active {\n opacity: 0.6;\n }\n`;\n\nexport const ActionsContainer = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: center;\n`;\n","<svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.5004 0.900391C10.7822 0.900391 11.026 1.09647 11.0864 1.3717L11.2193 1.97662C11.2527 2.12902 11.3718 2.24805 11.5242 2.28152L12.1291 2.41435C12.4043 2.47479 12.6004 2.7186 12.6004 3.00038C12.6004 3.28217 12.4043 3.52598 12.1291 3.58642L11.5242 3.71928C11.3718 3.75274 11.2527 3.87177 11.2193 4.02417L11.0864 4.62909C11.026 4.90431 10.7822 5.10039 10.5004 5.10039C10.2186 5.10039 9.9748 4.90431 9.91436 4.62909L9.78151 4.02417C9.74805 3.87177 9.62902 3.75274 9.47662 3.71928L8.87169 3.58642C8.59647 3.52598 8.40039 3.28217 8.40039 3.00038C8.40039 2.7186 8.59648 2.47479 8.8717 2.41435L9.47661 2.28152C9.62902 2.24805 9.74805 2.12902 9.78151 1.97662L9.91436 1.3717C9.97479 1.09647 10.2186 0.900391 10.5004 0.900391ZM5.07658 3.83304C5.00213 3.57671 4.76731 3.40039 4.50039 3.40039C4.23347 3.40039 3.99865 3.57672 3.9242 3.83304L3.70907 4.57373C3.47987 5.36287 2.86285 5.97989 2.0737 6.20909L1.33304 6.4242C1.07672 6.49865 0.900394 6.73347 0.900391 7.00038C0.900387 7.2673 1.07671 7.50212 1.33303 7.57658L2.07376 7.79173C2.86287 8.02094 3.47987 8.63794 3.70907 9.42705L3.9242 10.1677C3.99865 10.4241 4.23348 10.6004 4.50039 10.6004C4.76731 10.6004 5.00213 10.4241 5.07658 10.1677L5.29171 9.42705C5.52092 8.63794 6.13791 8.02094 6.92702 7.79173L7.66775 7.57658C7.92407 7.50212 8.10039 7.2673 8.10039 7.00038C8.10039 6.73347 7.92406 6.49865 7.66774 6.4242L6.92708 6.20909C6.13793 5.97989 5.52091 5.36287 5.29171 4.57373L5.07658 3.83304ZM11.0864 9.37185C11.026 9.09663 10.7822 8.90054 10.5004 8.90054C10.2186 8.90054 9.97479 9.09663 9.91436 9.37185L9.78151 9.97677C9.74805 10.1292 9.62902 10.2482 9.47662 10.2817L8.8717 10.4145C8.59647 10.4749 8.40039 10.7188 8.40039 11.0005C8.40039 11.2823 8.59647 11.5261 8.8717 11.5866L9.47662 11.7194C9.62902 11.7529 9.74805 11.8719 9.78151 12.0243L9.91436 12.6292C9.97479 12.9045 10.2186 13.1005 10.5004 13.1005C10.7822 13.1005 11.026 12.9045 11.0864 12.6292L11.2193 12.0243C11.2527 11.8719 11.3718 11.7529 11.5242 11.7194L12.1291 11.5866C12.4043 11.5261 12.6004 11.2823 12.6004 11.0005C12.6004 10.7188 12.4043 10.4749 12.1291 10.4145L11.5242 10.2817C11.3718 10.2482 11.2527 10.1292 11.2193 9.97677L11.0864 9.37185Z\" fill=\"currentColor\"/>\n</svg>\n","import styled from \"styled-components\";\nimport AiStarsIcon from \"../../../edit-mode/assets/ai-stars.svg\";\nimport { editorBridge } from \"../../../edit-mode/superblocks-editor-bridge.js\";\nimport { colors } from \"../../user-facing/styling/colors.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport type { IdentifierInfo } from \"../lib/features/name-manager.js\";\n\nconst MAX_STACK_FRAMES = 10;\nconst MAX_PROMPT_LENGTH = 8000;\n\n// Build a prompt by keeping the leading error message, skipping noisy node_modules frames,\n// annotating how many frames were dropped, and capping total length before dispatching.\nfunction buildRuntimeErrorPrompt(error: Error | undefined): string {\n const defaultPrompt = \"Fix this error: Unknown error\";\n if (!error) {\n return defaultPrompt;\n }\n\n const stackLines = error.stack?.split(\"\\n\") ?? [];\n const [messageLine, ...rawFrames] = stackLines;\n const message = (messageLine || error.message || error.toString()).trim();\n\n const filteredFrames = rawFrames.filter(\n (line) => line && !line.includes(\"node_modules\"),\n );\n const selectedFrames = filteredFrames.slice(0, MAX_STACK_FRAMES);\n const omittedCount = filteredFrames.length - selectedFrames.length;\n\n const frameSection = [\n ...selectedFrames,\n ...(omittedCount > 0\n ? [\n `... (${omittedCount} additional frame${omittedCount > 1 ? \"s\" : \"\"} omitted)`,\n ]\n : []),\n ]\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n\n const details = frameSection ? `${message}\\n${frameSection}` : message;\n const prompt = `Fix this error: ${details}`;\n\n if (prompt.length <= MAX_PROMPT_LENGTH) {\n return prompt;\n }\n\n const suffix = \"... (truncated)\";\n const availableChars = Math.max(MAX_PROMPT_LENGTH - suffix.length, 0);\n return `${prompt.slice(0, availableChars)}${suffix}`;\n}\n\nconst FixWithClarkButtonContainer = styled.button`\n padding: 6px 12px;\n background-color: ${colors.ACCENT_BLUE_500};\n border-radius: 4px;\n border: none;\n color: white;\n height: fit-content;\n display: flex;\n gap: 4px;\n cursor: pointer;\n transition: opacity 0.2s;\n font-size: 12px;\n align-items: center;\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport function FixWithClarkButton({\n identifier,\n error,\n onClick,\n}: {\n onClick?: () => void;\n identifier?: IdentifierInfo;\n error: Error | undefined;\n}) {\n const isAiEditing = rootStore.editStore?.ai.getIsEditing() ?? false;\n\n const handleFixWithAi = () => {\n onClick?.();\n\n if (identifier) {\n editorBridge.addComponentToAiContext(\n identifier.sourceId,\n identifier.instanceId,\n );\n }\n\n const prompt = buildRuntimeErrorPrompt(error);\n editorBridge.aiGenerate(prompt, true);\n };\n\n return (\n <FixWithClarkButtonContainer\n onClick={handleFixWithAi}\n disabled={isAiEditing}\n >\n <AiStarsIcon /> Fix with Clark\n </FixWithClarkButtonContainer>\n );\n}\n","import React, { Component } from \"react\";\nimport styled from \"styled-components\";\nimport { editorBridge } from \"../../../edit-mode/superblocks-editor-bridge.js\";\nimport { SecondaryButton } from \"../../internal-details/internal-components/common.js\";\nimport { FixWithClarkButton } from \"../../internal-details/internal-components/fix-with-clark-button.jsx\";\nimport { isEditMode } from \"../../internal-details/is-edit-mode.js\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport { generateId } from \"../../utils/generate-id.js\";\nimport { colors } from \"../styling/colors.js\";\nimport type { IdentifierInfo } from \"../../internal-details/lib/features/name-manager.js\";\n\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nconst ErrorBoundaryContainer = styled.div`\n background: white;\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n border: 1px solid ${colors.GREY_100};\n border-left: 3px solid ${colors.RED_500};\n border-radius: 4px;\n width: 100%;\n color: ${colors.GREY_700};\n`;\n\nconst ErrorDetailsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nconst ErrorActionsContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n`;\n\ninterface Props {\n children: ReactNode;\n header?: string;\n identifier?: IdentifierInfo;\n}\n\ninterface State {\n id: string;\n hasError: boolean;\n error?: Error;\n}\n\nclass ErrorBoundary extends Component<Props, State> {\n state: State = {\n id: generateId(),\n hasError: false,\n };\n\n static getDerivedStateFromError(e: Error): State {\n return {\n id: generateId(),\n hasError: true,\n error: e,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"Uncaught error:\", error, errorInfo);\n if (isEditMode()) {\n rootStore.editStore?.ai.handleRuntimeError({\n id: this.state.id,\n error: error.toString(),\n errorInfo,\n identifier: this.props.identifier,\n });\n }\n }\n\n reset = () => {\n if (isEditMode()) {\n rootStore.editStore?.ai.clearRuntimeError(this.state.id);\n }\n this.setState({ hasError: false, error: undefined });\n };\n\n componentWillUnmount() {\n // Clear runtime error if component unmounts while in error state\n if (this.state.hasError && isEditMode()) {\n rootStore.editStore?.ai.clearRuntimeError(this.state.id);\n }\n }\n\n handleFixWithAi() {\n const { identifier } = this.props;\n\n if (identifier) {\n editorBridge.addComponentToAiContext(\n identifier.sourceId,\n identifier.instanceId,\n );\n }\n\n let prompt = `Fix this error: `;\n\n if (this.state.error?.stack) {\n const lines = this.state.error.stack.split(\"\\n\");\n const nodeModulesIndex = lines.findIndex((line) =>\n line.includes(\"node_modules\"),\n );\n const relevantLines =\n nodeModulesIndex > -1 ? lines.slice(0, nodeModulesIndex) : lines;\n\n prompt += relevantLines.slice(0, 5).join(\"\\n\");\n } else {\n prompt += this.state.error?.toString();\n }\n\n editorBridge.aiGenerate(prompt);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <ErrorBoundaryContainer>\n <ErrorDetailsContainer>\n <h3>{this.props.header || \"Something went wrong.\"}</h3>\n <details style={{ fontSize: \"0.8em\" }}>\n <summary style={{ paddingLeft: \"0.25rem\" }}>\n Error details\n </summary>\n <div\n style={{\n marginTop: \"0.5rem\",\n maxWidth: \"100%\",\n overflowX: \"auto\",\n scrollbarWidth: \"thin\",\n }}\n >\n <pre\n style={{\n color: \"gray\",\n }}\n >\n <code>\n {this.state.error?.stack\n ? this.state.error.stack\n : this.state.error?.toString()}\n </code>\n </pre>\n </div>\n </details>\n </ErrorDetailsContainer>\n <ErrorActionsContainer>\n {isEditMode() && (\n <FixWithClarkButton\n error={this.state.error}\n identifier={this.props.identifier}\n />\n )}\n <SecondaryButton onClick={this.reset}>Try again</SecondaryButton>\n </ErrorActionsContainer>\n </ErrorBoundaryContainer>\n );\n }\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { createContext, useContext } from \"react\";\nimport type { createEntityActions } from \"./entities-state.js\";\n\nconst ActionsContext = createContext<ReturnType<typeof createEntityActions>>(\n null!,\n);\n\nexport const ActionsProvider: React.FC<\n React.PropsWithChildren<{\n actions: ReturnType<typeof createEntityActions>;\n }>\n> = ({ actions, children }) => {\n return (\n <ActionsContext.Provider value={actions}>\n {children}\n </ActionsContext.Provider>\n );\n};\n\nexport const useActions = () => {\n return useContext(ActionsContext);\n};\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport {\n createContext,\n useContext,\n useState,\n type ReactNode,\n type CSSProperties,\n useMemo,\n useRef,\n} from \"react\";\nimport { createAnchorNameStyle } from \"../../edit-mode/edit-wrapper.jsx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ninterface ComponentStyleContextValue {\n instanceId: string;\n setStyle: (style: CSSProperties) => void;\n getFallbackStyle: () => CSSProperties;\n}\n\nconst ComponentStyleContext = createContext<ComponentStyleContextValue | null>(\n null,\n);\n\nexport function ComponentSuspenseStyleProvider({\n children,\n instanceId,\n}: {\n children: ReactNode;\n instanceId: SbInstance;\n}) {\n const [style, setStyle] = useState<CSSProperties>({});\n const elementRef = useRef<HTMLElement | null>(null);\n\n const previousStyle = useRef<CSSProperties | null>(null);\n const getFallbackStyle = useMemo((): (() => CSSProperties) => {\n const currentElement = document.querySelector(\n `[${INSTANCE_ID_ATTRIBUTE}=\"${instanceId}\"]`,\n );\n\n if (!currentElement) {\n return () => style;\n }\n\n elementRef.current = currentElement as HTMLElement;\n\n return () => {\n if (!elementRef.current || !style) {\n return style || previousStyle.current || {};\n }\n\n let cachedRect: DOMRect | null = null;\n const lazyRect = () => {\n if (cachedRect === null && elementRef.current) {\n cachedRect = elementRef.current.getBoundingClientRect();\n }\n return cachedRect;\n };\n\n const componentStyle = createAnchorNameStyle({\n instanceId,\n });\n\n const fallbackStyle = { ...style, ...componentStyle };\n\n // Replace fit-content with actual dimensions\n if (\n style.width === \"fit-content\" ||\n style.width === \"auto\" ||\n style.width === undefined\n ) {\n fallbackStyle.width = `${lazyRect()?.width}px`;\n }\n if (\n style.height === \"fit-content\" ||\n style.height === \"auto\" ||\n style.height === undefined\n ) {\n fallbackStyle.height = `${lazyRect()?.height}px`;\n }\n\n // If the width or height is 0, use the previous style\n if (fallbackStyle.width === 0 || fallbackStyle.width === \"0px\") {\n fallbackStyle.width = previousStyle.current?.width;\n }\n if (fallbackStyle.height === 0 || fallbackStyle.height === \"0px\") {\n fallbackStyle.height = previousStyle.current?.height;\n }\n\n previousStyle.current = fallbackStyle;\n return fallbackStyle;\n };\n }, [elementRef, style, instanceId]);\n\n return (\n <ComponentStyleContext.Provider\n value={{\n instanceId,\n setStyle,\n getFallbackStyle,\n }}\n >\n {children}\n </ComponentStyleContext.Provider>\n );\n}\n\nexport function useComponentSuspenseStyle() {\n const context = useContext(ComponentStyleContext);\n if (!context) {\n throw new Error(\n \"useComponentStyle must be used within a ComponentStyleProvider\",\n );\n }\n return context;\n}\n","import { runInAction } from \"mobx\";\nimport { getName } from \"./lib/evaluator/names.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport type { ScopeId } from \"./lib/evaluator/base-entity-manager.js\";\nimport type { Entity } from \"@superblocksteam/library-shared/types\";\n\nconst entityActions = {\n reset: (entityName: string, scopeId: ScopeId) => {\n rootStore.entityManager.resetEntity({\n name: getName(entityName),\n scopeId,\n });\n },\n update: (\n entityName: string,\n scopeId: ScopeId,\n run: (entity: Entity) => void,\n ) => {\n runInAction(function updateEntity() {\n const state = rootStore.entityManager.getState(scopeId);\n const entity = state[entityName];\n run(entity as Entity); // TODO: Fix this type\n });\n },\n};\n\n// A function to bind to the entity name\nconst createEntityActions = (entityName: string, scopeId: ScopeId) => ({\n reset: entityActions.reset.bind(null, entityName, scopeId),\n update: entityActions.update.bind(null, entityName, scopeId),\n});\n\nexport { entityActions, createEntityActions };\n","import {\n getBindingIdentifier,\n isEntityWithBindingIdentifier,\n} from \"@superblocksteam/library-shared\";\nimport { toJS } from \"mobx\";\nimport { createBindableEntityProxy } from \"../../../user-facing/state/create-bindable-entity-proxy.js\";\n\nconst SuspenseSymbol = Symbol(\"SuspenseSymbol\");\n\ntype SuspenseResult = {\n __isSuspenseResult: typeof SuspenseSymbol;\n};\n\n// This is somewhat of a hack - entities passed through registered components\n// will lose the bindable information. So we try to restore it here.\nfunction toJSButRestoreBindableSymbol(obj: any) {\n const jsObj = toJS(obj);\n if (isEntityWithBindingIdentifier(obj)) {\n return createBindableEntityProxy(() => jsObj, getBindingIdentifier(obj)!);\n }\n return jsObj;\n}\n\nfunction toJsOrSuspense<T extends Record<string, unknown>>(\n obj: T,\n key?: string,\n): T | SuspenseResult {\n try {\n if (key) {\n return toJSButRestoreBindableSymbol(obj[key as keyof T]) as T;\n }\n return toJSButRestoreBindableSymbol(obj);\n } catch (error) {\n // If we caught a promise (suspenseful behavior), return a special object that will be removed by removeSuspense\n if (error instanceof Promise) {\n return {\n __isSuspenseResult: SuspenseSymbol,\n } as SuspenseResult;\n }\n throw error;\n }\n}\n\nfunction removeSuspense<T extends Record<string, unknown>>(\n keys: string[],\n result: T | SuspenseResult,\n prevSafeResult: T | undefined,\n) {\n const sanitized = {} as T;\n for (const key of keys) {\n const value = (result as any)[key];\n if (value && value.__isSuspenseResult) {\n const preSafeValue = prevSafeResult?.[key as keyof T] || null;\n sanitized[key as keyof T] = preSafeValue as T[keyof T];\n } else {\n sanitized[key as keyof T] = value as T[keyof T];\n }\n }\n return sanitized;\n}\n\nexport { SuspenseSymbol, toJsOrSuspense, removeSuspense };\nexport type { SuspenseResult };\n","import { reaction } from \"mobx\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n toJsOrSuspense,\n removeSuspense,\n type SuspenseResult,\n} from \"./suspense-helpers.js\";\n\n// We use reactions to track changes to the object\n// and return a new object with the changes\nexport const useShallowMobxObserver = <T extends Record<string, unknown>>(\n obj: T,\n useSuspense: boolean = true,\n): T => {\n const isFirstRenderRef = useRef(true);\n const [keys, setKeys] = useState<string[]>(Object.keys(obj));\n\n const preSafeResultRef = useRef<T | undefined>(undefined);\n const [result, setResult] = useState<T | SuspenseResult>(() =>\n toJsOrSuspense(obj),\n );\n\n // If the reference changes\n useEffect(() => {\n if (!isFirstRenderRef.current) {\n setKeys(Object.keys(obj));\n setResult(toJsOrSuspense(obj));\n }\n isFirstRenderRef.current = false;\n }, [obj]);\n\n // If the Object.keys change\n useEffect(() => {\n return reaction(\n () => Object.keys(obj),\n (newKeys) => {\n setKeys(newKeys);\n setResult(\n newKeys.reduce((acc, key: keyof T) => {\n acc[key] = obj[key];\n return acc;\n }, {} as T),\n );\n },\n {\n name: \"shallowMobxObserver-keys\",\n fireImmediately: false,\n },\n );\n }, [obj]);\n\n // If the values change\n useEffect(() => {\n const disposers = [] as (() => void)[];\n for (const key of keys) {\n disposers.push(\n reaction(\n () => toJsOrSuspense(obj, key),\n (v) => {\n setResult((prev: any) => {\n return { ...prev, [key]: v };\n });\n },\n {\n name: `shallowToJS-${key}`,\n fireImmediately: false,\n },\n ),\n );\n }\n return () => disposers.forEach((disposer) => disposer());\n }, [obj, keys]);\n\n const wholeResultIsSuspense = result && result.__isSuspenseResult;\n const aKeyIsSuspense =\n wholeResultIsSuspense ||\n keys?.some((key) => (result as any)[key]?.__isSuspenseResult);\n const somethingIsSuspense = wholeResultIsSuspense || aKeyIsSuspense;\n\n // If we are using suspense and there is a suspense, return the original object\n // This allows access to THROW causing the loading state to be shown\n if (somethingIsSuspense && useSuspense) {\n return obj;\n }\n\n // If we are not using suspense and there is a suspense, return a sanitized object\n // This means access WILl NOT throw the suspense\n if (somethingIsSuspense && !useSuspense) {\n const sanitized = removeSuspense<T>(keys, result, preSafeResultRef.current);\n preSafeResultRef.current = sanitized;\n return sanitized;\n }\n\n // There is no suspense, so we can return the result\n preSafeResultRef.current = result as T;\n return result as T;\n};\n","import styled, { keyframes } from \"styled-components\";\nimport { CSS_CLASSES } from \"../../css-constants.js\";\nimport { useTheme } from \"../../theme-context.jsx\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\ninterface Props {\n children?: ReactNode;\n style?: () => CSSProperties;\n noBorderRadius?: boolean;\n}\n\nconst shimmerAnimation = keyframes`\n 0% {\n background-position: -200px 0;\n }\n 100% {\n background-position: calc(200px + 100%) 0;\n }\n`;\n\nconst ShimmerDiv = styled.div<{\n $backgroundColor: string;\n $shimmerHighlight: string;\n $borderRadius: string;\n}>`\n min-height: 12px;\n min-width: 12px;\n background-color: ${(props) => props.$backgroundColor};\n border-radius: ${(props) => props.$borderRadius};\n position: relative;\n overflow: hidden;\n background: linear-gradient(\n 90deg,\n ${(props) => props.$backgroundColor} 25%,\n ${(props) => props.$shimmerHighlight} 50%,\n ${(props) => props.$backgroundColor} 75%\n );\n background-size: max(100%, 200px) 100%;\n animation: ${shimmerAnimation} 5s infinite linear;\n`;\n\n/**\n * Default fallback component displayed while components are suspended.\n */\nexport function SuspenseFallback({ style, noBorderRadius }: Props) {\n const { theme } = useTheme();\n\n // Extract theme properties with fallbacks\n const backgroundColor = theme?.colors?.neutral50 || \"#f8f9fa\";\n const shimmerHighlight = theme?.colors?.neutral100 || \"#ffffff\";\n const borderRadius = noBorderRadius\n ? \"0px\"\n : theme?.borderRadius.value + theme?.borderRadius.mode;\n\n return (\n <ShimmerDiv\n $backgroundColor={backgroundColor}\n $shimmerHighlight={shimmerHighlight}\n $borderRadius={borderRadius}\n style={style?.()}\n className={CSS_CLASSES.ANCHOR_NAME}\n data-test=\"suspense-fallback\"\n />\n );\n}\n","import {\n isBindingString,\n type BindingString,\n} from \"@superblocksteam/library-shared\";\n\nexport function removeBindings(props: Record<string, unknown>) {\n return Object.entries(props).reduce(\n (acc, [key, value]) => {\n if (isBindingString(value)) {\n acc[key] = (value as BindingString).value;\n } else if (\n typeof value === \"object\" &&\n value !== null &&\n key !== \"children\" &&\n key !== \"bind\"\n ) {\n acc[key] = removeBindings(value as Record<string, unknown>);\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n}\n","import {\n Dim,\n INSTANCE_ID_ATTRIBUTE,\n isDimension,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { isEqual, isNumber, isObject } from \"lodash\";\nimport { observer } from \"mobx-react-lite\";\n// TODO(code-mode): Remove import from edit-mode\nimport {\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\";\nimport { DuplicatedNamePopover } from \"../../edit-mode/duplicated-name-popover.jsx\";\nimport useStableEffect from \"../hooks/use-stable-effect.js\";\nimport ErrorBoundary from \"../user-facing/component-base/error-boundary.jsx\";\nimport { getWidthHeightInfo } from \"../user-facing/themes/utils.js\";\nimport { ActionsProvider } from \"./actions-context.jsx\";\nimport { ComponentInfoProvider } from \"./component-info-context.jsx\";\nimport {\n ComponentSuspenseStyleProvider,\n useComponentSuspenseStyle,\n} from \"./component-suspense-style-context.jsx\";\nimport { createEntityActions } from \"./entities-state.js\";\nimport { isEditMode } from \"./is-edit-mode.js\";\nimport { useShallowMobxObserver } from \"./lib/evaluator/use-shallow-mobx-observer.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { SuspenseFallback } from \"./lib/suspense/suspense-fallback.jsx\";\nimport { removeBindings } from \"./remove-bindings.jsx\";\nimport type { StrictElementPassthroughProps } from \"../user-facing/component-base/use-passthrough-props.js\";\nimport type { Name } from \"./lib/evaluator/names.js\";\nimport type { IdentifierInfo } from \"./lib/features/name-manager.js\";\nimport type { ChildFunction } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { SbComponentProps } from \"../user-facing/component-base/sb-component.js\";\nimport type { LegacyRef } from \"react\";\n\nconst INVISIBLE_OPACITY = 0.5;\n\nconst shouldHideComponent = (isVisible?: boolean): boolean => {\n if (isEditMode() && rootStore.editStore?.isInitialized) {\n return rootStore.editStore.isLivePreview && isVisible === false;\n }\n\n return isVisible === false;\n};\n\nconst useStyleWithSize = (\n props: SbComponentProps,\n instanceId?: string,\n): { style: CSSProperties; classNames: string[] } => {\n const [style, setStyle] = useState<CSSProperties>({});\n const [classNames, setClassNames] = useState<string[]>([]);\n useStableEffect(\n () => {\n const widthInfo = props.width\n ? getWidthHeightInfo(props.width, \"width\", instanceId)\n : { classnames: [] };\n const heightInfo = props.height\n ? getWidthHeightInfo(props.height, \"height\", instanceId)\n : { classnames: [] };\n\n if (props.style) {\n setStyle(props.style);\n }\n\n setClassNames([...widthInfo.classnames, ...heightInfo.classnames]);\n },\n {\n instanceId,\n width: props.width,\n height: props.height,\n style: props.style,\n },\n {\n cold: true,\n customEqualChecks: [\n [isDimension, Dim.isEqual],\n [isObject, (a, b) => isEqual(a, b)],\n ],\n },\n );\n\n return { style, classNames };\n};\n\nexport type ReactiveComponentProps = {\n children: React.ReactNode | ChildFunction;\n Component: React.FC<any>;\n widgetProps: Record<string, unknown>;\n showErrors?: boolean;\n identifier: IdentifierInfo;\n editorProps?: StrictElementPassthroughProps;\n dropTargetRef?: React.RefObject<HTMLElement> | LegacyRef<HTMLElement>;\n};\n\nconst ReactiveComponent = observer<ReactiveComponentProps>(function Component({\n Component,\n children,\n widgetProps,\n showErrors,\n identifier,\n editorProps,\n dropTargetRef,\n}) {\n const {\n name: { value: name },\n sourceId,\n instanceId,\n scopeId,\n } = identifier;\n const currentName = useRef(name);\n const actions = useRef(createEntityActions(name, scopeId));\n\n const isNameDuplicated = rootStore.nameManager.hasDuplicateNames(\n scopeId,\n name,\n );\n\n // If name is duplicated, then the stored information in runtimeEntities might not be correct,\n // as we map the widget props to the widget name and not the id. So we will only have the props\n // for one of the widgets with the same name. For that case, we use the widgetProps which might\n // not be up to date but it's as close as we can get to what the user configured.\n const entity = rootStore.entityManager.getEntity(\n scopeId,\n {\n value: name,\n isAnonymous: false,\n } satisfies Name,\n {\n useSuspense: true,\n },\n );\n\n const safeProps = useMemo(() => {\n return isNameDuplicated || !entity ? removeBindings(widgetProps) : entity;\n }, [isNameDuplicated, widgetProps, entity]);\n\n const reactiveProps = useShallowMobxObserver(\n safeProps,\n safeProps.loading === undefined,\n );\n\n const isAiLoading = rootStore.editStore?.ai.isEditingComponent(sourceId);\n\n const loading = reactiveProps.loading || isAiLoading;\n\n const { style: stylePropWithSize, classNames } = useStyleWithSize(\n reactiveProps,\n instanceId,\n );\n\n const styleProp = useMemo(() => {\n if (reactiveProps.isVisible === false) {\n const existingOpacity = isNumber(stylePropWithSize.opacity)\n ? stylePropWithSize.opacity\n : 1;\n return {\n ...(widgetProps.style as CSSProperties | undefined),\n ...stylePropWithSize,\n opacity: existingOpacity * INVISIBLE_OPACITY,\n };\n }\n return stylePropWithSize;\n }, [reactiveProps.isVisible, stylePropWithSize, widgetProps.style]);\n\n // Update the context with the latest style information, so loading state is updated\n const { setStyle, getFallbackStyle } = useComponentSuspenseStyle();\n useEffect(() => {\n setStyle(styleProp);\n }, [styleProp, setStyle]);\n\n if (currentName.current !== name) {\n currentName.current = name;\n actions.current = createEntityActions(name, scopeId);\n }\n\n const realClickHandler = reactiveProps?.onClick as any;\n const editorClickHandler = editorProps?.onClick;\n const handleClick = useCallback(\n async (e: React.MouseEvent<HTMLElement>, ...rest: any[]) => {\n // EventFlow onClick handlers\n if (typeof realClickHandler === \"function\") {\n realClickHandler(e, ...rest);\n }\n\n try {\n // Selection of component\n const extraClickHandler = editorClickHandler;\n if (typeof extraClickHandler === \"function\") {\n extraClickHandler(e);\n }\n } catch (error) {\n console.error(\"Editor click handler error\", error);\n }\n },\n [editorClickHandler, realClickHandler],\n );\n\n const hide = shouldHideComponent(reactiveProps?.isVisible as boolean);\n\n const fallbackPassthroughProps = useMemo(() => {\n return {\n [INSTANCE_ID_ATTRIBUTE]: instanceId,\n [SOURCE_ID_ATTRIBUTE]: sourceId,\n };\n }, [instanceId, sourceId]);\n\n if (hide) {\n return null;\n }\n\n return (\n <ErrorBoundary\n header={`Something went wrong rendering this widget`}\n identifier={identifier}\n >\n <ComponentInfoProvider\n sourceId={sourceId}\n name={name}\n instanceId={instanceId}\n >\n <ActionsProvider actions={actions.current}>\n {!!(isNameDuplicated && showErrors) && (\n <DuplicatedNamePopover sourceId={sourceId} name={name} />\n )}\n\n {loading === true ? (\n <SuspenseFallback style={getFallbackStyle} />\n ) : (\n <Component\n name={name}\n editorProps={editorProps ?? fallbackPassthroughProps}\n {...reactiveProps}\n dropTargetRef={dropTargetRef} // For detached widgets like modal/slideout\n onClick={handleClick}\n style={{\n ...styleProp,\n ...(editorProps?.style as CSSProperties | undefined),\n }}\n className={[\n widgetProps.className,\n editorProps?.className,\n ...classNames,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </Component>\n )}\n </ActionsProvider>\n </ComponentInfoProvider>\n </ErrorBoundary>\n );\n});\n\nconst LoadingWrapper = (props: { children: React.ReactNode }) => {\n const { getFallbackStyle } = useComponentSuspenseStyle();\n return (\n <Suspense fallback={<SuspenseFallback style={getFallbackStyle} />}>\n {props.children}\n </Suspense>\n );\n};\n\nconst WrappedReactiveComponent = (props: ReactiveComponentProps) => {\n return (\n <ComponentSuspenseStyleProvider instanceId={props.identifier.instanceId}>\n <LoadingWrapper>\n <ReactiveComponent {...props} />\n </LoadingWrapper>\n </ComponentSuspenseStyleProvider>\n );\n};\n\nexport default WrappedReactiveComponent;\n","import { useMemo } from \"react\";\nimport { useMyDraggableProps } from \"./draggable-context-provider.jsx\";\nimport {\n default as ReactiveComponent,\n type ReactiveComponentProps,\n} from \"./reactive-component.jsx\";\n\nconst mergeProps = (\n props1: Record<string, any>,\n props2: Record<string, any>,\n) => {\n const mergedClassName =\n props1.className && props2.className\n ? `${props1.className} ${props2.className}`\n : props1.className || props2.className;\n const mergedStyle = {\n ...props1.style,\n ...props2.style,\n };\n return {\n ...props1,\n ...props2,\n style: mergedStyle,\n className: mergedClassName,\n };\n};\n\n/*\n * We want to make this a separate component because dnd kit will update its internal context provider\n * EVERY time there's a drag event. We have this as a separate component here to isolate those re-renders to this relatively\n * lightweight component.\n */\nexport const EditorReactiveComponent = (props: ReactiveComponentProps) => {\n const { editorProps, ...restProps } = props;\n const myDraggableProps = useMyDraggableProps(props.identifier.instanceId);\n\n const mergedEditorProps = useMemo(() => {\n return mergeProps(editorProps ?? {}, myDraggableProps);\n }, [editorProps, myDraggableProps]);\n\n return <ReactiveComponent {...restProps} editorProps={mergedEditorProps} />;\n};\n","import rootStore from \"../internal-details/lib/root-store.js\";\n\nexport function isComponentTypeDetached(componentType: string | undefined) {\n if (!componentType) {\n return false;\n }\n\n const editorConfig =\n rootStore.componentRegistry.getEditorConfig(componentType);\n\n return editorConfig?.isDetached ?? false;\n}\n","import { isComponentTypeDetached } from \"./is-component-type-detached.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const getWidgetAnchorName = (instanceId: SbInstance) => {\n return `--widget-${instanceId}`;\n};\n\nexport const getWidgetRectAnchorName = (instanceId: SbInstance) => {\n return `--widget-rect-${instanceId}`;\n};\n\n/**\n * @deprecated see ENG-1634. should use getWidgetAnchorName instead.\n */\nexport const getWidgetDropAreaAnchorName = (\n instanceId: SbInstance | null,\n _widgetType?: string,\n) => {\n // if (widgetType && isComponentTypeDetached(widgetType)) {\n // return `--widget-drop-area-${instanceId}`;\n // }\n return `--widget-${instanceId}`;\n};\n\nexport const getEditWrapperId = (instanceId: SbInstance) => {\n return `sb-edit-wrapper-${instanceId}`;\n};\n\nexport const getEditWrapperIdWithType = (\n instanceId: SbInstance,\n widgetType?: string,\n) => {\n if (widgetType && isComponentTypeDetached(widgetType)) {\n return `sb-edit-wrapper-for-${widgetType}-${instanceId}`;\n }\n return `sb-edit-wrapper-${instanceId}`;\n};\n","<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"12\" height=\"12\" fill=\"transparent\" />\n <line x1=\"0\" y1=\"12\" x2=\"12\" y2=\"0\" stroke=\"#C6CAD2\" stroke-width=\"0.5\" transform=\"rotate(-90 6 6)\" />\n</svg>","import { useDroppable } from \"@dnd-kit/core\";\nimport type { ComponentDroppableData } from \"../types\";\nimport \"react\";\n\nexport function useComponentDroppable({\n instanceId,\n rootInstanceId,\n depth,\n disabled,\n}: ComponentDroppableData & { disabled: boolean }): ReturnType<\n typeof useDroppable\n> {\n return useDroppable({\n id: instanceId,\n disabled,\n data: {\n rootInstanceId,\n instanceId,\n depth,\n },\n });\n}\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { getEditWrapperIdWithType } from \"../lib/utils/widget-wrapper-naming.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const getBoundingBoxForWidget = (instanceId: SbInstance) => {\n return getWidgetNode(instanceId)?.getBoundingClientRect();\n};\n\nexport const getWidgetNode = (instanceId: SbInstance): HTMLElement | null => {\n const identifier = rootStore.nameManager.getExistingIdentifier(instanceId);\n const type = identifier?.type;\n return document?.querySelector(\n `[data-sb-selector=\"${getEditWrapperIdWithType(instanceId, type)}\"]`,\n ) as HTMLElement | null;\n};\n\nexport const doesInteractionLayerContainInstance = (\n possibleParent: SbInstance | null | undefined,\n possibleChild: SbInstance | null | undefined,\n handleNewlyCreatedComponents: boolean = false,\n) => {\n if (!possibleParent || !possibleChild) {\n return false;\n }\n const editStore = getEditStore();\n const parentMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(possibleParent);\n const childMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(possibleChild);\n if (!childMeta?.interactionLayerInstanceId && handleNewlyCreatedComponents) {\n // this can happen for newly created components that are not yet added to the interaction layer\n return true;\n }\n\n // make sure if the parent is itself an interaction layer, only check against it and not its parent.\n if (\n editStore.interactionLayerManager.interactionLayerInstanceIds.has(\n possibleParent,\n )\n ) {\n return (\n possibleChild === possibleParent ||\n childMeta?.interactionLayerInstanceId === possibleParent\n );\n }\n\n return (\n parentMeta?.interactionLayerInstanceId ===\n childMeta?.interactionLayerInstanceId\n );\n};\n\nexport const isPage = (instanceId: null | undefined | SbInstance) => {\n if (!instanceId) {\n return false;\n }\n const editStore = getEditStore();\n const instanceMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n return instanceMeta?.type === NATIVE_COMPONENT_TYPES.Page;\n};\n","import { useEffect, useState } from \"react\";\nimport { getWidgetNode } from \"../../interaction-utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const useWidgetNodeRef = (instanceId: SbInstance) => {\n const [nodeRef, setNodeRef] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n // we have to set the nodes manually because the wrapper has display: contents\n const actualElem = getWidgetNode(instanceId);\n if (actualElem) {\n setNodeRef(actualElem as HTMLElement);\n }\n }, [instanceId]);\n\n return nodeRef;\n};\n","import {\n Property,\n type PropertyInfo,\n isDimension,\n type Dim,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype DropRestriction<T> = {\n description: string;\n restriction: (params: T) => boolean; // return true if drop is not allowed\n};\n\nfunction rule<T>(\n description: string,\n restriction: DropRestriction<T>[\"restriction\"],\n) {\n return {\n description,\n restriction,\n };\n}\n\ntype DnDInstanceRestrictionParams = {\n dropTargetInstanceId: SbInstance;\n draggedInstanceId: undefined | null | SbInstance;\n isDraggingNewComponent: boolean;\n};\n\nconst instanceRestrictions: Array<\n DropRestriction<DnDInstanceRestrictionParams>\n> = [\n rule(\n \"Drop target and dragged instance must be in the same interaction layer\",\n ({ dropTargetInstanceId, draggedInstanceId, isDraggingNewComponent }) => {\n if (isDraggingNewComponent || !draggedInstanceId) {\n return false;\n }\n return !doesInteractionLayerContainInstance(\n dropTargetInstanceId,\n draggedInstanceId,\n );\n },\n ),\n rule(\n \"Dragged instance must not be a child of the drop target\",\n ({ dropTargetInstanceId, draggedInstanceId }) => {\n if (!dropTargetInstanceId || !draggedInstanceId) {\n return false;\n }\n return getEditStore().runtimeEntitiesManager.isChildOf(\n dropTargetInstanceId,\n draggedInstanceId,\n );\n },\n ),\n rule(\n \"If the dragged instance has local bindings, it must share its root instance with the drop target\",\n ({ dropTargetInstanceId, draggedInstanceId }) => {\n if (!dropTargetInstanceId || !draggedInstanceId) {\n return false;\n }\n const editStore = getEditStore();\n const hasLocalBinding =\n draggedInstanceId &&\n editStore.runtimeEntitiesManager.doesEntityHaveLocalBindings(\n draggedInstanceId,\n );\n if (!hasLocalBinding) {\n return false;\n }\n\n const dropTargetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n dropTargetInstanceId,\n );\n const draggedMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(draggedInstanceId);\n\n if (dropTargetMeta?.isRoot) {\n return dropTargetMeta.instanceId !== draggedMeta?.rootInstanceId;\n } else {\n return dropTargetMeta?.rootInstanceId !== draggedMeta?.rootInstanceId;\n }\n },\n ),\n];\n\nexport const areDragAndDropInstancesValid = (\n params: DnDInstanceRestrictionParams,\n) => {\n const triggeredRestriction = instanceRestrictions.find((restriction) =>\n restriction.restriction(params),\n );\n return triggeredRestriction == null;\n};\n\ntype DnDTypeRestrictionParams = {\n draggedType: string;\n dropTargetType: string;\n dropTargetEmpty: boolean;\n isDraggingNewComponent: boolean;\n};\n\n// descriptions not used for now, but can use for self-documentation\nconst typeRestrictions: Array<DropRestriction<DnDTypeRestrictionParams>> = [\n rule(\n \"Draggable type must be draggable\",\n ({ draggedType, isDraggingNewComponent }) =>\n !isDraggingNewComponent && !isTypeDraggable(draggedType),\n ),\n rule(\n \"Drop target type must be droppable\",\n ({ dropTargetType }) => !isTypeDroppable(dropTargetType),\n ),\n rule(\n \"Only containers can be dropped on non empty pages\",\n ({ draggedType, dropTargetType, dropTargetEmpty }) => {\n const containerTags = rootStore.componentRegistry.containerTypes;\n return (\n !containerTags.has(draggedType) &&\n dropTargetType === NATIVE_COMPONENT_TYPES.Page &&\n !dropTargetEmpty\n );\n },\n ),\n];\n\nexport const isDragAndDropTypeValid = ({\n draggedType,\n dropTargetType,\n dropTargetEmpty,\n isDraggingNewComponent,\n}: {\n draggedType: string;\n dropTargetType: string;\n dropTargetEmpty: boolean;\n isDraggingNewComponent: boolean;\n}) => {\n const triggeredRestriction = typeRestrictions.find((restriction) =>\n restriction.restriction({\n draggedType,\n dropTargetType,\n dropTargetEmpty,\n isDraggingNewComponent,\n }),\n );\n\n return triggeredRestriction == null;\n};\n\nconst isTypeDroppable = (type: string) => {\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isDroppable === true; // defaults to false\n};\n\nconst isTypeDraggable = (type: string) => {\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isDraggable !== false; // defaults to true\n};\n\nexport const isEntityDraggable = (params: {\n type: string;\n directParentInstanceId?: SbInstance;\n instancesCount: number;\n isRoot: boolean;\n}) => {\n return (\n isTypeDraggable(params.type) &&\n !params.isRoot &&\n params.directParentInstanceId != null &&\n params.instancesCount === 1\n );\n};\n\nexport const isEntityDroppable = (params: { type: string }) => {\n return isTypeDroppable(params.type);\n};\n\n// can the widget be dragged by clicking on the general area (vs the name pill)\nexport const isContentDraggable = (type: string) => {\n if (!isTypeDraggable(type)) {\n return false;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isContentDraggable !== false; // defaults to true\n};\n\nexport const filterSafeStackDimensionProperties = (existingProps: {\n width?: Dim;\n height?: Dim;\n size?: Dim | unknown;\n}): {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo;\n} => {\n const { width, height, size } = existingProps;\n\n const safeDimensions: {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo; // TODO remove this once we get rid of legacy Icon widget\n } = {};\n\n if (\n height?.mode === \"px\" ||\n height?.mode === \"fit\" ||\n height?.mode === \"fill\"\n ) {\n safeDimensions.height = Property.Dimension(height);\n }\n\n if (width?.mode === \"px\" || width?.mode === \"fit\" || width?.mode === \"fill\") {\n safeDimensions.width = Property.Dimension(width);\n }\n\n if (isDimension(size) && size.mode === \"px\") {\n safeDimensions.size = Property.Dimension(size);\n }\n\n return safeDimensions;\n};\n","import { observer } from \"mobx-react-lite\";\nimport React, { useEffect } from \"react\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useComponentDroppable } from \"./hooks/use-component-droppable.js\";\nimport { useWidgetNodeRef } from \"./hooks/use-widget-node-ref.js\";\nimport { isDragAndDropTypeValid } from \"./utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nconst DroppableWidget = observer(\n (props: {\n instanceId: SbInstance;\n children: React.ReactNode;\n dropTargetElem?: HTMLElement | null;\n }) => {\n const editStore = getEditStore();\n const myType = editStore.runtimeEntitiesManager.getEditorWidgetType(\n props.instanceId,\n );\n const rootInstanceId = editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n props.instanceId,\n )?.rootInstanceId;\n\n const depth = useObserverMemo(() => {\n let currentId = props.instanceId;\n let depth = 0;\n while (currentId) {\n const meta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(currentId);\n if (!meta?.parentInstanceId) break;\n currentId = meta.parentInstanceId;\n depth++;\n }\n return depth;\n }, [props.instanceId, editStore.runtimeEntitiesManager]);\n\n const draggedType = editStore.ui.dnd.draggedWidgetType;\n\n const isValidDropForDraggedType = useObserverMemo(() => {\n const editStore = getEditStore();\n const dropTargetEmpty =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(props.instanceId)\n ?.children?.length === 0;\n return (\n draggedType &&\n myType &&\n isDragAndDropTypeValid({\n draggedType,\n dropTargetType: myType,\n isDraggingNewComponent: editStore.ui.dnd.isDraggingNewComponent,\n dropTargetEmpty,\n })\n );\n }, [draggedType, myType, props.instanceId]);\n\n const selfIsDragging =\n editStore.ui.dnd.isDragging &&\n editStore.ui.getSelectedInstanceIds().includes(props.instanceId);\n\n const isDragDropEnabled =\n props.instanceId && editStore.ui.dnd.canDragWidget(props.instanceId);\n\n const disabled =\n !isValidDropForDraggedType || selfIsDragging || !isDragDropEnabled;\n\n const { setNodeRef: setDroppableNodeRef } = useComponentDroppable({\n instanceId: props.instanceId,\n rootInstanceId,\n depth,\n disabled,\n });\n\n const widgetNode = useWidgetNodeRef(props.instanceId);\n\n useEffect(() => {\n // we have to set the nodes like this because the wrapper has display: contents\n // Determine which node to use for the drop target\n let targetNode: HTMLElement | null = null;\n if (props.dropTargetElem) {\n targetNode = props.dropTargetElem;\n } else if (widgetNode) {\n targetNode = widgetNode as HTMLElement;\n }\n\n if (targetNode) {\n setDroppableNodeRef(targetNode);\n }\n }, [widgetNode, setDroppableNodeRef, props.dropTargetElem]);\n\n return <React.Fragment>{props.children}</React.Fragment>;\n },\n);\n\nexport default DroppableWidget;\n","import { useCallback } from \"react\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\nimport type React from \"react\";\n\ninterface RightClickMenuProps {\n sourceId: SbElement;\n}\n\nexport function useRightClickMenu({ sourceId }: RightClickMenuProps) {\n return {\n onContextMenu: useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n editorBridge.registerContextMenuClick(\n sourceId,\n event.clientX,\n event.clientY,\n );\n },\n [sourceId],\n ),\n };\n}\n","import { createContext, useContext } from \"react\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager\";\n\ntype IdentifierContextType = {\n identifier: IdentifierInfo | null;\n};\n\nconst ParentIdentifierContext = createContext<IdentifierContextType | null>({\n identifier: null,\n});\n\nexport function useParentIdentifier() {\n return useContext(ParentIdentifierContext)?.identifier;\n}\n\nexport function ParentIdentifierProvider({\n identifier,\n children,\n}: {\n identifier: IdentifierInfo;\n children: React.ReactNode;\n}) {\n return (\n <ParentIdentifierContext.Provider value={{ identifier }}>\n {children}\n </ParentIdentifierContext.Provider>\n );\n}\n","import { createContext, useContext, useMemo, useEffect } from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype InteractionContextType = {\n rootInstanceId: SbInstance | undefined;\n};\n\nconst defaultContext: InteractionContextType = {\n rootInstanceId: undefined,\n};\n\nconst InteractionLayerContext = createContext<\n InteractionContextType | undefined\n>(undefined);\n\nexport const useInteractionLayerContext = () => {\n const context = useContext(InteractionLayerContext);\n return context ?? defaultContext;\n};\n\nexport const InteractionLayerProvider = (props: {\n children: React.ReactNode;\n instanceId: SbInstance;\n}) => {\n const context = useMemo(\n () => ({ rootInstanceId: props.instanceId }),\n [props.instanceId],\n );\n\n useEffect(() => {\n const editStore = getEditStore();\n editStore.interactionLayerManager.addInteractionLayerInstanceId(\n props.instanceId,\n );\n return () => {\n editStore.interactionLayerManager.removeInteractionLayerInstanceId(\n props.instanceId,\n );\n };\n }, [props.instanceId]);\n\n return (\n <InteractionLayerContext.Provider value={context}>\n {props.children}\n </InteractionLayerContext.Provider>\n );\n};\n","export function throttle<T extends (...args: any[]) => any>(\n func: T,\n delay: number,\n): ((...args: Parameters<T>) => void) & { cancel: () => void } {\n let timeoutId: ReturnType<typeof setTimeout>;\n let lastExecTime = 0;\n\n const throttled = function (this: any, ...args: Parameters<T>) {\n const currentTime = Date.now();\n\n if (currentTime - lastExecTime < delay) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n lastExecTime = currentTime;\n func.apply(this, args);\n }, delay);\n } else {\n lastExecTime = currentTime;\n func.apply(this, args);\n }\n };\n\n throttled.cancel = () => {\n clearTimeout(timeoutId);\n };\n\n return throttled;\n}\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n delay: number,\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return function (this: any, ...args: Parameters<T>) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n func.apply(this, args);\n }, delay);\n };\n}\n","export const CANVAS_ROOT_ID = \"canvas-root\";\n\n/**\n * The ID of the element used to target detached components (e.g: modals, slideouts) when they are opened in the app.\n */\nexport const PORTAL_ROOT_ID = \"portal-root\";\n\nexport const POPOVER_ROOT_ID = \"sb-popover-root\";\n","import { observer } from \"mobx-react-lite\";\nimport React from \"react\";\nimport { getWidgetDropAreaAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport type { CSSProperties } from \"react\";\n\nexport const StackDropPreview = observer(() => {\n const editStore = getEditStore();\n const { placeholders } = editStore.ui.dnd.stack.lazyDropInfo;\n const dropTargetId = editStore.ui.dnd.dropTargetId;\n const dropTargetWidgetType = editStore.ui.dnd.dropTargetWidgetType;\n\n return (\n <div\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n positionAnchor: getWidgetDropAreaAnchorName(\n dropTargetId,\n dropTargetWidgetType,\n ),\n } as CSSProperties\n }\n >\n {editStore.ui.dnd.isProspectiveDropValid && placeholders ? (\n <>\n {placeholders.map((placeholder) => (\n <div\n key={placeholder.top + placeholder.left}\n className=\"sb-edit-drop-placeholder\"\n style={{\n top: placeholder.top,\n left: placeholder.left,\n width: placeholder.width,\n height: placeholder.height,\n backgroundColor: \"rgba(0, 135, 224, 0.16)\",\n }}\n data-is-active={placeholder.isActive}\n data-is-valid-drop={true}\n />\n ))}\n </>\n ) : null}\n <div\n className=\"sb-edit-drop-target-outline\"\n data-invalid-target={!editStore.ui.dnd.isProspectiveDropValid}\n />\n </div>\n );\n});\n","import { DragOverlay } from \"@dnd-kit/core\";\nimport { snapCenterToCursor } from \"@dnd-kit/modifiers\";\nimport { observer } from \"mobx-react-lite\";\nimport React from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport { StackDropPreview } from \"./stack-drop.jsx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const DropLayer = observer((props: { rootInstanceId: SbInstance }) => {\n // putting handlers here instead of at DnDProvider level in case we want to extend the logic with DnDContext later\n\n const editStore = getEditStore();\n const draggedWidgetType = editStore.ui.dnd.draggedWidgetType;\n const dropTargetWidgetType = editStore.ui.dnd.dropTargetWidgetType;\n const isDropTargetStackLike = editStore.ui.dnd.isDropTargetStackLike;\n const dropTargetId = editStore.ui.dnd.dropTargetId;\n\n const isDropTargetInInteractionLayer = doesInteractionLayerContainInstance(\n props.rootInstanceId,\n dropTargetId,\n );\n\n const isDragging = editStore.ui.dnd.isDragging;\n const isPossibleDrop =\n isDragging &&\n isDropTargetInInteractionLayer &&\n Boolean(draggedWidgetType && dropTargetWidgetType);\n\n const possibleStackDrop = isPossibleDrop && isDropTargetStackLike;\n\n // DragOverlay should not be conditionally rendered\n // The entity inside of DragOverlay must always be rendered, since it is tied to the collision detection logic somehow\n return (\n <>\n {possibleStackDrop && <StackDropPreview />}\n <DragOverlay modifiers={[snapCenterToCursor]} dropAnimation={null}>\n {/* {editStore.ui.dnd.isDraggingNewComponent && isPossibleDrop && (\n <div\n className=\"sb-edit-drag-preview\"\n data-is-valid-drop={possibleStackDrop}\n style={{\n visibility: \"visible\",\n height: `${editStore.ui.dnd.draggingWidgetSize.height * 12}px`,\n width: `${editStore.ui.dnd.draggingWidgetSize.width * 12}px`,\n }}\n />\n )} */}\n </DragOverlay>\n </>\n );\n});\n\nexport default DropLayer;\n","export const EXTENDED_CLICKABLE_AREA_DELTA = 6;\n\nexport const EXTENDED_CLICKABLE_ANCHOR_CSS = {\n top: `calc(anchor(top) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n left: `calc(anchor(left) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n right: `calc(anchor(right) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n bottom: `calc(anchor(bottom) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n};\n\nexport const EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH = `polygon(\n 0% 0%, 0% 100%, 100% 100%, 100% 0%,\n 0% 0%, ${EXTENDED_CLICKABLE_AREA_DELTA}px ${EXTENDED_CLICKABLE_AREA_DELTA}px, calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px) ${EXTENDED_CLICKABLE_AREA_DELTA}px, \n calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px) calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px), ${EXTENDED_CLICKABLE_AREA_DELTA}px calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px), ${EXTENDED_CLICKABLE_AREA_DELTA}px ${EXTENDED_CLICKABLE_AREA_DELTA}px\n )`;\n","<svg width=\"16\" height=\"14\" viewBox=\"0 0 16 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" color=\"#A4AAB7\">\n<g><path d=\"M2.00001 1L3.88386 2.88385M14 13L12.1162 11.1161M12.1162 11.1161C11.0861 11.8322 9.72533 12.3333 8.00001 12.3333C3.33334 12.3333 1.33334 8.66667 1.33334 7C1.33334 5.94952 2.12787 4.10451 3.88386 2.88385M12.1162 11.1161L9.41419 8.41418M3.88386 2.88385L6.58577 5.58576M6.58577 5.58576C6.22382 5.94769 5.99995 6.4477 5.99995 7C5.99995 8.10457 6.89538 9 7.99995 9C8.55225 9 9.05226 8.77613 9.41419 8.41418M6.58577 5.58576L9.41419 8.41418M13.6132 9.66667C13.6954 9.55607 13.7727 9.44476 13.845 9.33333C14.4034 8.47271 14.6667 7.60471 14.6667 7C14.6667 5.33333 12.6667 1.66667 8.00001 1.66667C7.26869 1.66667 6.60286 1.75671 5.99995 1.915C5.88664 1.94475 5.77556 1.97691 5.66668 2.01133\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\"/></g>\n</svg>\n","import rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { Dimension } from \"@superblocksteam/shared\";\n\nconst canResizeWidth = (\n widthMode: Dimension[\"mode\"] | Dim[\"mode\"] | undefined,\n): boolean => {\n return widthMode === \"px\" || widthMode === \"columns\";\n};\n\nconst canResizeHeight = (\n heightMode: Dimension[\"mode\"] | Dim[\"mode\"] | undefined,\n): boolean => {\n return heightMode === \"px\" || heightMode === \"rows\";\n};\n\nexport const useResizeCapabilities = (\n instanceId: SbInstance,\n): { canResizeWidth: boolean; canResizeHeight: boolean } => {\n const componentMeta =\n rootStore.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n\n const componentType = componentMeta?.type;\n\n if (!componentType) {\n throw new Error(\"Component type not found\");\n }\n\n const editorConfig =\n rootStore.componentRegistry.getEditorConfig(componentType);\n\n if (editorConfig && \"isResizable\" in editorConfig) {\n if (typeof editorConfig.isResizable === \"boolean\") {\n return {\n canResizeWidth: editorConfig.isResizable,\n canResizeHeight: editorConfig.isResizable,\n };\n } else if (typeof editorConfig.isResizable === \"function\") {\n const isResizable = editorConfig.isResizable(componentMeta?.props);\n return {\n canResizeWidth: isResizable.width,\n canResizeHeight: isResizable.height,\n };\n } else if (typeof editorConfig.isResizable === \"object\") {\n return {\n canResizeWidth: editorConfig.isResizable.width ?? true,\n canResizeHeight: editorConfig.isResizable.height ?? true,\n };\n }\n }\n\n const widthMode = (componentMeta?.props?.width as Dim)?.mode;\n const heightMode = (componentMeta?.props?.height as Dim)?.mode;\n\n return {\n canResizeWidth: canResizeWidth(widthMode),\n canResizeHeight: canResizeHeight(heightMode),\n };\n};\n","import { observer } from \"mobx-react-lite\";\nimport { useEffect, useMemo } from \"react\";\nimport HideIcon from \"../../lib/user-facing/assets/icons/hide.svg\";\nimport ErrorIcon from \"../../lib/user-facing/assets/icons/system-error.svg\";\nimport { colors } from \"../../lib/user-facing/styling/colors.js\";\nimport { useComponentDraggable } from \"../dnd/hooks/use-component-draggable.js\";\nimport { useWidgetNodeRef } from \"../dnd/hooks/use-widget-node-ref.js\";\nimport { isEntityDraggable } from \"../dnd/utils.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useResizeCapabilities } from \"../resize-capabilities.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { DraggableAttributes } from \"@dnd-kit/core\";\nimport type { SyntheticListenerMap } from \"@dnd-kit/core/dist/hooks/utilities\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nconst DraggableWrapper = (props: {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) => {\n const { instanceId, displayName, anyIsDragging, type, isVisible } = props;\n const {\n setNodeRef: setDraggableNodeRef,\n listeners,\n attributes,\n } = useComponentDraggable({\n instanceId,\n disableDrag: false,\n });\n\n const widgetNode = useWidgetNodeRef(instanceId);\n\n useEffect(() => {\n // we have to set the nodes like this because the wrapper has display: contents\n if (widgetNode) {\n setDraggableNodeRef(widgetNode as HTMLElement);\n }\n }, [widgetNode, setDraggableNodeRef]);\n\n return (\n <NamePillDiv\n attributes={attributes}\n listeners={listeners}\n displayName={displayName}\n instanceId={instanceId}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n};\n\nconst NamePillDiv = (params: {\n attributes?: DraggableAttributes;\n listeners?: SyntheticListenerMap;\n displayName: string;\n instanceId: SbInstance;\n anyIsDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) => {\n const {\n attributes = {},\n listeners = {},\n displayName,\n instanceId,\n type,\n isVisible,\n } = params;\n\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n\n const { canResizeWidth, canResizeHeight } = useResizeCapabilities(instanceId);\n\n const shouldToggleComponentInAiContext =\n getEditStore().ai.shouldToggleComponentInAiContext();\n\n const selectionStyles = useMemo(() => {\n const baseStyles = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n };\n if (type === \"ERROR\") {\n return {\n ...baseStyles,\n backgroundColor: colors.DANGER,\n };\n }\n if (type === \"SELECTED\" && canResizeHeight && canResizeWidth) {\n return {\n ...baseStyles,\n marginRight: \"8px\",\n };\n }\n return baseStyles;\n }, [type, canResizeHeight, canResizeWidth]);\n\n return (\n <div\n {...attributes}\n {...listeners}\n className=\"sb-edit-selection-name-pill\"\n style={selectionStyles}\n data-test=\"interaction-rect-name-pill\"\n data-pill-name={displayName}\n data-pill-type={type}\n onClick={(ev) => {\n if (shouldToggleComponentInAiContext) {\n if (sourceId) {\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n displayName,\n );\n }\n } else {\n getEditStore().ui.selectWidget(instanceId, ev.shiftKey === true);\n }\n\n ev.stopPropagation();\n }}\n >\n {type === \"ERROR\" && (\n <ErrorIcon\n height={12}\n width={12}\n style={{\n color: \"white\",\n }}\n />\n )}\n {isVisible === false && (\n <HideIcon height={12} width={10} style={{ color: \"white\" }} />\n )}\n {displayName}\n </div>\n );\n};\n\ninterface NamePillProps {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n enableDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}\n\nconst NamePill: ReturnType<typeof observer<NamePillProps>> = observer(\n (props: NamePillProps) => {\n const {\n instanceId,\n displayName,\n anyIsDragging,\n enableDragging,\n type,\n isVisible,\n } = props;\n\n const editStore = getEditStore();\n\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n\n const instancesCount =\n widgetMeta?.sourceId &&\n editStore.runtimeEntitiesManager.widgets.getSourceIdCount(\n widgetMeta.sourceId,\n );\n\n const isDraggable =\n enableDragging &&\n widgetMeta?.type &&\n isEntityDraggable({\n type: widgetMeta.type,\n directParentInstanceId: widgetMeta.directParentInstanceId,\n instancesCount: instancesCount ?? 0,\n isRoot: widgetMeta.isRoot,\n });\n\n if (isDraggable) {\n return (\n <DraggableWrapper\n instanceId={instanceId}\n displayName={displayName}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n } else {\n return (\n <NamePillDiv\n displayName={displayName}\n instanceId={instanceId}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n }\n },\n);\n\nexport default NamePill;\n","import {\n TooltipProvider,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n Root as TooltipRoot,\n} from \"@radix-ui/react-tooltip\";\nimport {\n AiContextMode,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport { getWidgetRectAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport AiStarsIcon from \"../assets/ai-stars.svg\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport NamePill from \"./interaction-rect-name-pill.js\";\n\nexport function InteractionRectActions(props: {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n enableDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) {\n const {\n instanceId,\n displayName,\n anyIsDragging,\n enableDragging,\n type,\n isVisible,\n } = props;\n\n const isPrimaryInstanceId = useObserverMemo(() => {\n const focusedInstanceId = getEditStore().ui.getFocusedInstanceId();\n const selectedInstanceIds = getEditStore().ui.getSelectedInstanceIds();\n\n if (type === \"SELECTED\") {\n return selectedInstanceIds.includes(instanceId);\n } else if (type === \"FOCUSED\") {\n return focusedInstanceId === instanceId;\n } else {\n return true;\n }\n }, [type, instanceId]);\n\n if (!isPrimaryInstanceId) {\n return null;\n }\n\n const handleAddToChat = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (sourceId) {\n editorBridge.addComponentToAiContext(sourceId, instanceId);\n }\n };\n\n const aiContextMode = getEditStore().ai.getAiContextMode();\n const isAiTaggingEnabled = getEditStore().ai.getIsTaggingEnabled();\n\n const shouldHideActions = !isPrimaryInstanceId;\n\n const shouldShowAddToChatButton =\n isAiTaggingEnabled &&\n (aiContextMode === AiContextMode.SILENT ||\n (aiContextMode === AiContextMode.HIGHLIGHT && type !== \"TARGETED\"));\n\n const shouldShowAiPurplePill =\n isAiTaggingEnabled &&\n (aiContextMode === AiContextMode.AUTO_SELECT ||\n (aiContextMode === AiContextMode.HIGHLIGHT && type === \"TARGETED\"));\n\n return (\n <div\n className={`sb-edit-interaction-rect-actions ${shouldShowAiPurplePill ? \"sb-edit-actions-target-mode\" : \"\"}`}\n data-sb-actions-id={instanceId}\n style={\n {\n ...(shouldHideActions ? { display: \"none !important\" } : {}),\n position: \"absolute\",\n bottom: \"anchor(top)\",\n right: \"anchor(right)\",\n positionAnchor: getWidgetRectAnchorName(instanceId),\n visibility: anyIsDragging ? \"hidden\" : \"visible\",\n marginTop: \"1px\",\n paddingBottom: \"1px\",\n zIndex: Layers.namePill,\n display: \"flex\",\n gap: \"2px\",\n } as React.CSSProperties\n }\n >\n {shouldShowAddToChatButton && (\n <TooltipProvider>\n <TooltipRoot>\n <TooltipTrigger asChild>\n <button\n aria-label=\"Add to chat\"\n className=\"sb-edit-add-to-chat-button\"\n onClick={handleAddToChat}\n >\n <AiStarsIcon />\n </button>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 8px\",\n borderRadius: \"6px\",\n fontSize: \"12px\",\n lineHeight: \"1.5\",\n boxShadow:\n \"0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05)\",\n border: \"none\",\n zIndex: 1070,\n }}\n sideOffset={5}\n >\n Add to chat\n </TooltipContent>\n </TooltipPortal>\n </TooltipRoot>\n </TooltipProvider>\n )}\n <NamePill\n instanceId={instanceId}\n displayName={displayName}\n anyIsDragging={anyIsDragging}\n enableDragging={enableDragging}\n type={type}\n isVisible={isVisible}\n />\n </div>\n );\n}\n","import { throttle } from \"lodash\";\nimport { useMemo, useCallback } from \"react\";\nimport styled from \"styled-components\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport { getWidgetRectAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport { useResizeCapabilities } from \"../resize-capabilities.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nconst HandlesWrapper = styled.div`\n z-index: ${Layers.resizer};\n position: absolute;\n top: anchor(top);\n left: anchor(left);\n right: anchor(right);\n bottom: anchor(bottom);\n pointer-events: none;\n`;\n\nexport const InteractionRectHandles = (props: {\n instanceId: SbInstance;\n isDragging: boolean;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n}) => {\n const { instanceId, isDragging, selectionType } = props;\n const { canResizeWidth, canResizeHeight } = useResizeCapabilities(instanceId);\n\n const throttledResizeWidget = useMemo(\n () =>\n throttle((e: PointerEvent) => {\n rootStore.editStore?.ui.resizing.resizeWidget(\n e.clientX,\n e.clientY,\n instanceId,\n canResizeWidth,\n canResizeHeight,\n );\n }, 30),\n [instanceId, canResizeWidth, canResizeHeight],\n );\n\n const handlePointerMove = useCallback(\n (e: PointerEvent) => {\n throttledResizeWidget(e);\n },\n [throttledResizeWidget],\n );\n\n const handlePointerUp = useCallback(() => {\n rootStore.editStore?.ui.resizing.applyResize(instanceId);\n\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerMove, instanceId]);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent, position: string) => {\n e.stopPropagation();\n e.preventDefault(); // Prevents selection of text on the browser\n\n // Only start resizing if the direction is allowed\n if ((position === \"left\" || position === \"right\") && !canResizeWidth) {\n return;\n }\n\n if ((position === \"top\" || position === \"bottom\") && !canResizeHeight) {\n return;\n }\n\n rootStore.editStore?.ui.resizing.startResizing(\n e.clientX,\n e.clientY,\n instanceId,\n position,\n );\n\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n },\n [\n instanceId,\n canResizeWidth,\n canResizeHeight,\n handlePointerMove,\n handlePointerUp,\n ],\n );\n\n const handlesToShow = useMemo(() => {\n if (isDragging || selectionType !== \"SELECTED\") {\n return [];\n }\n\n const handles = [\"top\", \"bottom\", \"left\", \"right\"];\n\n if (canResizeWidth && canResizeHeight) {\n return [\n ...handles,\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n ];\n }\n\n return handles;\n }, [isDragging, selectionType, canResizeWidth, canResizeHeight]);\n\n const additionalClassnames = useCallback(\n (pos: string) => {\n if (pos === \"left\" && canResizeWidth && !canResizeHeight) {\n return \"resize-handle-edge left-resize-handle-edge\";\n }\n\n if (pos === \"right\" && canResizeWidth && !canResizeHeight) {\n return \"resize-handle-edge right-resize-handle-edge\";\n }\n\n if (pos === \"top\" && !canResizeWidth && canResizeHeight) {\n return \"resize-handle-edge top-resize-handle-edge\";\n }\n\n if (pos === \"bottom\" && !canResizeWidth && canResizeHeight) {\n return \"resize-handle-edge bottom-resize-handle-edge\";\n }\n\n return \"\";\n },\n [canResizeWidth, canResizeHeight],\n );\n\n return (\n <HandlesWrapper\n style={\n {\n visibility: isDragging ? \"hidden\" : \"visible\",\n positionAnchor: getWidgetRectAnchorName(instanceId),\n } as CSSProperties\n }\n >\n {handlesToShow.map((pos) => (\n <div\n key={pos}\n className={`resize-handle ${pos}-resize-handle ${additionalClassnames(pos)}`}\n onPointerDown={(e) => handlePointerDown(e, pos)}\n />\n ))}\n </HandlesWrapper>\n );\n};\n","import { useEffect, useState, useMemo, useRef } from \"react\";\nimport { getWidgetNode } from \"../interaction-utils.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\n// Performance optimization constants\nexport const VIEWPORT_CULLING_CONFIG = {\n // Root margin for intersection observer - start tracking elements before they enter viewport\n rootMargin: \"100px\",\n // Maximum number of targeted rectangles to render regardless of viewport culling\n maxTargetedRects: 100,\n // Threshold for intersection (0 = any part visible, 1 = fully visible)\n threshold: 0,\n} as const;\n\n/**\n * Hook to track which components are currently visible in the viewport using Intersection Observer.\n * This is used for performance optimization to only render interaction rectangles for visible elements.\n *\n * The hook automatically enforces a maximum limit (VIEWPORT_CULLING_CONFIG.maxTargetedRects) to prevent\n * performance issues when too many components are targeted. Components that enter the viewport first\n * will be prioritized.\n *\n * @param components - Array of component objects with instanceId and sourceId to track for viewport intersection\n * @returns Set of component objects that are currently visible in the viewport (limited to maxTargetedRects)\n */\nexport const useViewportIntersection = (\n components: { instanceId: SbInstance; sourceId: SbElement }[],\n): Set<{ instanceId: SbInstance; sourceId: SbElement }> => {\n const [visibleComponents, setVisibleComponents] = useState<\n Set<{ instanceId: SbInstance; sourceId: SbElement }>\n >(new Set());\n\n const previousComponentsRef = useRef<string>(\"\");\n const stableComponentsRef = useRef<\n { instanceId: SbInstance; sourceId: SbElement }[]\n >([]);\n\n // Create a stable array that only changes when the content actually changes\n const currentComponentsKey = useMemo(() => {\n return components\n .slice()\n .sort((a, b) => a.instanceId.localeCompare(b.instanceId))\n .map((c) => `${c.instanceId}:${c.sourceId}`)\n .join(\",\");\n }, [components]);\n\n if (currentComponentsKey !== previousComponentsRef.current) {\n previousComponentsRef.current = currentComponentsKey;\n stableComponentsRef.current = components\n .slice()\n .sort((a, b) => a.instanceId.localeCompare(b.instanceId));\n }\n\n useEffect(() => {\n const stableComponents = stableComponentsRef.current;\n\n // Clear visible components when components change\n setVisibleComponents(new Set());\n\n if (stableComponents.length === 0) {\n return;\n }\n\n // Create a map to quickly look up component objects by instanceId\n const componentMap = new Map<\n SbInstance,\n { instanceId: SbInstance; sourceId: SbElement }\n >();\n stableComponents.forEach((component) => {\n componentMap.set(component.instanceId, component);\n });\n\n const observer = new IntersectionObserver(\n (entries) => {\n setVisibleComponents((prevVisible) => {\n const newVisible = new Set(prevVisible);\n\n entries.forEach((entry) => {\n const instanceId = entry.target.getAttribute(\n \"data-intersection-instance-id\",\n ) as SbInstance;\n const component = componentMap.get(instanceId);\n\n if (component) {\n if (entry.isIntersecting) {\n // Only add if we haven't reached the maximum limit\n if (\n newVisible.size < VIEWPORT_CULLING_CONFIG.maxTargetedRects\n ) {\n newVisible.add(component);\n }\n } else {\n // Remove the component from the set by finding the matching one\n const toRemove = Array.from(newVisible).find(\n (c) => c.instanceId === instanceId,\n );\n if (toRemove) {\n newVisible.delete(toRemove);\n }\n }\n }\n });\n\n return newVisible;\n });\n },\n {\n rootMargin: VIEWPORT_CULLING_CONFIG.rootMargin,\n threshold: VIEWPORT_CULLING_CONFIG.threshold,\n },\n );\n\n // Find and observe elements for each component\n stableComponents.forEach((component) => {\n const element = getWidgetNode(component.instanceId);\n\n if (element) {\n // Add a data attribute to track which instance this element represents\n element.setAttribute(\n \"data-intersection-instance-id\",\n component.instanceId,\n );\n observer.observe(element);\n }\n });\n\n return () => {\n observer.disconnect();\n // Clean up data attributes\n stableComponents.forEach((component) => {\n const element = getWidgetNode(component.instanceId);\n if (element) {\n element.removeAttribute(\"data-intersection-instance-id\");\n }\n });\n };\n }, [currentComponentsKey]); // Use the stable key\n\n return visibleComponents;\n};\n","import {\n AiContextMode,\n type SbElement,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport React, { useMemo } from \"react\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport {\n getWidgetAnchorName,\n getWidgetRectAnchorName,\n} from \"../../lib/utils/widget-wrapper-naming.js\";\nimport {\n EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH,\n EXTENDED_CLICKABLE_ANCHOR_CSS,\n} from \"../extended-clickable-area.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport { InteractionRectActions } from \"./interaction-rect-actions.jsx\";\nimport { InteractionRectHandles } from \"./interaction-rect-handles.jsx\";\nimport { useViewportIntersection } from \"./use-viewport-intersection.js\";\nimport type { RootType } from \"./interaction-layer.jsx\";\nimport type { IdentifierInfo } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type { CSSProperties } from \"react\";\n\ntype SelectionInfo = {\n sourceId: SbElement;\n instanceId: SbInstance;\n displayName: string;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"TARGETED\";\n type: string | undefined;\n isVisible?: boolean;\n};\n\nexport const isWidgetInCurrentLayer = ({\n instanceId,\n rootType,\n rootInstanceId,\n}: {\n instanceId: SbInstance;\n rootType: RootType;\n rootInstanceId: SbInstance;\n}) => {\n return (\n getEditStore().runtimeEntitiesManager.getClosestAncestorByType(\n instanceId,\n rootType,\n )?.instanceId === rootInstanceId\n );\n};\n\nexport const useWidgetErrors = (params: {\n widgetScopesToNamesToIds: Record<\n string,\n Record<string, Record<SbInstance, IdentifierInfo>>\n >;\n rootType: RootType;\n rootInstanceId: SbInstance;\n scopeId: string;\n}): Record<SbInstance, { name: string; error: string }> => {\n const { widgetScopesToNamesToIds, rootType, rootInstanceId, scopeId } =\n params;\n const namesToIds = widgetScopesToNamesToIds[scopeId];\n const widgetsWithErrors = useObserverMemo(() => {\n if (!namesToIds) return {};\n const duplicatedNames = Object.entries(namesToIds).filter(\n ([_name, ids]) => {\n const idsArr = Object.keys(ids) as SbInstance[];\n return (\n idsArr.length > 1 &&\n idsArr.every((id) => {\n const widgetMeta =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(id);\n return widgetMeta?.isSbComponent;\n })\n );\n },\n );\n return duplicatedNames.reduce(\n (acc, [name, ids]) => {\n (Object.keys(ids) as SbInstance[]).forEach((id) => {\n if (\n isWidgetInCurrentLayer({\n instanceId: id,\n rootType,\n rootInstanceId,\n })\n ) {\n acc[id] = {\n name,\n error: \"NAME_CONFLICT\",\n };\n }\n });\n return acc;\n },\n {} as Record<SbInstance, { name: string; error: string }>,\n );\n }, [namesToIds, rootType, rootInstanceId]);\n\n return widgetsWithErrors;\n};\n\n// TODO (alex): show different rects for sourceId and instanceId - for now just using instanceId\nexport const useSelectionElements = (params: {\n focusedSourceId: SbElement | null;\n selectedSourceIds: SbElement[];\n focusedInstanceId: SbInstance | null;\n selectedInstanceIds: SbInstance[];\n targetedSourceIds: SbElement[];\n rootType: RootType;\n rootId: SbInstance;\n aiContextMode: AiContextMode;\n}): SelectionInfo[] => {\n const {\n focusedInstanceId,\n selectedInstanceIds,\n targetedSourceIds,\n aiContextMode,\n rootId,\n } = params;\n\n const allTargetedComponents = useMemo(() => {\n const components: { instanceId: SbInstance; sourceId: SbElement }[] = [];\n targetedSourceIds.forEach((sourceId) => {\n const sourceInstanceIds =\n getEditStore().runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n components.push(\n ...sourceInstanceIds\n .filter((instanceId) =>\n doesInteractionLayerContainInstance(rootId, instanceId),\n )\n .map((instanceId) => ({ instanceId, sourceId })),\n );\n });\n return components;\n }, [targetedSourceIds, rootId]);\n\n const visibleTargetedComponents = useViewportIntersection(\n allTargetedComponents,\n );\n\n const selectionRects = useObserverMemo<SelectionInfo[]>(() => {\n // TODO https://linear.app/superblocks/issue/FE-687/figure-out-roots-having-parent-ids\n // filter out id that is not in current layer\n // const focusedSourceId = params.focusedSourceId\n // ? isWidgetInCurrentLayer({\n // sourceId: params.focusedSourceId,\n // rootType,\n // rootId,\n // })\n // ? params.focusedSourceId\n // : null\n // : null;\n // const selectedSourceIds = params.selectedSourceIds.filter((sourceId) =>\n // isWidgetInCurrentLayer({\n // sourceId,\n // rootType,\n // rootId,\n // }),\n // );\n\n const selectedRects: SelectionInfo[] = [];\n\n visibleTargetedComponents.forEach((component) => {\n const { type, displayName, isVisible } = selectDisplayNameAndVisibility(\n component.instanceId,\n );\n\n selectedRects.push({\n instanceId: component.instanceId,\n sourceId: component.sourceId,\n displayName,\n selectionType: \"TARGETED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n });\n\n selectedInstanceIds\n .filter((instanceId) =>\n doesInteractionLayerContainInstance(rootId, instanceId),\n )\n .forEach((instanceId) => {\n const { type, displayName, sourceId, isVisible } =\n selectDisplayNameAndVisibility(instanceId);\n if (sourceId && !targetedSourceIds.includes(sourceId)) {\n selectedRects.push({\n instanceId,\n sourceId,\n displayName,\n selectionType: \"SELECTED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n }\n });\n\n if (\n focusedInstanceId &&\n doesInteractionLayerContainInstance(rootId, focusedInstanceId) &&\n (aiContextMode === AiContextMode.AUTO_SELECT ||\n !selectedInstanceIds.includes(focusedInstanceId))\n ) {\n const { type, displayName, sourceId, isVisible } =\n selectDisplayNameAndVisibility(focusedInstanceId);\n\n if (sourceId) {\n selectedRects.push({\n instanceId: focusedInstanceId,\n sourceId,\n displayName,\n selectionType: \"FOCUSED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n }\n }\n return selectedRects;\n }, [\n focusedInstanceId,\n selectedInstanceIds,\n targetedSourceIds,\n aiContextMode,\n visibleTargetedComponents,\n rootId,\n ]);\n\n return selectionRects;\n};\n\nexport const InteractionRectTargetBorder = ({\n instanceId,\n}: {\n instanceId: SbInstance;\n}) => {\n return (\n <div\n className=\"sb-target-mode-border\"\n style={\n {\n positionAnchor: getWidgetAnchorName(instanceId),\n zIndex: Layers.focusedRect,\n } as CSSProperties\n }\n >\n <div className=\"sb-target-mode-border-top-right\" />\n <div className=\"sb-target-mode-border-top-left\" />\n <div className=\"sb-target-mode-border-bottom-right\" />\n <div className=\"sb-target-mode-border-bottom-left\" />\n </div>\n );\n};\n\nexport const InteractionRect = (props: {\n displayName: string;\n isDragging: boolean;\n instanceId: SbInstance;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n hideRectBorder?: boolean;\n isVisible?: boolean;\n type?: string;\n}) => {\n const { instanceId, isDragging, selectionType, isVisible, type } = props;\n\n const parentInstanceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n )?.parentInstanceId;\n\n const showExtendedClickArea =\n rootStore.componentRegistry.getEditorConfig(type ?? \"\")\n ?.hasExtendedClickArea && selectionType === \"FOCUSED\";\n\n const aiContextMode = getEditStore().ai.getAiContextMode();\n\n const selectionClass =\n selectionType === \"FOCUSED\"\n ? \"sb-edit-focus\"\n : selectionType === \"ERROR\"\n ? \"sb-edit-error\"\n : selectionType === \"TARGETED\"\n ? \"sb-edit-target\"\n : \"\";\n\n return (\n <>\n {parentInstanceId && selectionType === \"SELECTED\" && (\n <>\n <div\n className=\"sb-edit-selection-rect\"\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n visibility: isDragging ? \"hidden\" : \"visible\",\n anchorName: \"--widget-rect-\" + parentInstanceId,\n positionAnchor: \"--widget-\" + parentInstanceId,\n border: \"1px dashed #27bbff80\",\n ...(props.hideRectBorder ? { border: \"none\" } : {}),\n zIndex: Layers.selectedRect,\n } as any\n }\n />\n </>\n )}\n <div\n className={`sb-edit-selection-rect ${selectionClass} ${aiContextMode === AiContextMode.AUTO_SELECT ? \"sb-edit-target-mode\" : \"\"}`}\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n ...(showExtendedClickArea ? EXTENDED_CLICKABLE_ANCHOR_CSS : {}),\n visibility: isDragging ? \"hidden\" : \"visible\",\n anchorName: getWidgetRectAnchorName(instanceId),\n positionAnchor: getWidgetAnchorName(instanceId),\n ...(props.hideRectBorder ? { border: \"none\" } : {}),\n zIndex:\n selectionType === \"FOCUSED\"\n ? Layers.focusedRect\n : Layers.selectedRect,\n } as any\n }\n />\n {showExtendedClickArea && (\n <div\n onClick={(ev) => {\n if (ev.altKey) {\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (sourceId) {\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n props.displayName,\n );\n }\n ev.stopPropagation();\n return;\n }\n getEditStore().ui.selectWidget(instanceId, ev.shiftKey === true);\n ev.stopPropagation();\n }}\n style={\n {\n position: \"absolute\",\n ...EXTENDED_CLICKABLE_ANCHOR_CSS,\n zIndex: 0,\n pointerEvents: \"auto\",\n positionAnchor: getWidgetAnchorName(instanceId),\n clipPath: EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH,\n } as React.CSSProperties\n }\n />\n )}\n <InteractionRectHandles\n instanceId={instanceId}\n isDragging={isDragging}\n selectionType={selectionType}\n />\n {aiContextMode === AiContextMode.AUTO_SELECT ||\n aiContextMode === AiContextMode.HIGHLIGHT ? (\n selectionType === \"TARGETED\" ? (\n <InteractionRectTargetBorder instanceId={instanceId} />\n ) : null\n ) : null}\n <InteractionRectActions\n instanceId={instanceId}\n displayName={props.displayName}\n anyIsDragging={isDragging}\n enableDragging={selectionType !== \"ERROR\"}\n type={selectionType}\n isVisible={isVisible}\n />\n </>\n );\n};\n\nexport const selectDisplayNameAndVisibility = (\n instanceId: SbInstance,\n): {\n type: string | undefined;\n displayName: string;\n sourceId?: SbElement;\n isVisible?: boolean;\n} => {\n const meta =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n const sourceId = meta?.sourceId;\n const type = meta?.type;\n\n const widgetName = rootStore.nameManager.getWidgetName(instanceId);\n if (!widgetName || widgetName.isAnonymous) {\n return { type, displayName: type ?? \"Unknown\", sourceId };\n }\n\n return {\n type,\n displayName: widgetName.value,\n sourceId,\n isVisible: meta?.props?.isVisible as boolean | undefined,\n };\n};\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback } from \"react\";\nimport { useEffect } from \"react\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { throttle } from \"../../lib/internal-details/lib/throttle.js\";\nimport { useScope } from \"../../lib/internal-details/scope/scope-context.jsx\";\nimport {\n CANVAS_ROOT_ID,\n PORTAL_ROOT_ID,\n} from \"../../lib/user-facing/constants.js\";\nimport { isComponentTypeDetached } from \"../../lib/utils/is-component-type-detached.js\";\nimport { getEditWrapperIdWithType } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport DropLayer from \"../dnd/drop-layer.jsx\";\nimport { EXTENDED_CLICKABLE_AREA_DELTA } from \"../extended-clickable-area.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport {\n InteractionRect,\n useSelectionElements,\n useWidgetErrors,\n} from \"./interaction-rect.jsx\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport type RootType = \"App\" | \"Page\" | string;\n\nconst calculateWidgetsAtCursor = (params: {\n x: number;\n y: number;\n rootType: RootType;\n rootElement: HTMLElement | null;\n delta?: { x: number; y: number };\n}) => {\n let elements = document.elementsFromPoint(params.x, params.y);\n if (params.delta) {\n elements = [\n ...document.elementsFromPoint(\n params.x - params.delta.x,\n params.y - params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x + params.delta.x,\n params.y + params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x - params.delta.x,\n params.y + params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x + params.delta.x,\n params.y - params.delta.y,\n ),\n ];\n }\n const hoveredPills: SbInstance[] = [];\n const hoveredActual: SbInstance[] = [];\n\n new Set(elements).forEach((element) => {\n if (\n params.rootType &&\n params.rootElement &&\n !params.rootElement.contains(element)\n ) {\n return; // Skip elements not within the rootElement\n }\n const idFromActual = element.getAttribute(INSTANCE_ID_ATTRIBUTE);\n if (idFromActual) {\n hoveredActual.push(idFromActual as SbInstance);\n } else {\n const idFromPill = element.getAttribute(\"data-sb-actions-id\");\n if (idFromPill) {\n hoveredPills.push(idFromPill as SbInstance);\n }\n }\n });\n\n return {\n hoveredPills,\n hoveredActual,\n };\n};\n\nfunction getFocusedWidget(\n event: MouseEvent,\n rootType: RootType,\n rootElement: HTMLElement | null,\n editStore: EditStore,\n isExtended: boolean,\n): SbInstance | null {\n if (!rootElement) {\n return null;\n }\n\n const { hoveredPills, hoveredActual } = calculateWidgetsAtCursor({\n x: event.clientX,\n y: event.clientY,\n rootType,\n rootElement,\n delta: isExtended\n ? { x: EXTENDED_CLICKABLE_AREA_DELTA, y: EXTENDED_CLICKABLE_AREA_DELTA }\n : undefined,\n });\n\n const instanceIds = [...hoveredPills, ...hoveredActual];\n const focusedWidget =\n instanceIds.find((id) => {\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(id);\n const hasExtendedClickArea = rootStore.componentRegistry.getEditorConfig(\n widgetMeta?.type ?? \"\",\n )?.hasExtendedClickArea;\n\n return widgetMeta && (isExtended === false || hasExtendedClickArea);\n }) ?? null;\n\n if (focusedWidget) {\n return focusedWidget;\n }\n return null;\n}\n\nfunction useWidgetHover(rootType: RootType) {\n useEffect(() => {\n const rootElement = document.getElementById(\n rootType === \"App\" || rootType === \"Page\"\n ? CANVAS_ROOT_ID\n : PORTAL_ROOT_ID,\n );\n const editStore = getEditStore();\n\n const handleMouseMove = (event: MouseEvent) => {\n // Try to focus on components with \"extended\" focus area first\n const focusedWidgetExtended = getFocusedWidget(\n event,\n rootType,\n rootElement,\n editStore,\n true,\n );\n if (focusedWidgetExtended) {\n editStore.ui.setFocusedInstanceId(focusedWidgetExtended);\n } else {\n // If no \"extended\" focus area, try to focus on components with \"normal\" focus area\n const focusedWidget = getFocusedWidget(\n event,\n rootType,\n rootElement,\n editStore,\n false,\n );\n if (focusedWidget) {\n editStore.ui.setFocusedInstanceId(focusedWidget);\n }\n }\n };\n\n const throttledHandleMouseMove = throttle(handleMouseMove, 25);\n const handleMouseLeave = () => {\n throttledHandleMouseMove.cancel();\n editStore.ui.setFocusedSourceId(null);\n editStore.ui.setFocusedInstanceId(null);\n };\n\n rootElement?.addEventListener(\"mousemove\", throttledHandleMouseMove);\n rootElement?.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n rootElement?.removeEventListener(\"mousemove\", throttledHandleMouseMove);\n rootElement?.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, [rootType]);\n}\n\nconst InteractionLayer = observer(\n (props: {\n rootType: RootType;\n rootInstanceId: SbInstance;\n rootName?: string;\n }) => {\n useWidgetHover(props.rootType);\n\n const { scopeId } = useScope();\n const editStore = getEditStore();\n\n const isActiveRootInstance =\n editStore.interactionLayerManager.activeRootInstanceId ===\n props.rootInstanceId;\n const isActive =\n isActiveRootInstance ||\n (editStore.interactionLayerManager.activeRootInstanceId === undefined &&\n (props.rootType === \"App\" || props.rootType === \"Page\"));\n\n const selectedElements = useSelectionElements({\n focusedSourceId: editStore.ui.getFocusedSourceId(),\n selectedSourceIds: editStore.ui.getSelectedSourceIds(),\n focusedInstanceId: editStore.ui.getFocusedInstanceId(),\n selectedInstanceIds: editStore.ui.getSelectedInstanceIds(),\n targetedSourceIds: editStore.ai.getTargetedComponents(),\n aiContextMode: editStore.ai.getAiContextMode(),\n rootType: props.rootType,\n rootId: props.rootInstanceId,\n });\n\n const widgetWithErrors = useWidgetErrors({\n widgetScopesToNamesToIds: rootStore.nameManager.scopeToNameToIds,\n rootType: props.rootType,\n rootInstanceId: props.rootInstanceId,\n scopeId,\n });\n\n const handleCanvasClick = useCallback(() => {\n editorBridge.canvasClicked();\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"click\", handleCanvasClick, true);\n return () => {\n window.removeEventListener(\"click\", handleCanvasClick, true);\n };\n }, [handleCanvasClick]);\n\n const isAiEditing = editStore.ai.getIsEditing();\n\n if (!isActive || isAiEditing) {\n return null;\n }\n\n // We handle detached components (e.g: Modal, slideouts) differently\n const interactionRectsForSelectedElements = selectedElements\n .filter((info) => {\n const id = getEditWrapperIdWithType(info.instanceId, info.type);\n const element = document.querySelector(`[data-sb-selector=\"${id}\"]`);\n return !isComponentTypeDetached(info.type) && element != null;\n })\n .map((info, index) => {\n return (\n <InteractionRect\n key={info.instanceId + info.selectionType + index}\n isDragging={editStore.ui.dnd.isDragging}\n {...info}\n />\n );\n });\n\n // If the component is detached, we always show if `isActive`, regardless of selection state\n const interactionRectIfDetachedComponent = isComponentTypeDetached(\n props.rootType,\n ) ? (\n <InteractionRect\n key={props.rootInstanceId}\n isDragging={false}\n selectionType=\"FOCUSED\"\n instanceId={props.rootInstanceId}\n displayName={props.rootName ?? \"Unknown\"}\n hideRectBorder={false}\n />\n ) : null;\n\n return (\n <>\n <div className=\"sb-interaction-layer-wrapper\">\n {interactionRectsForSelectedElements}\n {interactionRectIfDetachedComponent}\n {Object.entries(widgetWithErrors).map(([id, { name }]) => (\n <InteractionRect\n key={id}\n isDragging={false}\n selectionType=\"ERROR\"\n displayName={name}\n instanceId={id as SbInstance}\n />\n ))}\n\n <DropLayer rootInstanceId={props.rootInstanceId} />\n </div>\n </>\n );\n },\n);\n\nexport default InteractionLayer;\n","import {\n Dim,\n isDimension,\n PROCESSED_TRANSACTIONS_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n isBindingString,\n isBindingEqual,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport _ from \"lodash\";\nimport React, { useEffect, useMemo } from \"react\";\nimport useStableEffect from \"../lib/hooks/use-stable-effect.js\";\nimport {\n isName,\n isNameEqual,\n} from \"../lib/internal-details/lib/evaluator/names.js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { useScope } from \"../lib/internal-details/scope/scope-context.jsx\";\nimport type { UseStableEffectOptions } from \"../lib/hooks/use-stable-effect.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => isBindingString(a), isBindingEqual],\n [(a) => isName(a), isNameEqual],\n [(a) => isDimension(a), Dim.isEqual],\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => _.isEqual(a, b)],\n ],\n ignoreKeys: [\"children\", PROCESSED_TRANSACTIONS_ATTRIBUTE],\n};\n\nexport function EditorRoot(props: {\n type: string;\n identifier: IdentifierInfo;\n children: any;\n widgetProps: Record<string, unknown>;\n [key: string]: unknown;\n}) {\n const { type, identifier, children, widgetProps } = props;\n\n const transactions = widgetProps[\n PROCESSED_TRANSACTIONS_ATTRIBUTE\n ] as string[];\n // IMPORTANT: identifier.scopeId is not the correct fallback. (it is 99% of the time though)\n const { scopeId: fallbackScopeId } = useScope();\n\n useStableEffect(\n () => {\n if (props.widgetProps[ROOT_WIDGET_ATTRIBUTE]) {\n rootStore.editStore?.operationManager.clearPendingTransactions(\n transactions,\n );\n }\n },\n {\n instanceId: identifier.instanceId,\n fallbackScopeId,\n transactions,\n },\n stableEffectOptions,\n );\n\n const isRoot =\n type === NATIVE_COMPONENT_TYPES.App || type === NATIVE_COMPONENT_TYPES.Page;\n\n return (\n <EditorRootProvider\n instanceId={identifier.instanceId}\n sourceId={identifier.sourceId}\n isRoot={isRoot}\n >\n {children}\n </EditorRootProvider>\n );\n}\n\ntype EditorRootContext = {\n instanceId: SbInstance;\n sourceId: SbElement;\n isRoot: boolean;\n};\n\nconst EditorRootContext = React.createContext<EditorRootContext | undefined>(\n undefined,\n);\n\nfunction EditorRootProvider({\n children,\n instanceId,\n sourceId,\n isRoot,\n}: {\n children: React.ReactNode;\n} & EditorRootContext) {\n const context = useMemo(\n () => ({\n instanceId,\n sourceId,\n isRoot,\n }),\n [instanceId, sourceId, isRoot],\n );\n\n useEffect(() => {\n rootStore.editStore?.ui.addRootInstanceId(\n context.instanceId,\n context.sourceId,\n context.isRoot,\n );\n return () => {\n rootStore.editStore?.ui.removeRootInstanceId(context.instanceId);\n };\n }, [context]);\n\n return (\n <EditorRootContext.Provider value={context}>\n {children}\n </EditorRootContext.Provider>\n );\n}\n\nexport function useEditorRootContext() {\n const context = React.useContext(EditorRootContext);\n return context;\n}\n\nexport function useIsCurrentRoot() {\n const context = useEditorRootContext();\n return context?.isRoot;\n}\n","import type { SbComponentProps } from \"../user-facing/component-base/sb-component\";\nimport type { SOURCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ntype ChildFunction = Function;\n\nexport type StackChildElement = React.ReactElement<\n SbComponentProps & {\n key?: React.Key;\n [SOURCE_ID_ATTRIBUTE]?: SbElement;\n }\n> & {\n type: { sbType: string };\n};\nexport const superblocksComponentSymbol = Symbol(\"SuperblocksComponent\");\nexport function isSbComponent(\n child: ReactNode | ChildFunction,\n): child is StackChildElement {\n return (\n typeof child === \"object\" &&\n (child as any).type?.isSb === superblocksComponentSymbol\n );\n}\n","import React from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport function getValidChildrenNodes(children: ReactNode): ReactNode[] {\n if (Array.isArray(children)) {\n return children.filter(isValidReactNode);\n }\n\n if (\n typeof children === \"object\" &&\n children != null &&\n typeof (children as any)[Symbol.iterator] === \"function\"\n ) {\n return Array.from(children as any).filter(isValidReactNode);\n }\n\n if (isValidReactNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function isValidReactNode(\n element: unknown,\n): element is ReactNode | ReactNode[] {\n if (typeof element === \"string\") {\n return true;\n }\n\n if (\n typeof element === \"object\" &&\n element != null &&\n typeof (element as any)[Symbol.iterator] === \"function\"\n ) {\n return Array.from(element as any).every(isValidReactNode);\n }\n\n if (Array.isArray(element)) {\n return element.every(isValidReactNode);\n }\n return (\n React.isValidElement(element) ||\n typeof element !== \"object\" ||\n element === null\n );\n}\n","import {\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport _ from \"lodash\";\nimport React from \"react\";\nimport { useObserverMemo } from \"../lib/hooks/use-observer-memo.js\";\nimport useStableEffect from \"../lib/hooks/use-stable-effect.js\";\nimport { isSbComponent } from \"../lib/internal-details/is-sb-component.jsx\";\nimport { getValidChildrenNodes } from \"../lib/utils/children.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n ChildFunction,\n InternalChildElement,\n InternalRuntimeWidgetMeta,\n} from \"./features/runtime-widgets-manager\";\nimport type { UseStableEffectOptions } from \"../lib/hooks/use-stable-effect.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => _.isEqual(a, b)],\n ],\n cold: true,\n};\n\nexport function useRuntimeEditTracking(props: {\n parentInstanceId?: SbInstance;\n directParentInstanceId?: SbInstance;\n identifier: IdentifierInfo;\n type: string;\n children: React.ReactNode[] | ChildFunction;\n widgetProps: Record<string, unknown>;\n rootInstanceId?: SbInstance;\n interactionLayerInstanceId?: SbInstance;\n indexWithinParent?: number;\n isRoot: boolean;\n isInsideRoot: boolean;\n}) {\n const {\n parentInstanceId,\n directParentInstanceId,\n identifier,\n type,\n children,\n widgetProps,\n rootInstanceId,\n interactionLayerInstanceId,\n indexWithinParent,\n isRoot,\n isInsideRoot,\n } = props;\n\n const { children: _children, ...rest } = widgetProps;\n\n // Props registration\n useStableEffect(\n () => {\n const widgetMeta: InternalRuntimeWidgetMeta = {\n instanceId: identifier.instanceId,\n isSbComponent: true,\n isOptimistic: false,\n scopeId: identifier.scopeId,\n type,\n name: identifier.name,\n props: rest,\n parentInstanceId,\n directParentInstanceId,\n sourceId: identifier.sourceId,\n rootInstanceId,\n interactionLayerInstanceId,\n isRoot,\n isInsideRoot,\n };\n\n getEditStore().runtimeEntitiesManager.widgets.setWidgetMeta(\n identifier.instanceId,\n widgetMeta,\n );\n },\n {\n instanceId: identifier.instanceId,\n name: identifier.name,\n scopeId: identifier.scopeId,\n sourceId: identifier.sourceId,\n parentInstanceId,\n directParentInstanceId,\n rootInstanceId,\n interactionLayerInstanceId,\n type,\n rest,\n },\n stableEffectOptions,\n );\n\n // Updating own position\n useStableEffect(\n () => {\n if (indexWithinParent !== undefined && directParentInstanceId) {\n getEditStore().runtimeEntitiesManager.widgets.setWidgetChildIndex({\n directParentInstanceId,\n index: indexWithinParent,\n instanceId: identifier.instanceId,\n });\n }\n },\n {\n instanceId: identifier.instanceId,\n indexWithinParent,\n },\n {\n cold: true,\n },\n );\n\n const childrenIsFunction = typeof children === \"function\";\n const { metaChildren, reactChildren } = useObserverMemo<{\n metaChildren?: Array<InternalChildElement>;\n reactChildren?: Array<ReactNode>;\n }>(() => {\n const metaChildren: Array<InternalChildElement> = [];\n const reactChildren: Array<ReactNode> = [];\n\n if (childrenIsFunction) {\n return {};\n }\n\n const validChildrenArray = React.Children.toArray(\n getValidChildrenNodes(children),\n );\n\n validChildrenArray.forEach((child, index) => {\n if (typeof child === \"string\" || typeof child === \"number\") {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n });\n reactChildren.push(child);\n } else if (isSbComponent(child)) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: true,\n });\n const clonedChild = React.cloneElement(child, {\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n [WIDGET_INDEX_WITHIN_PARENT]: index,\n key: `${child.props[SOURCE_ID_ATTRIBUTE]}-${child.key}`,\n } as any);\n reactChildren.push(clonedChild);\n } else if (typeof child === \"function\") {\n metaChildren.push({\n isSupportedElement: false,\n isSbComponent: false,\n value: child,\n });\n reactChildren.push(child);\n } else if (\n React.isValidElement(child) &&\n child.props[SOURCE_ID_ATTRIBUTE]\n ) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n // value: child,\n });\n reactChildren.push(\n React.cloneElement(child, {\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n [WIDGET_INDEX_WITHIN_PARENT]: index,\n } as any),\n ); // TODO this needs to be wrapped in sb component?\n } else if (React.isValidElement(child)) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n });\n reactChildren.push(child);\n }\n });\n\n return {\n metaChildren,\n reactChildren,\n };\n }, [children, childrenIsFunction, identifier.instanceId]);\n\n // Updating raw children\n useStableEffect(\n () => {\n if (metaChildren) {\n getEditStore().runtimeEntitiesManager.widgets.setWidgetChildren(\n identifier.instanceId,\n metaChildren,\n );\n }\n },\n {\n metaChildren,\n },\n {\n cold: true,\n },\n );\n\n // TODO what to do on unmount?\n\n return reactChildren ?? children;\n}\n","import polyfill from \"@oddbird/css-anchor-positioning/fn\";\n\nimport {\n INSTANCE_ID_ATTRIBUTE,\n NO_CONTENT_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { CSS_CLASSES } from \"../lib/internal-details/css-constants.js\";\nimport { DraggablePropsProvider } from \"../lib/internal-details/draggable-context-provider.js\";\n\nimport { EditorReactiveComponent } from \"../lib/internal-details/editor-reactive-component.js\";\nimport { Layers } from \"../lib/user-facing/layers.js\";\nimport { styleAsClass } from \"../lib/user-facing/styling/style-as-class.js\";\nimport {\n getEditWrapperId,\n getWidgetAnchorName,\n} from \"../lib/utils/widget-wrapper-naming.js\";\nimport InvisiblePattern from \"./assets/canvasInvisible.svg\";\nimport DroppableWidget from \"./dnd/droppable-widget.jsx\";\nimport {\n isContentDraggable,\n isEntityDraggable,\n isEntityDroppable,\n} from \"./dnd/utils.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport { useRightClickMenu } from \"./hooks/use-right-click-menu.js\";\nimport {\n ParentIdentifierProvider,\n useParentIdentifier,\n} from \"./identifier-context.jsx\";\nimport {\n InteractionLayerProvider,\n useInteractionLayerContext,\n} from \"./interaction-layer/interaction-context.jsx\";\nimport InteractionLayer from \"./interaction-layer/interaction-layer.jsx\";\nimport { selectDisplayNameAndVisibility } from \"./interaction-layer/interaction-rect.js\";\nimport { EditorRoot, useEditorRootContext } from \"./roots.jsx\";\nimport { useRuntimeEditTracking } from \"./runtime-edit-tracking.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\nimport type { ChildFunction } from \"./features/runtime-widgets-manager.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager.js\";\nimport type { StrictElementPassthroughProps } from \"../lib/user-facing/component-base/use-passthrough-props.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nconst VisibilityOverlayClass = styleAsClass`\n position: absolute;\n pointer-events: none;\n top: anchor(top);\n left: anchor(left);\n right: anchor(right);\n bottom: anchor(bottom);\n z-index: ${String(Layers.visibilityOverlay)};\n`;\n\nif (\n typeof window !== \"undefined\" &&\n typeof document.documentElement !== \"undefined\" &&\n !(\"anchorName\" in document.documentElement.style)\n) {\n polyfill();\n}\n\n// The variable --anchor-name is used in the CSS to set the anchor name for the widget\n// on the actual widget element.\nexport const createAnchorNameStyle = (props: {\n instanceId: SbInstance;\n}): React.CSSProperties | undefined => {\n return {\n \"--anchor-name\": getWidgetAnchorName(props.instanceId),\n } as CSSProperties;\n};\n\nconst EditWrapper = observer(function EditWrapper(props: {\n type: string;\n children: React.ReactNode[] | ChildFunction;\n widgetProps: Record<string, unknown>;\n component: React.FC<any>;\n identifier: IdentifierInfo;\n parentInstanceId?: SbInstance;\n directParentInstanceId?: SbInstance;\n indexWithinParent?: number;\n}): React.ReactElement {\n const identifier = props.identifier;\n if (!identifier) {\n throw new Error(\"Identifier is missing\");\n }\n\n const editStore = getEditStore();\n const editorRootContext = useEditorRootContext();\n\n const isInsideRoot = editorRootContext?.isRoot ?? false;\n const rootInstanceId = editorRootContext?.instanceId;\n\n const parentIdentifier = useParentIdentifier();\n\n const isRoot = ROOT_WIDGET_ATTRIBUTE in props.widgetProps;\n\n const { rootInstanceId: interactionLayerInstanceId } =\n useInteractionLayerContext();\n\n const children = useRuntimeEditTracking({\n parentInstanceId: parentIdentifier?.instanceId,\n directParentInstanceId: props.directParentInstanceId,\n identifier,\n type: props.type,\n children: props.children,\n widgetProps: props.widgetProps,\n rootInstanceId,\n interactionLayerInstanceId,\n indexWithinParent: props.indexWithinParent,\n isRoot,\n isInsideRoot,\n });\n\n const instancesCount =\n editStore.runtimeEntitiesManager.widgets.getSourceIdCount(\n identifier.sourceId,\n );\n\n const isDraggable = isEntityDraggable({\n type: props.type,\n directParentInstanceId: props.directParentInstanceId,\n instancesCount,\n isRoot,\n });\n const isDroppable = isEntityDroppable({\n type: props.type,\n });\n const disableDrag = !isDraggable || !isContentDraggable(props.type);\n\n const { onContextMenu } = useRightClickMenu({\n sourceId: props.identifier.sourceId,\n });\n\n const showVisibilityBackground =\n props.widgetProps.isVisible === false &&\n !editStore.ui.getSelectedSourceIds().includes(props.identifier.sourceId);\n\n const handleClick = useCallback(\n (ev: React.MouseEvent) => {\n // sometimes the user might not pass this in as we expect, which is their right, so we need to handle it\n const stopPropagation = () => {\n if (ev.stopPropagation) {\n ev.stopPropagation();\n }\n };\n\n const editStore = getEditStore();\n if (\n ev.altKey ||\n (editStore.ai.getIsTaggingEnabled() &&\n editStore.ai.shouldToggleComponentInAiContext())\n ) {\n const sourceId = props.identifier.sourceId;\n const instanceId = props.identifier.instanceId;\n const { displayName } = selectDisplayNameAndVisibility(instanceId);\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n displayName,\n );\n stopPropagation();\n return;\n }\n\n editStore.ui.selectWidget(\n props.identifier.instanceId,\n ev.shiftKey === true,\n );\n stopPropagation();\n },\n [props.identifier.sourceId, props.identifier.instanceId],\n );\n\n const [dropTargetElem, setDropTargetElem] = useState<HTMLElement | null>(\n null,\n );\n\n const isEmpty = React.Children.count(children) === 0;\n\n const editorProps = useMemo(() => {\n const testProps = identifier.name.isAnonymous\n ? {}\n : { \"data-test\": `component-${identifier.name.value}` };\n const componentClassName = `${CSS_CLASSES.ANCHOR_NAME}`;\n const componentStyle = createAnchorNameStyle({\n instanceId: props.identifier.instanceId,\n });\n\n return {\n [INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n className: componentClassName,\n style: componentStyle,\n [NO_CONTENT_ATTRIBUTE]: isEmpty,\n \"data-sb-selector\": getEditWrapperId(props.identifier.instanceId),\n // TODO: what if the user supplies their own onPointerDown, onPointerMove...? we need to merge all listeners\n onClick: handleClick,\n onContextMenu: onContextMenu,\n ...testProps,\n } satisfies StrictElementPassthroughProps;\n }, [\n identifier,\n handleClick,\n onContextMenu,\n props.identifier.instanceId,\n isEmpty,\n ]);\n\n const node = (\n <ParentIdentifierProvider identifier={identifier}>\n <EditorReactiveComponent\n Component={props.component}\n identifier={identifier}\n widgetProps={props.widgetProps}\n editorProps={editorProps}\n dropTargetRef={setDropTargetElem}\n showErrors\n >\n {showVisibilityBackground && (\n <div\n className={VisibilityOverlayClass}\n style={\n {\n background: `url(\"${InvisiblePattern}\")`,\n positionAnchor: getWidgetAnchorName(identifier.instanceId),\n } as CSSProperties\n }\n />\n )}\n {typeof children === \"function\" ? <>{children}</> : children}\n </EditorReactiveComponent>\n </ParentIdentifierProvider>\n );\n\n let content = isRoot ? (\n <EditorRoot\n identifier={identifier}\n type={props.type}\n widgetProps={props.widgetProps}\n >\n {node}\n </EditorRoot>\n ) : (\n node\n );\n\n if (isDraggable) {\n content = (\n <DraggablePropsProvider\n identifier={props.identifier}\n disableDrag={disableDrag}\n >\n {content}\n </DraggablePropsProvider>\n );\n }\n\n if (isDroppable) {\n content = (\n <DroppableWidget\n instanceId={props.identifier.instanceId}\n dropTargetElem={dropTargetElem}\n >\n {content}\n </DroppableWidget>\n );\n }\n\n if (props.type === \"App\" || props.type === \"Page\") {\n return (\n <>\n <InteractionLayerProvider instanceId={props.identifier.instanceId}>\n {content}\n </InteractionLayerProvider>\n <InteractionLayer\n rootType={props.type}\n rootInstanceId={props.identifier.instanceId}\n rootName={identifier.name.value}\n />\n </>\n );\n }\n return content;\n});\n\nexport default EditWrapper;\n","import { APCAcontrast, sRGBtoY } from \"apca-w3\";\nimport tinycolor from \"tinycolor2\";\nimport { colors } from \"../styling/colors.js\";\nimport {\n CODE_EDITOR_DARK_COLORS,\n CODE_EDITOR_LIGHT_COLORS,\n DARK_APP_BG,\n DARK_MODE_NEUTRALS,\n LIGHT_APP_BG,\n LIGHT_MODE_NEUTRALS,\n} from \"./constants.js\";\nimport type { UserDefinedTheme } from \"@superblocksteam/library-shared/types\";\n\nconst READABILITY_THRESHOLD = 20;\nconst CONTRAST_TEXT_THRESHOLD = 25;\nconst MAX_ITERATIONS = 10;\nconst PRIMARY_HIGHLIGHT_OPACITY = 0.08;\n\nfunction getRgbArrayFromHex(hex: string): [number, number, number] {\n // returns an array of numbers representing the rgb values of the hex color\n const color = tinycolor(hex);\n if (color.isValid()) {\n const rgb = color.toRgb();\n return [rgb.r, rgb.g, rgb.b];\n }\n return [0, 0, 0];\n}\n\nexport function chooseContrastTextColor(primaryColor: string) {\n // Decide contrast text on primary\n const whiteContrast = checkContrast(LIGHT_MODE_NEUTRALS[0], primaryColor);\n const darkContrast = checkContrast(DARK_MODE_NEUTRALS[0], primaryColor);\n const contrastText =\n // prefer white text on primary\n whiteContrast >= darkContrast - CONTRAST_TEXT_THRESHOLD\n ? LIGHT_MODE_NEUTRALS[0]\n : DARK_MODE_NEUTRALS[0];\n return contrastText;\n}\n\nfunction checkContrast(foreground: string, background: string) {\n const textColor = getRgbArrayFromHex(foreground);\n const backgroundColor = getRgbArrayFromHex(background);\n const contrastLc = APCAcontrast(sRGBtoY(textColor), sRGBtoY(backgroundColor));\n return Number(contrastLc) > 0 ? Number(contrastLc) : Number(contrastLc) * -1;\n}\n\nfunction adjustForReadability(foreground: string, background: string) {\n if (checkContrast(foreground, background) > READABILITY_THRESHOLD) {\n return foreground;\n }\n\n let iterations = 0;\n let fg = foreground;\n while (\n checkContrast(fg, background) < READABILITY_THRESHOLD &&\n iterations < MAX_ITERATIONS\n ) {\n // adjust text color to be lighter or darker\n if (tinycolor(fg).isDark()) {\n fg = tinycolor(fg).lighten(5).toHexString();\n } else {\n fg = tinycolor(fg).darken(5).toHexString();\n }\n iterations++;\n }\n return fg;\n}\n\nexport const getPrimaryVariants = (\n primaryColor: string,\n neutralColor?: string,\n) => {\n // Determine primary variants\n const shouldLighten = tinycolor(primaryColor).isDark();\n // Ensure that the primary value is readable on the background. adjust if needed\n const primary500 = neutralColor\n ? adjustForReadability(primaryColor, neutralColor)\n : primaryColor;\n const primary600 = shouldLighten\n ? tinycolor(primary500).lighten(10).toHexString()\n : tinycolor(primary500).darken(10).toHexString();\n const primary700 = shouldLighten\n ? tinycolor(primary600).lighten(5).toHexString()\n : tinycolor(primary600).darken(5).toHexString();\n return {\n primary500,\n primary600,\n primary700,\n };\n};\n\nexport function generateThemeColors({\n themePrimaryColor,\n palette,\n isDarkMode,\n}: {\n themePrimaryColor: string;\n isDarkMode: boolean;\n palette?: UserDefinedTheme[\"palette\"];\n}) {\n const primaryColor =\n palette?.[isDarkMode ? \"dark\" : \"light\"]?.primaryColor || themePrimaryColor;\n const appBackground =\n palette?.[isDarkMode ? \"dark\" : \"light\"]?.appBackgroundColor;\n // Base neutrals for light and dark modes\n const neutrals = isDarkMode ? DARK_MODE_NEUTRALS : LIGHT_MODE_NEUTRALS;\n\n // Determine primary variants\n const { primary500, primary600, primary700 } = getPrimaryVariants(\n primaryColor,\n neutrals[0],\n );\n\n const contrastText = chooseContrastTextColor(primary500);\n\n return {\n contrastText: contrastText,\n primary500: primary500,\n primary600: primary600,\n primary700: primary700,\n primaryHighlight: tinycolor\n .mix(primary500, neutrals[0], (1 - PRIMARY_HIGHLIGHT_OPACITY) * 100)\n .toHexString(),\n neutral: neutrals[0],\n neutral25: neutrals[1],\n neutral50: neutrals[2],\n neutral100: neutrals[3],\n neutral200: neutrals[4],\n neutral300: neutrals[5],\n neutral400: neutrals[6],\n neutral500: neutrals[7],\n neutral700: neutrals[8],\n neutral900: neutrals[9],\n appBackground: appBackground || (isDarkMode ? DARK_APP_BG : LIGHT_APP_BG),\n editor: isDarkMode ? CODE_EDITOR_DARK_COLORS : CODE_EDITOR_LIGHT_COLORS,\n // constants (not theme-dependent)\n danger: colors.DANGER,\n warning: colors.WARNING,\n info: colors.INFO,\n success: colors.SUCCESS,\n dangerLight: \"#fdc5c5\",\n };\n}\n","import { get } from \"lodash\";\nimport { getPrimaryVariants } from \"./generate-colors.js\";\nimport type {\n ColorBlock,\n GeneratedTheme,\n TextStyleBlock,\n Typographies,\n} from \"@superblocksteam/library-shared/types\";\n\n// TODO: replace with a faster clone function\nconst fastClone = (obj: any) => structuredClone(obj);\n\nconst generateColorBlock = (\n colorBlock: ColorBlock,\n options: {\n colors: GeneratedTheme[\"colors\"];\n defaultFontFamily: GeneratedTheme[\"fontFamily\"];\n },\n): ColorBlock => {\n const updatedColorBlock = { ...colorBlock };\n Object.keys(colorBlock).forEach((colorKey: string) => {\n const typedColorKey = colorKey as keyof ColorBlock;\n const generatedColor = get(options, colorBlock[typedColorKey] ?? \"\");\n updatedColorBlock[typedColorKey] =\n generatedColor || colorBlock[typedColorKey];\n });\n return updatedColorBlock;\n};\n\nexport const generateTypographies = (\n typographies: Typographies,\n options: {\n colors: GeneratedTheme[\"colors\"];\n defaultFontFamily: GeneratedTheme[\"fontFamily\"];\n },\n): Typographies => {\n // replace all colors of the format colors.colorName with the generated color\n const generatedTypographies = fastClone(typographies);\n Object.keys(generatedTypographies).forEach((key) => {\n const typedKey = key as keyof Typographies;\n const typography = generatedTypographies[typedKey] as TextStyleBlock;\n typography.textColor = generateColorBlock(typography.textColor, options);\n // for links specifically, we need to dynamically generate the hover & active colors based on the default color\n if (typedKey === \"link\") {\n const color = typography.textColor.default;\n const { primary600, primary700 } = getPrimaryVariants(color);\n typography.textColor.hover = primary600;\n typography.textColor.active = primary700;\n // legacy link styles did not set textTransform correctly to inherit\n typography.textTransform = \"inherit\";\n }\n if (typedKey === \"inputPlaceholder\") {\n // legacy apps did not have fontStyle, textTransform, and textDecoration set to inherit\n typography.fontStyle = \"inherit\";\n typography.textTransform = \"inherit\";\n typography.textDecoration = \"inherit\";\n }\n });\n\n return generatedTypographies;\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { ThemeMode } from \"@superblocksteam/library-shared/types\";\nimport { merge } from \"lodash\";\nimport tinycolor from \"tinycolor2\";\n\nimport {\n BASE_THEME_NEW_APPS,\n BOX_SHADOWS,\n BUTTON_PADDING,\n DROPDOWN_PADDING,\n INPUT_PADDING,\n KEY_VALUE_PADDING,\n KEY_VALUE_SPACING,\n} from \"./constants.js\";\nimport { generateThemeColors } from \"./generate-colors.js\";\nimport { generateTypographies } from \"./generate-typographies.js\";\n\nimport { getAvailableFontFamilies } from \"./typefaces/utils.jsx\";\nimport { getDefaultTypographies } from \"./utils.js\";\nimport type {\n BorderStyleBlock,\n GeneratedTheme,\n Padding,\n TextStyleBlock,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nconst prefersDarkMode = () => {\n if (\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ) {\n return true;\n }\n return false;\n};\n\nexport function generateTheme(\n userDefinedTheme: UserDefinedTheme,\n overrides?: Partial<GeneratedTheme>,\n overrideMode?: ThemeMode,\n): GeneratedTheme {\n const {\n typeFace,\n primaryColor,\n mode: storedMode,\n borderRadius,\n padding,\n palette,\n } = userDefinedTheme;\n const mode = overrideMode || storedMode;\n const isDarkMode =\n mode === ThemeMode.DARK || (mode === ThemeMode.AUTO && prefersDarkMode());\n const generatedColors = generateThemeColors({\n themePrimaryColor: primaryColor,\n palette,\n isDarkMode,\n });\n\n const defaultBorderStyle: BorderStyleBlock = {\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderColor: {\n default: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n borderRadius,\n };\n const generatedTypographies = generateTypographies(\n userDefinedTheme.typographies ??\n getDefaultTypographies(userDefinedTheme.version),\n {\n colors: generatedColors,\n defaultFontFamily: typeFace,\n },\n );\n const bodyTypeface: TextStyleBlock = generatedTypographies.body2;\n // For apps created without theme, the userDefinedTheme will always include padding of 16x12\n // If the app was initialized with theme, not all apps had padding set\n const defaultPadding: Padding = padding || BASE_THEME_NEW_APPS.padding;\n\n // used for things like table footer content, table filter menu, etc\n const builtinBodyTypeface: TextStyleBlock = {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"16px\",\n fontFamily: typeFace,\n textColor: {\n default: generatedColors.neutral700,\n },\n };\n const theme: GeneratedTheme = {\n version: 5, // TODO: remove this once we have a real version\n colors: generatedColors,\n fontFamily: typeFace,\n availableFonts: getAvailableFontFamilies(userDefinedTheme.availableFonts),\n borderRadius,\n mode: isDarkMode ? \"DARK\" : \"LIGHT\",\n spacing: userDefinedTheme.spacing,\n defaultBorder: defaultBorderStyle,\n padding: defaultPadding,\n builtinTypographies: {\n body: builtinBodyTypeface,\n system: {\n ...defaultBorderStyle,\n ...builtinBodyTypeface,\n textColor: {\n default: generatedColors.neutral400,\n },\n backgroundColor: {\n default: generatedColors.neutral25,\n },\n padding: {\n left: Dim.px(4),\n right: Dim.px(4),\n top: Dim.px(0),\n bottom: Dim.px(0),\n },\n },\n },\n typographies: generatedTypographies,\n buttons: {\n primary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.contrastText,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n boxShadow: {\n default: \"none\",\n hover: `0px 3px 8px 0px ${tinycolor(generatedColors.primary500)\n .setAlpha(0.32)\n .toRgbString()}`,\n },\n borderColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n },\n secondary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n backgroundColor: {\n default: \"transparent\",\n disabled: generatedColors.neutral100,\n hover: \"transparent\",\n active: \"transparent\",\n },\n borderColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n secondaryNeutral: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.neutral700,\n disabled: generatedColors.neutral300,\n hover: generatedColors.neutral900,\n active: generatedColors.neutral900,\n },\n backgroundColor: {\n default: \"transparent\",\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.neutral50,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral100,\n active: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n tertiary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n backgroundColor: {\n default: \"transparent\",\n },\n borderColor: {\n default: \"transparent\",\n },\n boxShadow: {\n default: \"none\",\n },\n },\n system: {\n ...bodyTypeface,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(0),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral25,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.neutral50,\n },\n borderColor: {\n default: \"transparent\",\n },\n boxShadow: {\n default: `inset 0 0 0 1px ${generatedColors.neutral100}`,\n },\n },\n },\n inputs: {\n input: {\n ...generatedTypographies.inputText,\n ...defaultBorderStyle,\n padding: INPUT_PADDING,\n textColor: {\n ...generatedTypographies.inputText.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary500,\n active: generatedColors.primary500,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n active: `0px 1px 3px 0px ${tinycolor(generatedColors.primary500)\n .setAlpha(0.24)\n .toRgbString()}`,\n },\n },\n switch: {\n ...bodyTypeface,\n height: Dim.px(20),\n width: Dim.px(32),\n borderWidth: Dim.px(1),\n borderRadius: Dim.px(10), // half of height\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // for a switch, this represents the color of the slider\n default: generatedColors.neutral,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.dangerLight,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n radio: {\n ...bodyTypeface,\n height: Dim.px(16),\n width: Dim.px(16),\n borderWidth: Dim.px(1),\n borderRadius,\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // represents the checkmark color\n default: generatedColors.neutral,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n hover: generatedColors.neutral25,\n disabled: generatedColors.neutral100,\n active: generatedColors.neutral,\n activeHover: generatedColors.neutral,\n },\n borderColor: {\n default: generatedColors.neutral200,\n hover: generatedColors.neutral300,\n disabled: generatedColors.neutral100,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n checkbox: {\n ...bodyTypeface,\n height: { mode: \"px\", value: 16 },\n width: { mode: \"px\", value: 16 },\n borderWidth: { mode: \"px\", value: 1 },\n borderRadius,\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // represents the checkmark color\n default: generatedColors.contrastText,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.dangerLight,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n },\n popover: {\n ...bodyTypeface,\n borderWidth: { mode: \"px\", value: 0 },\n borderStyle: \"solid\",\n borderRadius,\n padding: {\n left: { mode: \"px\", value: 6 },\n right: { mode: \"px\", value: 6 },\n top: { mode: \"px\", value: 6 },\n bottom: { mode: \"px\", value: 6 },\n },\n borderColor: {\n default: \"transparent\",\n },\n backgroundColor: {\n default: generatedColors.neutral,\n },\n boxShadow: {\n default: isDarkMode\n ? BOX_SHADOWS.popover.dark\n : BOX_SHADOWS.popover.light,\n },\n },\n dropdown: {\n caratIcon: {\n iconColor: {\n default: generatedColors.neutral300,\n active: generatedColors.primary500,\n },\n },\n closeIcon: {\n iconColor: {\n default: generatedColors.neutral300,\n hover: generatedColors.neutral400,\n active: generatedColors.neutral500,\n },\n },\n menuItem: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n borderColor: {\n default: \"transparent\",\n },\n padding: {\n left: { mode: \"px\", value: 10 },\n right: { mode: \"px\", value: 10 },\n top: { mode: \"px\", value: 6 },\n bottom: { mode: \"px\", value: 6 },\n },\n backgroundColor: {\n default: generatedColors.neutral,\n hover: generatedColors.neutral50,\n active: generatedColors.neutral50,\n },\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n select: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: DROPDOWN_PADDING,\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary500,\n active: generatedColors.primary500,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n tag: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: {\n left: { mode: \"px\", value: 6 },\n right: { mode: \"px\", value: 6 },\n top: { mode: \"px\", value: 4 },\n bottom: { mode: \"px\", value: 4 },\n },\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral200,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n },\n datepicker: {\n cell: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: {}, // 0px\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n active: generatedColors.contrastText,\n activeHover: generatedColors.contrastText,\n },\n backgroundColor: {\n default: \"transparent\",\n hover: generatedColors.neutral25,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n borderColor: {\n default: \"transparent\",\n hover: generatedColors.neutral100,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n },\n },\n keyValue: {\n padding: KEY_VALUE_PADDING,\n spacing: KEY_VALUE_SPACING,\n divider: {\n color: generatedColors.neutral100,\n size: { mode: \"px\", value: 0 },\n },\n },\n container: {\n section: {\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.appBackground,\n },\n borderWidth: { value: 0, mode: \"px\" },\n borderStyle: \"solid\",\n borderColor: {\n default: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n borderRadius: { value: 0, mode: \"px\" },\n padding: {}, // 0px\n },\n notification: {\n ...bodyTypeface,\n borderColor: { default: \"transparent\" },\n boxShadow: {\n default:\n mode === \"DARK\" ? BOX_SHADOWS.modal.dark : BOX_SHADOWS.modal.light,\n },\n borderRadius,\n borderWidth: { mode: \"px\", value: 0 },\n padding: {}, // 0px\n borderStyle: \"solid\",\n backgroundColor: {\n default: generatedColors.neutral,\n },\n },\n default: {\n ...defaultBorderStyle,\n padding: {}, // 0px\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.neutral,\n active: generatedColors.neutral50,\n },\n },\n canvas: {\n ...bodyTypeface,\n borderColor: { default: generatedColors.neutral100 },\n boxShadow: { default: \"none\" },\n borderRadius: { mode: \"px\", value: 0 },\n borderWidth: { mode: \"px\", value: 0 },\n padding: defaultPadding,\n borderStyle: \"solid\",\n backgroundColor: {\n default: \"none\",\n active: generatedColors.neutral50,\n },\n },\n tab: {\n ...bodyTypeface,\n padding: {\n left: { value: 10, mode: \"px\" },\n right: { value: 10, mode: \"px\" },\n top: { value: 10, mode: \"px\" },\n bottom: { value: 0, mode: \"px\" },\n },\n textColor: {\n default: generatedColors.neutral500,\n active: generatedColors.neutral900,\n },\n borderStyle: \"solid\",\n borderWidth: { mode: \"px\", value: 1 },\n borderRadius: { mode: \"px\", value: 0 }, // unused\n boxShadow: {\n default: \"none\",\n },\n backgroundColor: {\n default: \"transparent\",\n },\n borderColor: {\n default: generatedColors.neutral50,\n active: generatedColors.primary500,\n },\n },\n modal: {\n borderColor: { default: \"transparent\" },\n borderStyle: \"solid\",\n borderWidth: { mode: \"px\", value: 0 }, // unused\n borderRadius,\n padding: {}, // 0px\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.neutral,\n },\n boxShadow: {\n default: isDarkMode\n ? BOX_SHADOWS.modal.dark\n : BOX_SHADOWS.modal.light,\n },\n },\n closeIcon: {\n iconColor: {\n default: generatedColors.neutral400,\n hover: generatedColors.neutral700,\n },\n },\n },\n icon: {\n default: {\n iconColor: {\n default: generatedColors.neutral700,\n active: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n },\n },\n },\n };\n return merge(theme, overrides);\n}\n","import { BASE_THEMES_BY_VERSION, CURRENT_THEME_VERSION } from \"./constants.js\";\n\nimport { generateTheme } from \"./generate-theme.js\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\n/**\n * UserAccessibleTheme is a curated subset of GeneratedTheme that we expose to users.\n * TODO: Make GeneratedTheme and UserAccessibleTheme the same thing.\n * - Remove/unify unused properties from GeneratedTheme.\n * - Expose properties in UserAccessibleTheme that are really in use.\n */\nexport const DEFAULT_THEME = generateTheme(\n BASE_THEMES_BY_VERSION[CURRENT_THEME_VERSION],\n) as unknown as UserAccessibleTheme;\n","import {\n Prop,\n PropsPanelCategory,\n RecordProp,\n} from \"../lib/user-facing/properties-panel/props-builder.js\";\nimport { DEFAULT_THEME } from \"../lib/user-facing/themes/default-theme.js\";\nimport type {\n CompositeProp,\n Section,\n} from \"../lib/user-facing/properties-panel/props-builder.js\";\n\n/**\n * Map of component names to arrays of property names that should be excluded\n * from the generated documentation.\n */\nconst EXCLUDED_PROPERTIES: Record<string, string[]> = {\n Table: [\"displayedValue\"],\n};\n\n/**\n * Map of component names to custom type definitions for specific properties.\n * This allows overriding the auto-generated types with custom TypeScript type strings.\n *\n * Usage: Add an entry for your component and property to override the auto-generated type.\n *\n * Example:\n * ```\n * const CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>> = {\n * Table: {\n * tagDisplayConfig: \"{ color?: string; backgroundColor?: string; borderColor?: string }\",\n * anotherProperty: \"string | number\",\n * },\n * Button: {\n * customProp: \"MyCustomType\",\n * },\n * };\n * ```\n */\nconst CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>> = {};\n\n/**\n * Check if a property should be excluded from documentation generation\n */\nexport function isPropertyExcluded(\n componentName: string,\n propertyName: string,\n): boolean {\n const excludedProps = EXCLUDED_PROPERTIES[componentName];\n return excludedProps ? excludedProps.includes(propertyName) : false;\n}\n\n/**\n * Get custom type definition for a property, if one exists\n */\nexport function getCustomPropertyType(\n componentName: string,\n propertyName: string,\n): string | undefined {\n const componentCustomTypes = CUSTOM_PROPERTY_TYPES[componentName];\n return componentCustomTypes?.[propertyName];\n}\n\n/**\n * Get type hint from a property if it has one set\n */\nexport function getPropertyTypeHint(prop: any): string | undefined {\n if (prop instanceof Prop) {\n try {\n const builtProp = prop.build();\n return builtProp.typeHint;\n } catch (e) {\n console.error(\"Failed to build prop for type hint\", prop, e);\n }\n }\n return undefined;\n}\n\n/**\n * Check if a value looks like a dimension object\n */\nfunction isDimensionObject(value: any): boolean {\n return (\n value &&\n typeof value === \"object\" &&\n typeof value.mode === \"string\" &&\n [\"px\", \"fit\", \"fill\", \"%\", \"columns\", \"rows\"].includes(value.mode) &&\n (value.mode === \"fit\" || typeof value.value === \"number\")\n );\n}\n\n/**\n * Format a dimension object as a readable Dim constructor call\n */\nfunction formatDimensionObject(dimObj: {\n value?: number;\n mode: string;\n}): string {\n switch (dimObj.mode) {\n case \"px\":\n return `Dim.px(${dimObj.value})`;\n case \"%\":\n return `Dim.percent(${dimObj.value})`;\n case \"fit\":\n return `Dim.fit()`;\n case \"fill\":\n return dimObj.value !== undefined\n ? `Dim.fill(${dimObj.value})`\n : `Dim.fill()`;\n case \"columns\":\n return `Dim.columns(${dimObj.value})`;\n case \"rows\":\n return `Dim.rows(${dimObj.value})`;\n default:\n return `Dim.build(${dimObj.value}, '${dimObj.mode}')`;\n }\n}\n\nexport function formatDefaultValue(value: any): string | undefined {\n if (value === undefined) return undefined;\n\n // Handle dimension objects specially\n if (isDimensionObject(value)) {\n return `@default ${formatDimensionObject(value)}`;\n }\n\n return `@default ${JSON.stringify(value)}`;\n}\n\nexport function getDescription(prop: any): string | undefined {\n if (prop instanceof Prop) {\n try {\n const builtProp = prop.build();\n if (builtProp.docs?.description) {\n return builtProp.docs.description;\n }\n } catch (e) {\n console.error(\"Failed to build prop\", prop, e);\n }\n }\n\n if (prop.docs?.description) {\n return prop.docs.description;\n }\n\n return undefined;\n}\n\n/**\n * Props that comply with all of these:\n * - represent dates.\n * - are stored as String types.\n * - their default values are functions that return the current date.\n *\n * Instead of being smart about detecting these props, we are being explicit.\n * Their default on the generated md file will be: \"Current datetime\".\n */\nconst PROPS_WITH_CURRENT_DATE_AS_DEFAULT_VALUE = [\n \"outputDateUtc\",\n \"outputDateLocal\",\n];\n\nexport function getDefaultValue(prop: any, propName: string): any {\n // For Prop instances, try to get the default value using the build method\n if (prop instanceof Prop && typeof prop.build === \"function\") {\n try {\n const builtProp = prop.build();\n if (typeof builtProp.default === \"function\") {\n if (PROPS_WITH_CURRENT_DATE_AS_DEFAULT_VALUE.includes(propName)) {\n return \"Current datetime\";\n }\n try {\n return builtProp.default.bind({})({\n theme: DEFAULT_THEME,\n }); // TODO: should be bind to the entity props instead of empty {}\n } catch (_themeError) {\n // Many default functions expect a full component context or specific theme properties\n // that aren't available during docs generation. Rather than trying to mock all possible\n // contexts, we'll return a descriptive placeholder for these computed defaults.\n console.warn(\n `Could not evaluate default value for prop '${propName}' - using placeholder`,\n );\n return \"Computed at runtime\";\n }\n }\n\n return builtProp.default;\n } catch (e) {\n console.error(\"Failed to build prop\", e);\n // If build fails, fall back to checking direct default property\n return prop.default;\n }\n }\n // For non-Prop objects, check for a direct default property\n return prop.default;\n}\n\nconst indentLine = (text: string, indent: number = 2) => {\n return `${\" \".repeat(indent)}${text}`;\n};\n\nconst propToLine = (\n propName: string,\n typeString: string,\n indent: number = 2,\n) => {\n return indentLine(`${propName}?: ${typeString};`, indent);\n};\n\nconst defToLine = (def: string, indent: number = 2) => {\n return indentLine(`/** ${def} */`, indent);\n};\n\nexport function guessTypeString(\n prop: any,\n key: string,\n componentName?: string,\n): string {\n // Check for property-level type hint first\n const typeHint = getPropertyTypeHint(prop);\n if (typeHint) {\n return typeHint;\n }\n\n // Check for custom type definition from global config\n if (componentName) {\n const customType = getCustomPropertyType(componentName, key);\n if (customType) {\n return customType;\n }\n }\n\n if (prop instanceof Prop) {\n // First check for special \"any\" props that are actually composite types based on control type\n if (prop.type === \"any\") {\n try {\n const builtProp = prop.build();\n const controlType = builtProp.propertiesPanelDisplay?.controlType;\n\n // Map control types to their actual TypeScript types\n if (controlType === \"BORDER_RADIUS_CONTROL\") {\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n }\n if (controlType === \"BORDER_CONTROL\") {\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n }\n if (controlType === \"PADDING_CONTROL\") {\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n }\n if (controlType === \"TEXT_STYLE\") {\n return \"Record<string, any>\"; // TextStyle is complex, keep as Record for now\n }\n\n // For DROP_DOWN controls, check if the prop name suggests a specific type\n if (controlType === \"DROP_DOWN\") {\n if (key.includes(\"borderRadius\") || key.endsWith(\"BorderRadius\")) {\n return \"Dim\"; // DROP_DOWN borderRadius controls typically return Dim values\n }\n }\n } catch (_e) {\n // If we can't build the prop, fall through to other checks\n }\n }\n\n switch (prop.type) {\n case \"string\":\n // Check if this string prop has options defined (union type)\n try {\n const builtProp = prop.build();\n if (builtProp.propertiesPanelDisplay?.options) {\n // Handle static options arrays\n if (Array.isArray(builtProp.propertiesPanelDisplay.options)) {\n const unionValues = builtProp.propertiesPanelDisplay.options\n .map((option: any) => `\"${option.value}\"`)\n .join(\" | \");\n return unionValues;\n }\n // Handle function-based options by trying to call them with reasonable context\n else if (\n typeof builtProp.propertiesPanelDisplay.options === \"function\"\n ) {\n try {\n // Try to call the function with different layout contexts to get all possible values\n const contexts = [\n { layout: \"vertical\" },\n { layout: \"horizontal\" },\n ];\n\n const allOptions = new Set<string>();\n\n for (const context of contexts) {\n try {\n const options =\n builtProp.propertiesPanelDisplay.options.call(\n context,\n context,\n builtProp.path,\n );\n if (Array.isArray(options)) {\n options.forEach((option: any) => {\n if (option.value) {\n allOptions.add(`\"${option.value}\"`);\n }\n });\n }\n } catch {\n // Ignore context-specific errors\n }\n }\n\n if (allOptions.size > 0) {\n return Array.from(allOptions).join(\" | \");\n }\n } catch {\n // If function call fails, fall back to special cases\n }\n }\n }\n } catch (_e) {\n // If build fails, fall back to string type\n // Silently continue with string type\n }\n\n // Special case handling for known alignment properties\n if (key === \"verticalAlign\") {\n return '\"top\" | \"center\" | \"bottom\" | \"space-between\" | \"space-around\"';\n }\n if (key === \"horizontalAlign\") {\n return '\"left\" | \"center\" | \"right\" | \"space-between\" | \"space-around\"';\n }\n\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"event\":\n return \"EventFlow\";\n case \"dimension\":\n return \"Dim\";\n case \"recordOf\":\n return `Record<string, ${getRecordValueType(prop, key, componentName)}>`;\n case \"composite\": {\n // Check for TEXT_STYLE controls first\n try {\n const builtProp = prop.build();\n const controlType = builtProp.propertiesPanelDisplay?.controlType;\n if (controlType === \"TEXT_STYLE\") {\n return \"TextStyleWithVariant\";\n }\n } catch (_e) {\n // If we can't build the prop, fall through to other checks\n console.log(\"Failed to build prop\", key);\n }\n\n if (key === \"padding\" || key === \"margin\")\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n if (key === \"borderRadius\")\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n if (key === \"border\")\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n\n const compositeProp = prop as unknown as CompositeProp<any>;\n\n const lines: string[] = [];\n lines.push(`{`);\n Object.entries(compositeProp.nestedProps).forEach(\n ([propName, prop]) => {\n const defaultValue = getDefaultValue(prop, propName);\n const def =\n defaultValue !== undefined\n ? formatDefaultValue(defaultValue)\n : undefined;\n if (def) lines.push(defToLine(def, 4));\n lines.push(\n propToLine(\n propName,\n guessTypeString(prop, propName, componentName),\n 4,\n ),\n );\n },\n );\n lines.push(`}`);\n\n return lines.join(\"\\n\");\n }\n\n case \"any\":\n // Fallback for \"any\" props - try to guess based on prop name\n if (key === \"padding\" || key === \"margin\")\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n if (\n key === \"borderRadius\" ||\n key.endsWith(\"BorderRadius\") ||\n key.includes(\"borderRadius\")\n )\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n if (\n key === \"border\" ||\n key.endsWith(\"Border\") ||\n key.includes(\"border\")\n )\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n return \"any\";\n default:\n return \"any\";\n }\n }\n if (prop.options?.length) {\n return prop.options.map((o: any) => JSON.stringify(o.value)).join(\" | \");\n }\n return \"any\";\n}\n\nexport function generateInterfaceFromNestedProps(\n nestedProps: any,\n interfaceName: string,\n componentName?: string,\n): string {\n const lines: string[] = [];\n lines.push(`interface ${interfaceName} {`);\n\n // Traverse the nested props structure\n for (const [_sectionKey, section] of Object.entries<any>(nestedProps)) {\n if (section && typeof section === \"object\") {\n // Get props from section - could be in props, childrenObject, or children\n const props =\n section.props ?? section.childrenObject ?? section.children ?? {};\n\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties for nested interfaces too\n if (componentName && isPropertyExcluded(componentName, propName)) {\n continue;\n }\n if (prop instanceof Prop) {\n const typeString = guessTypeString(prop, propName, componentName);\n const description = getDescription(prop);\n const defaultValue = getDefaultValue(prop, propName);\n\n if (description) {\n lines.push(defToLine(description));\n }\n\n if (defaultValue !== undefined) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(defToLine(def));\n }\n\n lines.push(propToLine(propName, typeString));\n }\n }\n }\n }\n\n lines.push(`}`);\n return lines.join(\"\\n\");\n}\n\nexport function getRecordValueType(\n prop: any,\n key: string,\n componentName?: string,\n): string {\n // For record props with nested properties, generate dynamic interface\n if (prop instanceof RecordProp) {\n const interfaceName = `${componentName || \"Component\"}${key.charAt(0).toUpperCase() + key.slice(1)}Properties`;\n // For now, return a generic name - we'll need to store/cache the generated interfaces\n return interfaceName;\n }\n\n return \"any\";\n}\n\nexport type PropContainer = {\n name: string;\n type: string;\n defaultValue: any;\n description?: string;\n};\n\n/**\n * Generates the component state interface documentation from derived properties\n */\nexport function generateStateInterface(\n componentName: string,\n derivedProps: Array<PropContainer>,\n): string[] {\n if (derivedProps.length === 0) {\n return [];\n }\n\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\n \"And the following properties can be referenced on this component in the Superblocks state object:\",\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${componentName}ComponentState {`);\n\n for (const prop of derivedProps) {\n if (prop.description) {\n lines.push(` /** ${prop.description} */`);\n }\n\n const defaultValue = prop.defaultValue;\n // Only show default value if it's not undefined and not a function\n if (\n defaultValue !== undefined &&\n typeof defaultValue !== \"function\" &&\n defaultValue !== \"undefined\" &&\n JSON.stringify(defaultValue) !== \"undefined\"\n ) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(` /** ${def} */`);\n }\n lines.push(` ${prop.name}?: ${prop.type};`);\n }\n\n lines.push(\"}\");\n lines.push(\"```\");\n\n return lines;\n}\n\n/**\n * Generates the meta properties interface documentation\n */\nexport function generateMetaInterface(\n componentName: string,\n metaProps: Array<PropContainer>,\n): string[] {\n if (metaProps.length === 0) {\n return [];\n }\n\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\n \"And the following properties are settable via BindEntity.{propertyName} = newValue;\",\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${componentName}MetaProperties {`);\n\n for (const prop of metaProps) {\n if (prop.description) {\n lines.push(` /** ${prop.description} */`);\n }\n\n const defaultValue = prop.defaultValue;\n // Only show default value if it's not undefined and not a function\n if (\n defaultValue !== undefined &&\n typeof defaultValue !== \"function\" &&\n defaultValue !== \"undefined\" &&\n JSON.stringify(defaultValue) !== \"undefined\"\n ) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(` /** ${def} */`);\n }\n lines.push(` ${prop.name}?: ${prop.type};`);\n }\n\n lines.push(\"}\");\n lines.push(\"```\");\n\n return lines;\n}\n\nexport function generateComponentDoc(component: {\n name: string;\n props: Record<string, Section<any>>;\n}): string {\n const lines: string[] = [];\n const generatedInterfaces: string[] = []; // Store generated interfaces\n\n lines.push(`## ${component.name}`);\n lines.push(\"\");\n lines.push(\n `The following is the type definition for the ${component.name} component.`,\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${component.name}Props {`);\n\n // Save derived properties for the second interface\n const derivedProps: Array<PropContainer> = [];\n\n // Save meta properties for the third interface\n const metaProps: Array<PropContainer> = [];\n\n for (const [_sectionKey, section] of Object.entries<any>(component.props)) {\n if (section.category === PropsPanelCategory.Derived) {\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n const defaultValue = getDefaultValue(prop, propName);\n const description = getDescription(prop);\n derivedProps.push({\n name: propName,\n type: typeString,\n defaultValue,\n description,\n });\n }\n continue;\n }\n if (section.category === PropsPanelCategory.Meta) {\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n const defaultValue = getDefaultValue(prop, propName);\n const description = getDescription(prop);\n metaProps.push({\n name: propName,\n type: typeString,\n defaultValue,\n description,\n });\n }\n continue;\n }\n\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n\n // Check if this prop needs a generated interface\n if (prop instanceof RecordProp) {\n const interfaceName = `${component.name}${propName.charAt(0).toUpperCase() + propName.slice(1)}Properties`;\n const recordProp = prop as RecordProp<any>; // Explicit cast to access nestedProps\n const generatedInterface = generateInterfaceFromNestedProps(\n recordProp.nestedProps,\n interfaceName,\n component.name,\n );\n generatedInterfaces.push(generatedInterface);\n }\n\n const description = getDescription(prop);\n const defaultValue = getDefaultValue(prop, propName);\n\n if (description) {\n lines.push(defToLine(description));\n }\n\n const def =\n defaultValue !== undefined\n ? formatDefaultValue(defaultValue)\n : undefined;\n if (def) lines.push(defToLine(def));\n\n lines.push(propToLine(propName, typeString));\n }\n }\n\n lines.push(\"}\");\n\n // Add any generated interfaces\n if (generatedInterfaces.length > 0) {\n lines.push(\"\");\n lines.push(\"// Referenced interfaces:\");\n lines.push(\"\");\n for (const generatedInterface of generatedInterfaces) {\n lines.push(generatedInterface);\n lines.push(\"\");\n }\n }\n\n lines.push(\"```\");\n\n // Generate and append state interface if needed\n const stateInterfaceLines = generateStateInterface(\n component.name,\n derivedProps,\n );\n lines.push(...stateInterfaceLines);\n\n // Generate and append meta interface if needed\n const metaInterfaceLines = generateMetaInterface(component.name, metaProps);\n lines.push(...metaInterfaceLines);\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n","import type { ServerMethods } from \"@superblocksteam/library-shared/types\";\nimport type { ISocketClient } from \"@superblocksteam/shared\";\n\nexport type EditorSocket = ISocketClient<ServerMethods>;\n\nexport class AsyncSocket {\n private socket: EditorSocket | undefined;\n private socketResolvers: ((s: EditorSocket) => void)[] = [];\n\n setSocket(s: EditorSocket) {\n this.socket = s;\n this.socketResolvers.forEach((resolver) => resolver(s));\n this.socketResolvers.length = 0;\n }\n\n clearSocket() {\n this.socket = undefined;\n this.socketResolvers.length = 0;\n }\n\n async waitForSocket(): Promise<EditorSocket> {\n if (this.socket) return this.socket;\n return new Promise((resolve) => this.socketResolvers.push(resolve));\n }\n\n isConnected(): boolean {\n return !!this.socket;\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport {\n connectWebSocket,\n createISocketClient,\n ISocketWithClientAuth,\n} from \"@superblocksteam/shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { sendNotification } from \"../lib/user-facing/utils/notification.jsx\";\n\nimport { AsyncSocket } from \"./async-socket.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n ServerMethods,\n LibraryClientMethods,\n SbElement,\n RegisterComponentDocsRequest,\n} from \"@superblocksteam/library-shared/types\";\nimport type {\n ISocketClient,\n RequestContextBase,\n} from \"@superblocksteam/shared\";\n\nconst PING_INTERVAL_MS = 15_000;\n\ntype OperationApiISocket = ISocketClient<ServerMethods>;\n\nclass OperationAPI {\n private retryAttempts = 0;\n private asyncSocket = new AsyncSocket();\n\n constructor(private readonly serverUrl: string) {}\n\n /**\n * @throws {Error} if the websocket connection can't be initiated after 3 attempts\n */\n async connect({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n try {\n const socket = await connectSocket(this.serverUrl, {\n peerId,\n userId,\n applicationId,\n onClose: this.handleSocketClose({ peerId, userId, applicationId }),\n });\n if (socket) {\n this.retryAttempts = 0;\n this.asyncSocket.setSocket(socket);\n } else {\n throw new Error(\"Failed to create socket connection\");\n }\n } catch {\n this.retryAttempts++;\n console.info(\n `App<>Dev box initial connection failed, retrying attempt ${this.retryAttempts}...`,\n );\n // this retry could fail too\n await this.retryConnection({ peerId, userId, applicationId });\n }\n }\n\n ensureFilesSynced = async () => {\n try {\n const socket = await this.asyncSocket.waitForSocket();\n await socket.call.editor.ensureFilesSynced();\n } catch (error) {\n console.error(\"Error ensuring files synced\", error);\n }\n };\n\n registerComponentDocs = async (payload: RegisterComponentDocsRequest) => {\n try {\n const socket = await this.asyncSocket.waitForSocket();\n await socket.call.editor.registerComponentDocs(payload);\n } catch (error) {\n console.error(\"Error registering component docs\", error);\n }\n };\n\n // Happens after initial connection\n private handleSocketClose({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n return async (event: CloseEvent) => {\n // Code 1008 is what we use for application ID mismatch\n if (event.code === 1008) {\n sendNotification({\n message: \"Application ID mismatch\",\n description: `You likely switched between multiple tabs. Please refresh the page.`,\n type: \"warning\",\n duration: 10 * 60, // 10 minutes\n });\n rootStore.editStore?.connectionManager.disconnect();\n return; // Don't retry for application ID mismatch\n }\n\n console.info(\n `App<>Dev box Socket closed, retrying attempt ${this.retryAttempts + 1}...`,\n );\n rootStore.editStore?.connectionManager.disconnect();\n\n await this.retryConnection({ peerId, userId, applicationId });\n\n if (this.retryAttempts >= 3) {\n this.asyncSocket.clearSocket();\n }\n this.retryAttempts++;\n };\n }\n\n private async retryConnection({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n if (this.retryAttempts < 3) {\n await this.connect({ peerId, userId, applicationId });\n } else {\n console.info(\n `App<>Dev box Socket closed, failed to reconnect after 3 attempts. Throwing error.`,\n );\n throw new Error(\"Failed to reconnect after 3 attempts\");\n }\n }\n}\n\nexport default new OperationAPI(\n typeof window !== \"undefined\" ? window.location.origin : \"\",\n);\n\n// TODO: remove this once we move the heartbeat logic to the WebSocket RPC framework\n/** Returns a function that can be used to stop the heartbeat */\nfunction startSocketHeartbeat(socket: OperationApiISocket) {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let canceled = false;\n (function loop() {\n if (canceled) return;\n timeoutId = setTimeout(async () => {\n try {\n await socket.call.editor.ping();\n console.debug(\"Pinged library socket\");\n } catch (e) {\n console.warn(\"Ping library socket error\", e);\n }\n loop();\n }, PING_INTERVAL_MS);\n })();\n return () => {\n canceled = true;\n clearTimeout(timeoutId);\n };\n}\n\nasync function connectSocket(\n serverUrl: string,\n {\n peerId,\n userId,\n applicationId,\n onClose,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n onClose: (event: CloseEvent) => void;\n },\n) {\n if (!serverUrl) {\n return undefined;\n }\n\n const wsUrl = new URL(\"/sb-updates\", serverUrl);\n wsUrl.searchParams.set(\"peerId\", peerId);\n if (userId) {\n wsUrl.searchParams.set(\"userId\", userId);\n }\n wsUrl.searchParams.set(\"applicationId\", applicationId);\n\n rootStore.editStore?.connectionManager.initializeSocket();\n\n try {\n let stopSocketHeartbeat: (() => void) | undefined;\n const ws = await connectWebSocket(wsUrl.toString());\n const isocket = new ISocketWithClientAuth<\n LibraryClientMethods,\n ServerMethods,\n RequestContextBase\n >(\n ws,\n undefined,\n {\n nonVisualEdit: [\n async () => {\n getEditStore().ui.selectWidget(null); // this also sends a postMessage to parent\n },\n ],\n setApisLoaded: [\n async () => {\n rootStore.setApisLoaded();\n },\n ],\n updateApiParams: [\n async (payload) => {\n rootStore.apis.setApiDepCandidates(\n payload.scopeId,\n payload.apiName,\n payload.params,\n );\n rootStore.apis.setApiReferences(\n payload.scopeId,\n payload.apiName,\n payload.apiDependencies,\n );\n },\n ],\n updateApis: [\n async (payload) => {\n payload.forEach(({ api, oldName, scopeId }) => {\n rootStore.apis.updateApi(api, scopeId);\n if (oldName) {\n rootStore.apis.renameApi({\n api,\n oldName,\n scopeId,\n });\n }\n });\n },\n ],\n deleteApis: [\n async (payload) => {\n payload.forEach(({ apiName, scopeId }) => {\n rootStore.apis.deleteApi(apiName, scopeId);\n });\n },\n ],\n setApiDefinitions: [\n async (payload) => {\n rootStore.apis.setAllApis(payload);\n },\n ],\n updateLocalBindingEntities: [\n async (payload) => {\n getEditStore().runtimeEntitiesManager.setEntitiesWithLocalBindings(\n payload.entities,\n );\n },\n ],\n renameRegisteredComponent: [\n async (payload) => {\n // TODO: do we need a better way to track components?\n const { name, oldName } = payload;\n if (oldName) {\n rootStore.componentRegistry.renameCustomComponent(oldName, name);\n }\n },\n ],\n removeRegisteredComponent: [\n async (payload) => {\n // TODO: do we need a better way to track components?\n rootStore.componentRegistry.deleteCustomComponent(payload.name);\n },\n ],\n deleteEntities: [\n async (payload) => {\n payload.forEach((entity) => {\n if (entity.entityName) {\n rootStore.entityManager.deleteEntity({\n name: {\n isAnonymous: false,\n value: entity.entityName,\n },\n scopeId: entity.scopeId,\n });\n } else if (entity.sourceId) {\n const instanceId =\n rootStore.editStore?.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n entity.sourceId as SbElement,\n );\n if (instanceId) {\n rootStore.entityManager.deleteEntityById({\n scopeId: entity.scopeId,\n entityId: instanceId,\n });\n }\n } else if (entity.entityId) {\n rootStore.entityManager.deleteEntityById({\n scopeId: entity.scopeId,\n entityId: entity.entityId,\n });\n }\n });\n },\n ],\n clientImport: [\n async (payload) => {\n const { importPath } = payload;\n try {\n await import(/* @vite-ignore */ `${importPath}?v=${Date.now()}`);\n return undefined;\n } catch (error) {\n const err = error as Error;\n return {\n message: err.message,\n stack: err.stack,\n name: err.name,\n };\n }\n },\n ],\n },\n [],\n trace.getTracer(\"superblocks-ui-framework\"),\n {\n onClose: (event) => {\n stopSocketHeartbeat?.();\n stopSocketHeartbeat = undefined;\n onClose(event as unknown as CloseEvent);\n console.log(\"App<>Dev box Socket closed\");\n rootStore.editStore?.connectionManager.disconnect();\n },\n\n timeouts: {\n connectionTimeoutInSeconds: undefined,\n noResponseTimeoutInSeconds: 60,\n },\n },\n );\n const socket = createISocketClient<\n ServerMethods,\n LibraryClientMethods,\n RequestContextBase\n >(isocket);\n console.log(\"connected to socket\");\n stopSocketHeartbeat = startSocketHeartbeat(socket);\n rootStore.editStore?.connectionManager.connect();\n return socket;\n } catch (error) {\n console.error(\"Error connecting to socket\", error);\n rootStore.editStore?.connectionManager.disconnect();\n throw error;\n }\n}\n","import { generateComponentDoc } from \"../../docs-utils/generate-docs-utils.js\";\nimport operationAPI from \"../../edit-mode/source-update-api.js\";\nimport type { PropertiesDefinition } from \"../user-facing/properties-panel/props-builder.js\";\n\nexport interface ComponentDocsPayload {\n name: string;\n markdown: string;\n contentHash: string;\n importPath?: string;\n}\n\nasync function sendComponentDocs(payload: ComponentDocsPayload): Promise<void> {\n try {\n await operationAPI.registerComponentDocs(payload);\n } catch (error) {\n console.warn(`Failed to send docs for component ${payload.name}:`, error);\n }\n}\n\n/**\n * Generate and send component documentation to the vite plugin\n */\nexport function generateAndSendComponentDocs(options: {\n name: string;\n propertiesDefinition: PropertiesDefinition;\n isCustomComponent?: boolean;\n}): void {\n try {\n const markdown = generateComponentDoc({\n name: options.name,\n props: options.propertiesDefinition,\n });\n\n void sendComponentDocs({\n name: options.name,\n markdown,\n contentHash: btoa(markdown).substring(0, 8),\n importPath: options.isCustomComponent\n ? undefined\n : \"@superblocksteam/library\",\n });\n } catch (error) {\n console.warn(\n `Failed to generate docs for component ${options.name}:`,\n error,\n );\n }\n}\n","import type { BindingIdentifier } from \"@superblocksteam/library-shared/types\";\n\nexport const getNormalizedIdInfo = (params: {\n bind: BindingIdentifier | undefined;\n fallbackScopeId: string;\n}): {\n name: string | undefined;\n scopeId: string;\n} => {\n const name = params.bind?.entityName;\n const scopeId = params.bind?.scopeId ?? params.fallbackScopeId;\n\n return {\n name,\n scopeId,\n };\n};\n","import {\n Dim,\n getBindingIdentifier,\n isBindingEqual,\n isBindingString,\n isDimension,\n isEntityWithBindingIdentifier,\n PROCESSED_TRANSACTIONS_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport { isObservable } from \"mobx\";\nimport { getEditStore } from \"../../edit-mode/get-edit-store.js\";\nimport { useObserverMemo } from \"../hooks/use-observer-memo.js\";\nimport useStableEffect from \"../hooks/use-stable-effect.js\";\nimport { isName, isNameEqual } from \"./lib/evaluator/names.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport type { InputProp } from \"./lib/evaluator/base-entity-manager.js\";\nimport type { Name } from \"./lib/evaluator/names.js\";\nimport type { ChildFunction } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { UseStableEffectOptions } from \"../hooks/use-stable-effect.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => isBindingString(a), isBindingEqual],\n [(a) => isName(a), isNameEqual],\n [(a) => isDimension(a), Dim.isEqual],\n [\n (a) => isEntityWithBindingIdentifier(a),\n (a, b) => {\n return isEqual(getBindingIdentifier(a), getBindingIdentifier(b));\n },\n ],\n [(a) => isObservable(a), (a, b) => isEqual(a, b)],\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => isEqual(a, b)],\n ],\n ignoreKeys: [\"children\", PROCESSED_TRANSACTIONS_ATTRIBUTE],\n};\n\nconst updateEntity = (params: {\n sourceId: SbElement;\n scopeId: string;\n name: Name;\n type: string;\n props: Record<string, InputProp>;\n instanceId: SbInstance;\n}) => {\n const { scopeId, name, type, props, sourceId, instanceId } = params;\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n\n if (entity) {\n rootStore.entityManager.updateEntity({\n scopeId,\n name,\n props,\n instanceId,\n });\n } else {\n rootStore.entityManager.createEntity({\n scopeId,\n props,\n name,\n type,\n instanceId,\n sourceId,\n });\n }\n};\n\nfunction useTrackRuntimeWidget(\n instanceId: SbInstance,\n params: {\n name: Name;\n type: string;\n props: Record<string, unknown> & {\n children?: ReactNode[] | ReactNode | ChildFunction;\n };\n isEditing: boolean;\n scopeId: string;\n sourceId: SbElement;\n },\n) {\n const { name, props, isEditing } = params;\n\n const propsForUpdateEntity = useObserverMemo(() => {\n const {\n children: _children,\n [PROCESSED_TRANSACTIONS_ATTRIBUTE]: _processedTransactions,\n bind: _bind,\n ...propsWithoutChildrenAndExtras\n } = props;\n\n if (!isEditing || !rootStore.editStore) {\n return {\n ...propsWithoutChildrenAndExtras,\n name: name.value,\n };\n }\n\n const editStore = getEditStore();\n\n if (\n isEditing &&\n editStore.runtimeEntitiesManager.hasEditOperationsPending()\n ) {\n const meta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n if (meta?.props) {\n const {\n [PROCESSED_TRANSACTIONS_ATTRIBUTE]: _processedTransactions,\n ...propsWithoutTransactions\n } = meta.props;\n return propsWithoutTransactions;\n }\n return propsWithoutChildrenAndExtras;\n }\n\n return {\n ...propsWithoutChildrenAndExtras,\n name: name.value,\n };\n }, [props, name, isEditing, instanceId]);\n\n // TODO(Alex) investigate: this keeps firing during updates even when the props don't semantically change.\n useStableEffect(\n () => {\n updateEntity({\n props: propsForUpdateEntity as Record<string, InputProp>,\n type: params.type,\n name: params.name,\n scopeId: params.scopeId,\n sourceId: params.sourceId,\n instanceId,\n });\n },\n propsForUpdateEntity,\n stableEffectOptions,\n );\n}\n\nexport default useTrackRuntimeWidget;\n","import {\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { getBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\n// TODO(code-mode): Remove import from edit-mode\nimport EditWrapper from \"../../edit-mode/edit-wrapper.jsx\";\nimport { getEditStore } from \"../../edit-mode/get-edit-store.js\";\nimport {\n createManagedPropsList,\n createInternalPropsList,\n} from \"../user-facing/properties-panel/create-managed-props-list.js\";\nimport { generateAndSendComponentDocs } from \"./component-docs-service.js\";\nimport { getNormalizedIdInfo } from \"./identifier-normalizer.js\";\nimport { isEditMode } from \"./is-edit-mode.js\";\nimport { superblocksComponentSymbol } from \"./is-sb-component.jsx\";\nimport {\n DEFAULT_ANONYMOUS_SOURCE_ID,\n type IdentifierInfo,\n} from \"./lib/features/name-manager.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport ReactiveComponent from \"./reactive-component.jsx\";\nimport { useScope } from \"./scope/scope-context.jsx\";\nimport useTrackRuntimeWidget from \"./use-track-runtime-widget.js\";\nimport type { ElementPassthroughProps } from \"../user-facing/component-base/use-passthrough-props.js\";\nimport type { DefaultTagNames } from \"./lib/features/component-registry.js\";\nimport type {\n ExternalProps,\n InternalProps,\n PropertiesDefinition,\n RawPropsToExternal,\n} from \"../user-facing/properties-panel/props-builder.js\";\nimport type { DataTypeString } from \"@superblocksteam/library-shared/props\";\nimport type {\n AnonymousSbEntity,\n CreateChild,\n PropertyInfo,\n SbElement,\n SbInstance,\n WithBindingIdentifier,\n Catalog,\n EditorConfig,\n} from \"@superblocksteam/library-shared/types\";\nimport type { LegacyRef } from \"react\";\n\nexport type InjectedProps = {\n dropTargetRef?: React.Ref<HTMLElement> | LegacyRef<HTMLElement>;\n editorProps?: ElementPassthroughProps;\n};\n\nexport type ParentInfo = {\n type?: string;\n};\n\nexport interface CreationContext {\n generateUniqueName: (baseName: string) => string;\n parentInfo: ParentInfo;\n defaultTagNames: DefaultTagNames;\n selfTagName: string;\n}\n\nexport type PropertyValues<Def extends PropertiesDefinition> = {\n [K in keyof GetAllPropsFromDefinition<Def>]?:\n | PropertyInfo\n | PropertyValues<Def>;\n};\n\n// Helper type to extract all property keys from a PropertiesDefinition\ntype GetAllPropsFromDefinition<Def extends PropertiesDefinition> = {\n [SectionKey in keyof Def]: Def[SectionKey] extends { props: infer Props }\n ? Props extends Record<string, any>\n ? Props\n : never\n : never;\n}[keyof Def];\n\nexport interface EditorTemplate<Def extends PropertiesDefinition> {\n catalog?: Catalog;\n /***\n * Config for the newly created component when added to the canvas from the Editor.\n * @returns a single CreateRequest or an array of CreateRequests.\n *\n * When returning Array<CreateRequests>:\n * - The 1st CreateRequest's type must match the componentType passed to createComponent.\n * - The last CreateRequest's will be the selected component after drag & drop.\n *\n * Example: [Modal, Button]\n * A modal that when drag & dropped on the page will add a trigger button.\n * The modal is closed by default, so the selected component after drop will be the trigger button.\n */\n create?: (\n context: CreationContext,\n ) => CreateRequest<Def> | Array<CreateRequest<Def>>;\n}\nexport interface CreateRequest<Def extends PropertiesDefinition> {\n type: string;\n /**\n * Should it automatically generate a binding?\n * e.g: <Input bind={Input1}>\n *\n * Default is false (no binding)\n *\n * `generateBinding` can also receive a string. e.g: \"Input1\".\n * This is useful if you need to create children components that rely on the parent's binding (e.g: a button inside a modal to close the modal).\n * To generate these unique names, you can use `context.generateUniqueName` and pass the component type (e.g: \"Modal\")\n *\n * A good rule of thumb:\n * - Components that expose a user's input should have an automatically generated binding (e.g: Input, Checkbox, Table, etc)\n * - Components that don't expose a user's input should not have an automatically generated binding (e.g: Button, Text, etc)\n *\n * Note:\n * Apps builders can always manually set a binding on the editor or source code.\n */\n generateBinding?: boolean | string;\n properties?: PropertyValues<Def>; // default is empty object\n createAt?: \"root\" | \"dropLocation\"; // default is \"dropLocation\"\n children?: CreateChild[];\n}\n\n// Chainable component interface\nexport interface ChainableComponent<\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD>,\n> extends React.FC<EP> {\n addEditorTemplate: (config: EditorTemplate<PD>) => ChainableComponent<PD, EP>;\n editorConfig: (config: EditorConfig) => ChainableComponent<PD, EP>;\n\n isSb: symbol;\n sbType: string;\n displayName: string;\n isCustomComponent: boolean;\n isDroppable: boolean;\n propertiesDefinition: PropertiesDefinition;\n}\n\n/**\n * Register a component to be used with the framework.\n *\n * Returns a chainable component that can be used as a React component and also provides\n * additional methods for editor integration.\n *\n * // TODO: All these params should be migrated to editor template or editorConfig\n * @param type - The string identifier for the component type. This should be unique, is used internally to reference the component, and is also the tag name on source code.\n * @param config - An object containing configuration options for the component:\n * - customComponent (optional): If true, marks this as a custom user-defined component.\n * - propertiesDefinition: The definition of the component's properties, used for property panel generation and validation.\n * @param Component - The React functional component implementation. Receives internal props (including drop target props) as its argument.\n *\n * @returns A chainable component that can be used as a React component and also provides methods for editor integration (such as addEditorTemplate and editorConfig).\n */\nexport const registerComponentInternal = <\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD> = ExternalProps<PD>,\n IP extends InternalProps<PD> & InjectedProps = InternalProps<PD> &\n InjectedProps,\n>(\n type: string,\n config: {\n customComponent?: boolean;\n propertiesDefinition: PD;\n },\n Component: React.FC<IP>,\n): ChainableComponent<PD, EP> => {\n const managedProps = createManagedPropsList(config.propertiesDefinition);\n\n // Generate and send component docs\n if (isEditMode()) {\n generateAndSendComponentDocs({\n name: type,\n propertiesDefinition: config.propertiesDefinition,\n isCustomComponent: config.customComponent,\n });\n }\n\n // Syntactic sugar to set isDroppable to true when the component has children\n const isDroppable = !!managedProps.find(\n (p) => p.dataType === (\"children\" as DataTypeString),\n );\n\n rootStore.onEditorRegistered(() => {\n getEditStore().propertiesPanelManager.setPropertiesDefinition(\n type,\n config.propertiesDefinition,\n );\n });\n\n const SbComponent = observer(function SbComponent(\n props: ExternalProps<PD> & {\n [SOURCE_ID_ATTRIBUTE]: SbElement;\n [INSTANCE_ID_ATTRIBUTE]?: SbInstance; // only passed down in edit mode\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]?: SbInstance; // injected in edit mode\n [WIDGET_INDEX_WITHIN_PARENT]?: number; // injected in edit mode\n bind?: WithBindingIdentifier;\n },\n ) {\n const { scopeId: fallbackScopeId } = useScope();\n const sourceId = props[SOURCE_ID_ATTRIBUTE];\n const instanceId = props[INSTANCE_ID_ATTRIBUTE];\n const isEditing =\n Boolean(rootStore.editStore?.isInitialized) &&\n Boolean(!rootStore.editStore?.isLivePreview);\n const identifier = useRef<IdentifierInfo>();\n const { name: passedName, scopeId } = getNormalizedIdInfo({\n bind: getBindingIdentifier(props.bind),\n fallbackScopeId,\n });\n if (!identifier.current) {\n identifier.current = rootStore.nameManager.registerAndGetIdentifiers({\n sourceId,\n name: passedName,\n scopeId,\n existingInstanceId: instanceId,\n type,\n });\n }\n useEffect(() => {\n if (identifier.current) {\n rootStore.nameManager.registerIdentifier(identifier.current);\n }\n return () => {\n if (identifier.current?.instanceId) {\n rootStore.nameManager.unregisterIdentifier(\n identifier.current?.instanceId,\n );\n }\n };\n }, [identifier.current?.instanceId]);\n\n const didNameChange =\n (passedName && identifier.current.name.value !== passedName) ||\n (!passedName && !identifier.current.name.isAnonymous);\n if (didNameChange) {\n identifier.current =\n rootStore.nameManager.changeWidgetName(\n identifier.current.instanceId,\n passedName,\n ) ?? identifier.current;\n }\n const widgetProps = useMemo(() => {\n const { [INSTANCE_ID_ATTRIBUTE]: instanceId, children, ...rest } = props;\n return rest;\n }, [props]);\n\n useTrackRuntimeWidget(identifier.current.instanceId, {\n name: identifier.current.name,\n type,\n props: widgetProps,\n scopeId: identifier.current.scopeId,\n isEditing,\n sourceId,\n });\n\n if (\n isEditing &&\n identifier.current.sourceId !== DEFAULT_ANONYMOUS_SOURCE_ID\n ) {\n return (\n <EditWrapper\n type={type}\n widgetProps={widgetProps}\n component={Component}\n identifier={identifier.current}\n directParentInstanceId={props[WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]}\n indexWithinParent={props[WIDGET_INDEX_WITHIN_PARENT]}\n >\n {props.children}\n </EditWrapper>\n );\n }\n if (props.isVisible === false) return null;\n return (\n <ReactiveComponent\n Component={Component}\n identifier={identifier.current}\n widgetProps={props}\n >\n {props.children}\n </ReactiveComponent>\n );\n }) as any;\n\n SbComponent.isSb = superblocksComponentSymbol;\n SbComponent.sbType = type;\n SbComponent.displayName = type;\n SbComponent.isCustomComponent = config.customComponent ?? false;\n SbComponent.propertiesDefinition = config.propertiesDefinition;\n\n if (config.customComponent) {\n rootStore.componentRegistry.addCustomComponent(type, SbComponent);\n } else {\n rootStore.componentRegistry.addType(type, SbComponent);\n }\n rootStore.componentRegistry.addManagedProps(type, managedProps ?? []);\n\n const defaultEditorConfig: EditorConfig = {};\n\n // TODO: This is only necessary on edit-mode\n if (isDroppable) {\n defaultEditorConfig.isDroppable = true;\n rootStore.componentRegistry.addEditorConfig(type, defaultEditorConfig);\n }\n\n const chainableComponent = Object.assign(SbComponent, {\n addEditorTemplate: (\n templateConfig: EditorTemplate<PD>,\n ): ChainableComponent<PD, EP> => {\n // TODO: This is only necessary on edit-mode (same as some other props that we currently always load, eg: isDroppable, hasExtendedClickArea)\n const catalog: Catalog = templateConfig.catalog ?? {\n displayName: type,\n category: \"MISC\",\n };\n rootStore.componentRegistry.addEditorTemplate(type, {\n ...templateConfig,\n catalog,\n });\n\n return chainableComponent;\n },\n editorConfig: (config: EditorConfig): ChainableComponent<PD, EP> => {\n // TODO: This is only necessary on edit-mode\n rootStore.componentRegistry.addEditorConfig(type, {\n ...defaultEditorConfig,\n ...config,\n });\n\n return chainableComponent;\n },\n }) as ChainableComponent<PD, EP>;\n\n return chainableComponent;\n};\n\nexport function registerEntity<\n PROPS,\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD> = ExternalProps<PD>,\n>(\n name: string,\n config: { propertiesDefinition: PD },\n Entity: (args: RawPropsToExternal<PROPS>) => EP & AnonymousSbEntity,\n): (args: RawPropsToExternal<PROPS>) => EP & AnonymousSbEntity {\n const managedProps = createManagedPropsList(config.propertiesDefinition);\n const internalProps = createInternalPropsList(config.propertiesDefinition);\n\n rootStore.componentRegistry.addManagedProps(name, managedProps ?? []);\n rootStore.componentRegistry.addInternalProps(name, internalProps ?? []);\n\n rootStore.onEditorRegistered(() => {\n getEditStore().propertiesPanelManager.setPropertiesDefinition(\n name,\n config.propertiesDefinition,\n );\n });\n\n return Entity;\n}\n","import type { EditorConfig } from \"@superblocksteam/library-shared/types\";\n\nexport const editorConfig: EditorConfig = {\n icon: \"page\",\n isDraggable: false,\n isDroppable: true,\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { size } from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport {\n Prop,\n PropsPanelCategory,\n Section,\n} from \"../../properties-panel/props-builder.js\";\n\nexport const propertiesDefinition = {\n contents: Section.category(PropsPanelCategory.Content).children({\n children: Prop.children(),\n }),\n layout: Section.category(PropsPanelCategory.Layout).add(\n size({\n defaults: {\n width: Dim.fill(),\n height: Dim.fill(),\n },\n showWidth: () => false,\n showHeight: () => false,\n }),\n ),\n appearance: Section.category(PropsPanelCategory.Appearance).children({\n loading: loading(),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onLoad: Prop.event().propertiesPanel({\n label: \"onPageLoad\",\n }),\n }),\n};\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { FullPageSpinner } from \"../../../internal-details/internal-components/spinner.js\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerComponentInternal, useScope } from \"../../internal-index.js\";\nimport { InternalVStack } from \"../stack/index.jsx\";\nimport { editorConfig } from \"./editor.js\";\nimport { propertiesDefinition } from \"./props.js\";\n// @refresh reset\n\nconst SpinnerFadeIn = styled.div`\n display: contents;\n animation: fadein 0.2s ease-in-out forwards;\n @keyframes fadein {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const Page = registerComponentInternal(\n NATIVE_COMPONENT_TYPES.Page,\n {\n propertiesDefinition,\n },\n (props) => {\n const { name, isAnonymous, style, onLoad, editorProps, ...other } = props;\n\n const { scopeId } = useScope();\n\n useEffect(() => {\n return rootStore.onPageLoaded(scopeId, () => {\n onLoad?.();\n });\n }, [onLoad, scopeId]);\n\n const [initializing, setInitializing] = useState(true);\n useEffect(() => {\n // This is to give the browser a chance to process the page switch.\n // Large child trees will block the render thread.\n setInitializing(false);\n }, []);\n\n return (\n <div style={{ height: \"100%\", width: \"100%\", overflow: \"auto\" }}>\n <InternalVStack\n {...editorProps}\n isVisible\n // TODO: default style has to be merged with the styles coming from ReactiveComponent's useStyleWithSize. We will move default style like minHeight to page layout props after the refactoring on layout helpers is done.\n style={{\n height: \"100%\",\n width: \"100%\",\n // TODO: this is added because we have not applied the flex-shrink: 0 to stack child yet, so if width/height with px is set, the page might not respect that if height is 100%.\n // minHeight: \"fit-content\",\n ...style,\n }}\n {...other}\n >\n {initializing ? (\n <SpinnerFadeIn>\n <FullPageSpinner />\n </SpinnerFadeIn>\n ) : (\n props.children\n )}\n </InternalVStack>\n </div>\n );\n },\n).editorConfig(editorConfig);\n","import type { EditorConfig } from \"@superblocksteam/library-shared/types\";\n\nexport const editorConfig: EditorConfig = {\n icon: \"app\",\n isDraggable: false,\n};\n","import {\n Prop,\n PropsPanelCategory,\n Section,\n} from \"../../properties-panel/props-builder.js\";\n\nexport const propertiesDefinition = {\n contents: Section.category(PropsPanelCategory.Content).children({\n children: Prop.children(),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onLoad: Prop.event().propertiesPanel({\n label: \"onAppLoad\",\n }),\n }),\n};\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport { useEffect } from \"react\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerComponentInternal, useScope } from \"../../internal-index.js\";\nimport { editorConfig } from \"./editor.js\";\nimport { propertiesDefinition } from \"./props.js\";\n\nexport const App = registerComponentInternal(\n NATIVE_COMPONENT_TYPES.App,\n {\n propertiesDefinition,\n },\n (props) => {\n const { onLoad } = props;\n\n const { scopeId } = useScope();\n\n useEffect(() => {\n return rootStore.onAppLoaded(() => {\n onLoad?.();\n });\n }, [onLoad, scopeId]);\n\n return <>{props.children}</>;\n },\n).editorConfig(editorConfig);\n","import React from \"react\";\nimport usePassthroughProps from \"../../component-base/use-passthrough-props.js\";\nimport { registerComponentInternal } from \"../../internal-index.js\";\nimport { basicLayout } from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport {\n Section,\n PropsPanelCategory,\n} from \"../../properties-panel/props-builder.js\";\nimport { Prop } from \"../../properties-panel/props-builder.js\";\nimport type { ChainableComponent } from \"../../../internal-details/sb-wrapper.jsx\";\nimport type { EventFlow } from \"../../event-flow.js\";\nimport type {\n ExtractProps,\n InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport type { WithBindingIdentifier } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst defaultSectionsTemplate = () => ({\n appearance: Section.category(PropsPanelCategory.Appearance).children({\n loading: loading(),\n className: Prop.string()\n .propertiesPanel({\n label: \"Styles\",\n controlType: \"TAILWIND_CLASS_BUILDER\",\n isRemovable: true,\n visibility: \"SHOW_NAME\",\n defaultOnAdd: \"\",\n })\n .docs({\n description:\n \"Classes to apply to the avatar. This can be tailwind CSS classes or any other CSS classes.\",\n }),\n }),\n layout: basicLayout(),\n});\n\nconst restrictedKeys = Object.values(defaultSectionsTemplate()).reduce(\n (keys, section) => {\n return [...keys, ...Object.keys(section.props)];\n },\n [] as string[],\n);\n\nexport type CustomComponentPropertiesDefinition =\n | {\n [key: string]: Prop<any>;\n }\n | {\n [key: string]: Section<any>;\n };\n\nexport type StrictExtractProps<\n T,\n DefaultsBehavior extends \"AlwaysOptional\" | \"RequiredIfDefault\",\n IsEvaluated extends boolean,\n> = {\n [K in keyof ExtractProps<T, DefaultsBehavior, IsEvaluated> as string extends K\n ? never\n : K]: ExtractProps<T, DefaultsBehavior, IsEvaluated>[K];\n};\n\ntype WrappedEventProps<IP extends InternalProps<any>> = {\n [K in keyof IP]: IP[K] extends EventFlow | undefined\n ? () => Promise<void>\n : IP[K];\n};\n\ntype SectionProps<\n PD extends Record<string, Prop<any>> | Record<string, Section<any>>,\n> =\n PD extends Record<string, Prop<any>>\n ? Record<string, Section<any>> & ReturnType<typeof defaultSectionsTemplate>\n : PD;\n\nexport type CustomComponentProps<\n PD extends Record<string, Prop<any>> | Record<string, Section<any>>,\n SP extends SectionProps<PD> = SectionProps<PD>,\n IP extends InternalProps<SP> = InternalProps<SP>,\n> = WrappedEventProps<IP>;\n\nexport type CustomComponentOutputProps<\n PD extends CustomComponentPropertiesDefinition,\n> = StrictExtractProps<PD, \"AlwaysOptional\", false> & {\n bind?: WithBindingIdentifier;\n} & StrictExtractProps<\n ReturnType<typeof defaultSectionsTemplate>,\n \"AlwaysOptional\",\n false\n >;\n\nexport function registerComponent<\n PD extends CustomComponentPropertiesDefinition,\n>(\n name: string,\n propertiesDefinition: PD,\n // todo: laura\n component: React.FC<CustomComponentProps<PD>>,\n): ChainableComponent<any, CustomComponentOutputProps<PD>> {\n // check if the properties are already in sections\n\n let allSections: Record<string, Section<any>>;\n const defaultSections = defaultSectionsTemplate();\n const containsSections = Object.values(propertiesDefinition).every(\n (prop) => prop instanceof Section,\n );\n\n if (!containsSections) {\n const contentSection = Section.category(\n PropsPanelCategory.Content,\n ).children(\n Object.fromEntries(\n Object.entries(\n propertiesDefinition as Record<string, Prop<any>>,\n ).filter(([key, prop]) => {\n if (restrictedKeys.includes(key)) {\n return false;\n }\n return prop.type !== \"event\";\n }),\n ),\n );\n const eventSection = Section.category(\n PropsPanelCategory.EventHandlers,\n ).children(\n Object.fromEntries(\n Object.entries(\n propertiesDefinition as Record<string, Prop<any>>,\n ).filter(([key, prop]) => {\n if (restrictedKeys.includes(key)) {\n return false;\n }\n return prop.type === \"event\";\n }),\n ),\n );\n allSections = {\n content: contentSection,\n ...defaultSections,\n events: eventSection,\n };\n } else {\n allSections = propertiesDefinition as Record<string, Section<any>>;\n\n // We search for default props that are not in the propertiesDefinition\n // If don't find them, we add them to the propertiesDefinition in the correct section\n const allCurrentProps = Object.values(allSections).flatMap((section) =>\n Object.keys(section.props),\n );\n Object.entries(defaultSections).forEach(([sectionName, section]) => {\n Object.entries(section.props).forEach(([propName, prop]) => {\n if (!allCurrentProps.includes(propName)) {\n if (!allSections[sectionName]) {\n allSections[sectionName] =\n defaultSections[sectionName as keyof typeof defaultSections];\n }\n allSections[sectionName].add({ [propName]: prop });\n }\n });\n });\n }\n\n return registerComponentInternal<any, any, any>(\n name,\n {\n propertiesDefinition: allSections,\n customComponent: true,\n },\n (props) => {\n const Component = component(props);\n\n // TODO for Alex to figure out how to inject instance IDs into the inner contents\n // const shouldClone =\n // !isSbComponent(Component) &&\n // React.isValidElement(Component) &&\n // Component.props[SOURCE_ID_ATTRIBUTE] == null;\n\n const shouldClone = false;\n if (shouldClone) {\n return (\n <CloneWithPassthrough\n componentNode={Component as React.ReactElement}\n widgetProps={props}\n />\n );\n }\n return Component;\n },\n );\n}\n\nfunction CloneWithPassthrough(props: {\n widgetProps: Record<string, unknown>;\n componentNode: React.ReactElement;\n}) {\n const passthroughProps = usePassthroughProps(props.widgetProps);\n const FinalCoponent = React.cloneElement(\n props.componentNode,\n passthroughProps,\n );\n return FinalCoponent;\n}\n\nexport function isCustomComponent(child: ReactNode) {\n return (\n typeof child === \"object\" && Boolean((child as any).type?.isCustomComponent)\n );\n}\n","import { StateVarPersistence } from \"@superblocksteam/library-shared/types\";\nimport {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\n\ntype Variable = InternalProps<typeof propertiesDefinition>;\n\nexport const propertiesDefinition = {\n general: Section.category(PropsPanelCategory.Uncategorized)\n .propertiesPanel({ showHeader: false })\n .children({\n defaultValue: Prop.any().readAndWrite().propertiesPanel({\n label: \"Default value\",\n description: \"Sets the default value of the state variable\",\n placeholder: \"Hello, ${currentUser.value}\",\n controlType: \"INPUT_TEXT\",\n }),\n value: Prop.any().readAndWrite(),\n persistence: Prop.string<StateVarPersistence>()\n .default(StateVarPersistence.TEMPORARY)\n .readAndWrite()\n .propertiesPanel({\n label: \"Persistence\",\n description: \"Sets the persistence of the state variable\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"Temp\",\n icon: \"STATE_VAR_TEMPORARY\",\n value: StateVarPersistence.TEMPORARY,\n },\n {\n label: \"Local\",\n icon: \"STATE_VAR_LOCAL_STORAGE\",\n value: StateVarPersistence.LOCAL_STORAGE,\n },\n ],\n }),\n }),\n functions: Section.category(PropsPanelCategory.Functions).children({\n set: Prop.function(function (this, value: any) {\n const widget = this as unknown as Variable;\n widget.value = value;\n }),\n reset: Prop.function(function (this) {\n const widget = this as unknown as Variable;\n widget.value = widget.defaultValue;\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n StateVarPersistence,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\nexport { StateVarPersistence };\n\ntype Props<T = any> = {\n defaultValue: T;\n persistence?: StateVarPersistence;\n};\n\nexport const StateVar = registerEntity(\n SbEntityType.VARIABLE,\n {\n propertiesDefinition,\n },\n ({ defaultValue, persistence }: RawPropsToExternal<Props>) => {\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.VARIABLE,\n defaultValue,\n value: defaultValue,\n persistence,\n };\n },\n);\n","import {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport { VALIDATORS } from \"../../properties-panel/validators.js\";\n\ntype Timer = InternalProps<typeof propertiesDefinition> & {\n stop: () => void;\n start: () => void;\n toggle: () => void;\n};\n\nexport const propertiesDefinition = {\n general: Section.category(PropsPanelCategory.Uncategorized)\n .propertiesPanel({ showHeader: false })\n .children({\n intervalMs: Prop.number().default(300).readAndWrite().propertiesPanel({\n label: \"Interval\",\n description: \"Sets the interval of the timer\",\n placeholder: \"1000\",\n isJSConvertible: false,\n controlType: \"TIMER_INTERVAL\",\n }),\n startOnPageLoad: Prop.boolean().readAndWrite().propertiesPanel({\n label: \"Start on page load\",\n description: \"Sets whether the timer should start on page load\",\n controlType: \"SWITCH\",\n }),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onFire: Prop.event().propertiesPanel({ label: \"onFire\" }),\n }),\n metadata: Section.category(PropsPanelCategory.Meta).children({\n timerId: Prop.string().validate(VALIDATORS.TEXT_ALLOW_UNDEFINED),\n isRunning: Prop.boolean().default(function (this: Timer) {\n return this.timerId !== undefined;\n }),\n }),\n functions: Section.category(PropsPanelCategory.Functions).children({\n start: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n if (timer.timerId) clearInterval(timer.timerId);\n timer.timerId = setInterval(() => {\n timer?.onFire?.();\n }, timer.intervalMs) as any;\n }),\n stop: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n clearInterval(timer.timerId);\n timer.timerId = undefined;\n }),\n toggle: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n if (timer.isRunning) {\n timer.stop();\n } else {\n timer.start();\n }\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { EventFlow } from \"../../../index.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\ntype Props = {\n intervalMs?: number;\n startOnPageLoad?: boolean;\n onFire?: EventFlow;\n};\n\nexport const Timer = registerEntity(\n SbEntityType.TIMER,\n {\n propertiesDefinition,\n },\n ({ onFire, intervalMs, startOnPageLoad }: RawPropsToExternal<Props>) => {\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.TIMER,\n intervalMs,\n startOnPageLoad,\n onFire,\n };\n },\n);\n","import { action, makeAutoObservable } from \"mobx\";\nimport type { SbApiRunOptions } from \"@superblocksteam/library-shared/types\";\n\nexport class SuspensibleAPI<TData = any, TArgs extends any[] = any[]> {\n private _response: TData | undefined;\n private _error: Error | undefined;\n private _promise: Promise<TData> | undefined;\n private _isLoading: boolean = false;\n private _runFn: (options?: SbApiRunOptions) => Promise<TData>;\n private _cancelFn: (...args: TArgs) => Promise<void>;\n\n constructor({\n runFn,\n cancelFn,\n }: {\n runFn: (options?: SbApiRunOptions) => Promise<TData>;\n cancelFn: (...args: TArgs) => Promise<void>;\n }) {\n this._runFn = runFn;\n this._cancelFn = cancelFn;\n makeAutoObservable(this);\n }\n\n /**\n * Context-aware response getter that either returns data or throws promises to trigger React Suspense.\n */\n get response(): TData | undefined {\n // If we are still loading, throw the Promise so React suspends\n if (this._isLoading && this._promise) {\n throw this._promise;\n }\n // Return whatever data we have (could be undefined if loading or no data)\n return this._response;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n get error(): Error | undefined {\n return this._error;\n }\n\n async run(options?: SbApiRunOptions): Promise<TData> {\n this._isLoading = true;\n this._error = undefined;\n\n this._promise = this._runFn(options)\n .then(\n action((data) => {\n this._response = data;\n this._isLoading = false;\n return data;\n }),\n )\n .catch(\n action((error) => {\n this._error = error;\n this._isLoading = false;\n throw error;\n }),\n );\n\n return this._promise;\n }\n\n async cancel(...args: TArgs): Promise<void> {\n this._isLoading = false;\n await this._cancelFn(...args);\n }\n}\n","import rootStore from \"../../../internal-details/lib/root-store.js\";\nimport {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport { SuspensibleAPI } from \"./suspensible-api.js\";\nimport type { ApiResult } from \"../../../internal-details/lib/features/api-store.js\";\nimport type { SbApiRunOptions } from \"@superblocksteam/library-shared/types\";\n\nexport type ApiEntity = Omit<\n InternalProps<typeof propertiesDefinition>,\n \"_suspensibleApi\"\n> & {\n run: () => Promise<any>;\n cancel: () => Promise<any>;\n _suspensibleApi: SuspensibleAPI<any, any[]>;\n};\n\nexport const propertiesDefinition = {\n events: Section.category(PropsPanelCategory.EventHandlers)\n .children({\n onSuccess: Prop.event().propertiesPanel({ label: \"onSuccess\" }),\n onError: Prop.event().propertiesPanel({ label: \"onError\" }),\n })\n .propertiesPanel({\n isDefaultOpen: true,\n showHeader: true,\n headerType: \"Large\",\n subHeader:\n \"Configure frontend event handlers to run in response to the API\",\n }),\n metadata: Section.category(PropsPanelCategory.Meta).children({\n response: Prop.any()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.response;\n })\n .readable(),\n error: Prop.any()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.error;\n })\n .readable(),\n isLoading: Prop.boolean()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.isLoading;\n })\n .readable(),\n }),\n functions: Section.category(\"Derived\").children({\n run: Prop.function(async function (\n this,\n args?: { traceHeaders?: Record<string, string> } & Record<\n string,\n unknown\n >,\n ): Promise<any> {\n const api = this as unknown as ApiEntity;\n try {\n const result = await api._suspensibleApi.run(args);\n await api.onSuccess?.();\n return result;\n } catch (error) {\n await api.onError?.();\n throw error;\n }\n }),\n cancel: Prop.function(async function (this) {\n const api = this as unknown as ApiEntity;\n await api._suspensibleApi.cancel();\n }),\n }),\n\n internal: Section.category(PropsPanelCategory.Internal).children({\n /**\n * Internal SuspensibleAPI instance that manages loading states and React Suspense integration.\n * This property is hidden from the public interface but accessible to other properties.\n */\n _suspensibleApi: Prop.internal(function (this: any) {\n const api = this as unknown as ApiEntity;\n return new SuspensibleAPI({\n runFn: async (options?: SbApiRunOptions): Promise<any> => {\n const result = await rootStore.apis\n .runApi(api.name, api.scopeId, options)\n .catch(\n (err): ApiResult => ({\n error: err,\n data: null,\n }),\n );\n\n if (result.error) {\n throw result.error;\n }\n return result.data;\n },\n cancelFn: async (): Promise<void> => {\n // TODO: is there a wayt to end the span here?\n rootStore.apis.cancelApi(api.name, api.scopeId);\n },\n });\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { EventFlow } from \"../../../index.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\ntype Props = {\n onSuccess?: EventFlow;\n onError?: EventFlow;\n};\n\nexport const SbApi = registerEntity(\n SbEntityType.API,\n {\n propertiesDefinition,\n },\n ({ onSuccess, onError }: RawPropsToExternal<Props>) => {\n // Response and error are intentionally not included here, they will be\n // set at runtime, after APIs are executed\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.API,\n onSuccess,\n onError,\n };\n },\n);\n","// import TokenProvider from \"../../TokenProvider\";\n\nimport { useMemo } from \"react\";\n\n// export const userApi = createApi({\n// reducerPath: \"userApi\",\n// baseQuery: fetchBaseQuery({\n// baseUrl: \"https://dev.superblocks.com/api/v1/\",\n// prepareHeaders(headers) {\n// headers.set(\"Authorization\", `Bearer ${TokenProvider.getToken()}`);\n// return headers;\n// },\n// }),\n// endpoints: (builder) => ({\n// getCurrentUser: builder.query({\n// query: () => ({\n// url: \"/users/me\",\n// responseHandler: async (response) => {\n// const data = await response.json();\n// lastRenderedProps.Global = {\n// user: data.data.user,\n// };\n// console.log(\"retrieved user\", data.data.user);\n// return data;\n// },\n// }),\n// }),\n// }),\n// });\n\nexport function useGetCurrentUserQuery() {\n return useMemo(() => {\n return {\n isLoading: false,\n data: {\n user: {\n name: \"Test User\",\n },\n },\n };\n }, []);\n}\n","import * as Dialog from \"@radix-ui/react-dialog\";\nimport { isEqual } from \"lodash\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport {\n ErrorIconContainer,\n StyledClarkIcon,\n ErrorTitle,\n ErrorMessage,\n ErrorDetails,\n ErrorSummary,\n ErrorStack,\n ActionsContainer,\n SecondaryButton,\n} from \"../lib/internal-details/internal-components/common.js\";\nimport { FixWithClarkButton } from \"../lib/internal-details/internal-components/fix-with-clark-button.js\";\n\n// Global functions injected by the vanilla error overlay\ndeclare global {\n interface Window {\n __SB_MARK_APP_LOADED?: () => void;\n }\n\n // Vite HMR types for import.meta.hot\n interface ImportMeta {\n readonly hot?: {\n on: (event: string, callback: (payload: any) => void) => void;\n };\n }\n}\n\nconst ModalOverlay = styled(Dialog.Overlay)`\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n animation: fadeIn 0.2s ease-out;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nconst ModalContent = styled(Dialog.Content)`\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border-radius: 8px;\n box-shadow:\n 0 0 1px rgba(0, 0, 0, 0.1),\n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 650px;\n max-height: 80vh;\n width: 90vw;\n padding: 16px;\n overflow-y: auto;\n z-index: 1001;\n animation: slideIn 0.2s ease-out;\n scrollbar-width: thin;\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n &:focus {\n outline: none;\n }\n`;\n\nconst InnerModalContent = styled.div`\n position: relative;\n padding: 2.5rem;\n`;\n\nconst ModalCloseButtonContainer = styled.div`\n position: sticky;\n top: 0;\n width: 100%;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst ModalCloseButton = styled(Dialog.Close)`\n height: fit-content;\n background: none;\n border: none;\n color: #6c7689;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: #f3f4f6;\n }\n\n &:focus {\n outline: 2px solid #08a4ff;\n outline-offset: 2px;\n }\n`;\n\nconst ErrorNotificationButton = styled.button`\n position: fixed;\n right: 16px;\n bottom: 16px;\n z-index: 1000;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: none;\n`;\n\nconst ErrorNotificationContent = styled.div`\n background: #ef4444;\n color: white;\n padding: 12px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n max-width: 40rem;\n box-shadow:\n 0 10px 25px -5px rgba(0, 0, 0, 0.1),\n 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow:\n 0 20px 25px -5px rgba(0, 0, 0, 0.15),\n 0 10px 10px -5px rgba(0, 0, 0, 0.1);\n }\n`;\n\nconst ErrorText = styled.span`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ErrorIcon = styled.svg`\n flex-shrink: 0;\n`;\n\nexport type BuildError =\n | {\n errorType: \"import\";\n error: string;\n stack: string;\n importPath: string;\n }\n | {\n errorType: \"general\";\n error: string;\n stack?: string;\n };\n\nexport type BuildErrorModalProps = {\n isOpen: boolean;\n error: BuildError | null;\n onClose: () => void;\n};\n\nexport function BuildErrorNotification() {\n const [currentError, setCurrentError] = useState<BuildError | null>(null);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const lastBuildError = useRef<BuildError | null>(null);\n\n useEffect(() => {\n // Signal to the vanilla error overlay that React has loaded\n if (typeof window !== \"undefined\" && window.__SB_MARK_APP_LOADED) {\n window.__SB_MARK_APP_LOADED();\n }\n\n // Listen to Vite's error events\n if (import.meta.hot) {\n import.meta.hot.on(\"vite:error\", (payload) => {\n const error = payload?.err || payload;\n const errorMessage = error?.message || String(error);\n\n // Parse error type based on error name or message\n let buildError: BuildError;\n\n // Check for import errors\n if (error?.name === \"ImportError\" || error?.importPath) {\n buildError = {\n errorType: \"import\",\n error: errorMessage,\n stack: error?.stack || \"\",\n importPath: error?.importPath || \"unknown\",\n };\n } else if (errorMessage.includes(\"Failed to resolve import\")) {\n // Fallback for non-custom import errors\n const importMatch = errorMessage.match(\n /Failed to resolve import [\"'](.+?)[\"']/,\n );\n buildError = {\n errorType: \"import\",\n error: errorMessage,\n stack: error?.stack || \"\",\n importPath: importMatch ? importMatch[1] : \"unknown\",\n };\n } else {\n buildError = {\n errorType: \"general\",\n error: errorMessage,\n stack: error?.stack,\n };\n }\n\n setCurrentError(buildError);\n });\n\n // Clear errors on successful updates\n import.meta.hot.on(\"vite:beforeUpdate\", () => {\n setCurrentError(null);\n setIsModalOpen(false);\n });\n }\n }, []);\n\n // Auto-open modal when new error appears\n useEffect(() => {\n if (currentError && !isEqual(lastBuildError.current, currentError)) {\n setIsModalOpen(true);\n lastBuildError.current = currentError;\n }\n }, [currentError]);\n\n if (!currentError) {\n return null;\n }\n\n const displayCornerError = !isModalOpen;\n const errorText =\n currentError.errorType === \"import\" ? \"Import Error\" : \"Build Error\";\n\n return (\n <>\n <BuildErrorModal\n isOpen={isModalOpen}\n error={currentError}\n onClose={() => setIsModalOpen(false)}\n />\n {displayCornerError ? (\n <ErrorNotificationButton onClick={() => setIsModalOpen(true)}>\n <ErrorNotificationContent>\n <ErrorIcon\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8z\" />\n <path d=\"M7.002 11a1 1 0 112 0 1 1 0 01-2 0zM7.1 4.995a.905.905 0 111.8 0l-.35 3.507a.552.552 0 01-1.1 0L7.1 4.995z\" />\n </ErrorIcon>\n <ErrorText>{errorText}</ErrorText>\n </ErrorNotificationContent>\n </ErrorNotificationButton>\n ) : null}\n </>\n );\n}\n\nexport function BuildErrorModal({\n isOpen,\n error,\n onClose,\n}: BuildErrorModalProps) {\n if (!error) return null;\n\n const title = error.errorType === \"import\" ? \"Import error\" : \"Build error\";\n const message =\n error.errorType === \"import\" ? (\n <>\n Error importing <code>{error.importPath}</code>\n </>\n ) : (\n \"An error occurred during the build process\"\n );\n\n // Combine error message with stack trace for full details\n const details =\n error.stack && error.stack.trim()\n ? `${error.error}\\n${error.stack}`\n : error.error;\n\n // Create an Error object for FixWithClarkButton\n const errorObj = new Error(error.error);\n errorObj.stack = details || error.error;\n if (error.errorType === \"import\") {\n errorObj.name = \"ImportError\";\n }\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={onClose}>\n <Dialog.Portal>\n <ModalOverlay />\n <ModalContent data-test=\"build-error-modal\">\n <ModalCloseButtonContainer>\n <ModalCloseButton aria-label=\"Close error dialog\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M12.8 4.4L11.6 3.2 8 6.8 4.4 3.2 3.2 4.4 6.8 8 3.2 11.6 4.4 12.8 8 9.2 11.6 12.8 12.8 11.6 9.2 8z\" />\n </svg>\n </ModalCloseButton>\n </ModalCloseButtonContainer>\n\n <InnerModalContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <Dialog.Title asChild>\n <ErrorTitle>{title}</ErrorTitle>\n </Dialog.Title>\n\n <ErrorMessage data-test=\"build-error-message\">\n {message}\n </ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={errorObj} onClick={onClose} />\n <SecondaryButton onClick={() => window.location.reload()}>\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {details ? (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{details}</ErrorStack>\n </ErrorDetails>\n ) : error.errorType === \"general\" && error.error ? (\n <ErrorDetails>\n <ErrorSummary>Error details</ErrorSummary>\n <ErrorStack>{error.error}</ErrorStack>\n </ErrorDetails>\n ) : null}\n </InnerModalContent>\n </ModalContent>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { PAGE_COMPONENT_TYPE } from \"@superblocksteam/library-shared\";\n\n// Keeping parentType in the signature for now, in case we need to make it more complex later\nexport function isNestable(\n componentType: string,\n _parentType?: string,\n): boolean {\n if (componentType === PAGE_COMPONENT_TYPE) {\n return false;\n }\n\n return true;\n}\n","import { Property } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\n\nimport { isNestable } from \"./dnd/is-nestable.js\";\nimport { filterSafeStackDimensionProperties } from \"./dnd/utils.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n CreationContext,\n PropertyValues,\n ParentInfo,\n CreateRequest as EditorTemplateCreateRequest,\n} from \"../lib/internal-details/sb-wrapper.jsx\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type {\n PropertyInfo,\n SbElement,\n SourceLocation,\n} from \"@superblocksteam/library-shared/types\";\n\nimport type { CreateRequest } from \"@superblocksteam/library-shared/types\";\n\nfunction getParentInfo(parent: SourceLocation): ParentInfo {\n const parentComponentMeta =\n getEditStore().runtimeEntitiesManager.getAnyEditorWidgetMeta(parent.id);\n return {\n type: parentComponentMeta?.type,\n };\n}\n\nexport const generateUniqueName = (componentType: string) => {\n const baseName = componentType;\n\n let counter = 1;\n let name = `${baseName}${counter}`;\n while (rootStore.nameManager.hasEntityWithName(name)) {\n counter++;\n name = `${baseName}${counter}`;\n }\n return name;\n};\n\nfunction getBinding({\n componentType,\n editorTemplateCreateRequest,\n}: {\n componentType: string;\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>;\n}): PropertyInfo<string> | undefined {\n if (editorTemplateCreateRequest?.generateBinding === true) {\n return Property.Static(generateUniqueName(componentType));\n } else if (typeof editorTemplateCreateRequest?.generateBinding === \"string\") {\n return Property.Static(editorTemplateCreateRequest.generateBinding);\n } else {\n return undefined;\n }\n}\n\nfunction getComponentBaseProperties(\n componentType: string,\n _parentInfo: ParentInfo,\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>,\n) {\n let properties: PropertyValues<any> & Record<string, PropertyInfo> = {};\n\n const editorTemplates =\n rootStore.componentRegistry.getEditorTemplates(componentType);\n if (editorTemplates && editorTemplates.length > 1) {\n throw new Error(\n `Multiple editor templates are not supported yet. Found ${editorTemplates.length} for component type: ${componentType}.`,\n );\n }\n\n if (editorTemplateCreateRequest?.properties) {\n properties = {\n ...properties,\n ...editorTemplateCreateRequest.properties,\n };\n }\n\n const binding = getBinding({\n componentType,\n editorTemplateCreateRequest,\n });\n if (binding) {\n properties.name = binding;\n }\n\n const { width, height, size } = properties;\n\n const safeDimensions = filterSafeStackDimensionProperties({\n width: width?.value as Dim | undefined,\n height: height?.value as Dim | undefined,\n size: size?.value as Dim | undefined | unknown,\n });\n return {\n properties: {\n ...properties,\n ...safeDimensions,\n },\n children: editorTemplateCreateRequest?.children ?? [],\n };\n}\n\nfunction getCreateAtParentElement(\n relativeParent: SourceLocation,\n createAt?: \"root\" | \"dropLocation\",\n): { source: SourceLocation } {\n if (createAt === \"root\") {\n const parentInstanceId =\n getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n relativeParent.id,\n );\n\n const pageComponent =\n getEditStore().runtimeEntitiesManager.getClosestAncestorByType(\n parentInstanceId,\n \"Page\",\n );\n\n if (!pageComponent) {\n throw new Error(\n `Page component not found for parent: ${relativeParent.id}`,\n );\n }\n\n return { source: { id: pageComponent.sourceId } };\n } else {\n return { source: relativeParent };\n }\n}\n\n// Create components from the Editor\nexport default async function createComponent({\n componentType,\n parent,\n scopeName,\n baseProperties = {},\n skipSecondaryComponentsCreation, // will only create the primary component. Secondary components are usually trigger components (e.g: Button that triggers the modal)\n otherComponentsUpdates,\n}: {\n componentType: string;\n parent: SourceLocation;\n scopeName: string;\n baseProperties?: Record<string, PropertyInfo>;\n skipSecondaryComponentsCreation?: boolean; // e.g. only create modal and not trigger button\n otherComponentsUpdates?: Record<SbElement, Record<string, PropertyInfo>>;\n}): Promise<SbElement | undefined> {\n const parentInfo = getParentInfo(parent);\n\n if (!isNestable(componentType, parentInfo.type)) {\n console.error(`${componentType} cannot be nested under ${parentInfo.type}`);\n return;\n }\n\n const editorTemplates =\n rootStore.componentRegistry.getEditorTemplates(componentType);\n if (editorTemplates && editorTemplates.length > 1) {\n throw new Error(\n `Multiple editor templates are not supported yet. Found ${editorTemplates.length} for component type: ${componentType}.`,\n );\n }\n\n const context: CreationContext = {\n generateUniqueName,\n parentInfo,\n defaultTagNames: rootStore.componentRegistry.defaultTagNames,\n selfTagName: componentType,\n };\n\n // Creation\n const editorTemplateCreateRequest = editorTemplates?.[0]?.create?.(context);\n\n const primaryEditorTemplateCreateRequest = Array.isArray(\n editorTemplateCreateRequest,\n )\n ? editorTemplateCreateRequest[0]\n : editorTemplateCreateRequest;\n\n if (\n editorTemplateCreateRequest &&\n primaryEditorTemplateCreateRequest?.type !== componentType\n ) {\n throw new Error(\n `When defining a ${Array.isArray(editorTemplateCreateRequest) ? \"multiple\" : \"single\"} component to be created on an EditorTemplate, the type must match with the component being created. got: ${primaryEditorTemplateCreateRequest?.type} when it should have been ${componentType}`,\n );\n }\n\n const editorTemplateCreateRequests = Array.isArray(\n editorTemplateCreateRequest,\n )\n ? editorTemplateCreateRequest\n : [editorTemplateCreateRequest];\n\n const editStore = getEditStore();\n\n function editorTemplateCreateRequestToInternalCreateRequest({\n editorTemplateCreateRequest,\n baseProperties,\n }: {\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>;\n baseProperties: Record<string, PropertyInfo>;\n }): CreateRequest {\n const type = editorTemplateCreateRequest?.type ?? componentType;\n\n const { properties: propertiesFromType, children } =\n getComponentBaseProperties(type, parentInfo, editorTemplateCreateRequest);\n\n const properties = {\n ...propertiesFromType,\n ...baseProperties,\n };\n\n const createAtParentElement = getCreateAtParentElement(\n parent,\n editorTemplateCreateRequest?.createAt,\n );\n\n const primaryComponent: CreateRequest = {\n parentElement: createAtParentElement,\n tagName: type,\n properties,\n children,\n scopeName,\n id: editStore.operationManager.generateSourceId(),\n };\n\n return primaryComponent;\n }\n\n const createRequests = editorTemplateCreateRequests.map(\n (editorTemplateCreateRequest, index) =>\n editorTemplateCreateRequestToInternalCreateRequest({\n editorTemplateCreateRequest,\n baseProperties: index === 0 ? baseProperties : {}, // baseProperties are only applied to the primary component\n }),\n );\n\n const hasOtherComponentsUpdates =\n otherComponentsUpdates && Object.keys(otherComponentsUpdates).length > 0;\n\n const hasMultipleCreateComponents =\n editorTemplateCreateRequests.length > 1 && !skipSecondaryComponentsCreation;\n\n const isBatchOperation =\n hasOtherComponentsUpdates || hasMultipleCreateComponents;\n\n if (isBatchOperation) {\n const performOtherComponentsUpdates = (\n otherComponentsUpdates: Record<SbElement, Record<string, PropertyInfo>>,\n ) => {\n Object.entries(otherComponentsUpdates).forEach(([sourceId, updates]) => {\n editStore.operationManager.setWidgetProperties({\n sourceId: sourceId as SbElement,\n properties: updates,\n });\n });\n };\n\n editStore.operationManager.batchUpdate(() => {\n if (skipSecondaryComponentsCreation) {\n editStore.operationManager.createComponent(createRequests[0]);\n } else {\n createRequests.forEach((createRequest) => {\n editStore.operationManager.createComponent(createRequest);\n });\n }\n\n if (hasOtherComponentsUpdates) {\n performOtherComponentsUpdates(otherComponentsUpdates);\n }\n });\n } else {\n editStore.operationManager.createComponent(createRequests[0]);\n }\n\n /**\n * Returns the single id, or the the last component if there are multiple.\n * See EditorTemplate's definition to understand why.\n */\n return createRequests.at(-1)!.id;\n}\n","import { rectIntersection } from \"@dnd-kit/core\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport type { ComponentDroppableData } from \"./types.js\";\nimport type {\n CollisionDetection,\n Collision,\n DroppableContainer,\n} from \"@dnd-kit/core\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype CollisionData = {\n droppableContainer?: DroppableContainer;\n injectedCollisionRect?: {\n width: number;\n height: number;\n bottom: number;\n left: number;\n right: number;\n top: number;\n };\n};\n\n// Extended args type that includes pre-sorted collisions\ntype ExtendedCollisionArgs = Parameters<CollisionDetection>[0] & {\n collisions?: Collision[];\n};\n\n// https://github.com/clauderic/dnd-kit/pull/334#issuecomment-1965708784\nconst fixCursorSnapOffset: CollisionDetection = (args) => {\n // Bail out if keyboard activated\n if (!args.pointerCoordinates) {\n return rectIntersection(args);\n }\n const { x, y } = args.pointerCoordinates;\n const { width, height } = args.collisionRect;\n const updated = {\n ...args,\n // The collision rectangle is broken when using snapCenterToCursor. Reset\n // the collision rectangle based on pointer location and overlay size.\n collisionRect: {\n width,\n height,\n bottom: y + height / 2,\n left: x - width / 2,\n right: x + width / 2,\n top: y - height / 2,\n },\n };\n\n const editStore = getEditStore();\n\n // Get collisions sorted by depth (innermost first)\n const collisions = rectIntersection(updated);\n\n const sortedCollisions = collisions\n .filter((collision) => {\n const activeRootInstanceId =\n editStore.interactionLayerManager.activeRootInstanceId;\n\n if (!activeRootInstanceId) return true;\n return (\n collision.id === activeRootInstanceId ||\n doesInteractionLayerContainInstance(\n activeRootInstanceId,\n collision.id as SbInstance,\n )\n );\n })\n .map((collision: Collision) => {\n const rect = collision.data?.droppableContainer?.rect.current;\n const pointerInside =\n rect &&\n x >= rect.left &&\n x <= rect.right &&\n y >= rect.top &&\n y <= rect.bottom;\n return {\n ...collision,\n pointerInside,\n };\n })\n .sort((a, b) => {\n const aData = a.data?.droppableContainer?.data.current as\n | ComponentDroppableData\n | undefined;\n const bData = b.data?.droppableContainer?.data.current as\n | ComponentDroppableData\n | undefined;\n\n // priotize items with pointer inside\n if (a.pointerInside && !b.pointerInside) return -1;\n if (!a.pointerInside && b.pointerInside) return 1;\n\n // Higher depth = more nested = should come first\n return (bData?.depth ?? 0) - (aData?.depth ?? 0);\n });\n\n // Create a modified args object with the depth-sorted collisions\n const modifiedArgs = {\n ...updated,\n collisions: sortedCollisions,\n };\n\n // Use bubblingToParentIfFar with the depth-sorted collisions\n const result = bubblingToParentIfFar(modifiedArgs);\n\n // Add the injected collision rect to the result\n if (result[0]) {\n result[0].data = {\n ...(result[0].data ?? {}),\n injectedCollisionRect: updated.collisionRect,\n } as CollisionData;\n }\n\n return result;\n};\n\nconst bubblingToParentIfFar = (args: ExtendedCollisionArgs) => {\n const { droppableContainers, pointerCoordinates, collisions } = args;\n\n if (!pointerCoordinates || !collisions?.length) return [];\n\n // Get the closest (innermost) collision\n const closestCollision = collisions[0];\n const closestContainer = droppableContainers.find(\n (c) => c.id === closestCollision.id,\n );\n if (!closestContainer?.rect.current) return [];\n\n // Calculate center point and distances\n const rect = closestContainer.rect.current;\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const halfWidth = rect.width / 2;\n const halfHeight = rect.height / 2;\n const dx = pointerCoordinates.x - centerX;\n const dy = pointerCoordinates.y - centerY;\n\n // If pointer is near the edge, bubble up to parent\n const shouldBubbleUp =\n Math.abs(dx) > halfWidth - 4 || // Less than 4px from the edge\n Math.abs(dy) > halfHeight - 4; // Less than 4px from the edge\n\n const editStore = getEditStore();\n const targetId = shouldBubbleUp\n ? editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n closestCollision.id as SbInstance,\n )?.parentInstanceId\n : (closestCollision.id as SbInstance);\n if (!targetId) return [];\n\n const targetContainer = droppableContainers.find((c) => c.id === targetId);\n if (!targetContainer) return [];\n\n return [\n {\n id: targetId,\n data: {\n ...(closestCollision.data ?? {}),\n droppableContainer: targetContainer,\n } as CollisionData,\n },\n ];\n};\n\nexport default fixCursorSnapOffset;\n","import { Dim, Property } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport createComponent from \"../create-component.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { filterSafeStackDimensionProperties } from \"./utils.js\";\nimport type { StackDropInfo } from \"./types.js\";\nimport type { ClientRect } from \"@dnd-kit/core\";\nimport type { PropertyInfo } from \"@superblocksteam/library-shared\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ValidStackDropInfo = Extract<StackDropInfo, { insertionIndex: number }>;\n\nconst mergeDroppedDimensions = (\n draggedType: string,\n draggedProps: undefined | Record<string, unknown>,\n activeDragRect: ClientRect | null,\n): {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo;\n} => {\n const safeExistingDimensions = filterSafeStackDimensionProperties({\n width: draggedProps?.width as Dim | undefined,\n height: draggedProps?.height as Dim | undefined,\n size: draggedProps?.size as Dim | undefined | string,\n });\n\n const width = safeExistingDimensions.width;\n const height = safeExistingDimensions.height;\n\n if (draggedType === \"Icon\") {\n const size =\n safeExistingDimensions.size ??\n (activeDragRect?.height\n ? Property.Dimension(Dim.px(activeDragRect.height))\n : Property.Static(\"\"));\n return { size };\n }\n\n return {\n width,\n height,\n };\n};\n\nconst handleStackDropWithinCanvas = (params: {\n dropInfo: ValidStackDropInfo;\n draggedId: SbInstance;\n dropTargetId: SbInstance;\n}) => {\n const { dropInfo, draggedId, dropTargetId } = params;\n const editStore = getEditStore();\n const dropSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(dropTargetId);\n const draggedSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(draggedId);\n\n if (!dropSourceId || !draggedSourceId) {\n throw new Error(`Missing IDs: dragging ${draggedId} to ${dropTargetId}`);\n }\n\n console.log(`Dragged ${draggedSourceId} to ${dropSourceId}`, {\n dropInfo,\n index: dropInfo.insertionIndex,\n });\n\n if (dropInfo.noopDrop) {\n return;\n }\n\n const draggedType =\n editStore.runtimeEntitiesManager.getEditorWidgetType(draggedId);\n if (!draggedType) {\n throw new Error(`Missing dragged type: ${draggedId}`);\n }\n const activeDragRect = editStore.ui.dnd.activeDragRect;\n const draggedProps =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(draggedId)?.props;\n editStore.operationManager.dropComponent({\n from: { source: { id: draggedSourceId } },\n to: {\n source: {\n id: dropSourceId,\n index: dropInfo.insertionIndex,\n },\n },\n propsToChange: {\n ...mergeDroppedDimensions(draggedType, draggedProps, activeDragRect),\n },\n });\n};\n\nconst handleStackDropForNewComponent = ({\n componentType,\n dropInfo,\n dropTargetId,\n}: {\n componentType: string;\n dropTargetId: SbInstance;\n dropInfo: ValidStackDropInfo;\n}): Promise<SbElement | undefined> => {\n const editStore = getEditStore();\n const dropSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(dropTargetId);\n const dropScopeId =\n editStore.runtimeEntitiesManager.getEditorWidgetScopeId(dropTargetId);\n if (!dropSourceId || !dropScopeId) {\n throw new Error(\"Missing drop source id\");\n }\n const scopeName = rootStore.entityManager.getScopeName(dropScopeId);\n return createComponent({\n componentType,\n parent: { index: dropInfo.insertionIndex, id: dropSourceId },\n scopeName,\n });\n};\n\nexport const handleStackDrop = async ({\n dropInfo,\n draggedId,\n dropTargetId,\n isDraggingNewComponent,\n newComponentType,\n}: {\n dropInfo: StackDropInfo;\n draggedId: SbInstance | undefined | null;\n dropTargetId: SbInstance;\n isDraggingNewComponent: boolean;\n newComponentType: string | null | undefined;\n}): Promise<SbElement | undefined> => {\n if (dropInfo.insertionIndex == null) {\n throw new Error(\"No insertion index found\");\n }\n\n if (isDraggingNewComponent) {\n if (!newComponentType) {\n throw new Error(\"Missing componentType to create new component\");\n }\n\n return handleStackDropForNewComponent({\n componentType: newComponentType,\n dropTargetId,\n dropInfo,\n });\n } else {\n if (!draggedId) {\n throw new Error(\"Missing dragged id\");\n }\n\n handleStackDropWithinCanvas({\n dropInfo,\n draggedId,\n dropTargetId,\n });\n }\n};\n","import { useDndMonitor } from \"@dnd-kit/core\";\nimport { WIDGET_DISABLE_DND } from \"@superblocksteam/library-shared\";\nimport { throttle } from \"lodash\";\nimport { runInAction } from \"mobx\";\nimport { useCallback, useMemo } from \"react\";\nimport { getEditStore } from \"../../get-edit-store.js\";\nimport { getBoundingBoxForWidget } from \"../../interaction-utils.js\";\nimport { editorBridge } from \"../../superblocks-editor-bridge.js\";\nimport { handleStackDrop } from \"../handle-stack-drop.js\";\nimport type { ComponentDraggableData } from \"../types.js\";\n\nimport type {\n ClientRect,\n DragEndEvent,\n DragMoveEvent,\n DragStartEvent,\n} from \"@dnd-kit/core\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst measureRect = (id: SbInstance | null): null | ClientRect => {\n const rect = id ? getBoundingBoxForWidget(id) : null;\n if (!rect) {\n return null;\n }\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n };\n};\n\nexport const useHandleDnDEvents = () => {\n const setActiveDragRect = useMemo(() => {\n const editStore = getEditStore();\n const throttled = throttle(\n (rect: ClientRect | null) => {\n editStore.ui.dnd.setActiveDragRect(rect);\n },\n 10,\n {\n leading: true,\n trailing: true,\n },\n );\n return (val: ClientRect | null) => {\n throttled(val);\n };\n }, []);\n\n const setActiveTargetInfo = useMemo(() => {\n const editStore = getEditStore();\n const throttled = throttle(\n (id: SbInstance | null, rect: ClientRect | null) => {\n editStore.ui.dnd.setDropTargetId(id);\n editStore.ui.dnd.setActiveTargetRect(rect);\n },\n 10,\n {\n leading: true,\n trailing: true,\n },\n );\n return (id: SbInstance | null, val: ClientRect | null) => {\n throttled(id, val);\n };\n }, []);\n\n useDndMonitor({\n onDragStart: useCallback((event: DragStartEvent) => {\n const editStore = getEditStore();\n const activeData = event.active?.data.current as\n | ComponentDraggableData\n | undefined;\n\n if (!activeData && !editStore.ui.dnd.isDraggingNewComponent) {\n console.error(\"No active widget data\");\n return;\n }\n\n editStore.ui.dnd.setDropTargetId(null);\n editStore.ui.dnd.setIsDragging(true);\n\n if (editStore.ui.dnd.isDraggingNewComponent) {\n editStore.ui.selectWidget(null);\n editStore.ui.dnd.resizePageIfNeeded();\n } else {\n editStore.ui.selectWidget(\n event.active?.id ? (event.active.id as SbInstance) : null,\n (event.activatorEvent as PointerEvent)?.shiftKey,\n );\n }\n }, []),\n onDragMove: useCallback(\n (event: DragMoveEvent) => {\n setActiveTargetInfo(\n (event.over?.id ?? null) as SbInstance | null,\n event.over?.rect ?? null,\n );\n const collisionRect =\n event.collisions?.[0]?.data?.injectedCollisionRect;\n\n if (collisionRect) {\n setActiveDragRect(collisionRect);\n } else {\n setActiveDragRect(null);\n }\n },\n [setActiveDragRect, setActiveTargetInfo],\n ),\n onDragOver: useCallback(\n (event: DragMoveEvent) => {\n const overId = (\n event.over?.id ? String(event.over?.id) : null\n ) as SbInstance | null;\n setActiveTargetInfo(overId, measureRect(overId));\n },\n [setActiveTargetInfo],\n ),\n onDragCancel: useCallback((_event: DragEndEvent) => {\n const editStore = getEditStore();\n editStore.ui.dnd.setIsDragging(false);\n editStore.ui.dnd.cancelNewComponentDrag();\n }, []),\n onDragEnd: useCallback(async (event: DragEndEvent) => {\n const editStore = getEditStore();\n\n let possibleNewComponentId: SbElement | undefined;\n\n try {\n const activeData = event.active?.data.current as\n | ComponentDraggableData\n | undefined;\n\n if (activeData?.instanceId) {\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n activeData.instanceId,\n );\n const shouldPreventMove = !!widgetMeta?.props?.[WIDGET_DISABLE_DND];\n\n if (shouldPreventMove) {\n editorBridge.sendNotification(\n \"error\",\n \"This component can't be moved because it's defined in code. Ask Clark to move it.\",\n );\n return;\n }\n }\n\n if (!editStore.ui.dnd.isProspectiveDropValid) {\n editorBridge.sendNotification(\n \"error\",\n \"You cannot drop a component here.\",\n );\n return;\n }\n\n const dropTargetId = event.over?.id\n ? (String(event.over.id) as SbInstance)\n : null;\n const draggedId = event.active?.id\n ? (String(event.active?.id) as SbInstance)\n : null;\n\n if (dropTargetId !== editStore.ui.dnd.dropTargetId) {\n // This should never happen\n throw new Error(\"Drop target id and drag over id do not match\");\n }\n\n if (!dropTargetId) {\n throw new Error(\"No drop target id\");\n }\n\n if (editStore.ui.dnd.isDropTargetStackLike) {\n const dropInfo =\n editStore.ui.dnd.stack.refreshPositionsAndGetDropIndex();\n possibleNewComponentId = await handleStackDrop({\n dropInfo,\n isDraggingNewComponent: editStore.ui.dnd.isDraggingNewComponent,\n newComponentType: editStore.ui.dnd.dragToCanvasComponentType,\n dropTargetId,\n draggedId,\n });\n } else {\n throw new Error(\"Grid is no longer supported\");\n }\n } catch (e) {\n console.error(\"Error dropping item\", e);\n } finally {\n runInAction(() => {\n // this must be called in an action, otherwise the drag may occur again\n // see https://linear.app/superblocks/issue/FE-700/cant-drag-to-create-two-new-components-in-a-row\n // and https://mobx.js.org/actions.html#runinaction\n editStore.ui.dnd.setIsDragging(false);\n editStore.ui.dnd.cancelNewComponentDrag();\n\n if (possibleNewComponentId) {\n editStore.ui.selectNewComponentBySourceId(\n possibleNewComponentId as SbElement,\n );\n }\n });\n }\n }, []),\n });\n};\n","import {\n DndContext,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\n\nimport React from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport collisionDetection from \"./collision-detection.js\";\nimport { useHandleDnDEvents } from \"./hooks/use-handle-dnd-events.js\";\nimport type { PointerSensorOptions, PointerSensorProps } from \"@dnd-kit/core\";\n\nconst pointerConfig: PointerSensorOptions = {\n activationConstraint: {\n distance: 10, // this is needed otherwise the base elements are not clickable\n },\n};\n\n//@ts-expect-error PointerSensor requires different activators\nclass CustomPointerSensor extends PointerSensor {\n constructor(props: PointerSensorProps) {\n super(props);\n }\n\n static activators = [\n {\n eventName: \"onPointerMove\" as const,\n handler: () => {\n return getEditStore().ui.dnd.isDraggingNewComponent;\n },\n },\n ];\n}\n\n// needs to be rendered inside the DndContext\nconst DragHandlerComponent = () => {\n useHandleDnDEvents();\n return null;\n};\n\nexport const DnDProvider = (props: { children: React.ReactNode }) => {\n const pointerSensor = useSensor(PointerSensor, pointerConfig);\n const customPointerSensor = useSensor(CustomPointerSensor);\n\n const sensors = useSensors(pointerSensor, customPointerSensor);\n\n return (\n <DndContext sensors={sensors} collisionDetection={collisionDetection}>\n {props.children}\n <DragHandlerComponent />\n </DndContext>\n );\n};\n","import { useDraggable } from \"@dnd-kit/core\";\nimport { observer } from \"mobx-react-lite\";\nimport { getEditStore } from \"../get-edit-store.js\";\n\n/**\n * A layer above the editor canvas that triggers the draggable preview for new components.\n */\nexport const NewComponentsDragLayer = observer(() => {\n const { setNodeRef, attributes, listeners } = useDraggable({\n id: \"new-component-to-be-dropped\", // the actual component id gets generated once dropped. See useHandleDnDEvents\n });\n\n if (!getEditStore().ui.dnd.isDraggingNewComponent) {\n // Otherwise, we prevent components within the canvas to be dragged & dropped\n return null;\n }\n\n return (\n <div\n className=\"sb-new-component-dragging-layer\"\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n />\n );\n});\n","import { AiContextMode } from \"@superblocksteam/library-shared/types\";\nimport { makeAutoObservable } from \"mobx\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type RuntimeEntitiesManager from \"./runtime-entities-manager\";\nimport type {\n RuntimeErrorData,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nexport class AiManager {\n private _isTaggingEnabled = false;\n private _isEditing = false;\n private _editingComponents: SbElement[] = [];\n private _contextMode: AiContextMode = AiContextMode.SILENT;\n private _targetedComponents: SbElement[] = [];\n private _targetedInstances: SbInstance[] = [];\n\n constructor(private readonly runtimeEntitiesManager: RuntimeEntitiesManager) {\n makeAutoObservable(this);\n }\n\n getIsTaggingEnabled() {\n return this._isTaggingEnabled;\n }\n\n getIsEditing() {\n return this._isEditing;\n }\n\n setIsTaggingEnabled(isTaggingEnabled: boolean) {\n this._isTaggingEnabled = isTaggingEnabled;\n }\n\n getAiContextMode() {\n return this._contextMode;\n }\n\n shouldToggleComponentInAiContext() {\n return (\n this._isTaggingEnabled && this._contextMode === AiContextMode.AUTO_SELECT\n );\n }\n\n getTargetedComponents() {\n if (this._isTaggingEnabled && this._contextMode !== AiContextMode.SILENT) {\n return this._targetedComponents;\n }\n return [];\n }\n\n isEditingComponent(id: SbElement) {\n return (\n this._isEditing &&\n this._editingComponents.some((component) => component === id)\n );\n }\n\n isTargetingComponent(id: SbElement) {\n return this._targetedComponents.includes(id);\n }\n\n startEditing() {\n this._isEditing = true;\n }\n\n setEditingComponents(components: SbElement[]) {\n this._editingComponents = components;\n }\n\n finishEditing() {\n this._isEditing = false;\n this._editingComponents = [];\n }\n\n setAiContextMode(mode: AiContextMode, components?: SbElement[]) {\n this._contextMode = mode;\n this._targetedComponents = components ?? [];\n\n if (this._targetedComponents.length > 0) {\n const instanceIds = this._targetedComponents.map((component) =>\n this.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n component,\n ),\n );\n this._targetedInstances = instanceIds;\n }\n }\n\n addTargetedInstance(instanceId: SbInstance) {\n // when you add an instance, we remove all other instances for the same source as targets,\n // since visually for the user we only want to show one target\n this.removeAllSharedInstances(instanceId);\n this._targetedInstances.push(instanceId);\n }\n\n toggleTargetedInstance(instanceId: SbInstance) {\n if (this._targetedInstances.includes(instanceId)) {\n this.removeAllSharedInstances(instanceId);\n } else {\n this.removeAllSharedInstances(instanceId);\n this._targetedInstances.push(instanceId);\n }\n }\n\n isTargetedInstance(instanceId: SbInstance) {\n return this._targetedInstances.includes(instanceId);\n }\n\n /**\n * Returns true if we are targeting a different instance of the same source id, since in some cases we want to keep\n * the same source targeted, but just highlight another instance of it\n */\n isAlternateSourceIdTarget(sourceId: SbElement, instanceId: SbInstance) {\n if (!this.isTargetingComponent(sourceId)) {\n return false;\n }\n\n const allInstanceIds =\n this.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n if (this.isTargetedInstance(instanceId)) {\n return false;\n }\n return allInstanceIds.includes(instanceId);\n }\n\n handleRuntimeError(data: RuntimeErrorData) {\n editorBridge.sendRuntimeError(data);\n }\n\n clearRuntimeError(id: string) {\n editorBridge.sendClearRuntimeError(id);\n }\n\n private removeAllSharedInstances(instanceId: SbInstance) {\n const sourceId =\n this.runtimeEntitiesManager.widgets.getSourceIdForInstanceId(instanceId);\n if (sourceId) {\n this.removeAllInstancesForSource(sourceId);\n }\n }\n\n private removeAllInstancesForSource(sourceId: SbElement) {\n const allInstanceIds =\n this.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n this._targetedInstances = this._targetedInstances.filter(\n (instanceId) => !allInstanceIds.includes(instanceId),\n );\n }\n}\n","import { makeAutoObservable } from \"mobx\";\n\nexport type ConnectionStatus =\n | \"pre-init\"\n | \"disconnected\"\n | \"connecting\"\n | \"connected\";\n\nclass ConnectionManager {\n connectionStatus: ConnectionStatus = \"pre-init\"; // The status of the connection to the remote dev server\n\n constructor() {\n makeAutoObservable(this);\n }\n\n initializeSocket() {\n this.connectionStatus = \"connecting\";\n }\n\n connect() {\n this.connectionStatus = \"connected\";\n }\n\n disconnect() {\n this.connectionStatus = \"disconnected\";\n }\n}\n\nexport default ConnectionManager;\n","import { action, makeAutoObservable } from \"mobx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nclass InteractionLayerManager {\n /**\n * The id of the root element that is currently being interacted with\n * the root can be Page, Modal, Slideout, Dialog, Sheet, etc\n * If set to undefined, the interaction layer will be the Page\n * if set to the detached component id, the interaction layer will be disabled on the page\n */\n activeRootInstanceId: SbInstance | undefined = undefined;\n\n interactionLayerInstanceIds: Set<SbInstance> = new Set();\n\n constructor() {\n makeAutoObservable(this);\n }\n\n @action\n addInteractionLayerInstanceId(instanceId: SbInstance) {\n this.interactionLayerInstanceIds.add(instanceId);\n }\n\n @action\n removeInteractionLayerInstanceId(instanceId: SbInstance) {\n this.interactionLayerInstanceIds.delete(instanceId);\n }\n\n @action\n setActiveRootInstanceId(rootInstanceId: SbInstance | undefined) {\n this.activeRootInstanceId = rootInstanceId;\n }\n}\n\nexport default InteractionLayerManager;\n","// https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n// this is for superblocksSlice, import immer\n\nimport {\n generateSourceId,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport { action, makeAutoObservable } from \"mobx\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { generateId } from \"../../lib/utils/generate-id.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport SourceUpdateApi from \"../source-update-api.js\";\n\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type {\n BatchUpdateRequest,\n CreateRequest,\n DeleteRequest,\n EditOperationPayload,\n EditOperations,\n EditOperationType,\n PropertyInfo,\n RenameElementRequest,\n ReparentRequest,\n SbElement,\n SbInstance,\n SetPropertiesRequest,\n SetPropertyRequest,\n SourceLocation,\n} from \"@superblocksteam/library-shared/types\";\n\ntype OptimisticOperation<P> = {\n type: keyof EditOperations;\n payload: P;\n id: string;\n callback?: () => void; // called when the operation is cleared by a hot reload\n};\n\nexport type ReparentTransaction = OptimisticOperation<ReparentRequest>;\ntype SetPropertiesTransaction = OptimisticOperation<SetPropertiesRequest>;\ntype SetPropertyTransaction = OptimisticOperation<SetPropertyRequest>;\ntype CreateComponentTransaction = OptimisticOperation<CreateRequest>;\ntype DeleteComponentsTransaction = OptimisticOperation<DeleteRequest>;\n\ntype PendingTransaction =\n | ReparentTransaction\n | SetPropertiesTransaction\n | SetPropertyTransaction\n | CreateComponentTransaction\n | DeleteComponentsTransaction;\n\nclass OperationManager {\n private pendingTransactions: Array<PendingTransaction> = [];\n\n private waitingForBatch: boolean = false;\n private batchOperations: Array<PendingTransaction> = [];\n private batchOperationTransactionId: string | undefined;\n\n visibleSourceIds: string[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n get allPendingTransactions() {\n return this.pendingTransactions;\n }\n\n get pendingReparentOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:moveComponent\",\n ) as ReparentTransaction[];\n }\n\n get pendingDeleteOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:deleteComponents\",\n ) as DeleteComponentsTransaction[];\n }\n\n get pendingSetPropertiesOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:setProperties\",\n ) as SetPropertiesTransaction[];\n }\n\n get hasPendingOperations() {\n return this.pendingTransactions.length > 0;\n }\n\n get allNames() {\n return [];\n }\n\n @action\n private executeOrAddToBatch(\n operation: Omit<OptimisticOperation<PendingTransaction[\"payload\"]>, \"id\">,\n addTransaction: boolean = true,\n ) {\n const transactionId = this.batchOperationTransactionId ?? generateId();\n\n const payload = this.waitingForBatch\n ? operation.payload\n : {\n ...operation.payload,\n transaction: {\n id: transactionId,\n origin: \"LIBRARY\",\n },\n };\n\n const opWithId = {\n ...operation,\n id: transactionId,\n payload,\n } as PendingTransaction;\n\n if (addTransaction) {\n this.addPendingTransaction(opWithId);\n }\n\n if (this.waitingForBatch) {\n this.batchOperations.push(opWithId);\n } else {\n switch (operation.type) {\n case \"editor:moveComponent\":\n return editorBridge.editOpRequest(\n \"editor:moveComponent\",\n payload as ReparentRequest,\n );\n case \"editor:setProperties\":\n return editorBridge.editOpRequest(\n \"editor:setProperties\",\n payload as SetPropertiesRequest,\n );\n case \"editor:createComponent\":\n return editorBridge.editOpRequest(\n \"editor:createComponent\",\n payload as CreateRequest,\n );\n case \"editor:deleteComponents\":\n return editorBridge.editOpRequest(\n \"editor:deleteComponents\",\n payload as DeleteRequest,\n );\n }\n }\n }\n\n @action\n private addPendingTransaction(transaction: PendingTransaction) {\n if (transaction.type === \"editor:createComponent\") {\n getEditStore().runtimeEntitiesManager.addOptimisticCreateWidget(\n transaction.payload as CreateRequest,\n );\n }\n this.pendingTransactions.push(transaction);\n }\n\n @action\n clearPendingTransactions(transactionIds: string[]) {\n const toClear = new Set(transactionIds);\n const { cleared, remaining } = this.pendingTransactions.reduce(\n (acc, transaction) => {\n if (toClear.has(transaction.id)) {\n acc.cleared.push(transaction);\n } else {\n acc.remaining.push(transaction);\n }\n return acc;\n },\n {\n cleared: [] as PendingTransaction[],\n remaining: [] as PendingTransaction[],\n },\n );\n\n this.pendingTransactions = remaining;\n\n // Execute callbacks for cleared transactions\n cleared.forEach((transaction) => {\n if (transaction.callback) {\n transaction.callback();\n }\n });\n }\n\n @action\n batchUpdate(performOperations: () => void) {\n this.waitingForBatch = true;\n this.batchOperationTransactionId = generateId();\n performOperations();\n\n editorBridge.editOpRequest(\"editor:batchUpdate\", {\n updates: this.batchOperations.map(\n (op) =>\n ({\n type: op.type,\n payload: op.payload,\n }) as BatchUpdateRequest[\"updates\"][number],\n ),\n transaction: {\n origin: \"LIBRARY\",\n id: this.batchOperationTransactionId,\n },\n });\n\n this.waitingForBatch = false;\n this.batchOperations = [];\n this.batchOperationTransactionId = undefined;\n }\n\n @action\n createComponent(payload: CreateRequest) {\n this.executeOrAddToBatch({\n type: \"editor:createComponent\",\n payload,\n });\n }\n\n @action\n dropComponent(action: {\n from: { source: SourceLocation };\n to: { source: SourceLocation };\n propsToChange?: Record<string, PropertyInfo>;\n }) {\n const { from, to, propsToChange } = action;\n\n const payload: ReparentRequest = {\n from,\n to,\n changedProps: propsToChange ?? {},\n };\n this.executeOrAddToBatch({\n type: \"editor:moveComponent\",\n payload,\n });\n }\n\n @action\n deleteComponents(sourceIds: SbElement[]) {\n const payload: DeleteRequest = {\n elements: sourceIds.map((sourceId) => ({\n source: { id: sourceId },\n })),\n };\n\n this.executeOrAddToBatch(\n {\n type: \"editor:deleteComponents\",\n payload,\n },\n this.canDeleteComponents(sourceIds),\n );\n }\n\n acknowledgeEditOperation(operation: EditOperationPayload<EditOperationType>) {\n if (\n !(\"transaction\" in operation.payload) ||\n !operation.payload.transaction?.id\n ) {\n console.error(\"No transaction id in edit operation\", operation);\n return;\n }\n\n const addOperation = (\n operation: EditOperationPayload<EditOperationType>,\n batchTransactionId?: string,\n ) => {\n switch (operation.type) {\n case \"editor:createComponent\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:createComponent\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:deleteComponents\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:deleteComponents\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:moveComponent\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:moveComponent\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:setProperties\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:setProperties\">;\n this.addPendingTransaction({\n type,\n id: payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:deleteProperties\": {\n const { payload } =\n operation as EditOperationPayload<\"editor:deleteProperties\">;\n // we can write the deleteProperties as a setProperties\n const asSetProperties: SetPropertiesRequest = {\n element: {\n source: {\n id: payload.element.source.id,\n },\n },\n properties: Object.fromEntries(\n payload.properties.map((p) => [\n p,\n {\n type: \"STATIC\",\n value: undefined,\n __info: true,\n },\n ]),\n ),\n };\n this.addPendingTransaction({\n type: \"editor:setProperties\",\n id: batchTransactionId ?? payload.transaction!.id,\n payload: asSetProperties,\n });\n break;\n }\n default:\n console.error(\"Unknown edit operation\", operation);\n }\n };\n\n if (operation.type === \"editor:batchUpdate\") {\n const { payload } =\n operation as EditOperationPayload<\"editor:batchUpdate\">;\n if (!payload.transaction?.id) {\n console.error(\"No transaction id in batch\", operation);\n return;\n }\n for (const update of payload.updates) {\n addOperation(update, payload.transaction.id);\n }\n } else {\n addOperation(operation);\n }\n }\n\n @action\n writeRuntimeProperties(\n sourceId: SbElement,\n transactionId: string,\n updates: Record<string, PropertyInfo<unknown>>,\n ) {\n // this can't be part of batch because it came from the editor\n this.addPendingTransaction({\n type: \"editor:setProperties\",\n id: transactionId,\n payload: { element: { source: { id: sourceId } }, properties: updates },\n });\n }\n\n @action\n setWidgetProperties({\n sourceId,\n properties,\n callback,\n applySideEffects = false,\n }: {\n sourceId: SbElement;\n properties: Record<string, PropertyInfo<unknown>>;\n callback?: () => void;\n applySideEffects?: boolean;\n }) {\n let changes = properties;\n if (applySideEffects) {\n const withSideEffects =\n getEditStore().propertiesPanelManager.computeAndApplySideEffectsForPropertyUpdate(\n {\n sourceId,\n updates: properties,\n },\n );\n changes = withSideEffects[sourceId];\n }\n\n const payload: SetPropertiesRequest = {\n element: {\n source: {\n id: sourceId,\n },\n },\n properties: changes,\n };\n\n this.executeOrAddToBatch({\n type: \"editor:setProperties\",\n payload,\n callback,\n });\n }\n\n @action\n setWidgetProperty({\n sourceId,\n property,\n value,\n callback,\n }: {\n sourceId: SbElement;\n property: string;\n value: PropertyInfo<unknown>;\n callback?: () => void;\n }) {\n this.setWidgetProperties({\n sourceId,\n properties: { [property]: value },\n callback,\n });\n }\n\n // optimistic update not supported on this\n @action\n renameWidget(params: {\n sourceId: SbElement;\n newName: string;\n renameInAst?: boolean;\n }) {\n const widgetMeta =\n getEditStore().runtimeEntitiesManager.getAnyEditorWidgetMeta(\n params.sourceId,\n );\n const oldName = widgetMeta?.name?.value ?? \"\";\n const kind = widgetMeta?.type === \"Page\" ? \"page\" : \"component\";\n const scopeName = widgetMeta?.scopeId\n ? rootStore.entityManager.getScopeName(widgetMeta.scopeId)\n : undefined;\n if (!scopeName) {\n console.error(\"No scope name found for widget\", params.sourceId);\n return;\n }\n const renameRequest: RenameElementRequest = {\n elementId: params.sourceId,\n newName: params.newName,\n oldName,\n kind,\n scopeName,\n renameInAst: params.renameInAst ?? true,\n };\n editorBridge.editOpRequest(\"editor:renameElement\", renameRequest);\n }\n\n async ensureFilesSynced() {\n await SourceUpdateApi.ensureFilesSynced();\n }\n\n generateSourceId() {\n return generateSourceId();\n }\n\n private canDeleteComponents(sourceIds: SbElement[]) {\n const editStore = getEditStore();\n const widgets = sourceIds.map((id) =>\n editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(id),\n );\n\n const containerTypes = rootStore.componentRegistry.containerTypes;\n // you can always delete a widget that is not a container or page\n if (!widgets.some((widget) => containerTypes.has(widget?.type ?? \"\"))) {\n return true;\n }\n\n if (\n widgets.some((widget) => widget?.type === NATIVE_COMPONENT_TYPES.Page)\n ) {\n return false;\n }\n // as long as you're not deleting the last container in the page\n const containersToDelete = widgets.filter((widget) =>\n containerTypes.has(widget?.type ?? \"\"),\n );\n const containerInstanceIds = new Set(\n containersToDelete\n .filter((container) => container?.instanceId)\n .map((container) => container?.instanceId) as SbInstance[],\n );\n const parentsToCheck = new Set<SbInstance>(\n containersToDelete.reduce((acc, container) => {\n const parentInstanceId = container?.parentInstanceId;\n const parentType =\n parentInstanceId &&\n editStore.runtimeEntitiesManager.getEditorWidgetType(\n parentInstanceId,\n );\n if (!parentType) {\n return acc;\n }\n const parentEditorConfig =\n rootStore.componentRegistry.getEditorConfig(parentType);\n if (parentType === NATIVE_COMPONENT_TYPES.Page) {\n acc.push(parentInstanceId);\n } else if (parentEditorConfig?.isDetached) {\n // modals and slideouts\n acc.push(parentInstanceId);\n }\n return acc;\n }, [] as SbInstance[]),\n );\n const checkIfDeletingAllContainersInParent = (\n parentInstanceId: SbInstance,\n ) => {\n const allParentChildren =\n editStore.runtimeEntitiesManager.getEditorWidgetChildren(\n parentInstanceId,\n );\n return allParentChildren.every(\n (child) => child.isSbComponent && containerInstanceIds.has(child.value),\n );\n };\n\n const isDeletingAllContainersInAnyParent = Array.from(parentsToCheck).some(\n checkIfDeletingAllContainersInParent,\n );\n if (isDeletingAllContainersInAnyParent) {\n return false;\n }\n\n return true;\n }\n}\n\nexport default OperationManager;\n","import {\n SbEntityType,\n ViteMessageKind,\n type PropertyInfo,\n type SbElement,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport { autorun, makeAutoObservable } from \"mobx\";\nimport { createPropertiesPanelDefinition } from \"../../lib/user-facing/properties-panel/properties-panel-definition.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type RuntimeEntitiesManager from \"./runtime-entities-manager.js\";\nimport type { IEntityManager } from \"../../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { ComponentRegistry } from \"../../lib/internal-details/lib/features/component-registry.js\";\nimport type {\n Prop,\n PropertiesDefinition,\n} from \"../../lib/user-facing/properties-panel/props-builder.js\";\nimport type { PropertiesPanelDefinition } from \"@superblocksteam/library-shared/props\";\nimport type { IReactionDisposer } from \"mobx\";\n\nclass PropertiesPanelManager {\n private propertiesDefinitions = new Map<string, PropertiesDefinition>();\n private propertiesPanelTrackerDisposer: IReactionDisposer | null = null;\n\n private nonDynamicPropertyPanels: Map<string, PropertiesPanelDefinition> =\n new Map<string, PropertiesPanelDefinition>();\n\n private _propertyLookupCache = new Map<\n string,\n Record<string, Prop<any, any>>\n >();\n\n private removeHotReloadListener: (() => void) | null = null;\n\n constructor(\n readonly editStore: EditStore,\n readonly runtimeEntitiesManager: RuntimeEntitiesManager,\n readonly entityManager: IEntityManager,\n readonly componentsManager: ComponentRegistry,\n ) {\n makeAutoObservable<PropertiesPanelManager, \"_propertyLookupCache\">(this, {\n _propertyLookupCache: false,\n });\n\n this.attachHotReloadListener();\n }\n\n getPropertiesPanel(\n scopeId: string,\n instanceId: SbInstance,\n ): PropertiesPanelDefinition {\n const props = this.entityManager.getEntityById(scopeId, instanceId);\n\n if (!props?.type) {\n return { sections: [] };\n }\n\n const propertiesDefinition = this.propertiesDefinitions.get(props.type);\n if (!propertiesDefinition) {\n return { sections: [] };\n }\n\n const state = this.entityManager.getState(scopeId);\n return createPropertiesPanelDefinition(propertiesDefinition, props, state);\n }\n\n trackPropertiesPanel(\n scopeId: string,\n instanceId: SbInstance,\n sourceId: string,\n ) {\n if (this.propertiesPanelTrackerDisposer) {\n this.propertiesPanelTrackerDisposer();\n }\n this.propertiesPanelTrackerDisposer = autorun(\n () => {\n const propertiesPanel = this.getPropertiesPanel(scopeId, instanceId);\n editorBridge.addPropertiesPanel(sourceId, propertiesPanel);\n },\n {\n name: `trackPropertiesPanel[${scopeId}-${instanceId}]`,\n },\n );\n }\n\n untrackPropertiesPanel() {\n this.propertiesPanelTrackerDisposer?.();\n this.propertiesPanelTrackerDisposer = null;\n }\n\n getPropertiesDefinition(type: string): PropertiesDefinition | undefined {\n return this.propertiesDefinitions.get(type);\n }\n\n setPropertiesDefinition(\n widgetType: string,\n propertiesDefinition: PropertiesDefinition,\n ) {\n this.propertiesDefinitions.set(widgetType, propertiesDefinition);\n\n /**\n * TODO: support dynamic properties for timer and variables (then Events)\n * This is a temporary solution to unblock showing timer and variable in the properties panel.\n * To make these dynamic as any other component property panel props, we would need to have a way of\n * referencing them from the Editor.\n *\n * To do so, we would need a scopeId (we don't have), and the sourceId (we do have).\n * Then we could follow a similar path as selectWidgets in operations/actions.ts\n */\n if (\n widgetType === SbEntityType.TIMER ||\n widgetType === SbEntityType.VARIABLE ||\n widgetType === SbEntityType.API\n ) {\n this.nonDynamicPropertyPanels.set(\n widgetType,\n createPropertiesPanelDefinition(propertiesDefinition),\n );\n }\n }\n\n updatePropertiesDefinitionForType(type: string) {\n const latestComponent = this.componentsManager.getComponent(type);\n if (!latestComponent) {\n return;\n }\n const latestPropertiesDefinition = latestComponent.propertiesDefinition;\n if (!latestPropertiesDefinition) {\n return;\n }\n this.propertiesDefinitions.set(type, latestPropertiesDefinition);\n }\n\n getNonDynamicPropertiesPanels() {\n return Object.fromEntries(this.nonDynamicPropertyPanels.entries());\n }\n\n // TODO (alex): needs to handle returning updates for multiple widgets at a time\n computeSideEffectsForPropertyUpdate(payload: {\n sourceId: SbElement;\n updates: Record<string, PropertyInfo<unknown>>;\n }) {\n const { sourceId, updates } = payload;\n const allUpdates: Record<\n SbElement,\n {\n props?: Record<string, PropertyInfo<unknown>>;\n meta?: Record<string, unknown>;\n }\n > = {\n [sourceId]: {\n props: updates,\n meta: {},\n },\n };\n\n // TODO (alex): Should we adjust the side effects to take in all instances?\n const anyInstanceId =\n this.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(sourceId);\n const widget =\n this.runtimeEntitiesManager.getEditorWidgetMeta(anyInstanceId);\n const scopeId = widget?.scopeId;\n if (!widget?.type || !scopeId) {\n return allUpdates; // Do nothing, but maybe this is an error?\n }\n\n for (const path of Object.keys(updates)) {\n const prop = this.getPropertyForPath(widget.type, path);\n if (!prop) {\n continue;\n }\n if (prop.onEditProperty) {\n const state = this.entityManager.getState(scopeId);\n const widgetState = widget.name ? state[widget.name.value] : undefined;\n const sideEffects = prop.onEditProperty({\n sourceId,\n updates,\n widgetMeta: widget,\n widgetState,\n propertiesDefinition: this.getPropertiesDefinition(widget.type) ?? {},\n });\n (Object.keys(sideEffects) as SbElement[]).forEach((changeSourceId) => {\n const propChanges = sideEffects[changeSourceId]?.props;\n const metaChanges = sideEffects[changeSourceId]?.meta;\n\n if (propChanges) {\n allUpdates[changeSourceId] ??= {};\n allUpdates[changeSourceId].props = {\n ...allUpdates[changeSourceId].props,\n ...propChanges,\n };\n }\n if (metaChanges) {\n allUpdates[changeSourceId] ??= {};\n allUpdates[changeSourceId].meta = {\n ...allUpdates[changeSourceId].meta,\n ...metaChanges,\n };\n }\n });\n }\n }\n return allUpdates;\n }\n\n computeAndApplySideEffectsForPropertyUpdate(payload: {\n sourceId: SbElement;\n updates: Record<string, PropertyInfo<unknown>>;\n }) {\n const allChanges = this.computeSideEffectsForPropertyUpdate(payload);\n const scopeId = this.runtimeEntitiesManager.getScopeIdForSourceId(\n payload.sourceId,\n );\n if (!scopeId) {\n throw new Error(\"No scope id found for widget\");\n }\n const propUpdates: Record<\n SbElement,\n Record<string, PropertyInfo<unknown>>\n > = {};\n const metaUpdates: Record<SbElement, Record<string, unknown>> = {};\n Object.entries(allChanges).forEach(([sourceId, changes]) => {\n const { props, meta } = changes;\n if (props) {\n propUpdates[sourceId as SbElement] = props;\n }\n if (meta) {\n metaUpdates[sourceId as SbElement] = meta;\n }\n });\n // TODO: This will need to apply side effects to all instances of the given source id\n this.runtimeEntitiesManager.applySideEffects(metaUpdates, scopeId);\n\n return propUpdates;\n }\n\n // TODO (alex): handle nested paths\n private cachedPropertyLookupForType(widgetType: string) {\n if (this._propertyLookupCache.has(widgetType)) {\n return this._propertyLookupCache.get(widgetType);\n }\n const propsDefinition = this.getPropertiesDefinition(widgetType);\n if (!propsDefinition) {\n return null;\n }\n\n const lookup: Record<string, Prop<any, any>> = {};\n\n for (const [_category, categoryDef] of Object.entries(propsDefinition)) {\n for (const propDef of Object.values<Prop<any, any>>(categoryDef.props)) {\n const propPath = propDef.path;\n if (!(propPath in lookup)) {\n lookup[propPath] = propDef;\n }\n }\n }\n this._propertyLookupCache.set(widgetType, lookup);\n return lookup;\n }\n\n getPropertyForPath(widgetType: string, path: string) {\n const lookup = this.cachedPropertyLookupForType(widgetType);\n if (!lookup) {\n return null;\n }\n return lookup[path];\n }\n\n /**\n * When a custom component's source code is updated, we want to update the properties definition for that component.\n * In order to do that, we need to listen to vite's hot reload events. We can't put import.meta.hot calls in the library\n * because Vite just compiled all of those out in library builds, so we inject a listener from the plugin instead.\n * https://github.com/vitejs/vite/blob/v6.2/packages/vite/src/node/plugins/define.ts#L37\n */\n private attachHotReloadListener() {\n this.removeHotReloadListener?.();\n\n this.removeHotReloadListener = this.editStore.onViteMessage(\n ViteMessageKind.UPDATE_CUSTOM_COMPONENT,\n (message) => {\n this.updatePropertiesDefinitionForType(message.component);\n },\n );\n }\n}\n\nexport default PropertiesPanelManager;\n","import { computed } from \"mobx\";\nimport type { IComputedValue } from \"mobx\";\n\n// Creates a lazy getter for each id passed to the function\n// If there are memory leaks, consider using either\n// - mobx computedFn https://github.com/mobxjs/mobx-utils?tab=readme-ov-file#computedfn\n// - or wrap the computed in a weakref\n\nexport const makeMobxCachedGetter = <T, K extends string>(\n getter: (id: K) => T,\n): ((id: K) => T) => {\n const cachedGetters: Record<K, IComputedValue<T>> = {} as any;\n\n const getterFunc = (id: K) => {\n let fn = cachedGetters[id];\n if (!fn) {\n fn = computed(() => getter(id));\n cachedGetters[id] = fn;\n }\n return fn.get();\n };\n\n return getterFunc;\n};\n","import {\n getRuntimeComputedExpression,\n isPropertyInfo,\n SB,\n withBindingIdentifier,\n} from \"@superblocksteam/library-shared\";\nimport {\n type SetStateVarStep,\n type ControlTimerStep,\n type ValidStepDef,\n type StepDef,\n isValidStepDef,\n type ValueInputProp,\n} from \"@superblocksteam/library-shared/types\";\nimport { LazyFunction } from \"../lib/internal-details/lib/evaluator/lazy-function.js\";\nimport {\n getName,\n type Name,\n} from \"../lib/internal-details/lib/evaluator/names.js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { EventFlow } from \"../lib/user-facing/event-flow.js\";\n\n/**\n * Gets the actual value from a PropertyInfo object.\n * This will parse the value based on the type of property.\n * @param property - The property to get the value from.\n * @returns The parsed value of the property.\n */\nexport function getPropertyValue({\n entityKey,\n property,\n name,\n scopeId,\n}: {\n property: unknown;\n entityKey?: string;\n name?: Name;\n scopeId?: string;\n}): unknown {\n if (!isPropertyInfo(property)) {\n return property;\n }\n\n if (property.type === \"BINDING\") {\n return SB([property.value] as unknown as TemplateStringsArray);\n }\n\n if (property.type === \"STATIC\" && Array.isArray(property.value)) {\n return property.value.map((value) =>\n getPropertyValue({ entityKey, property: value, name, scopeId }),\n );\n }\n\n if (\n property.type === \"TEMPLATE\" &&\n typeof property.value === \"string\" &&\n scopeId &&\n name\n ) {\n try {\n return LazyFunction(`return \\`${property.value}\\``);\n } catch (e) {\n console.error(\"Error making template string\", e);\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n return entityKey && entity\n ? (entity[entityKey] ?? property.value)\n : property.value;\n }\n }\n\n if (\n property.type === \"COMPUTED\" &&\n typeof property.value === \"string\" &&\n scopeId &&\n name\n ) {\n try {\n return LazyFunction(\n getRuntimeComputedExpression(property.value),\n property.args,\n );\n } catch (e) {\n console.error(\"Error generating computed value\", e);\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n return entityKey && entity\n ? (entity[entityKey] ?? property.value)\n : property.value;\n }\n }\n\n if (property.type === \"EXPRESSION\" && typeof property.value === \"string\") {\n let parsed = property.value;\n try {\n parsed = JSON.parse(property.value);\n } catch (_e) {\n // do nothing\n }\n return parsed;\n }\n\n if (property.type === \"EVENT\" && scopeId && name) {\n const eventFlows = (property.value as any)\n .map((step: ValidStepDef) => {\n // we just have to be careful so we don't have a runtime error if the editor\n // sends down something we don't expect\n try {\n return getEventFlow(step, scopeId, name);\n } catch {\n return undefined;\n }\n })\n .filter(\n (eventFlow: EventFlow | undefined) => eventFlow !== undefined,\n ) as EventFlow[];\n return EventFlow.sequence(eventFlows);\n }\n\n if (\n property.type === \"STATIC\" &&\n typeof property.value === \"object\" &&\n property.value !== null\n ) {\n return Object.entries(property.value).reduce(\n (acc, [key, value]) => {\n if (isPropertyInfo(value)) {\n acc[key] = getPropertyValue({\n property: value,\n name,\n scopeId,\n });\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n return property.value;\n}\n\nfunction getEventFlow(\n step: StepDef,\n scopeId: string,\n name: Name,\n): EventFlow | undefined {\n if (!isValidStepDef(step)) {\n return undefined;\n }\n\n function getEventPropertyVaue<T>(property: unknown): ValueInputProp<T> {\n if (isPropertyInfo(property)) {\n return getPropertyValue({\n property,\n scopeId,\n name,\n }) as ValueInputProp<T>;\n }\n return property as ValueInputProp<T>;\n }\n\n const getEntity = (entityName: string) => {\n try {\n const entity = rootStore.entityManager.getEntity(\n scopeId,\n getName(entityName),\n );\n if (entity)\n return withBindingIdentifier(entity, {\n entityName,\n scopeId,\n });\n } catch {\n return undefined;\n }\n };\n\n const getEntities = (entityNames: string[]) => {\n return entityNames.map(getEntity).filter((entity) => entity !== undefined);\n };\n\n const createNestedEventFlow = (steps: any) => {\n return Array.isArray(steps) && steps.length > 0\n ? getEventFlow(steps as any, scopeId, name)\n : undefined;\n };\n\n switch (step.type) {\n case \"executeApi\":\n return EventFlow.runApis(step.apis.map((api) => api.name) as any, {\n onSuccess: createNestedEventFlow(step.onSuccess ?? []),\n onError: createNestedEventFlow(step.onError ?? []),\n });\n case \"cancelApi\":\n return EventFlow.cancelApis(\n getEntities(step.apis.map((api) => api.name)),\n createNestedEventFlow(step.onCancel ?? []),\n );\n case \"runJs\":\n return EventFlow.runJS(function (this: any, ...args: any[]) {\n if (step.code) {\n // this is a bit brittle, but works for the runtime case since prop writes will take\n // over once the file is saved\n try {\n const cleanCode = step.code.trim().endsWith(\";\")\n ? step.code.slice(0, -1)\n : step.code;\n new Function(`return (${cleanCode})()`).call(this, ...args);\n } catch (e) {\n console.error(\"Error executing JS code:\", e);\n }\n }\n });\n case \"navigateTo\": {\n const url = getEventPropertyVaue<string>(step.url);\n return EventFlow.navigateTo(url as ValueInputProp<string>, {\n newWindow: step.newWindow,\n replaceHistory: step.replaceHistory,\n arguments: step.arguments,\n });\n }\n case \"navigateToApp\":\n return EventFlow.navigateToApp(step.targetApp.id);\n case \"navigateToRoute\":\n return EventFlow.navigateToRoute(step.routeId);\n case \"setQueryParams\":\n return EventFlow.setQueryParams(\n step.queryParams\n ? JSON.parse(step.queryParams as unknown as string)\n : {},\n {\n keep: step.keepQueryParams,\n },\n );\n case \"controlSlideout\": {\n const slideoutEntity = getEntity(step.name!);\n if (!slideoutEntity) return undefined;\n return EventFlow.controlSlideout(slideoutEntity, {\n action: step.action,\n });\n }\n case \"controlModal\": {\n const modalEntity = getEntity(step.name!);\n if (!modalEntity) return undefined;\n return EventFlow.controlModal(modalEntity, {\n action: step.action,\n });\n }\n case \"controlTimer\": {\n // TODO: StepDef definition needs to be changed in shared package\n const timerStep = step as unknown as ControlTimerStep;\n if (!timerStep.timer?.name) {\n return undefined;\n }\n const timerEntity = getEntity(timerStep.timer.name);\n if (!timerEntity) return undefined;\n return EventFlow.controlTimer(timerEntity, {\n action: step.action ?? \"start\",\n });\n }\n case \"setStateVar\": {\n // TODO: StepDef definition needs to be changed in shared package\n const variableStep = step as unknown as SetStateVarStep;\n const stateEntity = getEntity(variableStep.variable?.name);\n if (!stateEntity) return undefined;\n const value = getEventPropertyVaue<unknown>(variableStep.value);\n return EventFlow.setStateVar(stateEntity, { value: value as any });\n }\n case \"resetStateVar\": {\n // TODO: StepDef definition needs to be changed in shared package\n const variableStep = step as unknown as SetStateVarStep;\n const resetStateEntity = getEntity(variableStep.variable?.name);\n if (!resetStateEntity) return undefined;\n return EventFlow.resetStateVar(resetStateEntity as any);\n }\n case \"resetComponent\": {\n const component = getEntity(step.widget?.name ?? \"\");\n if (!component) return undefined;\n // TODO: support resetChildren\n return EventFlow.resetComponent(\n component,\n step.propertyName\n ? {\n property: step.propertyName,\n }\n : undefined,\n );\n }\n case \"setComponentProperty\": {\n const component = getEntity(step.widget?.name ?? \"\");\n if (!component) return undefined;\n const value = getEventPropertyVaue<any>(step.propertyValue);\n return EventFlow.setComponentProperty(component, {\n property: step.propertyName,\n value,\n });\n }\n // case \"showAlert\":\n // return EventFlow.showAlert(getEventPropertyVaue<string>(step.message), {\n // type: step.style as any,\n // durationMs: step.alertDuration,\n // position: step.alertPosition,\n // });\n case \"setProfile\":\n return EventFlow.setProfile(step.profileId, {\n action: step.action,\n });\n case \"triggerEvent\":\n return EventFlow.triggerEvent(\n step.event?.name,\n step.eventPayload\n ? {\n data: step.eventPayload,\n }\n : undefined,\n );\n default:\n console.warn(\"Unhandled runtime step type\", (step as ValidStepDef).type);\n return undefined;\n }\n}\n","import { SOURCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { action, makeObservable, observable } from \"mobx\";\nimport { makeMobxCachedGetter } from \"../../lib/internal-details/lib/mobx-cached-getter.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getPropertyValue } from \"../properties.js\";\nimport type { Name } from \"../../lib/internal-details/lib/evaluator/names.js\";\nimport type { NameManager } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n CreateChild,\n CreateRequest,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport type React from \"react\";\n\nexport type ChildFunction = React.FunctionComponent;\nexport type ChildElement =\n | {\n isSupportedElement: true;\n isSbComponent: boolean;\n value: SbInstance;\n }\n | {\n isSupportedElement: true;\n isSbComponent: false;\n value?: SbInstance;\n }\n | {\n isSupportedElement: false;\n isSbComponent: false;\n value: ChildFunction;\n };\n\nexport type RuntimeWidgetMeta = {\n instanceId: SbInstance;\n sourceId: SbElement;\n isRoot: boolean;\n isInsideRoot: boolean;\n rootInstanceId?: SbInstance;\n interactionLayerInstanceId?: SbInstance; // Components that have their own interaction layer will NOT have this set to itself - it will be its parent\n isSbComponent: boolean; // Whether or not this is a registered component. Is false when we render an External child\n isOptimistic: boolean;\n scopeId?: string;\n type?: string;\n name?: Name;\n props?: Record<string, unknown>;\n children?: ChildElement[];\n parentInstanceId?: SbInstance; // The instance ID of the nearest sb-like ancestor, regardless of how the virtual tree is constructed\n directParentInstanceId?: SbInstance; // The instance ID of the immediate parent - only set if the parent directly renders us\n isUnmounted?: boolean; // TODO - not used yet\n};\n\nexport type InternalChildElement =\n | ChildElement\n | {\n isSupportedElement: true;\n isSbComponent: boolean;\n };\n\nexport type InternalRuntimeWidgetMeta = Omit<RuntimeWidgetMeta, \"children\"> & {\n children?: Array<InternalChildElement>;\n};\n\nclass RuntimeWidgetsManager {\n private widgets: Record<SbInstance, InternalRuntimeWidgetMeta> = {};\n private widgetChildIndexToInstanceIds: Record<\n SbInstance,\n Record<number, SbInstance>\n > = {};\n private sourceIdCount: Record<SbElement, number> = {};\n private sourceToInstanceIdSample: Record<SbElement, SbInstance> = {};\n\n constructor(readonly nameManager: NameManager) {\n makeObservable<\n RuntimeWidgetsManager,\n | \"widgets\"\n | \"setWidgetMeta\"\n | \"sourceToInstanceIdSample\"\n | \"widgetChildIndexToInstanceIds\"\n >(this, {\n widgets: observable.shallow,\n widgetChildIndexToInstanceIds: observable,\n\n setWidgetMeta: action,\n setWidgetChildren: action,\n setWidgetChildIndex: action,\n addWidgetFromPayload: action,\n\n sourceToInstanceIdSample: observable,\n });\n }\n\n public setWidgetMeta(\n instanceId: SbInstance,\n meta: InternalRuntimeWidgetMeta,\n ) {\n const existingMeta = this.widgets[instanceId];\n if (!existingMeta) {\n this.widgets[instanceId] = meta;\n } else {\n this.widgets[instanceId] = { ...existingMeta, ...meta }; // trigger the observers\n }\n this.sourceToInstanceIdSample[meta.sourceId] = instanceId;\n }\n\n public setWidgetChildIndex(params: {\n directParentInstanceId: SbInstance;\n index: number;\n instanceId: SbInstance;\n }) {\n const { directParentInstanceId, index, instanceId } = params;\n this.widgetChildIndexToInstanceIds[directParentInstanceId] ??= {};\n this.widgetChildIndexToInstanceIds[directParentInstanceId][index] =\n instanceId;\n }\n\n public setWidgetChildren(\n instanceId: SbInstance,\n children: InternalChildElement[],\n ) {\n this.widgets[instanceId] = {\n ...this.widgets[instanceId],\n children,\n };\n }\n\n // TODO (alex): Most usage of this method likely requires a refactor to also pass a scopeId for disambiguation\n // this is a temporary unblocker\n public getAnyInstanceIdForSourceId(sourceId: SbElement) {\n return this.sourceToInstanceIdSample[sourceId];\n }\n\n public getAllInstanceIdsForSourceId(sourceId: SbElement) {\n const hasPendingOperations =\n getEditStore().runtimeEntitiesManager.hasEditOperationsPending();\n\n return Object.values(this.widgets)\n .filter((widget) => {\n return (\n widget.sourceId === sourceId &&\n (!hasPendingOperations || !widget.isOptimistic)\n );\n })\n .map((widget) => widget.instanceId);\n }\n\n public getSourceIdForInstanceId(instanceId: SbInstance) {\n return this.widgets[instanceId]?.sourceId;\n }\n\n public addWidgetFromPayload(\n details: {\n rootInstanceId: SbInstance;\n parentInstanceId: SbInstance;\n },\n createRequest: CreateRequest,\n ) {\n const parentMeta = this.widgets[details.parentInstanceId];\n if (!parentMeta || !parentMeta.scopeId) {\n return;\n }\n const parentScopeId = parentMeta.scopeId;\n\n const traverse = (params: {\n child: CreateChild;\n parentInstanceId: SbInstance;\n }): ChildElement => {\n const { child } = params;\n const childName =\n typeof child.properties.name?.value === \"string\"\n ? child.properties.name.value\n : undefined;\n\n const childIdentifier = this.nameManager.registerAndGetIdentifiers({\n sourceId:\n child.id ?? getEditStore().operationManager.generateSourceId(),\n name: childName,\n scopeId: parentScopeId,\n rootId: details.rootInstanceId,\n type: child.tagName,\n });\n const childProps = Object.entries(child.properties).reduce(\n (acc: Record<string, any>, [key, value]) => {\n const propertyValue = getPropertyValue({\n entityKey: key,\n property: value,\n name: childIdentifier.name,\n scopeId: childIdentifier.scopeId,\n });\n acc[key] = propertyValue;\n return acc;\n },\n {\n [SOURCE_ID_ATTRIBUTE]: childIdentifier.sourceId,\n },\n );\n const children = child.children.map((child) =>\n traverse({\n child,\n parentInstanceId: childIdentifier.instanceId,\n }),\n );\n this.setWidgetMeta(childIdentifier.instanceId, {\n instanceId: childIdentifier.instanceId,\n isSbComponent: true,\n isOptimistic: true,\n sourceId: childIdentifier.sourceId,\n rootInstanceId: details.rootInstanceId,\n scopeId: parentScopeId,\n type: child.tagName,\n name: childIdentifier.name,\n props: childProps,\n parentInstanceId: params.parentInstanceId,\n children,\n } as any);\n\n return {\n isSupportedElement: true,\n isSbComponent: true,\n value: childIdentifier.instanceId,\n };\n };\n\n traverse({\n child: createRequest,\n parentInstanceId: details.parentInstanceId,\n });\n }\n\n public getMeta = makeMobxCachedGetter(\n (id: SbInstance): RuntimeWidgetMeta | undefined => {\n const widgetMeta = this.widgets[id];\n const widgetChildIndexToInstanceIds =\n this.widgetChildIndexToInstanceIds[id] ?? {};\n const widgetChildren: Array<ChildElement> =\n widgetMeta?.children?.map((child, idx) => {\n if (widgetChildIndexToInstanceIds[idx]) {\n return {\n ...child,\n value: widgetChildIndexToInstanceIds[idx],\n } as ChildElement;\n } // TODO what happens if instance ID is missing?\n return child as ChildElement;\n }) ?? [];\n return {\n ...widgetMeta,\n children: widgetChildren,\n };\n },\n );\n\n // TODO not working\n public getSourceIdCount(_sourceId: SbElement): number {\n return 1;\n // return this.sourceIdCount[sourceId] ?? 0;\n }\n\n public isChildOf(childId: SbInstance, parentId: SbInstance): boolean {\n const childMeta = this.widgets[childId];\n if (childMeta && childMeta.parentInstanceId === parentId) {\n return true;\n }\n if (!childMeta || !childMeta.parentInstanceId) {\n return false;\n }\n return this.isChildOf(childMeta.parentInstanceId, parentId);\n }\n\n // get the closest ancestor of a widget by type\n public getClosestAncestorByType(\n instanceId: SbInstance,\n type: string,\n ): RuntimeWidgetMeta | undefined {\n if (!instanceId) {\n return undefined;\n }\n const currentWidget = this.getMeta(instanceId);\n if (!currentWidget) {\n return undefined;\n }\n if (currentWidget.type === type) {\n return currentWidget;\n }\n\n if (!currentWidget.parentInstanceId) {\n return undefined;\n }\n\n return this.getClosestAncestorByType(currentWidget.parentInstanceId, type);\n }\n\n public getDebugState() {\n // Strip away all the non-serializable properties\n try {\n return Object.keys(this.widgets).reduce((acc: any, instanceId) => {\n const widget = this.getMeta(instanceId as SbInstance);\n if (!widget) {\n acc[instanceId] = {\n err: `Widget not found`,\n };\n return acc;\n }\n try {\n const node = (widget as any).node;\n const nodeType =\n typeof node === \"object\" && node ? (node as any).type : undefined;\n\n acc[instanceId] = JSON.parse(\n JSON.stringify({\n ...widget,\n node: {\n type:\n typeof nodeType === \"string\" ? nodeType : nodeType?.sbType,\n },\n props: Object.keys(widget.props ?? {}).reduce((acc: any, key) => {\n acc[key] = typeof widget.props![key];\n return acc;\n }, {}),\n }),\n );\n } catch (e) {\n acc[instanceId] = {\n err: `Error serializing widget ${String(e)}`,\n };\n }\n return acc;\n }, {} as any);\n } catch (e) {\n console.error(\"Error debug\", e);\n return {};\n }\n }\n}\n\nexport default RuntimeWidgetsManager;\n","import { action, makeAutoObservable } from \"mobx\";\nimport { makeMobxCachedGetter } from \"../../lib/internal-details/lib/mobx-cached-getter.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getPropertyValue } from \"../properties.js\";\nimport RuntimeWidgetsManager from \"./runtime-widgets-manager.js\";\nimport type {\n ChildElement,\n RuntimeWidgetMeta,\n} from \"./runtime-widgets-manager.js\";\nimport type { IEntityManager } from \"../../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { NameManager } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n CreateRequest,\n DeleteRequest,\n PropertyInfo,\n ReparentRequest,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype OptimisticAction =\n | {\n type: \"ADD\";\n sourceId: SbElement;\n index: number;\n }\n | {\n type: \"REMOVE\";\n sourceId: SbElement;\n }\n | {\n type: \"REORDER\";\n sourceId: SbElement;\n toIndex: number;\n };\n\nclass RuntimeEntitiesManager {\n public widgets: RuntimeWidgetsManager;\n\n public entitiesWithLocalBindings = new Set<SbElement>();\n\n constructor(\n readonly nameManager: NameManager,\n readonly entityManager: IEntityManager,\n ) {\n this.widgets = new RuntimeWidgetsManager(nameManager);\n makeAutoObservable(this, {\n widgets: false,\n });\n }\n\n @action\n public addOptimisticCreateWidget(createRequest: CreateRequest) {\n const parentMeta = this.getAnyEditorWidgetMeta(\n createRequest.parentElement.source.id,\n );\n if (!parentMeta?.rootInstanceId) {\n return;\n }\n this.widgets.addWidgetFromPayload(\n {\n rootInstanceId: parentMeta.rootInstanceId,\n parentInstanceId: parentMeta.instanceId,\n },\n createRequest,\n );\n }\n\n private getOptimisticWidgetMeta = makeMobxCachedGetter((id: SbInstance) => {\n const meta = this.widgets.getMeta(id);\n if (!meta) {\n return undefined;\n }\n\n if (!this.hasEditOperationsPending()) {\n return meta;\n }\n\n const sourceId = meta.sourceId;\n const scopeId = meta.scopeId;\n const name = meta.name;\n\n let merged = meta;\n\n merged = {\n ...meta,\n children: this.getChildrenWithOptimisticUpdates(id),\n };\n\n const reparentOperations =\n getEditStore().operationManager.pendingReparentOperations;\n // TODO this won't work if there are multiple reparent ops that apply to this widget\n const reparentPropsOverride = reparentOperations.find(\n (op) => op.payload.from.source.id === sourceId,\n )?.payload.changedProps;\n\n if (reparentPropsOverride) {\n const transformedProps = Object.fromEntries(\n Object.entries<PropertyInfo>(reparentPropsOverride).map(\n ([key, value]) => {\n return [\n key,\n getPropertyValue({\n entityKey: key,\n property: value,\n name,\n scopeId,\n }),\n ];\n },\n ),\n );\n merged = {\n ...merged,\n props: {\n ...merged?.props,\n ...transformedProps,\n },\n };\n }\n const propUpdates =\n getEditStore().operationManager.pendingSetPropertiesOperations.filter(\n (op) => op.payload.element.source.id === sourceId,\n );\n if (propUpdates.length > 0) {\n const mergedProps = { ...(merged.props ?? {}) };\n propUpdates.forEach((update) => {\n const { properties } = update.payload;\n Object.entries<PropertyInfo>(properties).forEach(\n ([key, updateEntry]) => {\n mergedProps[key] = getPropertyValue({\n entityKey: key,\n property: updateEntry,\n name,\n scopeId,\n });\n },\n );\n });\n merged = {\n ...merged,\n props: mergedProps,\n };\n }\n\n // Resizing\n const pendingResize = getEditStore().ui.resizing.pendingResize(sourceId);\n if (pendingResize) {\n const { width, height } = pendingResize;\n merged.props = {\n ...(merged.props || {}),\n ...(width && merged.type !== \"Icon\" && { width }),\n ...(height && merged.type !== \"Icon\" && { height }),\n ...(width && merged.type === \"Icon\" && { size: width }),\n };\n }\n\n // Page resizing\n const shouldResizePage = getEditStore().ui.dnd.shouldResizePage;\n if (shouldResizePage && merged.type === \"Page\") {\n merged.props = {\n ...(merged.props || {}),\n ...{ width: \"100%\", height: \"100%\" },\n };\n }\n\n return merged;\n });\n\n public getEditorWidgetMeta(\n instanceId: SbInstance,\n ): RuntimeWidgetMeta | undefined {\n return this.getOptimisticWidgetMeta(instanceId);\n }\n\n public getEditorWidgetSourceId(instanceId: SbInstance) {\n const identifier = this.nameManager.getExistingIdentifier(instanceId);\n if (identifier) {\n return identifier.sourceId;\n }\n\n const rawMeta = this.widgets.getMeta(instanceId);\n // instanceId -> sourceId mapping is stable so don't need anything optimistic\n if (!rawMeta) {\n return undefined;\n }\n return rawMeta.sourceId;\n }\n\n public getEditorWidgetScopeId(instanceId: SbInstance) {\n const rawMeta = this.widgets.getMeta(instanceId);\n // instanceId -> sourceId mapping is stable so don't need anything optimistic\n if (!rawMeta) {\n return undefined;\n }\n return rawMeta.scopeId;\n }\n\n public getAnyEditorWidgetMeta(sourceId: SbElement) {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(sourceId);\n return this.getEditorWidgetMeta(instanceId);\n }\n\n public getEditorWidgetName(instanceId: SbInstance) {\n return this.getEditorWidgetMeta(instanceId)?.name?.value;\n }\n\n public getEditorWidgetType(instanceId: SbInstance) {\n return this.getEditorWidgetMeta(instanceId)?.type;\n }\n\n public getEditorWidgetChildrenMeta(\n instanceId: SbInstance,\n ): Array<RuntimeWidgetMeta> {\n return this.getOptimisticWidgetChildrenIds(instanceId).reduce(\n (acc, childId) => {\n const meta = this.getEditorWidgetMeta(childId);\n if (meta) {\n acc.push(meta);\n }\n return acc;\n },\n [] as RuntimeWidgetMeta[],\n );\n }\n\n // TODO (alex): local bindings need to be instance ids?\n public setEntitiesWithLocalBindings(entities: string[]) {\n this.entitiesWithLocalBindings = new Set(entities as SbElement[]);\n }\n\n public doesEntityHaveLocalBindings(entity: SbInstance) {\n const entitySourceId = this.getEditorWidgetSourceId(entity);\n return entitySourceId && this.entitiesWithLocalBindings.has(entitySourceId);\n }\n\n private getOptimisticWidgetChildrenIds(instanceId: SbInstance) {\n return this.getChildrenWithOptimisticUpdates(instanceId).reduce(\n (acc, child) => {\n if (child.isSupportedElement && child.value) {\n acc.push(child.value);\n }\n return acc;\n },\n [] as SbInstance[],\n );\n }\n\n // This currently makes the assumption that any given source ID will only have one parent.\n // maybe these types of operations not supported?\n private getParentSourceId(sourceId: SbElement) {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(sourceId);\n if (!instanceId) {\n return undefined;\n }\n const parentInstanceId = this.widgets.getMeta(instanceId)?.parentInstanceId;\n if (!parentInstanceId) {\n return undefined;\n }\n return this.widgets.getMeta(parentInstanceId)?.sourceId;\n }\n\n private get relevantChildrenOperationsMap(): Record<\n SbElement,\n OptimisticAction[] // TODO (alex) - will need to include create\n > {\n const allPending = getEditStore().operationManager.allPendingTransactions;\n const ops: Record<SbElement, OptimisticAction[]> = {};\n for (const op of allPending) {\n if (op.type === \"editor:moveComponent\") {\n const payload = op.payload as ReparentRequest;\n const movedSource = payload.from.source.id;\n const fromParentSource = this.getParentSourceId(movedSource);\n const toSource = payload.to.source.id;\n\n if (fromParentSource === toSource) {\n ops[toSource] ??= [];\n ops[toSource].push({\n type: \"REORDER\",\n sourceId: movedSource,\n toIndex: payload.to.source.index ?? -1,\n });\n } else {\n ops[toSource] ??= [];\n ops[toSource].push({\n type: \"ADD\",\n sourceId: movedSource,\n index: payload.to.source.index ?? -1,\n });\n\n if (fromParentSource) {\n ops[fromParentSource] ??= [];\n ops[fromParentSource].push({\n type: \"REMOVE\",\n sourceId: movedSource,\n });\n }\n }\n } else if (op.type === \"editor:deleteComponents\") {\n const payload = op.payload as DeleteRequest;\n payload.elements.forEach((element) => {\n const deletedSource = element.source.id;\n const parentSourceId = this.getParentSourceId(deletedSource);\n if (parentSourceId) {\n ops[parentSourceId] ??= [];\n ops[parentSourceId].push({\n type: \"REMOVE\",\n sourceId: deletedSource,\n });\n }\n });\n } else if (op.type === \"editor:createComponent\") {\n const payload = op.payload as CreateRequest;\n const parentSourceId = payload.parentElement.source.id;\n if (parentSourceId && payload.id) {\n ops[parentSourceId] ??= [];\n ops[parentSourceId].push({\n type: \"ADD\",\n sourceId: payload.id,\n index: payload.parentElement.source.index ?? -1,\n });\n }\n }\n }\n return ops;\n }\n\n private getChildrenWithOptimisticUpdates = makeMobxCachedGetter(\n (instanceId: SbInstance): ChildElement[] => {\n const widgetMeta = this.widgets.getMeta(instanceId);\n if (!widgetMeta) {\n return [];\n }\n\n const relevantOperations =\n this.relevantChildrenOperationsMap[widgetMeta.sourceId];\n\n if (!relevantOperations || relevantOperations.length === 0) {\n return widgetMeta.children ?? [];\n }\n\n let optimisticChildren = [...(widgetMeta.children ?? [])];\n\n for (const op of relevantOperations) {\n if (op.type === \"ADD\") {\n // TODO (alex) - this needs to find the matching instance id based on scope\n const childInstanceId = this.widgets.getAnyInstanceIdForSourceId(\n op.sourceId,\n );\n const childMeta = this.getEditorWidgetMeta(childInstanceId);\n if (!childMeta) {\n continue;\n }\n const appendToEnd = op.index === -1;\n const index = appendToEnd ? optimisticChildren.length : op.index;\n optimisticChildren.splice(index, 0, {\n isSbComponent: childMeta.isSbComponent,\n isSupportedElement: true,\n value: childInstanceId,\n });\n } else if (op.type === \"REMOVE\") {\n optimisticChildren = optimisticChildren.filter((child) => {\n if (typeof child.value === \"string\") {\n const childSourceId = this.getEditorWidgetSourceId(child.value);\n return childSourceId !== op.sourceId;\n }\n return true;\n });\n } else if (op.type === \"REORDER\") {\n const elementIndex = optimisticChildren.findIndex((child) => {\n if (typeof child.value === \"string\") {\n const childSourceId = this.getEditorWidgetSourceId(child.value);\n return childSourceId === op.sourceId;\n }\n return false;\n });\n\n if (elementIndex !== -1) {\n const elementToMove = optimisticChildren[elementIndex];\n const appendToEnd =\n op.toIndex === -1 || op.toIndex === optimisticChildren.length;\n\n const placeholder = Symbol(\"reorder-placeholder\");\n (optimisticChildren as any)[elementIndex] = placeholder;\n\n if (appendToEnd) {\n optimisticChildren.push(elementToMove);\n } else {\n optimisticChildren.splice(op.toIndex, 0, elementToMove);\n }\n\n optimisticChildren = (optimisticChildren as any[]).filter(\n (child) => child !== placeholder,\n );\n }\n }\n }\n\n return optimisticChildren;\n },\n );\n\n public getEditorWidgetChildren(instanceId: SbInstance): ChildElement[] {\n return this.getChildrenWithOptimisticUpdates(instanceId);\n }\n\n // TODO will need to include all other operations like\n // widget creation/deletion, etc.\n public hasEditOperationsPending() {\n const hasPendingOperations =\n getEditStore().operationManager.hasPendingOperations;\n const hasPendingResize = getEditStore().ui.resizing.hasAnyPendingResize;\n const shouldResizePage = getEditStore().ui.dnd.shouldResizePage;\n return hasPendingOperations || hasPendingResize || shouldResizePage;\n }\n\n public getPendingOperations() {\n const pendingResizes = getEditStore().ui.resizing.pendingResizes;\n return [\n ...getEditStore().operationManager.allPendingTransactions,\n ...pendingResizes,\n ];\n }\n\n public getScopeIdForSourceId(sourceId: SbElement) {\n const widget = this.getAnyEditorWidgetMeta(sourceId);\n if (!widget) {\n return undefined;\n }\n return widget.scopeId;\n }\n\n public applySideEffects(\n changes: Record<string, Record<string, unknown>>,\n scopeId: string,\n ) {\n const state = this.entityManager.getState(scopeId);\n Object.entries(changes).forEach(([sourceId, changes]) => {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(\n sourceId as SbElement,\n );\n const entityName = this.getEditorWidgetName(instanceId);\n const entity = entityName ? state[entityName] : undefined;\n if (entity == null || typeof entity !== \"object\") {\n return;\n }\n Object.entries(changes).forEach(([key, value]) => {\n (entity as any)[key] = value;\n });\n });\n }\n\n public isChildOf(childId: SbInstance, parentId: SbInstance): boolean {\n return this.widgets.isChildOf(childId, parentId);\n }\n\n public getClosestAncestorByType(id: SbInstance, type: string) {\n return this.widgets.getClosestAncestorByType(id, type);\n }\n}\n\nexport default RuntimeEntitiesManager;\n","import rootStore from \"../internal-details/lib/root-store.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\n\nexport const isComponentStacklike = (\n component: RuntimeWidgetMeta | undefined,\n) => {\n if (!component || !component.type) {\n return false;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(\n component.type,\n );\n\n if (!editorConfig?.isDroppable) {\n return false;\n }\n\n return true;\n};\n","import rootStore from \"../internal-details/lib/root-store.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { ContainerLayout } from \"../user-facing/component-base/constants.js\";\n\nconst DEFAULT_LAYOUT_PROPERTY_PATH = \"layout\";\n\nexport const getComponentLayout = (\n component: RuntimeWidgetMeta | undefined,\n): ContainerLayout | undefined => {\n if (!component || !component.type) {\n return undefined;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(\n component.type,\n );\n\n const propertyPath =\n editorConfig?.layoutPropertyPath ?? DEFAULT_LAYOUT_PROPERTY_PATH;\n\n return component.props?.[propertyPath] as ContainerLayout | undefined;\n};\n","import { getComponentLayout } from \"./get-component-layout.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\n\nexport const isComponentVStack = (component: RuntimeWidgetMeta | undefined) => {\n if (!component || !component.type) {\n return false;\n }\n\n const layout = getComponentLayout(component);\n return layout === \"vertical\" || layout === undefined;\n};\n","import type { RectLike, StackDropInfo, StackPlaceholderPos } from \"./types.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype ChildPosInfos = Record<\n SbInstance,\n [pos: RectLike<number>, origIndex: number]\n>;\n\ntype WithSizeLike<T> = {\n width: T;\n height: T;\n};\n\nconst makeRectGetters = (isVertical: boolean) => {\n return {\n major: {\n start: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.top : rectLike.left;\n },\n end: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.bottom : rectLike.right;\n },\n length: <T>(rectLike: WithSizeLike<T>): T => {\n return isVertical ? rectLike.height : rectLike.width;\n },\n },\n minor: {\n start: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.left : rectLike.top;\n },\n end: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.right : rectLike.bottom;\n },\n length: <T>(rectLike: WithSizeLike<T>): T => {\n return isVertical ? rectLike.width : rectLike.height;\n },\n },\n };\n};\n\nconst RECT_GETTERS = {\n vertical: makeRectGetters(true),\n horizontal: makeRectGetters(false),\n};\n\nconst DROP_LINE_THICKNESS = 4;\n\nconst computeClosestChildInStack = (params: {\n childRects: ChildPosInfos;\n isVertical: boolean;\n x: number;\n y: number;\n}): {\n instanceId: SbInstance | null;\n widgetIndex: number;\n distance: number;\n posIsAfterMidpoint?: boolean;\n} => {\n const { childRects, isVertical, x, y } = params;\n\n const closestChild = Object.keys(childRects).reduce(\n (\n acc: {\n instanceId: SbInstance | null;\n widgetIndex: number;\n distance: number;\n },\n key,\n ) => {\n const [childRect, origIndex] = childRects[key as SbInstance];\n // TODO layouts: this won't work for Hstacks that wrap\n const distance = isVertical\n ? Math.abs(y - childRect.top)\n : Math.abs(x - childRect.left);\n if (distance < acc.distance) {\n acc = {\n instanceId: key as SbInstance,\n widgetIndex: origIndex,\n distance,\n };\n }\n return acc;\n },\n {\n instanceId: null,\n widgetIndex: -1,\n distance: Number.MAX_SAFE_INTEGER,\n },\n );\n\n if (closestChild.instanceId == null) {\n return closestChild;\n }\n\n const [childRect] = childRects[closestChild.instanceId];\n const midpoint = isVertical\n ? (childRect.top + childRect.bottom) / 2\n : (childRect.left + childRect.right) / 2;\n\n const isAfterMidpoint = (isVertical ? y : x) > midpoint;\n\n return {\n ...closestChild,\n posIsAfterMidpoint: isAfterMidpoint,\n };\n};\n\nconst getChildrenPositionInfo = (\n children: Array<[id: SbInstance, child: RectLike<number>]>,\n) => {\n const childRects = children.reduce(\n (acc: ChildPosInfos, [childId, childRect], idx) => {\n if (!childRect) return acc;\n acc[childId] = [childRect, idx];\n return acc;\n },\n {},\n );\n return childRects;\n};\n\nexport const computeDragInfo = (params: {\n isVertical: boolean;\n childrenNodes: Array<[id: SbInstance, child: RectLike<number>]>;\n baseRect: RectLike<number>;\n draggedItemPos: { x: number; y: number };\n draggedInstance: SbInstance;\n selectedInstances: SbInstance[];\n}): undefined | StackDropInfo => {\n const {\n isVertical,\n childrenNodes,\n draggedItemPos,\n selectedInstances,\n baseRect,\n } = params;\n\n const { major } = isVertical\n ? RECT_GETTERS.vertical\n : RECT_GETTERS.horizontal;\n\n const childRects = getChildrenPositionInfo(childrenNodes);\n // Technically not the geometrically closest child. Just an accurate enough to know where the cursor is within the stack\n const closestChild = computeClosestChildInStack({\n childRects,\n isVertical,\n x: draggedItemPos.x,\n y: draggedItemPos.y,\n });\n\n // we have to filter child instance Ids because modals and slideouts take up space in the child arr, despite being\n // removed entirely from the layout of a stack\n const filteredChildIds = childrenNodes\n .filter(([childId]) => childRects[childId] != null)\n .map(([childId]) => childId);\n\n const hasDraggedOnlyWidgetInParent =\n filteredChildIds.length === 1 &&\n filteredChildIds[0] === params.draggedInstance;\n\n let filteredInsertionIndex = 0;\n const placeholders: StackPlaceholderPos[] = [];\n let noopDrop = false;\n\n // determine if the pointer is before or after the midpoint\n if (closestChild.instanceId != null) {\n const childIndex = filteredChildIds.indexOf(closestChild.instanceId);\n\n const isAfterMidpoint = closestChild.posIsAfterMidpoint ?? false;\n filteredInsertionIndex =\n !hasDraggedOnlyWidgetInParent && isAfterMidpoint\n ? childIndex + 1\n : childIndex;\n // Find the middle of the gap between the two widgets\n const [beforeChildIndex, afterChildIndex] = isAfterMidpoint\n ? [childIndex, childIndex + 1]\n : [childIndex - 1, childIndex];\n const beforeChildId = filteredChildIds[beforeChildIndex];\n const afterChildId = filteredChildIds[afterChildIndex];\n\n const selectedSet = new Set(selectedInstances);\n\n // a rather unintuitive way to determine whether or not the selected widgets are perfectly consecutive\n const maxMin = selectedInstances.reduce(\n (acc: { maxIndex: number; minIndex: number }, instanceId) => {\n const widgetIndex = filteredChildIds.indexOf(instanceId);\n if (widgetIndex < 0) {\n return acc; // this should not happen\n }\n acc.maxIndex = Math.max(acc.maxIndex, widgetIndex);\n acc.minIndex = Math.min(acc.minIndex, widgetIndex);\n return acc;\n },\n {\n maxIndex: -1,\n minIndex: Number.MAX_SAFE_INTEGER,\n },\n );\n // Our objective is to show the placeholders in full size when hovering the dragged item(s) over their original location\n // This is because dropping here would not cause a change in layout, so showing the full size placeholders is more intuitive.\n // When selecting multiple widgets, hovering over \"original location\" is less meaningful if the selected widgets are not consecutive.\n // This is because dropping non-consecutive widgets over ANY location is going to result in some change in layout.\n const selectedWidgetsAreConsecutive =\n maxMin.maxIndex - maxMin.minIndex + 1 === selectedInstances.length;\n const isInsertingNewElement = maxMin.maxIndex === -1;\n\n noopDrop =\n selectedWidgetsAreConsecutive &&\n (selectedSet.has(beforeChildId) || selectedSet.has(afterChildId));\n if (selectedInstances?.length > 0) {\n selectedInstances.forEach((instanceId) => {\n const draggedRect = childRects?.[instanceId]?.[0];\n if (draggedRect) {\n placeholders.push({\n isActive: noopDrop,\n left: draggedRect.left - baseRect.left,\n top: draggedRect.top - baseRect.top,\n width: draggedRect.width,\n height: draggedRect.height,\n });\n }\n });\n }\n\n if (hasDraggedOnlyWidgetInParent) {\n return {\n insertionIndex: 0,\n noopDrop: true,\n placeholders,\n };\n }\n\n // loop through all possible placeholder positions aka insertion indexes\n const potentialInsertionIndexes = Array.from(\n { length: filteredChildIds.length + 1 },\n (_, i) => i,\n );\n potentialInsertionIndexes\n .filter((potentialIdx) => {\n // We should hide the placeholder if and only if inserting here would do nothing.\n // - When the insertion index is touching the selected widget(s)\n // - Don't hide the placeholders if dragging from outside the stack, or if there are multiple widgets and they are not consecutive\n if (isInsertingNewElement || !selectedWidgetsAreConsecutive) {\n return true;\n }\n if (\n selectedSet.has(filteredChildIds[potentialIdx]) ||\n selectedSet.has(filteredChildIds[potentialIdx - 1])\n ) {\n return false;\n }\n return true;\n })\n .forEach((potentialIdx) => {\n // TODO calculate these\n let gapSize = 0;\n const startPaddingGap = 0;\n const endPaddingGap = 0;\n const parentPaddingLeft = 0;\n const parentPaddingRight = 0;\n const parentPaddingBottom = 0;\n const parentPaddingTop = 0;\n // let gapSize = parentSpacingGap;\n // const startPaddingGap =\n // major.start(parentWidgetPadding as PaddingAsRect)?.value ?? 0;\n // const endPaddingGap =\n // major.end(parentWidgetPadding as PaddingAsRect)?.value ?? 0;\n if (potentialIdx === filteredChildIds.length) {\n gapSize = endPaddingGap;\n } else if (potentialIdx === 0) {\n gapSize = startPaddingGap;\n }\n gapSize /= 2;\n\n let offsetPx: number;\n if (potentialIdx === filteredChildIds.length) {\n const lastInstanceId = filteredChildIds[filteredChildIds.length - 1];\n const rect = childRects[lastInstanceId]?.[0];\n if (!rect) {\n return;\n }\n offsetPx = major.end(rect) - DROP_LINE_THICKNESS / 2 + gapSize;\n } else {\n const instanceId = filteredChildIds[potentialIdx];\n const rect = childRects[instanceId]?.[0];\n if (!rect) {\n return;\n }\n offsetPx = major.start(rect) - DROP_LINE_THICKNESS / 2 - gapSize;\n }\n\n if (isVertical) {\n const clamp = (top: number) => {\n return Math.max(\n 0,\n Math.min(top, baseRect.height - DROP_LINE_THICKNESS),\n );\n };\n placeholders.push({\n isActive: potentialIdx === filteredInsertionIndex,\n left: parentPaddingLeft ?? 0,\n top: clamp(offsetPx - baseRect.top),\n width: baseRect.width - parentPaddingRight - parentPaddingLeft,\n height: DROP_LINE_THICKNESS,\n });\n } else {\n const clamp = (left: number) => {\n return Math.max(\n 0,\n Math.min(left, baseRect.width - DROP_LINE_THICKNESS),\n );\n };\n placeholders.push({\n isActive: potentialIdx === filteredInsertionIndex,\n left: clamp(offsetPx - baseRect.left),\n top: parentPaddingTop,\n height: baseRect.height - parentPaddingBottom - parentPaddingTop,\n width: DROP_LINE_THICKNESS,\n });\n }\n });\n } else {\n // There are no children in the stack\n // We need to show the placeholder for the new insertion\n placeholders.push({\n isActive: true,\n left: 0,\n top: 0,\n height: isVertical ? DROP_LINE_THICKNESS : baseRect.height,\n width: isVertical ? baseRect.width : DROP_LINE_THICKNESS,\n });\n }\n\n let insertionIndex = filteredInsertionIndex;\n if (insertionIndex === filteredChildIds.length) {\n insertionIndex = childrenNodes.length;\n } else {\n const widgetAtInsertionIndex = filteredChildIds[filteredInsertionIndex];\n const originalIndex = childRects[widgetAtInsertionIndex]?.[1];\n if (originalIndex != null) {\n insertionIndex = originalIndex;\n }\n }\n\n return {\n insertionIndex,\n placeholders,\n noopDrop,\n };\n};\n","import { makeAutoObservable } from \"mobx\";\nimport { isComponentVStack } from \"../../lib/utils/is-component-vstack.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { computeDragInfo } from \"./stack-utils.js\";\nimport type { RectLike, StackDropInfo } from \"./types.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { DragAndDropManager } from \"../features/drag-and-drop-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\n// Although this is labeled a \"store\", it's more of a caching layer for computations related to stack DnD\nexport class StackManager {\n private root: RootStore;\n private dnd: DragAndDropManager;\n\n // cannot derive dnd from root because it may not be initialized yet\n constructor(root: RootStore, dnd: DragAndDropManager) {\n this.root = root;\n this.dnd = dnd;\n makeAutoObservable(this);\n }\n\n refreshPositionsAndGetDropIndex() {\n if (this.dnd.dropTargetId) {\n this.dnd.updateChildPositions(this.dnd.dropTargetId);\n }\n return this.lazyDropInfo;\n }\n\n get lazyDropInfo(): StackDropInfo {\n const dropTargetId = this.dnd.dropTargetId;\n const activeRect = this.dnd.activeDragRect;\n const selectedSourceIds = this.root.editStore!.ui.getSelectedSourceIds();\n const draggedSourceId = selectedSourceIds[0];\n const baseRect = this.dnd.activeTargetRect;\n // There's no selectedSourceIds when dragging a new component into the canvas\n const isExistingComponentDrag = !this.dnd.isDraggingNewComponent;\n\n if (\n !dropTargetId ||\n !activeRect ||\n !baseRect ||\n (isExistingComponentDrag && !draggedSourceId)\n ) {\n return { insertionIndex: undefined, placeholders: undefined };\n }\n\n const dropTargetWidget =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(dropTargetId);\n\n if (!dropTargetWidget) {\n return { insertionIndex: undefined, placeholders: undefined };\n }\n\n const isVertical = isComponentVStack(dropTargetWidget);\n\n const childrenElements =\n getEditStore().runtimeEntitiesManager.getEditorWidgetChildrenMeta(\n dropTargetId,\n );\n\n const childrenNodes = childrenElements.map((childMeta) => {\n const id = childMeta.instanceId;\n return [id, this.dnd.widgetPositions[id]] as [\n SbInstance,\n RectLike<number>,\n ];\n });\n\n const draggedItemX = activeRect.left + activeRect.width / 2;\n const draggedItemY = activeRect.top + activeRect.height / 2;\n\n const selectedInstances =\n this.root.editStore!.ui.getSelectedInstanceIds() ?? [];\n const dragInfo = computeDragInfo({\n isVertical,\n childrenNodes,\n baseRect,\n draggedItemPos: {\n x: draggedItemX,\n y: draggedItemY,\n },\n selectedInstances,\n draggedInstance: selectedInstances[0],\n });\n\n return dragInfo ?? { insertionIndex: undefined, placeholders: undefined };\n }\n}\n","import { ROOT_WIDGET_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport { action, makeAutoObservable } from \"mobx\";\nimport { isComponentStacklike } from \"../../lib/utils/is-component-stacklike.js\";\nimport { StackManager } from \"../dnd/stack-store.js\";\n\nimport {\n areDragAndDropInstancesValid,\n isDragAndDropTypeValid,\n} from \"../dnd/utils.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getBoundingBoxForWidget } from \"../interaction-utils.js\";\nimport { startEditorSync } from \"../mobx-sync/mobx-editor-sync.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { ClientRect } from \"@dnd-kit/core\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype DNDFeatures = {\n dragAndDrop?: boolean;\n nudging?: boolean;\n};\n\nexport class DragAndDropManager {\n private root: RootStore;\n stack: StackManager;\n\n private _dropTargetInstanceId: SbInstance | null = null;\n private _isDragging = false;\n private _isDraggingNewComponent = false;\n private _activeDragRect: ClientRect | null = null;\n private _activeTargetRect: ClientRect | null = null;\n private _draggingWidgetSize = { height: 0, width: 0 };\n private _dragToCanvasComponentType: string | null = null;\n\n private _validRootIds: SbInstance[] | null = null;\n private _shouldResizePage: boolean = false;\n private _invalidDropTarget = false;\n\n private _perWidgetFeatures: Record<SbElement, DNDFeatures> = {};\n\n public widgetPositions: Record<SbInstance, ClientRect> = {};\n\n constructor(root: RootStore) {\n this.root = root;\n this.stack = new StackManager(root, this);\n\n makeAutoObservable(this);\n\n startEditorSync({\n store: this,\n storeId: \"dnd\",\n\n projection(store) {\n return {\n isDragging: store._isDragging,\n isDraggingNewComponent: store._isDraggingNewComponent,\n };\n },\n });\n }\n\n get isDragging() {\n return this._isDragging;\n }\n\n get isDraggingNewComponent() {\n return this._isDraggingNewComponent;\n }\n\n get draggingWidgetSize() {\n return this._draggingWidgetSize;\n }\n\n get dropTargetId() {\n return this._dropTargetInstanceId;\n }\n\n get activeDragRect() {\n return this._activeDragRect;\n }\n\n get activeTargetRect() {\n return this._activeTargetRect;\n }\n\n get shouldResizePage() {\n return this._shouldResizePage;\n }\n\n get dropTargetWidgetType() {\n return this.dropTargetId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetType(\n this.dropTargetId,\n )\n : undefined;\n }\n\n get isDropTargetStackLike() {\n const dropTargetId = this.dropTargetId;\n const widgetMeta = dropTargetId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(dropTargetId)\n : undefined;\n\n return isComponentStacklike(widgetMeta);\n }\n\n get draggedWidgetType() {\n if (this.isDraggingNewComponent) {\n return this._dragToCanvasComponentType;\n }\n const selectedInstanceIds =\n this.root.editStore!.ui.getSelectedInstanceIds();\n const draggedInstanceId = selectedInstanceIds[0];\n return draggedInstanceId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetType(\n draggedInstanceId,\n )\n : undefined;\n }\n\n get draggedWidgetInstanceId() {\n if (this.isDraggingNewComponent) {\n return undefined;\n }\n const selectedInstanceIds =\n this.root.editStore!.ui.getSelectedInstanceIds();\n return selectedInstanceIds[0];\n }\n\n get dragToCanvasComponentType() {\n return this._dragToCanvasComponentType;\n }\n\n get validRootIds() {\n return this._validRootIds;\n }\n\n get isProspectiveDropValid() {\n const dropTargetInstanceId = this.dropTargetId;\n const draggedInstanceId = this.draggedWidgetInstanceId;\n if (!dropTargetInstanceId) {\n return false;\n }\n\n const isDraggingNewComponent = this.isDraggingNewComponent;\n const instancesValid = areDragAndDropInstancesValid({\n dropTargetInstanceId,\n draggedInstanceId,\n isDraggingNewComponent,\n });\n\n if (!instancesValid) {\n return false;\n }\n\n const draggedType = this.draggedWidgetType;\n const dropTargetType = this.dropTargetWidgetType;\n if (!draggedType || !dropTargetType) {\n return false;\n }\n const dropTargetEmpty =\n (dropTargetInstanceId &&\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(\n dropTargetInstanceId,\n )?.children?.length === 0) ??\n true;\n const typesValid = isDragAndDropTypeValid({\n draggedType,\n dropTargetType,\n isDraggingNewComponent,\n dropTargetEmpty,\n });\n\n return typesValid;\n }\n\n canDragWidget(instanceId: SbInstance): boolean {\n const editStore = getEditStore();\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (!sourceId) return false;\n\n if (editStore.ai.getIsEditing()) {\n return false;\n }\n\n return this._perWidgetFeatures?.[sourceId]?.dragAndDrop ?? true;\n }\n\n // TODO: Implement this, currently unused\n canNudgeWidget(instanceId: SbInstance): boolean {\n const editStore = getEditStore();\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (!sourceId) return false;\n\n if (editStore.ai.getIsEditing()) {\n return false;\n }\n\n return this._perWidgetFeatures?.[sourceId]?.nudging ?? true;\n }\n\n @action\n setWidgetFeatures(id: SbElement, features: Partial<DNDFeatures>) {\n if (!this._perWidgetFeatures[id]) {\n this._perWidgetFeatures[id] = {};\n }\n this._perWidgetFeatures[id] = {\n ...this._perWidgetFeatures[id],\n ...features,\n };\n }\n\n @action\n setIsDragging(isDragging: boolean) {\n this._isDragging = isDragging;\n if (!isDragging) {\n this._activeDragRect = null;\n this._activeTargetRect = null;\n this._validRootIds = null;\n }\n }\n\n /**\n * Indicates a drag of a new component into the canvas (e.g: from the sidebar)\n * Used to handle the dragging preview, and the drop handling\n */\n @action\n startNewComponentDrag({ componentType }: { componentType: string | null }) {\n if (!componentType) {\n return;\n }\n\n this._isDraggingNewComponent = true;\n this._dragToCanvasComponentType = componentType;\n\n const editorTemplates =\n this.root.componentRegistry.getEditorTemplates(componentType);\n\n if (editorTemplates && editorTemplates.length > 1) {\n /**\n * Future: If we implement multiple editor templates per component type,\n * we need to handle the preview size differently.\n *\n * To do so, the editor should send the `\"dragstart\"` message with the catalog id.\n * For now, we just grab the 1st and only one.\n */\n throw new Error(\n `Multiple editor templates per component type not yet supported`,\n );\n }\n\n const catalog = editorTemplates?.[0]?.catalog;\n\n const DEFAULT_PREVIEW_SIZE: typeof this._draggingWidgetSize = {\n width: 8,\n height: 6,\n };\n\n this._draggingWidgetSize = {\n width: ((catalog as any)?.previewSize?.width.value ??\n DEFAULT_PREVIEW_SIZE.width) as number,\n height: ((catalog as any)?.previewSize?.height.value ??\n DEFAULT_PREVIEW_SIZE.height) as number,\n };\n }\n\n @action\n cancelNewComponentDrag() {\n this._isDraggingNewComponent = false;\n this._dragToCanvasComponentType = null;\n this._draggingWidgetSize = { height: 0, width: 0 };\n this.restorePageDimensions();\n }\n\n @action\n setValidRootIds(ids: SbInstance[]) {\n this._validRootIds = ids;\n }\n\n @action\n setDropTargetId(id: SbInstance | null) {\n this._dropTargetInstanceId = id;\n if (id == null) {\n this._activeTargetRect = null;\n } else {\n this.updateChildPositions(id);\n }\n }\n\n @action\n setActiveDragRect(collidingRect: ClientRect | null) {\n if (isEqual(this._activeDragRect, collidingRect)) {\n return;\n }\n\n if (this.isDropTargetStackLike) {\n this._activeDragRect = collidingRect;\n return;\n }\n\n this._activeDragRect = collidingRect;\n }\n\n @action\n setActiveTargetRect(rect: ClientRect | null) {\n if (isEqual(this._activeTargetRect, rect)) {\n return;\n }\n this._activeTargetRect = rect;\n if (this.dropTargetId) {\n this.updateChildPositions(this.dropTargetId);\n }\n }\n\n @action\n setWidgetPosition(id: SbInstance, rect: ClientRect | null) {\n if (rect == null) {\n delete this.widgetPositions[id];\n } else {\n if (isEqual(this.widgetPositions[id], rect)) {\n return;\n }\n this.widgetPositions[id] = rect;\n }\n }\n\n @action\n updateChildPositions(id: SbInstance) {\n const children =\n getEditStore().runtimeEntitiesManager.getEditorWidgetChildrenMeta(id);\n children.forEach((child) => {\n const boundingBox = getBoundingBoxForWidget(child.instanceId);\n const rect = boundingBox\n ? ({\n left: boundingBox.left,\n top: boundingBox.top,\n width: boundingBox.width,\n height: boundingBox.height,\n right: boundingBox.right,\n bottom: boundingBox.bottom,\n } satisfies ClientRect)\n : null;\n this.setWidgetPosition(child.instanceId, rect);\n });\n }\n\n private getPageElement() {\n return document.querySelector(\n `[${ROOT_WIDGET_ATTRIBUTE}=\"true\"]`,\n ) as HTMLElement | null;\n }\n\n // If the page is new, there might not be a surface for the element to be dropped on\n resizePageIfNeeded() {\n const page = this.getPageElement();\n if (page) {\n const pageRect = page.getBoundingClientRect();\n if (pageRect.width === 0 || pageRect.height === 0) {\n this._shouldResizePage = true;\n }\n }\n }\n\n private restorePageDimensions() {\n this._shouldResizePage = false;\n }\n}\n","import { Property, Dim } from \"@superblocksteam/library-shared\";\nimport { makeAutoObservable } from \"mobx\";\nimport { startEditorSync } from \"../mobx-sync/mobx-editor-sync.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { PropertyInfo } from \"@superblocksteam/library-shared\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ResizeState = {\n instanceId: SbInstance;\n sourceId: SbElement;\n dragStartX: number;\n dragStartY: number;\n start: {\n width: number;\n height: number;\n };\n resizedPosition: string;\n widthToUpdate: Dim | null;\n heightToUpdate: Dim | null;\n isApplyingResize: boolean;\n};\n\nexport class ResizingManager {\n private _activeResizes: Map<SbElement, ResizeState> = new Map();\n\n constructor(private root: RootStore) {\n makeAutoObservable(this);\n\n startEditorSync({\n store: this,\n storeId: \"resizing\",\n projection(store) {\n const resize = store.activeResize;\n return {\n isResizing: resize != null,\n activeResize: resize\n ? {\n width: resize.widthToUpdate,\n height: resize.heightToUpdate,\n }\n : null,\n };\n },\n });\n }\n\n get activeResize() {\n const selectedSourceId = this.root.editStore?.ui.getSelectedSourceIds()[0];\n if (!selectedSourceId) {\n return null;\n }\n return this._activeResizes.get(selectedSourceId);\n }\n\n private isLockedAspectRatio(instanceId: SbInstance) {\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n\n const editorConfig = widget?.type\n ? this.root.componentRegistry.getEditorConfig(widget?.type)\n : null;\n return editorConfig?.isFixedAspectRatio === true;\n }\n\n public startResizing(\n dragStartX: number,\n dragStartY: number,\n instanceId: SbInstance,\n position: string,\n ) {\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n if (!widget) {\n console.error(`Could not find metadata ${instanceId}`);\n return;\n }\n\n const parentInstanceId = widget?.parentInstanceId;\n const parentWidget =\n parentInstanceId &&\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n parentInstanceId,\n );\n\n if (!parentWidget) {\n console.error(`Could not find parent for ${instanceId}`);\n return;\n }\n\n this._activeResizes.set(widget.sourceId, {\n instanceId,\n sourceId: widget.sourceId,\n dragStartX,\n dragStartY,\n start: {\n width:\n (widget?.props?.width as Dim)?.value ??\n (widget?.props?.size as Dim)?.value ??\n 0,\n height: (widget?.props?.height as Dim)?.value ?? 0,\n },\n resizedPosition: position,\n widthToUpdate: null,\n heightToUpdate: null,\n isApplyingResize: false,\n });\n }\n\n private calculateDimension(baseValue: number, delta: number): number {\n return Math.floor(Math.max(baseValue + delta, 0));\n }\n\n private handleResizeDimension(params: {\n resizeState: ResizeState;\n dimension: \"width\" | \"height\";\n delta: number;\n canResize: boolean;\n mode: string;\n position: string;\n }) {\n const { resizeState, dimension, delta, canResize, position } = params;\n if (!canResize) return;\n\n const isHorizontal = dimension === \"width\";\n const startValue = resizeState.start[dimension];\n\n let newValue = null;\n\n if (position.includes(isHorizontal ? \"left\" : \"top\")) {\n newValue = this.calculateDimension(startValue, -delta);\n } else if (position.includes(isHorizontal ? \"right\" : \"bottom\")) {\n newValue = this.calculateDimension(startValue, delta);\n }\n\n return () => {\n if (newValue) {\n resizeState[`${dimension}ToUpdate`] = Dim.px(newValue);\n }\n };\n }\n\n public resizeWidget(\n currentX: number,\n currentY: number,\n instanceId: SbInstance,\n canResizeWidth: boolean,\n canResizeHeight: boolean,\n ) {\n const sourceId =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n const type =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetType(\n instanceId,\n );\n const resizeState = sourceId && this._activeResizes.get(sourceId);\n if (!resizeState) {\n return;\n }\n\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n\n let widthMode = (widget?.props?.width as Dim)?.mode;\n const heightMode = (widget?.props?.height as Dim)?.mode;\n\n const lockedAspectRatio = this.isLockedAspectRatio(instanceId);\n\n const deltaX = currentX - resizeState.dragStartX;\n const deltaY = lockedAspectRatio\n ? deltaX\n : currentY - resizeState.dragStartY;\n\n if (type === \"Icon\") {\n widthMode = (widget?.props?.size as Dim)?.mode;\n if (!widthMode) {\n widthMode = \"px\";\n }\n }\n\n const updateWidth = this.handleResizeDimension({\n resizeState,\n dimension: \"width\",\n delta: deltaX,\n canResize: canResizeWidth,\n mode: widthMode,\n position: resizeState.resizedPosition,\n });\n\n const updateHeight = this.handleResizeDimension({\n resizeState,\n dimension: \"height\",\n delta: deltaY,\n canResize: canResizeHeight,\n mode: heightMode,\n position: resizeState.resizedPosition,\n });\n\n if (updateWidth) {\n updateWidth();\n }\n if (updateHeight) {\n updateHeight();\n }\n\n this._activeResizes.set(sourceId, resizeState);\n }\n\n // sourceId rather than instance because we are resizing all items of this source at the same time.\n public pendingResize(sourceId: SbElement) {\n const resizeState = this._activeResizes.get(sourceId);\n if (!resizeState) {\n return null;\n }\n return {\n width: resizeState.widthToUpdate,\n height: resizeState.heightToUpdate,\n };\n }\n\n public get hasAnyPendingResize() {\n return Array.from(this._activeResizes.values()).some(\n // Margins are not here because they are not part of the actual resizing, they are just to improve the UX with the positioning\n (state) => state.widthToUpdate || state.heightToUpdate,\n );\n }\n\n public get pendingResizes() {\n return Array.from(this._activeResizes.values()).filter(\n (state) => !state.isApplyingResize,\n );\n }\n\n public applyResize(instanceId: SbInstance) {\n const sourceId =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n const type =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetType(\n instanceId,\n );\n const resizeState = sourceId && this._activeResizes.get(sourceId);\n if (!resizeState) {\n return;\n }\n\n resizeState.isApplyingResize = true;\n\n const properties: Record<string, PropertyInfo<unknown>> = {\n ...(resizeState.heightToUpdate &&\n type !== \"Icon\" && {\n height: Property.Dimension(resizeState.heightToUpdate),\n }),\n ...(resizeState.widthToUpdate &&\n type !== \"Icon\" && {\n width: Property.Dimension(resizeState.widthToUpdate),\n }),\n ...(resizeState.widthToUpdate &&\n type === \"Icon\" && {\n size: Property.Dimension(resizeState.widthToUpdate),\n }),\n };\n\n if (Object.keys(properties).length > 0) {\n this.root.editStore?.operationManager.setWidgetProperties({\n applySideEffects: true,\n sourceId: resizeState.sourceId,\n properties,\n callback: () => {\n this._activeResizes.delete(sourceId);\n },\n });\n }\n }\n}\n","import { action, computed, makeObservable, observable, when } from \"mobx\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport { DragAndDropManager } from \"./drag-and-drop-store.js\";\nimport { ResizingManager } from \"./resizing-store.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst MULTI_SELECT_ENABLED = false; // TODO https://linear.app/superblocks/issue/FE-1673\n\nclass UIStore {\n dnd: DragAndDropManager;\n resizing: ResizingManager;\n\n // TODO (Alex): audit ALL usage of these 4 to ensure interactions work correctly\n private _selectedSourceIds: SbElement[] = [];\n private _selectedInstanceIds: SbInstance[] = [];\n private _focusedSourceId: SbElement | null = null;\n private _focusedInstanceId: SbInstance | null = null;\n\n private _rootInstanceData: Map<\n SbInstance,\n {\n sourceId: SbElement;\n isRoot: boolean;\n }\n > = new Map();\n\n private newComponentSelectPromise:\n | (Promise<void> & { cancel(): void })\n | null = null;\n\n constructor(\n readonly root: RootStore,\n readonly editStore: EditStore,\n ) {\n this.dnd = new DragAndDropManager(root);\n this.resizing = new ResizingManager(root);\n\n makeObservable<\n UIStore,\n | \"_selectedSourceIds\"\n | \"_selectedInstanceIds\"\n | \"_focusedSourceId\"\n | \"_focusedInstanceId\"\n | \"focusedSourceId\"\n | \"focusedInstanceId\"\n >(this, {\n _selectedSourceIds: observable,\n _selectedInstanceIds: observable,\n _focusedSourceId: observable,\n _focusedInstanceId: observable,\n\n focusedSourceId: computed,\n focusedInstanceId: computed,\n\n setSelectedSourceIds: action,\n setSelectedInstanceIds: action,\n setFocusedSourceId: action,\n setFocusedInstanceId: action,\n selectWidget: action,\n });\n }\n\n // TODO (Alex): For these getters, we should differentiate between source and instance selection\n isSourceSelected(sourceId: SbElement) {\n if (this._selectedSourceIds.includes(sourceId)) {\n return true;\n }\n const anyInstanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n return (\n anyInstanceId != null && this._selectedInstanceIds.includes(anyInstanceId)\n );\n }\n isInstanceSelected(instanceId: SbInstance) {\n if (this._selectedInstanceIds.includes(instanceId)) {\n return true;\n }\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n return Boolean(sourceId && this.isSourceSelected(sourceId));\n }\n isSourceFocused(sourceId: SbElement): boolean {\n if (this._focusedSourceId === sourceId) {\n return true;\n }\n const anyInstanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n return anyInstanceId != null && this.isInstanceFocused(anyInstanceId);\n }\n isInstanceFocused(instanceId: SbInstance): boolean {\n if (this._focusedInstanceId === instanceId) {\n return true;\n }\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n return sourceId != null && this.isSourceFocused(sourceId);\n }\n getSelectedSourceIds(): SbElement[] {\n const sourceSet = new Set<SbElement>();\n this._selectedSourceIds.forEach((sourceId) => {\n sourceSet.add(sourceId);\n });\n this._selectedInstanceIds.forEach((instanceId) => {\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (sourceId) {\n sourceSet.add(sourceId);\n }\n });\n return Array.from(sourceSet);\n }\n getSelectedInstanceIds(): SbInstance[] {\n const hasPendingOperations =\n this.editStore.runtimeEntitiesManager.hasEditOperationsPending();\n if (!hasPendingOperations) {\n return this._selectedInstanceIds.filter((instanceId) => {\n const widgetMeta =\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n return !widgetMeta?.isOptimistic;\n });\n }\n return this._selectedInstanceIds;\n }\n\n getRootDataByInstanceId(instanceId: SbInstance) {\n return this._rootInstanceData.get(instanceId);\n }\n\n addRootInstanceId(\n instanceId: SbInstance,\n sourceId: SbElement,\n isRoot: boolean,\n ) {\n this._rootInstanceData.set(instanceId, { sourceId, isRoot });\n }\n\n removeRootInstanceId(instanceId: SbInstance) {\n this._rootInstanceData.delete(instanceId);\n }\n\n isInstanceRoot(instanceId: SbInstance) {\n const rootInstanceData = this._rootInstanceData.get(instanceId);\n return rootInstanceData?.isRoot;\n }\n\n private get focusedSourceId(): SbElement | null {\n if (this._focusedSourceId) {\n return this._focusedSourceId;\n }\n\n const focusedSourceForInstanceId = this._focusedInstanceId\n ? this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n this._focusedInstanceId,\n )\n : null;\n return focusedSourceForInstanceId ?? null;\n }\n\n private get focusedInstanceId(): SbInstance | null {\n if (this._focusedInstanceId) {\n return this._focusedInstanceId;\n }\n const sourceId = this.getFocusedSourceId();\n const instanceIds = sourceId\n ? this.editStore.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n )\n : null;\n return instanceIds && instanceIds.length > 0 ? instanceIds[0] : null;\n }\n\n getFocusedSourceId(): SbElement | null {\n return this.focusedSourceId;\n }\n getFocusedInstanceId(): SbInstance | null {\n return this.focusedInstanceId;\n }\n // End of getters that need to be eventually improved\n\n setSelectedSourceIds(sourceIds: SbElement[]) {\n this.newComponentSelectPromise?.cancel();\n const validIds = sourceIds.filter((sourceId) => {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(sourceId);\n return !!entityMeta;\n });\n this._selectedSourceIds = validIds;\n }\n\n setSelectedInstanceIds(ids: SbInstance[]) {\n this.newComponentSelectPromise?.cancel();\n const validIds = ids.filter((id) => {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(id);\n return !!entityMeta;\n });\n this._selectedInstanceIds = validIds;\n }\n\n setFocusedInstanceId(instanceId: SbInstance | null) {\n this._focusedInstanceId = instanceId;\n }\n\n setFocusedSourceId(sourceId: SbElement | null) {\n if (sourceId) {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(sourceId);\n if (entityMeta) {\n this._focusedSourceId = sourceId;\n }\n } else {\n this._focusedSourceId = null;\n }\n }\n\n selectWidget(\n instanceId: SbInstance | null,\n _addToSelection: boolean = false,\n ) {\n this.newComponentSelectPromise?.cancel();\n\n const addToSelection = _addToSelection && MULTI_SELECT_ENABLED;\n const meta =\n instanceId &&\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n const sourceId = meta?.sourceId;\n const scopeId = meta?.scopeId;\n if (!meta || !sourceId || !scopeId) {\n editorBridge.selectWidgets([]);\n this.setSelectedSourceIds([]);\n this.setSelectedInstanceIds([]);\n this.editStore.propertiesPanelManager.untrackPropertiesPanel();\n return;\n }\n\n const sourceIds = addToSelection\n ? [...this._selectedSourceIds, sourceId]\n : [sourceId];\n const instanceIds = addToSelection\n ? [...this._selectedInstanceIds, instanceId]\n : [instanceId];\n this.setSelectedSourceIds(sourceIds);\n this.setSelectedInstanceIds(instanceIds);\n\n if (scopeId) {\n this.editStore.propertiesPanelManager.trackPropertiesPanel(\n scopeId,\n instanceId,\n sourceId,\n );\n }\n\n editorBridge.selectWidgets(sourceIds);\n }\n\n /**\n * This is cursed because component selection actually needs to be done by instance ids, but\n * instance IDs are only guaranteed to be stable after the component is rendered, while source IDs\n * are assigned by the source tracker.\n *\n * If _any_ other selection comes in before we select something, we will cancel this reaction\n */\n async selectNewComponentBySourceId(\n sourceId: SbElement,\n instanceIdsToIgnore = new Set<SbInstance>(),\n ) {\n this.newComponentSelectPromise?.cancel();\n\n // first select the instance id that is already rendered, it will be an optimistic instance id\n this.newComponentSelectPromise = when(\n () =>\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n ) != null &&\n !instanceIdsToIgnore.has(\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n ),\n ),\n );\n await this.newComponentSelectPromise;\n\n const havePendingOperations =\n this.editStore.runtimeEntitiesManager.getPendingOperations().length !== 0;\n\n const instanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n if (instanceId) {\n this.selectWidget(instanceId);\n\n // then we select our new instance id from the actual source code, but we ignore the first one because it is already rendered\n if (havePendingOperations) {\n instanceIdsToIgnore.add(instanceId);\n await this.selectNewComponentBySourceId(sourceId, instanceIdsToIgnore);\n }\n }\n }\n}\n\nexport default UIStore;\n","import { OBS_TAG_APPLICATION_ID } from \"@superblocksteam/shared\";\nimport { action, makeObservable, observable } from \"mobx\";\nimport posthog from \"posthog-js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { AiManager } from \"./features/ai-store.js\";\nimport ConnectionManager from \"./features/connection-manager.js\";\nimport InteractionLayerManager from \"./features/interaction-layer-manager.js\";\nimport OperationManager from \"./features/operation-store.js\";\nimport PropertiesPanelManager from \"./features/properties-panel-manager.js\";\nimport RuntimeEntitiesManager from \"./features/runtime-entities-manager.js\";\nimport UIStore from \"./features/ui-store.js\";\nimport { startEditorSync } from \"./mobx-sync/mobx-editor-sync.js\";\n\nimport type { IEntityManager } from \"../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { RootStore } from \"../lib/internal-details/lib/root-store.js\";\nimport type { ViteMessageKind } from \"@superblocksteam/library-shared/types\";\nimport type { ViteMessage } from \"@superblocksteam/library-shared/types\";\n\ndeclare global {\n interface Window {\n _SB_ENABLE_SESSION_RECORDING?: boolean;\n __SUPERBLOCKS_EDITOR_HOOK__: InstanceType<typeof EditStore>;\n }\n}\n\nconst isSessionRecordingEnabled = (): boolean => {\n return window._SB_ENABLE_SESSION_RECORDING ?? false;\n};\n\n// A single instance of this is created and attached to the root store when the app is using edit mode\nexport class EditStore {\n ui: UIStore;\n operationManager: OperationManager;\n propertiesPanelManager: PropertiesPanelManager;\n runtimeEntitiesManager: RuntimeEntitiesManager;\n interactionLayerManager: InteractionLayerManager;\n connectionManager: ConnectionManager;\n ai: AiManager;\n\n isInitialized = false;\n recordingInitialized = false;\n isLivePreview = false;\n\n private viteMessageListeners: Map<\n ViteMessageKind,\n Array<(message: any) => void>\n > = new Map();\n\n constructor(rootStore: RootStore) {\n this.ui = new UIStore(rootStore, this);\n this.operationManager = new OperationManager();\n this.runtimeEntitiesManager = new RuntimeEntitiesManager(\n rootStore.nameManager,\n rootStore.entityManager,\n );\n this.propertiesPanelManager = new PropertiesPanelManager(\n this,\n this.runtimeEntitiesManager,\n rootStore.entityManager,\n rootStore.componentRegistry,\n );\n this.interactionLayerManager = new InteractionLayerManager();\n this.connectionManager = new ConnectionManager();\n this.ai = new AiManager(this.runtimeEntitiesManager);\n makeObservable(this, {\n isInitialized: observable,\n isLivePreview: observable,\n setIsInitialized: action,\n });\n\n // TODO: restore after Jesse's demo, but with changes to make it better\n startEditorSync({\n storeId: \"scope\",\n store: rootStore.entityManager,\n projection: (store: IEntityManager) => {\n return store.getFullState;\n },\n debounce: 100,\n });\n\n startEditorSync({\n storeId: \"validationState\",\n store: rootStore.entityManager,\n projection: (store: IEntityManager) => {\n return store.getValidationState;\n },\n debounce: 100,\n });\n }\n\n setIsInitialized(isInitialized: boolean) {\n if (this.isInitialized) return;\n this.isInitialized = isInitialized;\n }\n\n setIsLivePreview(isLivePreview: boolean) {\n this.isLivePreview = isLivePreview;\n }\n\n onViteMessage<\n T extends ViteMessageKind,\n Message extends Extract<ViteMessage, { kind: T }>,\n >(kind: T, callback: (message: Message) => void) {\n this.viteMessageListeners.set(kind, [\n ...(this.viteMessageListeners.get(kind) || []),\n callback,\n ]);\n\n return () => {\n this.viteMessageListeners.set(\n kind,\n this.viteMessageListeners.get(kind)?.filter((cb) => cb !== callback) ||\n [],\n );\n };\n }\n\n triggerViteMessage<\n T extends ViteMessageKind,\n Message extends Extract<ViteMessage, { kind: T }>,\n >(kind: T, message: Message) {\n this.viteMessageListeners.get(kind)?.forEach((cb) => cb(message));\n }\n\n startRecording(recording: {\n userId: string;\n appId: string;\n sessionRecordingKey: string;\n }) {\n if (this.recordingInitialized || !isSessionRecordingEnabled()) {\n return;\n }\n\n posthog.init(recording.sessionRecordingKey, {\n api_host: \"https://us.i.posthog.com\",\n defaults: \"2025-05-24\",\n session_recording: {\n recordCrossOriginIframes: true,\n },\n });\n posthog.identify(recording.userId);\n posthog.register({\n [OBS_TAG_APPLICATION_ID]: recording.appId,\n });\n this.recordingInitialized = true;\n }\n}\n\nif (!window.__SUPERBLOCKS_EDITOR_HOOK__) {\n // Singleton instance for global access to EditStore\n window.__SUPERBLOCKS_EDITOR_HOOK__ = new EditStore(rootStore);\n}\n\nexport function initializeEditStore() {\n if (!window.__SUPERBLOCKS_EDITOR_HOOK__) {\n return;\n }\n window.__SUPERBLOCKS_EDITOR_HOOK__.setIsInitialized(true);\n}\n","import { useHotkeys as useHotkeysOriginal } from \"react-hotkeys-hook\";\nimport type { KeyHandler } from \"hotkeys-js\";\nimport type { Options } from \"react-hotkeys-hook\";\n\nexport function useEditorHotkeys<T extends Element>(\n keys: string,\n callback: KeyHandler,\n options?: any[] | Options,\n deps?: any[],\n): React.MutableRefObject<T | null> | undefined {\n if (options instanceof Array) {\n deps = options;\n options = undefined;\n }\n\n return useHotkeysOriginal(keys, callback, options, [...(deps ?? []), false]);\n}\n","import { useEffect } from \"react\";\n\nexport function useKeyPressed(\n key: string,\n callback: (isPressed: boolean) => void,\n) {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === key && !e.repeat) {\n callback(true);\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === key) {\n callback(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, [key, callback]);\n}\n","import { AiContextMode } from \"@superblocksteam/library-shared/types\";\nimport { useEditorHotkeys } from \"../lib/hooks/use-editor-hotkeys.js\";\nimport { useKeyPressed } from \"../lib/hooks/use-key-pressed.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport { selectDisplayNameAndVisibility } from \"./interaction-layer/interaction-rect.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\n\nexport function EditorHotkeys({ children }: { children: React.ReactNode }) {\n useEditorHotkeys(\n \"ctrl+z, command+z\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.undo();\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n useEditorHotkeys(\n \"c\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n const selectedSourceIds = getEditStore().ui.getSelectedSourceIds();\n const selectedInstanceIds = getEditStore().ui.getSelectedInstanceIds();\n if (selectedSourceIds.length > 0) {\n editorBridge.toggleComponentInAiContext(\n selectedSourceIds[0],\n selectedInstanceIds[0],\n selectDisplayNameAndVisibility(selectedInstanceIds[0])?.displayName,\n );\n }\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n\n useEditorHotkeys(\n \"ctrl+shift+z, command+shift+z\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.redo();\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n\n useEditorHotkeys(\"backspace, delete\", (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n e.target instanceof HTMLInputElement ||\n e.target instanceof HTMLTextAreaElement\n ) {\n return;\n }\n const editStore = getEditStore();\n editStore.operationManager.deleteComponents(\n editStore.ui.getSelectedSourceIds(),\n );\n editStore.ui.selectWidget(null);\n });\n\n useKeyPressed(\"Alt\", (isPressed) => {\n editorBridge.setAiContextMode(\n isPressed ? AiContextMode.AUTO_SELECT : AiContextMode.SILENT,\n );\n });\n\n useEditorHotkeys(\"esc\", (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.setAiContextMode(AiContextMode.SILENT);\n });\n\n return <>{children}</>;\n}\n","import {\n AiGenerationState,\n ViteMessageKind,\n type SbApi,\n type SbElement,\n} from \"@superblocksteam/library-shared/types\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { generatePath, useLocation, useNavigate } from \"react-router\";\nimport { FullPageSpinner } from \"../lib/internal-details/internal-components/spinner.jsx\";\nimport { isEditMode } from \"../lib/internal-details/is-edit-mode.js\";\nimport { getName } from \"../lib/internal-details/lib/evaluator/names.js\";\nimport { useGetCurrentUserQuery } from \"../lib/internal-details/lib/features/injected-features.js\";\nimport {\n isEmbeddedBySuperblocksFirstParty,\n iframeMessageHandler,\n} from \"../lib/internal-details/lib/iframe.js\";\n\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { updateGlobalScope } from \"../lib/internal-details/scope/global.jsx\";\nimport runEventHandlers from \"../lib/triggers/run-event-handlers.js\";\nimport { EventFlow } from \"../lib/user-facing/event-flow.js\";\nimport { BuildErrorNotification } from \"./build-error-notification.jsx\";\nimport createComponent from \"./create-component.js\";\nimport { DnDProvider } from \"./dnd/dnd-provider.jsx\";\nimport { NewComponentsDragLayer } from \"./dnd/new-components-drag-layer.jsx\";\nimport { initializeEditStore } from \"./edit-store.js\";\nimport { EditorHotkeys } from \"./editor-hotkeys.jsx\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport sourceUpdateApi from \"./source-update-api.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\nimport type { IframeEventHandler } from \"../lib/internal-details/lib/iframe.js\";\nimport type { MessageAction } from \"../lib/user-facing/types.js\";\n\nconst IframeConnected = observer(function IframeConnected(\n props: React.PropsWithChildren,\n) {\n useEffect(() => {\n if (!isEmbeddedBySuperblocksFirstParty()) {\n return;\n }\n\n const handleInit: IframeEventHandler<\"sb-init\"> = async ({ data }) => {\n initializeEditStore();\n\n const editStore = getEditStore();\n editorBridge.connected();\n rootStore.setEditStore(editStore);\n\n const { aiState } = data.payload;\n if (\n aiState?.generationState &&\n (aiState.generationState === AiGenerationState.GENERATING ||\n aiState.generationState === AiGenerationState.DEBUGGING)\n ) {\n editStore.ai.startEditing();\n if (aiState.editingComponents) {\n editStore.ai.setEditingComponents(aiState.editingComponents);\n }\n }\n\n if (\n data.payload.sessionRecordingKey &&\n data.payload.userId &&\n data.payload.appId\n ) {\n editStore.startRecording({\n userId: data.payload.userId,\n appId: data.payload.appId,\n sessionRecordingKey: data.payload.sessionRecordingKey,\n });\n }\n\n try {\n await sourceUpdateApi.connect({\n peerId: data.payload.peerId,\n userId: data.payload.userId,\n applicationId: data.payload.appId,\n });\n } catch (error) {\n console.error(\n \"Error connecting to internal socket from library\",\n error,\n );\n // This will close the iframe\n editorBridge.socketError(\n \"Error connecting to the remote dev server, please refresh the page\",\n );\n return;\n }\n\n editorBridge.updatePropertiesPanels(\n editStore.propertiesPanelManager.getNonDynamicPropertiesPanels(),\n );\n };\n iframeMessageHandler.addEventListener(\"sb-init\", handleInit);\n editorBridge.sendReady();\n\n return () => {\n iframeMessageHandler.removeEventListener(\"sb-init\", handleInit);\n };\n }, []);\n\n // for drag and drop\n useEffect(() => {\n const handleDragStart: IframeEventHandler<\"dragstart\"> = ({ data }) => {\n getEditStore().ui.dnd.startNewComponentDrag({\n componentType: data.item.componentType,\n });\n };\n iframeMessageHandler.addEventListener(\"dragstart\", handleDragStart);\n return () => {\n iframeMessageHandler.removeEventListener(\"dragstart\", handleDragStart);\n };\n }, []);\n\n // This is not a production-ready hack because it prevents all embedding\n const isPossiblyEditor = useMemo(isEmbeddedBySuperblocksFirstParty, []);\n\n const connectionStatus =\n rootStore.editStore?.connectionManager.connectionStatus;\n if (connectionStatus === \"pre-init\" || connectionStatus === \"connecting\") {\n return <FullPageSpinner />;\n }\n\n if (\n isPossiblyEditor &&\n rootStore.editStore?.isInitialized &&\n typeof window !== \"undefined\"\n ) {\n return (\n <DnDProvider>\n <NewComponentsDragLayer />\n {props.children}\n </DnDProvider>\n );\n }\n\n if (isEditMode()) {\n console.log(\"In edit mode, but editor has not initialized yet\");\n return null;\n }\n\n return <React.Fragment>{props.children}</React.Fragment>;\n});\n\nconst WithUserWrapper = (props: React.PropsWithChildren) => {\n const { data: currentUser, isLoading } = useGetCurrentUserQuery();\n\n if (isLoading) {\n return <FullPageSpinner />;\n }\n\n if (!currentUser) {\n return <div>No user found</div>;\n }\n\n return <>{props.children}</>;\n};\n\nconst Auth0Wrapper = (props: React.PropsWithChildren) => {\n return (\n <WithUserWrapper>\n <IframeConnected>{props.children}</IframeConnected>\n </WithUserWrapper>\n );\n};\n\nconst EmbedWrapper = (props: React.PropsWithChildren) => {\n const isRetrievingToken = useRef(false);\n const [error, setError] = useState<string | undefined>();\n const [isLoaded, setIsLoaded] = useState(false);\n\n const navigate = useNavigate();\n\n useEffect(() => {\n const maxRetries = 20;\n let retryCount = 0;\n let timeout: NodeJS.Timeout;\n\n const attemptBootstrap = () => {\n if (rootStore.apis.isInitialized()) {\n return;\n }\n\n if (retryCount < maxRetries) {\n retryCount++;\n\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n\n timeout = setTimeout(attemptBootstrap, 200);\n } else {\n setError(\"Token took too long to load after multiple retries\");\n }\n };\n\n timeout = setTimeout(attemptBootstrap, 200);\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n const bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n > = (event) => {\n try {\n rootStore.applicationId = event.data.payload.appId;\n rootStore.userId = event.data.payload.userId;\n rootStore.apis.agentUrls =\n event.data.payload.agentUrls ??\n (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);\n rootStore.apis.setTokens(\n event.data.payload.token,\n event.data.payload.accessToken,\n );\n\n const windowOriginUrl = event.data.payload.logContext\n .superblocks_window_origin_url as string;\n rootStore.windowOriginUrl = windowOriginUrl;\n\n if (rootStore.windowOriginUrl) {\n import(\"../lib/utils.js\").then(({ initTracerProviderWithOrigin }) => {\n initTracerProviderWithOrigin(rootStore.windowOriginUrl!);\n\n import(\"../lib/tracing/logs.js\").then(\n ({ initLibraryLoggerProvider }) => {\n initLibraryLoggerProvider({\n windowOriginUrl: rootStore.windowOriginUrl!,\n appId: event.data.payload.appId,\n userId: event.data.payload.logContext\n .superblocks_user_id as string,\n userEmail: event.data.payload.logContext\n .superblocks_user_email as string,\n orgId: event.data.payload.logContext\n .superblocks_org_id as string,\n orgName: event.data.payload.logContext\n .superblocks_org_name as string,\n environment: event.data.payload.logContext\n .superblocks_env as string,\n });\n },\n );\n });\n }\n\n setIsLoaded(true);\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n } catch (e) {\n setError(e?.toString());\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n\n const updateActiveAgentsListener: IframeEventHandler<\n \"sb-update-active-agents\"\n > = (event) => {\n rootStore.apis.agentUrls = event.data.payload.agentUrls;\n };\n iframeMessageHandler.addEventListener(\n \"sb-update-active-agents\",\n updateActiveAgentsListener,\n );\n\n const retrievePropertyPanelPropsListener: IframeEventHandler<\n \"sb-retrieve-property-panel-props\"\n > = (event) => {\n const sourceId = event.data.payload.sourceId as SbElement;\n\n const instanceId =\n getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n const scopeId =\n getEditStore().runtimeEntitiesManager.getScopeIdForSourceId(sourceId);\n\n if (!sourceId || !scopeId) {\n getEditStore().ui.setSelectedSourceIds([]);\n getEditStore().ui.setSelectedInstanceIds([]);\n getEditStore().ui.setFocusedSourceId(null);\n getEditStore().ui.setFocusedInstanceId(null);\n return;\n }\n\n const alreadySelected = getEditStore().ui.isSourceSelected(sourceId);\n if (!alreadySelected) {\n getEditStore().ui.setSelectedSourceIds([sourceId]);\n getEditStore().ui.setSelectedInstanceIds([instanceId]);\n getEditStore().ui.setFocusedSourceId(sourceId);\n getEditStore().ui.setFocusedInstanceId(instanceId);\n }\n getEditStore().propertiesPanelManager.trackPropertiesPanel(\n scopeId,\n instanceId,\n sourceId,\n );\n };\n iframeMessageHandler.addEventListener(\n \"sb-retrieve-property-panel-props\",\n retrievePropertyPanelPropsListener,\n );\n\n const editOperationAcknowledgeListener: IframeEventHandler<\n \"sb-edit-operation-acknowledge\"\n > = (event) => {\n getEditStore().operationManager.acknowledgeEditOperation(\n event.data.payload,\n );\n };\n iframeMessageHandler.addEventListener(\n \"sb-edit-operation-acknowledge\",\n editOperationAcknowledgeListener,\n );\n\n const updatePropertyWithEffectsListener: IframeEventHandler<\n \"sb-update-property-with-effects\"\n > = (event) => {\n const payload = {\n sourceId: event.data.payload.sourceId as SbElement,\n updates: event.data.payload.updates,\n };\n const propUpdates =\n getEditStore().propertiesPanelManager.computeAndApplySideEffectsForPropertyUpdate(\n payload,\n );\n\n editorBridge.resolvePromise(event.data.payload.callbackId, propUpdates);\n\n Object.keys(propUpdates).forEach((sourceId) => {\n getEditStore().operationManager.writeRuntimeProperties(\n sourceId as SbElement,\n event.data.payload.transaction.id,\n propUpdates[sourceId as SbElement],\n );\n });\n };\n iframeMessageHandler.addEventListener(\n \"sb-update-property-with-effects\",\n updatePropertyWithEffectsListener,\n );\n\n const createComponentListener: IframeEventHandler<\n \"sb-create-component\"\n > = async (event) => {\n const {\n componentType,\n parent,\n scopeName,\n baseProperties,\n skipSecondaryComponentsCreation,\n otherComponentsUpdates,\n } = event.data.payload;\n\n try {\n await createComponent({\n componentType,\n parent,\n scopeName,\n baseProperties,\n skipSecondaryComponentsCreation,\n otherComponentsUpdates,\n });\n } catch (error) {\n console.error(\"Failed to create component:\", error);\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-create-component\",\n createComponentListener,\n );\n\n const toggleLivePreviewListener: IframeEventHandler<\n \"sb-toggle-live-preview\"\n > = async (event) => {\n const { isLivePreview } = event.data.payload;\n\n rootStore.editStore?.setIsLivePreview(isLivePreview);\n };\n iframeMessageHandler.addEventListener(\n \"sb-toggle-live-preview\",\n toggleLivePreviewListener,\n );\n\n const globalSyncListener: IframeEventHandler<\"sb-global-sync\"> = (\n event,\n ) => {\n const { global } = event.data.payload;\n updateGlobalScope(global);\n };\n iframeMessageHandler.addEventListener(\"sb-global-sync\", globalSyncListener);\n\n const navigateToListener: IframeEventHandler<\"route-change\"> = async (\n event,\n ) => {\n const { route, routeParams, queryParams } = event.data.payload;\n\n const eventSearch = new URLSearchParams(queryParams);\n const nextSearch = new URLSearchParams(window.location.search);\n\n for (const [key, value] of eventSearch.entries()) {\n nextSearch.set(key, value);\n }\n\n await navigate({\n pathname: generatePath(route, routeParams),\n search: nextSearch.toString(),\n });\n };\n iframeMessageHandler.addEventListener(\"route-change\", navigateToListener);\n\n const aiUpdatesListener: IframeEventHandler<\"ai-updates\"> = (event) => {\n const { type } = event.data.payload;\n switch (type) {\n case \"start-editing\": {\n getEditStore().ai.startEditing();\n if (event.data.payload.components) {\n getEditStore().ai.setEditingComponents(\n event.data.payload.components,\n );\n }\n break;\n }\n case \"update-editing-entities\": {\n getEditStore().ai.setEditingComponents(event.data.payload.components);\n break;\n }\n case \"finish-editing\": {\n getEditStore().ai.finishEditing();\n break;\n }\n case \"set-ai-context-mode\": {\n const { mode, components } = event.data.payload;\n getEditStore().ai.setAiContextMode(mode, components);\n break;\n }\n case \"set-tagging-enabled\": {\n const { isTaggingEnabled } = event.data.payload;\n getEditStore().ai.setIsTaggingEnabled(isTaggingEnabled);\n break;\n }\n }\n };\n\n iframeMessageHandler.addEventListener(\"ai-updates\", aiUpdatesListener);\n\n return () => {\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-update-active-agents\",\n updateActiveAgentsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-edit-operation-acknowledge\",\n editOperationAcknowledgeListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-update-property-with-effects\",\n updatePropertyWithEffectsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-retrieve-property-panel-props\",\n retrievePropertyPanelPropsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-create-component\",\n createComponentListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-global-sync\",\n globalSyncListener,\n );\n iframeMessageHandler.removeEventListener(\n \"route-change\",\n navigateToListener,\n );\n iframeMessageHandler.removeEventListener(\"ai-updates\", aiUpdatesListener);\n };\n }, [navigate]);\n\n useEffect(() => {\n const messageListener = (event: MessageEvent) => {\n if (event.data?.type === \"parent-action-batch\" && event.data.payload) {\n event.data.payload.forEach((action: MessageAction) => {\n // TODO(code-mode): we ideally have a way to share this payload type from the editor, or\n // the editor should be able to import this type from the library\n switch (action.type) {\n case \"operations/editor:selectWidgets\": {\n const sourceIds: SbElement[] = action.payload.sourceIds;\n\n getEditStore().ui.setSelectedSourceIds(sourceIds);\n\n const instanceIds = sourceIds.map((sourceId) => {\n return getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n });\n getEditStore().ui.setSelectedInstanceIds(instanceIds);\n break;\n }\n case \"RUN_API\": {\n const { apiName, scopeId, manualRun, traceHeaders } =\n action.payload;\n const api = rootStore.entityManager.getEntity(\n scopeId,\n getName(apiName),\n );\n if (!api || api.type !== \"SbApi\") {\n throw new Error(`API ${apiName} not found`);\n }\n runEventHandlers({\n flow: EventFlow.runApis([api as SbApi]),\n name: getName(apiName),\n scopeId,\n additionalContext: {\n manualRun,\n traceHeaders,\n },\n });\n\n break;\n }\n }\n });\n }\n };\n\n window.addEventListener(\"message\", messageListener);\n return () => window.removeEventListener(\"message\", messageListener);\n }, []);\n\n /**\n * This effect registers a listener that's called by the Vite dev server\n * after creating a new page. This helps us avoid race conditions by first\n * waiting for the page to be fully loaded and registered in the router\n * before attempting to navigate to it.\n * */\n const location = useLocation();\n useEffect(() => {\n try {\n const editStore = getEditStore();\n return editStore.onViteMessage(\n ViteMessageKind.ROUTE_CHANGE,\n async (message) => {\n try {\n const { route, routeTestParams } = message;\n const path = generatePath(route, routeTestParams);\n await navigate({ pathname: path, search: location.search });\n } catch (error) {\n throw new Error(`Failed to navigate to route: ${error}`);\n }\n },\n );\n } catch {\n return;\n }\n }, [navigate, location, isLoaded]);\n\n if (!isLoaded && error) {\n return (\n <div>\n <h3>There was an error logging in to Superblocks.</h3>\n <p>{error}</p>\n </div>\n );\n }\n\n if (!rootStore.apis.isInitialized() && !isLoaded) {\n if (!isRetrievingToken.current && window.parent !== window.self) {\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n isRetrievingToken.current = true;\n }\n\n return <FullPageSpinner />;\n }\n\n return (\n <WithUserWrapper>\n <IframeConnected>\n <BuildErrorNotification />\n <EditorHotkeys>{props.children}</EditorHotkeys>\n </IframeConnected>\n </WithUserWrapper>\n );\n};\n\nexport { EmbedWrapper, Auth0Wrapper };\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { generatePath, useNavigate } from \"react-router\";\nimport runEventHandlers from \"../triggers/run-event-handlers.js\";\nimport { EventFlow } from \"../user-facing/event-flow.js\";\nimport { FullPageSpinner } from \"./internal-components/spinner.jsx\";\nimport { getName } from \"./lib/evaluator/names.js\";\nimport { useGetCurrentUserQuery } from \"./lib/features/injected-features.js\";\nimport { iframeMessageHandler } from \"./lib/iframe.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { updateGlobalScope } from \"./scope/global.jsx\";\nimport type { IframeEventHandler } from \"./lib/iframe.js\";\nimport type { MessageAction } from \"../user-facing/types.js\";\nimport type { SbApi } from \"@superblocksteam/library-shared/types\";\n\nconst WithUserWrapper = (props: React.PropsWithChildren) => {\n const { data: currentUser, isLoading } = useGetCurrentUserQuery();\n\n if (isLoading) {\n return <FullPageSpinner />;\n }\n\n if (!currentUser) {\n return <div>No user found</div>;\n }\n\n return <>{props.children}</>;\n};\n\nconst Auth0Wrapper = (props: React.PropsWithChildren) => {\n return <WithUserWrapper>{props.children}</WithUserWrapper>;\n};\n\nconst EmbedWrapper = (props: React.PropsWithChildren) => {\n const isRetrievingToken = useRef(false);\n const [error, setError] = useState<string | undefined>();\n const [isLoaded, setIsLoaded] = useState(false);\n const navigate = useNavigate();\n useEffect(() => {\n const maxRetries = 20;\n let retryCount = 0;\n let timeout: NodeJS.Timeout;\n\n const attemptBootstrap = () => {\n if (rootStore.apis.isInitialized()) {\n return;\n }\n\n if (retryCount < maxRetries) {\n retryCount++;\n\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n\n timeout = setTimeout(attemptBootstrap, 200);\n } else {\n setError(\"Token took too long to load after multiple retries\");\n }\n };\n\n timeout = setTimeout(attemptBootstrap, 200);\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n const bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n > = (event) => {\n try {\n rootStore.applicationId = event.data.payload.appId;\n rootStore.apis.agentUrls =\n event.data.payload.agentUrls ??\n (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);\n rootStore.apis.setTokens(\n event.data.payload.token,\n event.data.payload.accessToken,\n );\n\n const windowOriginUrl = event.data.payload.logContext\n .superblocks_window_origin_url as string;\n rootStore.windowOriginUrl = windowOriginUrl;\n\n if (rootStore.windowOriginUrl) {\n import(\"../utils.js\").then(({ initTracerProviderWithOrigin }) => {\n initTracerProviderWithOrigin(rootStore.windowOriginUrl!);\n\n // NEW: Initialize logging with full context\n import(\"../tracing/logs.js\").then(\n ({ initLibraryLoggerProvider }) => {\n initLibraryLoggerProvider({\n windowOriginUrl: rootStore.windowOriginUrl!,\n appId: event.data.payload.appId,\n userId: event.data.payload.logContext\n .superblocks_user_id as string,\n userEmail: event.data.payload.logContext\n .superblocks_user_email as string,\n orgId: event.data.payload.logContext\n .superblocks_org_id as string,\n orgName: event.data.payload.logContext\n .superblocks_org_name as string,\n environment: event.data.payload.logContext\n .superblocks_env as string,\n });\n },\n );\n });\n }\n\n setIsLoaded(true);\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n } catch (e) {\n setError(e?.toString());\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n\n const globalSyncListener: IframeEventHandler<\"sb-global-sync\"> = (\n event,\n ) => {\n const { global } = event.data.payload;\n updateGlobalScope(global);\n };\n iframeMessageHandler.addEventListener(\"sb-global-sync\", globalSyncListener);\n\n const navigateToListener: IframeEventHandler<\"route-change\"> = async (\n event,\n ) => {\n const { route, routeParams, queryParams } = event.data.payload;\n\n const eventSearch = new URLSearchParams(queryParams);\n const nextSearch = new URLSearchParams(window.location.search);\n\n for (const [key, value] of eventSearch.entries()) {\n nextSearch.set(key, value);\n }\n\n await navigate({\n pathname: generatePath(route, routeParams),\n search: nextSearch.toString(),\n });\n };\n iframeMessageHandler.addEventListener(\"route-change\", navigateToListener);\n\n return () => {\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-global-sync\",\n globalSyncListener,\n );\n iframeMessageHandler.removeEventListener(\n \"route-change\",\n navigateToListener,\n );\n };\n }, [navigate]);\n\n useEffect(() => {\n const messageListener = (event: MessageEvent) => {\n // TODO confirm we can get rid of these event handlers - they may only run in edit mode\n if (event.data?.type === \"parent-action-batch\" && event.data.payload) {\n event.data.payload.forEach((action: MessageAction) => {\n // TODO(code-mode): we ideally have a way to share this payload type from the editor, or\n // the editor should be able to import this type from the library\n switch (action.type) {\n case \"RUN_API\": {\n const { apiName, scopeId, manualRun } = action.payload;\n const api = rootStore.entityManager.getEntity(\n scopeId,\n getName(apiName),\n );\n if (!api || api.type !== \"SbApi\") {\n throw new Error(`API ${apiName} not found`);\n }\n runEventHandlers({\n flow: EventFlow.runApis([api as SbApi]),\n name: getName(apiName),\n scopeId,\n additionalContext: {\n manualRun,\n },\n });\n\n break;\n }\n }\n });\n }\n };\n\n window.addEventListener(\"message\", messageListener);\n return () => window.removeEventListener(\"message\", messageListener);\n }, []);\n\n if (!isLoaded && error) {\n return (\n <div>\n <h3>There was an error logging in to Superblocks.</h3>\n <p>{error}</p>\n </div>\n );\n }\n\n if (!rootStore.apis.isInitialized() && !isLoaded) {\n if (!isRetrievingToken.current && window.parent !== window.self) {\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n isRetrievingToken.current = true;\n }\n\n return <FullPageSpinner />;\n }\n\n return <WithUserWrapper>{props.children}</WithUserWrapper>;\n};\n\nexport { EmbedWrapper, Auth0Wrapper };\n","import React from \"react\";\nimport {\n ErrorIconContainer,\n StyledClarkIcon,\n ErrorTitle,\n ErrorMessage,\n ErrorDetails,\n ErrorSummary,\n ErrorStack,\n ErrorContainer,\n ErrorContent,\n SecondaryButton,\n ActionsContainer,\n} from \"../common.js\";\nimport { FixWithClarkButton } from \"../fix-with-clark-button.jsx\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n theme?: UserAccessibleTheme;\n}\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"Superblocks application error:\", error, errorInfo);\n }\n\n handleRefresh = () => {\n window.location.reload();\n };\n\n render() {\n if (this.state.hasError) {\n return (\n <ErrorContainer>\n <ErrorContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <ErrorTitle>Something went wrong</ErrorTitle>\n <ErrorMessage>\n {this.state.error?.message || \"Unknown error\"}\n </ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={this.state.error} />\n <SecondaryButton onClick={this.handleRefresh}>\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {this.state.error && (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{this.state.error.stack}</ErrorStack>\n </ErrorDetails>\n )}\n </ErrorContent>\n </ErrorContainer>\n );\n }\n\n return this.props.children;\n }\n}\n","import equal from \"@superblocksteam/fast-deep-equal/es6\";\nimport { useContext, useEffect, useMemo, useRef } from \"react\";\nimport {\n UNSAFE_DataRouterContext,\n useLocation,\n useNavigate,\n useParams,\n type Location,\n} from \"react-router\";\nimport { editorBridge } from \"../../edit-mode/superblocks-editor-bridge.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { isLocalLink } from \"./utils/is-local-link.js\";\nimport { navigation } from \"./utils/navigation.js\";\nimport type { NavigationEvent } from \"./utils/navigation.js\";\n\nexport function useTrackRouteChange() {\n const routerContext = useContext(UNSAFE_DataRouterContext);\n const location = useLocation();\n const params = useParams();\n const prevLocation = useRef<Location>();\n\n const routes = useMemo(() => {\n const rootRoute = routerContext?.router.routes.find(\n (route) => route.path === \"/\",\n );\n\n if (!rootRoute) return [];\n\n return [rootRoute, ...(rootRoute?.children ?? [])];\n }, [routerContext?.router.routes]);\n\n useEffect(() => {\n if (equal(location, prevLocation.current)) return;\n rootStore.locationStore?.updateLocation(location, routes, params);\n // TODO: how do we decouple this routing change from the widget selection?\n rootStore.editStore?.ui.selectWidget(null);\n prevLocation.current = location;\n }, [location, params, routes]);\n}\n\nexport function useInterceptNavigation() {\n const navigate = useNavigate();\n\n useEffect(() => {\n const navigationHandler = (event: NavigationEvent) => {\n if (\n event.navigationType === \"traverse\" ||\n event.navigationType === \"reload\"\n ) {\n return;\n }\n\n if (isLocalLink(event.destination.url)) {\n if (!event.userInitiated) {\n return;\n }\n\n const newURL = new URL(event.destination.url, window.location.origin);\n const currentURL = new URL(window.location.href);\n\n if (\n newURL.pathname === currentURL.pathname &&\n newURL.search === currentURL.search &&\n newURL.hash === currentURL.hash\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n navigate({\n pathname: newURL.pathname,\n search: newURL.search,\n hash: newURL.hash,\n });\n } else {\n // TODO: move the bridge interface so its not \"editorBridge\". right now this works because the bridge is mocked in\n // deployed mode, but its gross.\n editorBridge.navigateTo(event.destination.url, event.newWindow);\n }\n };\n\n navigation.addEventListener(\"navigate\", navigationHandler);\n\n return () => {\n navigation.removeEventListener(\"navigate\", navigationHandler);\n };\n }, [navigate]);\n}\n","import { compile, middleware, prefixer, serialize, stringify } from \"stylis\";\n\nexport const VARIABLES: Record<string, string> = {\n primaryColor: \"--primary-color\",\n};\n\nconst VARIABLE_VALUES: Record<keyof typeof VARIABLES, string> = {\n primaryColor: \"blue\",\n};\n\nlet componentVariables: Record<string, string> = {};\nlet componentVariableValues: Record<string, string> = {};\n\nconst createStyleSheetFromString = (sheetId: string, styleSheet: string) => {\n const styles = serialize(\n compile(styleSheet),\n middleware([prefixer, stringify]),\n );\n const existingStyleTag = document.getElementById(sheetId);\n const styleTag = existingStyleTag ?? document.createElement(\"style\");\n styleTag.setAttribute(\"id\", sheetId);\n styleTag.replaceChildren(document.createTextNode(styles));\n if (existingStyleTag) return;\n document.head.appendChild(styleTag);\n};\n\nconst registry: Record<string, string> = {};\nexport const registerComponentStyle = (\n componentName: string,\n styleSheet: string,\n variableDefns: Record<string, string>,\n variableValues: Record<string, string>,\n) => {\n componentVariables = { ...componentVariables, ...variableDefns };\n componentVariableValues = { ...componentVariableValues, ...variableValues };\n const sheetId = `${componentName}-styles`;\n registry[sheetId] = styleSheet;\n};\n\nexport const initializeStyles = (appName: string) => {\n const stylesheet = Object.entries(registry)\n .map(([, styleSheet]) => styleSheet)\n .join(\"\\n\");\n const allVariables = { ...VARIABLES, ...componentVariables };\n const allVariableValues = { ...VARIABLE_VALUES, ...componentVariableValues };\n const variableDefns = Object.keys(allVariables)\n .map(\n (variable) =>\n `${allVariables[variable]}: ${allVariableValues[variable]};`,\n )\n .join(\"\\n\");\n createStyleSheetFromString(\n appName,\n `:${appName} {${variableDefns}}\\n${stylesheet}`,\n );\n};\n\nexport const MIN_EMPTY_WIDGET_SIZE = \"15px\";\n","import { getBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport { merge } from \"lodash\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n Auth0Wrapper as EditorAuth0Wrapper,\n EmbedWrapper as EditorEmbedWrapper,\n} from \"../../edit-mode/iframe-wrappers.jsx\";\nimport {\n Auth0Wrapper as AppAuth0Wrapper,\n EmbedWrapper as AppEmbedWrapper,\n} from \"../internal-details/app-wrappers.jsx\";\nimport { ErrorBoundary } from \"../internal-details/internal-components/error-boundary/index.jsx\";\nimport { FullPageSpinner } from \"../internal-details/internal-components/spinner.jsx\";\nimport { isEditMode } from \"../internal-details/is-edit-mode.js\";\nimport { DevTools } from \"../internal-details/lib/devtools/index.jsx\";\nimport {\n iframeMessageHandler,\n type IframeEventHandler,\n} from \"../internal-details/lib/iframe.js\";\nimport {\n rejectById,\n resolveById,\n} from \"../internal-details/lib/resolve-id-singleton.js\";\nimport rootStore from \"../internal-details/lib/root-store.js\";\nimport {\n useInterceptNavigation,\n useTrackRouteChange,\n} from \"../internal-details/routing.js\";\nimport { GlobalScope } from \"../internal-details/scope/global.jsx\";\nimport { ThemeProvider } from \"../internal-details/theme-context.jsx\";\nimport {\n CANVAS_ROOT_ID,\n POPOVER_ROOT_ID,\n PORTAL_ROOT_ID,\n} from \"./constants.js\";\nimport { initializeStyles } from \"./styling/styles.js\";\nimport { BASE_THEME_V5 } from \"./themes/constants.js\";\nimport { DEFAULT_THEME } from \"./themes/default-theme.js\";\nimport { generateTheme } from \"./themes/generate-theme.js\";\nimport type {\n GeneratedTheme,\n Theme,\n UserAccessibleTheme,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nconst originalLog = console.log;\n\nconsole.log = (...args) => {\n try {\n const processedArgs = args.map((arg) => {\n if (\n arg &&\n typeof arg === \"object\" &&\n (getBindingIdentifier(arg) || getBindingIdentifier(arg.bind ?? {}))\n ) {\n return JSON.parse(JSON.stringify(arg));\n }\n return arg;\n });\n originalLog(...processedArgs);\n } catch {\n // Do nothing\n }\n};\n\nconst loadApisIntoLibrary = async function loadApisIntoLibrary() {\n if (!isEditMode()) {\n try {\n const mod = await import(\"./build-manifest.js\");\n rootStore.apis.loadApiManifest(mod.default);\n } catch (error) {\n console.error(\"Error loading apis into library\", error);\n }\n }\n};\n\nconst Auth0Wrapper = isEditMode() ? EditorAuth0Wrapper : AppAuth0Wrapper;\nconst EmbedWrapper = isEditMode() ? EditorEmbedWrapper : AppEmbedWrapper;\n\nconst SbProvider = function SbProvider({\n name = \"codemode\",\n settings,\n children,\n}: {\n name: string;\n settings?: Record<string, any> & {\n theme?: Theme;\n themeOverrides?: Partial<GeneratedTheme>;\n };\n children?: React.ReactNode;\n}) {\n const isEmbedded =\n typeof window !== \"undefined\" && window.parent !== window.self;\n\n const [isApisInitialized, setIsApisInitialized] = useState(false);\n const [userAccessibleTheme, setUserAccessibleTheme] =\n useState<UserAccessibleTheme>(DEFAULT_THEME);\n\n const runApiInitialization = useCallback(async () => {\n await loadApisIntoLibrary();\n setIsApisInitialized(true);\n }, []);\n\n useTrackRouteChange();\n useInterceptNavigation();\n\n useEffect(() => {\n runApiInitialization();\n }, [runApiInitialization]);\n\n useEffect(() => {\n const mergedTheme: UserDefinedTheme = merge(BASE_THEME_V5, settings?.theme);\n const generatedTheme = generateTheme(mergedTheme, settings?.themeOverrides);\n const userAccessibleTheme = generatedTheme as UserAccessibleTheme;\n setUserAccessibleTheme(userAccessibleTheme);\n }, [settings?.theme, settings?.themeOverrides]);\n\n useEffect(() => {\n const resolvePromiseListener: IframeEventHandler<\"resolve-promise\"> = (\n event,\n ) => {\n resolveById(event.data.callbackId, event.data.payload);\n };\n\n const rejectPromiseListener: IframeEventHandler<\"reject-promise\"> = (\n event,\n ) => {\n rejectById(event.data.callbackId, event.data.payload);\n };\n\n // These handlers need to be here instead of on the iframe wrappers because\n // we need the promise resolution on the API set before we render the iframe wrapper\n iframeMessageHandler.addEventListener(\n \"resolve-promise\",\n resolvePromiseListener,\n );\n iframeMessageHandler.addEventListener(\n \"reject-promise\",\n rejectPromiseListener,\n );\n return () => {\n iframeMessageHandler.removeEventListener(\n \"resolve-promise\",\n resolvePromiseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"reject-promise\",\n rejectPromiseListener,\n );\n };\n }, []);\n\n useEffect(() => {\n initializeStyles(name);\n }, [name]);\n\n if (!isApisInitialized) {\n return <FullPageSpinner />;\n }\n\n return (\n <div\n style={{\n \"--primary-color\": settings?.theme?.primaryColor ?? \"#08a4ff\",\n \"--border-radius\": settings?.theme?.borderRadius\n ? `${settings.theme.borderRadius.value}${settings.theme.borderRadius.mode}`\n : \"4px\",\n height: \"100svh\",\n width: \"100%\",\n }}\n id=\"sb-provider-root\"\n >\n <ErrorBoundary theme={userAccessibleTheme}>\n <div\n id={CANVAS_ROOT_ID}\n style={{\n height: \"100%\",\n width: \"100%\",\n // let the page to handle the scrolling, avoiding double scrollbars\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <ThemeProvider theme={userAccessibleTheme}>\n <GlobalScope>\n {isEmbedded ? (\n <EmbedWrapper>{children}</EmbedWrapper>\n ) : (\n <Auth0Wrapper>{children}</Auth0Wrapper>\n )}\n </GlobalScope>\n </ThemeProvider>\n <DevTools />\n </div>\n </ErrorBoundary>\n <div id={PORTAL_ROOT_ID} data-superblocks={PORTAL_ROOT_ID} />\n <div\n id={POPOVER_ROOT_ID}\n data-superblocks={POPOVER_ROOT_ID}\n style={{\n position: \"absolute\",\n zIndex: 5,\n }}\n />\n </div>\n );\n};\n\nexport default SbProvider;\n","import copy from \"copy-to-clipboard\";\nimport downloadjs from \"downloadjs\";\nimport _ from \"lodash\";\nimport { addNewPromise } from \"../internal-details/lib/resolve-id-singleton.js\";\nimport {\n navigation,\n NavigationEvent,\n} from \"../internal-details/utils/navigation.js\";\n\nexport enum Types {\n STRING = \"STRING\",\n NUMBER = \"NUMBER\",\n BOOLEAN = \"BOOLEAN\",\n OBJECT = \"OBJECT\",\n MAP = \"MAP\",\n SET = \"SET\",\n ARRAY = \"ARRAY\",\n FUNCTION = \"FUNCTION\",\n UNDEFINED = \"UNDEFINED\",\n NULL = \"NULL\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const getType = (value: unknown) => {\n if (_.isString(value)) return Types.STRING;\n if (_.isNumber(value)) return Types.NUMBER;\n if (_.isBoolean(value)) return Types.BOOLEAN;\n if (value && value instanceof Map) return Types.MAP;\n if (value && value instanceof Set) return Types.SET;\n if (Array.isArray(value)) return Types.ARRAY;\n if (_.isFunction(value)) return Types.FUNCTION;\n if (_.isObject(value)) return Types.OBJECT;\n if (_.isUndefined(value)) return Types.UNDEFINED;\n if (_.isNull(value)) return Types.NULL;\n return Types.UNKNOWN;\n};\n\nexport function copyToClipboard(\n text: string,\n options?: { debug?: boolean; format?: string },\n) {\n try {\n copy(text, options);\n } catch (error) {\n console.error(\"Failed to copy to clipboard:\", error);\n }\n}\n\nexport function navigateTo(\n urlOrRoute: string,\n queryParams: Record<string, any> = {},\n target?: string,\n) {\n try {\n let finalUrl: string;\n\n if (\n urlOrRoute.startsWith(\"http://\") ||\n urlOrRoute.startsWith(\"https://\") ||\n urlOrRoute.startsWith(\"//\")\n ) {\n finalUrl = urlOrRoute;\n } else {\n finalUrl = urlOrRoute.startsWith(\"/\") ? urlOrRoute : `/${urlOrRoute}`;\n }\n\n if (Object.keys(queryParams).length > 0) {\n const url = new URL(finalUrl, window.location.origin);\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n });\n finalUrl = url.toString();\n }\n\n switch (target) {\n case \"_blank\":\n case \"blank\": {\n window.open(finalUrl, \"_blank\", \"noopener,noreferrer\");\n break;\n }\n case \"_parent\": {\n window.parent.location.href = finalUrl;\n break;\n }\n case \"_top\": {\n if (window.top) {\n window.top.location.href = finalUrl;\n }\n break;\n }\n case \"_self\":\n case undefined:\n default: {\n navigation.dispatchEvent(\n new NavigationEvent({\n isSameDocument: true,\n userInitiated: true,\n targetUrl: finalUrl,\n }),\n );\n }\n }\n\n return true;\n } catch (error) {\n console.error(\"Failed to navigate:\", error);\n return false;\n }\n}\n\nexport function setQueryParams(\n queryParams: Record<string, any> = {},\n preserveExistingQueryParams: boolean = true,\n) {\n try {\n const url = new URL(window.location.href);\n\n if (!preserveExistingQueryParams) {\n url.search = \"\";\n }\n\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === null || value === undefined || value === \"\") {\n url.searchParams.delete(key);\n } else {\n url.searchParams.set(key, String(value));\n }\n });\n\n window.history.replaceState(\n window.history.state,\n document.title,\n url.toString(),\n );\n\n return true;\n } catch (error) {\n console.error(\"Failed to set query parameters:\", error);\n return false;\n }\n}\n\nexport function download(data: any, fileName?: string, fileType?: string) {\n try {\n const dataType = getType(data);\n if (dataType === Types.ARRAY || dataType === Types.OBJECT) {\n const jsonString = JSON.stringify(data, null, 2);\n downloadjs(jsonString, fileName, fileType);\n } else {\n downloadjs(data, fileName, fileType);\n }\n } catch (err) {\n console.error(\"Failed to download:\", err);\n }\n}\n\nexport async function logoutIntegrations() {\n // TODO: https://linear.app/superblocks/issue/FE-2049/clean-up-event-handlers-between-edit-and-deployed\n // TODO: enable button loading state when logging out. Currently, this is not awaited in runJs.\n const waitForLogoutPromise = new Promise((resolve) => {\n const callbackId = addNewPromise(resolve);\n window.parent.postMessage(\n {\n type: \"logout-integration\",\n payload: {\n callbackId,\n },\n },\n \"*\",\n );\n });\n const logoutResult: any = await waitForLogoutPromise;\n\n if (logoutResult?.errors && logoutResult.errors.length > 0) {\n console.error(\"Logout returned with errors\", logoutResult.errors);\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { POPOVER_ROOT_ID } from \"../constants.js\";\n\nexport const usePopoverRootElement = () => {\n const elementRef = useRef<HTMLElement | null>(null);\n useEffect(() => {\n elementRef.current =\n document.getElementById(POPOVER_ROOT_ID) ?? document.body;\n }, []);\n return elementRef;\n};\n","import rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerScope } from \"../../../internal-details/scope/scope.js\";\nimport type { ScopeInstance } from \"../../state/types.js\";\n\nexport function registerPage<T>(\n Component: React.FC<T>,\n scope: ScopeInstance<any>,\n) {\n return registerScope(Component, scope, {\n onScopeLoaded: (scopeId) => {\n const hasScopeChanged = rootStore.currentPageScopeId !== scopeId;\n rootStore.currentPageScopeId = scopeId;\n\n if (hasScopeChanged) {\n rootStore.firePageLoadedCallbacks(scopeId);\n }\n },\n });\n}\n","import { registerScope } from \"../../../internal-details/scope/scope.js\";\nimport type { ScopeInstance } from \"../../state/types.js\";\nimport type React from \"react\";\n\nexport function registerApp<T, Bindables extends Record<string, any>>(\n Component: React.FC<T>,\n scope: ScopeInstance<Bindables>,\n) {\n return registerScope(Component, scope);\n}\n","import {\n sbEntitySymbol,\n SbEntityType,\n} from \"@superblocksteam/library-shared/types\";\nimport type {\n SbEntity,\n SbEvent as TSbEvent,\n} from \"@superblocksteam/library-shared/types\";\n\nexport function isSbEntity(entity: any): entity is SbEntity {\n return entity && entity[sbEntitySymbol];\n}\n\nexport function SbEvent({\n payload,\n}: {\n payload: string;\n}): Omit<TSbEvent, \"name\" | \"id\"> {\n return { [sbEntitySymbol]: true, type: SbEntityType.EVENT, payload };\n}\n","import { useCallback } from \"react\";\nimport { useActions } from \"../../internal-details/actions-context.jsx\";\n\nexport function useUpdateProperties() {\n const actions = useActions();\n\n return useCallback(\n (props: Record<string, any>) => {\n actions?.update((entity) => {\n Object.entries(props).forEach(([key, value]) => {\n if (key in entity) {\n entity[key] = value;\n }\n });\n });\n },\n [actions],\n );\n}\n","import { useTheme as useThemeInternal } from \"../../internal-details/theme-context.jsx\";\n\nexport const useTheme = useThemeInternal;\n","import { observer } from \"mobx-react-lite\";\nimport ErrorBoundary from \"../component-base/error-boundary.jsx\";\nimport type { ReactNode } from \"react\";\n\nconst ObservableComputedComponent = observer(function ComputedComponent(\n props: any,\n) {\n const node: ReactNode = props.fn();\n return node;\n});\n\nexport function MakeComputedComponent(fn: any) {\n return (\n <ErrorBoundary>\n <ObservableComputedComponent fn={fn} />\n </ErrorBoundary>\n );\n}\n","import { computed as mobxComputed } from \"mobx\";\nimport { MakeComputedComponent } from \"./observable-computed.jsx\";\nimport type { ComputedProperty } from \"@superblocksteam/library-shared\";\n\nexport function computed<T = any>(\n fn: (...args: any[]) => T,\n): ComputedProperty<T> {\n const computedValue = mobxComputed(() => {\n try {\n return fn;\n } catch (error) {\n console.error(\"Error evaluating computed property:\", error);\n return undefined;\n }\n });\n\n return {\n __isComputedProperty: true,\n value(...args: any[]) {\n const fn = computedValue.get();\n return fn?.call(this, ...args);\n },\n [Symbol.iterator]: function* () {\n const fn = computedValue.get();\n yield MakeComputedComponent(() => {\n return fn?.call(this);\n });\n },\n map<U>(\n mapFn: (\n value: T extends Iterable<infer V> ? V : never,\n index: number,\n ) => U,\n ) {\n const fn = computedValue.get();\n return computed(() => {\n const value = fn?.call(this);\n if (\n value == null ||\n typeof value !== \"object\" ||\n typeof (value as any).map !== \"function\"\n ) {\n throw new Error(\"Value is not iterable\");\n }\n return (value as any).map(mapFn);\n });\n },\n };\n}\n","import { useEffect } from \"react\";\nimport { useRouteError } from \"react-router\";\nimport {\n ErrorIconContainer,\n ErrorTitle,\n ErrorMessage,\n ErrorStack,\n ErrorDetails,\n StyledClarkIcon,\n ErrorContainer,\n ErrorContent,\n ErrorSummary,\n SecondaryButton,\n ActionsContainer,\n} from \"./common.js\";\nimport { FixWithClarkButton } from \"./fix-with-clark-button.jsx\";\n\nexport function RouteLoadError() {\n const error = useRouteError() as Error;\n\n // we do this dynamically because this component will probably be loaded\n // before the app has even bootstrapped, because we have an error during route loading\n // (i.e. syntax error, missing import, etc.)\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n\n return () => {\n document.head.removeChild(link);\n };\n }, []);\n\n console.error(\"Route load error\", error);\n\n return (\n <ErrorContainer>\n <ErrorContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <ErrorTitle>Something went wrong</ErrorTitle>\n <ErrorMessage>{error?.message || \"Unknown error\"}</ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={error} />\n <SecondaryButton\n onClick={() => {\n window.location.reload();\n }}\n >\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {error && (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{error.stack}</ErrorStack>\n </ErrorDetails>\n )}\n </ErrorContent>\n </ErrorContainer>\n );\n}\n","/**\n * A hook to enable editing dialogs.\n *\n * Dialog: A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.\n * E.g: Modal, Slideout, etc\n *\n * The hook expects an `isOpen` property on the component, but can be customized by passing a `isOpenPropertyName`.\n */\n\nimport { set } from \"lodash\";\nimport { useEffect, useRef } from \"react\";\nimport { getEditStore } from \"../../../edit-mode/get-edit-store.js\";\nimport {\n doesInteractionLayerContainInstance,\n isPage,\n} from \"../../../edit-mode/interaction-utils.js\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.jsx\";\nimport { useActions } from \"../internal-index.js\";\nimport useEditor from \"./use-editor.js\";\n\n/**\n * Hook that makes dialogs interact with the editor.\n * - enable/disable the dialog's interaction layer depending on the open state.\n * - select the dialog when it is open or any of the nested components are selected through the navigation side bar.\n *\n * Note: This hook only works in editor mode and has no effect in deployed apps.\n *\n * @example\n * useDialogEditing({\n * isOpen,\n * });\n */\nexport function useDialogEditing(props: {\n isOpen: boolean;\n isOpenPropertyName?: string;\n}) {\n const { instanceId } = useComponentInfo();\n const { isOpen } = props;\n const { features, isEditing } = useEditor();\n const { update } = useActions();\n\n const isOpenPropertyName = props.isOpenPropertyName ?? \"isOpen\";\n\n const prevIsOpenRef = useRef<boolean | undefined>(undefined);\n\n const selectedInstanceId = features.selectWidget.value;\n\n // Manage selection\n useEffect(() => {\n if (isEditing && instanceId) {\n if (isOpen) {\n if (\n !selectedInstanceId ||\n (selectedInstanceId !== instanceId &&\n !doesInteractionLayerContainInstance(\n instanceId,\n selectedInstanceId,\n ))\n ) {\n /**\n * If the dialog is open and the dialog or its children are not selected, then select it.\n * This happens when an event handler changes the open state of the dialog.\n * */\n features.selectWidget.set(instanceId);\n }\n\n // set the active root id to the instanceId\n getEditStore().interactionLayerManager.setActiveRootInstanceId(\n instanceId,\n );\n } else {\n // When closed, clear the active root id\n getEditStore().interactionLayerManager.setActiveRootInstanceId(\n undefined,\n );\n\n // If the dialog was previously selected, then deselect it\n if (selectedInstanceId === instanceId) {\n features.selectWidget.set(null);\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Manage open state\n useEffect(() => {\n if (isEditing && instanceId) {\n // if both isOpen and selectedSourceId are changed at the same time, something like clicking on button open/close dialog happens, we do not need to update isOpen status again\n if (\n prevIsOpenRef.current !== isOpen &&\n //this case is for opening modal first time by selecting the modal\n !(prevIsOpenRef.current === undefined && isOpen === false)\n ) {\n return;\n }\n\n if (isOpen) {\n // if the dialog is open and a component outside this dialog is selected, then close this component\n if (\n selectedInstanceId &&\n selectedInstanceId !== instanceId &&\n !doesInteractionLayerContainInstance(\n instanceId,\n selectedInstanceId,\n true,\n ) &&\n // NOTE: There is a weird radix bug where the dialog overlay is capturing selection events on some compoennts\n // like Select and sending it to the Page. This check prevents the dialog/sheet from closing, but the select isn't properly selectable inside of the modal/dialog\n !isPage(selectedInstanceId)\n ) {\n update((entity) => {\n set(entity, isOpenPropertyName, false);\n });\n }\n } else {\n // if the component is not open and the component or its children is selected, then open it\n if (\n selectedInstanceId === instanceId ||\n (selectedInstanceId &&\n doesInteractionLayerContainInstance(instanceId, selectedInstanceId))\n ) {\n update((entity) => {\n set(entity, isOpenPropertyName, true);\n });\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedInstanceId]);\n\n useEffect(() => {\n if (\n // this is initial state\n prevIsOpenRef.current === undefined &&\n isOpen === false\n ) {\n return;\n }\n\n prevIsOpenRef.current = isOpen;\n }, [isOpen]);\n}\n","export enum API_STATUS_CODES {\n REQUEST_UNAUTHORIZED = 401,\n RESOURCE_FORBIDDEN = 403,\n RESOURCE_NOT_FOUND = 404,\n TIMEOUT = 408,\n RESOURCE_CONFLICT = 409,\n SERVER_ERROR = 502,\n SERVER_UNAVAILABLE = 503,\n BAD_REQUEST = 400,\n}\n","<svg width=\"167\" height=\"168\" viewBox=\"0 0 167 168\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_1_117)\">\n<g clip-path=\"url(#clip0_1_117)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_1_117)\">\n<g clip-path=\"url(#clip1_1_117)\">\n<rect x=\"32\" y=\"36\" width=\"256\" height=\"140\" rx=\"6\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(32 36)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"39\" cy=\"42\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"46\" y=\"41\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<rect x=\"44\" y=\"60\" width=\"104\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"44\" y=\"104\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"44\" y=\"148\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"100\" y=\"104\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"100\" y=\"148\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n</g>\n</g>\n</g>\n</g>\n<g filter=\"url(#filter2_d_1_117)\">\n<rect x=\"108\" y=\"108\" width=\"56\" height=\"56\" rx=\"28\" fill=\"white\" shape-rendering=\"crispEdges\"/>\n<circle cx=\"136\" cy=\"136\" r=\"23.5\" fill=\"#F9FAFB\" stroke=\"#C6CAD2\" stroke-dasharray=\"4 4\"/>\n<path opacity=\"0.2\" d=\"M143.5 132.25H128.5C128.086 132.25 127.75 132.586 127.75 133V143.5C127.75 143.914 128.086 144.25 128.5 144.25H143.5C143.914 144.25 144.25 143.914 144.25 143.5V133C144.25 132.586 143.914 132.25 143.5 132.25Z\" fill=\"#6C7689\"/>\n<path d=\"M143.5 132.25H128.5C128.086 132.25 127.75 132.586 127.75 133V143.5C127.75 143.914 128.086 144.25 128.5 144.25H143.5C143.914 144.25 144.25 143.914 144.25 143.5V133C144.25 132.586 143.914 132.25 143.5 132.25Z\" stroke=\"#6C7689\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M132.625 132.25V128.875C132.625 127.98 132.981 127.121 133.614 126.489C134.246 125.856 135.105 125.5 136 125.5C136.895 125.5 137.754 125.856 138.386 126.489C139.019 127.121 139.375 127.98 139.375 128.875V132.25\" stroke=\"#6C7689\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M136 139.375C136.621 139.375 137.125 138.871 137.125 138.25C137.125 137.629 136.621 137.125 136 137.125C135.379 137.125 134.875 137.629 134.875 138.25C134.875 138.871 135.379 139.375 136 139.375Z\" fill=\"#6C7689\"/>\n</g>\n<defs>\n<filter id=\"filter0_i_1_117\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_1_117\"/>\n</filter>\n<filter id=\"filter1_dd_1_117\" x=\"29\" y=\"34\" width=\"262\" height=\"146\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"1\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1_117\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_1_117\" result=\"effect2_dropShadow_1_117\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_1_117\" result=\"shape\"/>\n</filter>\n<filter id=\"filter2_d_1_117\" x=\"105\" y=\"106\" width=\"62\" height=\"62\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.16 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1_117\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1_117\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_1_117\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_1_117\">\n<rect x=\"32\" y=\"36\" width=\"256\" height=\"140\" rx=\"6\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_4124_102997)\">\n<g clip-path=\"url(#clip0_4124_102997)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_4124_102997)\">\n<g clip-path=\"url(#clip1_4124_102997)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(16 48)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"23\" cy=\"54\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"30\" y=\"53\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<g clip-path=\"url(#clip2_4124_102997)\">\n<rect width=\"132\" height=\"132\" transform=\"translate(16 60)\" fill=\"white\"/>\n<rect opacity=\"0.16\" x=\"40\" y=\"160\" width=\"16\" height=\"2\" rx=\"1\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"120\" y=\"158\" width=\"6\" height=\"6\" rx=\"1.5\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"24\" y=\"157\" width=\"8\" height=\"8\" rx=\"4\" fill=\"#454D5F\"/>\n</g>\n<path d=\"M68.8367 113.863V117.613H48.3289L48.1727 114.781L60.4383 95.5625H64.2078L60.1258 102.555L53.075 113.863H68.8367ZM65.282 95.5625V124H60.575V95.5625H65.282ZM91.3164 107.398V112.047C91.3164 114.273 91.0951 116.174 90.6523 117.75C90.2227 119.312 89.5977 120.582 88.7773 121.559C87.957 122.535 86.974 123.251 85.8281 123.707C84.6953 124.163 83.4258 124.391 82.0195 124.391C80.8997 124.391 79.8581 124.247 78.8945 123.961C77.944 123.674 77.0846 123.225 76.3164 122.613C75.5482 122.001 74.8906 121.214 74.3438 120.25C73.8099 119.273 73.3932 118.108 73.0938 116.754C72.8073 115.4 72.6641 113.831 72.6641 112.047V107.398C72.6641 105.159 72.8854 103.271 73.3281 101.734C73.7708 100.185 74.4023 98.9284 75.2227 97.9648C76.043 96.9883 77.0195 96.2786 78.1523 95.8359C79.2982 95.3932 80.5742 95.1719 81.9805 95.1719C83.1133 95.1719 84.1549 95.3151 85.1055 95.6016C86.069 95.875 86.9284 96.3112 87.6836 96.9102C88.4518 97.5091 89.1029 98.2904 89.6367 99.2539C90.1836 100.204 90.6003 101.357 90.8867 102.711C91.1732 104.052 91.3164 105.615 91.3164 107.398ZM86.6094 112.711V106.695C86.6094 105.562 86.5443 104.566 86.4141 103.707C86.2839 102.835 86.0885 102.099 85.8281 101.5C85.5807 100.888 85.2682 100.393 84.8906 100.016C84.513 99.625 84.0833 99.3451 83.6016 99.1758C83.1198 98.9935 82.5794 98.9023 81.9805 98.9023C81.2513 98.9023 80.6003 99.0456 80.0273 99.332C79.4544 99.6055 78.9727 100.048 78.582 100.66C78.1914 101.272 77.8919 102.079 77.6836 103.082C77.4883 104.072 77.3906 105.276 77.3906 106.695V112.711C77.3906 113.857 77.4557 114.866 77.5859 115.738C77.7161 116.611 77.9115 117.359 78.1719 117.984C78.4323 118.596 78.7448 119.104 79.1094 119.508C79.487 119.898 79.9167 120.185 80.3984 120.367C80.8932 120.549 81.4336 120.641 82.0195 120.641C82.7617 120.641 83.4193 120.497 83.9922 120.211C84.5651 119.924 85.0469 119.469 85.4375 118.844C85.8281 118.206 86.1211 117.379 86.3164 116.363C86.5117 115.348 86.6094 114.13 86.6094 112.711ZM115.905 113.863V117.613H95.3977L95.2414 114.781L107.507 95.5625H111.277L107.195 102.555L100.144 113.863H115.905ZM112.351 95.5625V124H107.644V95.5625H112.351Z\" fill=\"#C6CAD2\"/>\n</g>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_4124_102997\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_4124_102997\"/>\n</filter>\n<filter id=\"filter1_dd_4124_102997\" x=\"13\" y=\"46\" width=\"138\" height=\"130\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4124_102997\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_4124_102997\" result=\"effect2_dropShadow_4124_102997\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_4124_102997\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_4124_102997\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_4124_102997\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip2_4124_102997\">\n<rect width=\"132\" height=\"132\" fill=\"white\" transform=\"translate(16 60)\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_4124_103042)\">\n<g clip-path=\"url(#clip0_4124_103042)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_4124_103042)\">\n<g clip-path=\"url(#clip1_4124_103042)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(16 48)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"23\" cy=\"54\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"30\" y=\"53\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<g clip-path=\"url(#clip2_4124_103042)\">\n<rect width=\"132\" height=\"132\" transform=\"translate(16 60)\" fill=\"white\"/>\n<rect opacity=\"0.16\" x=\"40\" y=\"160\" width=\"16\" height=\"2\" rx=\"1\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"120\" y=\"158\" width=\"6\" height=\"6\" rx=\"1.5\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"24\" y=\"157\" width=\"8\" height=\"8\" rx=\"4\" fill=\"#454D5F\"/>\n<path d=\"M54.1883 110.777L50.4383 109.859L51.9813 95.5625H67.3133V99.5469H55.8875L55.1063 106.52C55.549 106.259 56.1609 106.005 56.9422 105.758C57.7234 105.497 58.6154 105.367 59.618 105.367C60.9591 105.367 62.157 105.589 63.2117 106.031C64.2794 106.461 65.1844 107.092 65.9266 107.926C66.6688 108.746 67.2352 109.749 67.6258 110.934C68.0164 112.105 68.2117 113.427 68.2117 114.898C68.2117 116.214 68.0164 117.444 67.6258 118.59C67.2482 119.736 66.6753 120.745 65.907 121.617C65.1388 122.49 64.1688 123.173 62.9969 123.668C61.838 124.15 60.4643 124.391 58.8758 124.391C57.6909 124.391 56.5516 124.221 55.4578 123.883C54.3771 123.531 53.407 123.017 52.5477 122.34C51.6883 121.65 50.9982 120.803 50.4773 119.801C49.9565 118.785 49.657 117.62 49.5789 116.305H54.1883C54.3055 117.229 54.5594 118.017 54.95 118.668C55.3536 119.306 55.8875 119.794 56.5516 120.133C57.2156 120.471 57.9839 120.641 58.8563 120.641C59.6505 120.641 60.3341 120.504 60.907 120.23C61.4799 119.944 61.9552 119.54 62.3328 119.02C62.7234 118.486 63.0099 117.861 63.1922 117.145C63.3875 116.428 63.4852 115.634 63.4852 114.762C63.4852 113.928 63.3745 113.167 63.1531 112.477C62.9448 111.786 62.6258 111.188 62.1961 110.68C61.7794 110.172 61.2521 109.781 60.6141 109.508C59.976 109.221 59.2404 109.078 58.407 109.078C57.2872 109.078 56.4279 109.241 55.8289 109.566C55.243 109.892 54.6961 110.296 54.1883 110.777ZM91.3164 107.398V112.047C91.3164 114.273 91.0951 116.174 90.6523 117.75C90.2227 119.312 89.5977 120.582 88.7773 121.559C87.957 122.535 86.974 123.251 85.8281 123.707C84.6953 124.163 83.4258 124.391 82.0195 124.391C80.8997 124.391 79.8581 124.247 78.8945 123.961C77.944 123.674 77.0846 123.225 76.3164 122.613C75.5482 122.001 74.8906 121.214 74.3438 120.25C73.8099 119.273 73.3932 118.108 73.0938 116.754C72.8073 115.4 72.6641 113.831 72.6641 112.047V107.398C72.6641 105.159 72.8854 103.271 73.3281 101.734C73.7708 100.185 74.4023 98.9284 75.2227 97.9648C76.043 96.9883 77.0195 96.2786 78.1523 95.8359C79.2982 95.3932 80.5742 95.1719 81.9805 95.1719C83.1133 95.1719 84.1549 95.3151 85.1055 95.6016C86.069 95.875 86.9284 96.3112 87.6836 96.9102C88.4518 97.5091 89.1029 98.2904 89.6367 99.2539C90.1836 100.204 90.6003 101.357 90.8867 102.711C91.1732 104.052 91.3164 105.615 91.3164 107.398ZM86.6094 112.711V106.695C86.6094 105.562 86.5443 104.566 86.4141 103.707C86.2839 102.835 86.0885 102.099 85.8281 101.5C85.5807 100.888 85.2682 100.393 84.8906 100.016C84.513 99.625 84.0833 99.3451 83.6016 99.1758C83.1198 98.9935 82.5794 98.9023 81.9805 98.9023C81.2513 98.9023 80.6003 99.0456 80.0273 99.332C79.4544 99.6055 78.9727 100.048 78.582 100.66C78.1914 101.272 77.8919 102.079 77.6836 103.082C77.4883 104.072 77.3906 105.276 77.3906 106.695V112.711C77.3906 113.857 77.4557 114.866 77.5859 115.738C77.7161 116.611 77.9115 117.359 78.1719 117.984C78.4323 118.596 78.7448 119.104 79.1094 119.508C79.487 119.898 79.9167 120.185 80.3984 120.367C80.8932 120.549 81.4336 120.641 82.0195 120.641C82.7617 120.641 83.4193 120.497 83.9922 120.211C84.5651 119.924 85.0469 119.469 85.4375 118.844C85.8281 118.206 86.1211 117.379 86.3164 116.363C86.5117 115.348 86.6094 114.13 86.6094 112.711ZM114.851 107.398V112.047C114.851 114.273 114.629 116.174 114.187 117.75C113.757 119.312 113.132 120.582 112.312 121.559C111.491 122.535 110.508 123.251 109.362 123.707C108.23 124.163 106.96 124.391 105.554 124.391C104.434 124.391 103.392 124.247 102.429 123.961C101.478 123.674 100.619 123.225 99.8508 122.613C99.0826 122.001 98.425 121.214 97.8781 120.25C97.3443 119.273 96.9276 118.108 96.6281 116.754C96.3417 115.4 96.1984 113.831 96.1984 112.047V107.398C96.1984 105.159 96.4198 103.271 96.8625 101.734C97.3052 100.185 97.9367 98.9284 98.757 97.9648C99.5773 96.9883 100.554 96.2786 101.687 95.8359C102.833 95.3932 104.109 95.1719 105.515 95.1719C106.648 95.1719 107.689 95.3151 108.64 95.6016C109.603 95.875 110.463 96.3112 111.218 96.9102C111.986 97.5091 112.637 98.2904 113.171 99.2539C113.718 100.204 114.135 101.357 114.421 102.711C114.708 104.052 114.851 105.615 114.851 107.398ZM110.144 112.711V106.695C110.144 105.562 110.079 104.566 109.948 103.707C109.818 102.835 109.623 102.099 109.362 101.5C109.115 100.888 108.803 100.393 108.425 100.016C108.047 99.625 107.618 99.3451 107.136 99.1758C106.654 98.9935 106.114 98.9023 105.515 98.9023C104.786 98.9023 104.135 99.0456 103.562 99.332C102.989 99.6055 102.507 100.048 102.116 100.66C101.726 101.272 101.426 102.079 101.218 103.082C101.023 104.072 100.925 105.276 100.925 106.695V112.711C100.925 113.857 100.99 114.866 101.12 115.738C101.251 116.611 101.446 117.359 101.706 117.984C101.967 118.596 102.279 119.104 102.644 119.508C103.021 119.898 103.451 120.185 103.933 120.367C104.428 120.549 104.968 120.641 105.554 120.641C106.296 120.641 106.954 120.497 107.527 120.211C108.099 119.924 108.581 119.469 108.972 118.844C109.362 118.206 109.655 117.379 109.851 116.363C110.046 115.348 110.144 114.13 110.144 112.711Z\" fill=\"#C6CAD2\"/>\n</g>\n</g>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_4124_103042\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_4124_103042\"/>\n</filter>\n<filter id=\"filter1_dd_4124_103042\" x=\"13\" y=\"46\" width=\"138\" height=\"130\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4124_103042\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_4124_103042\" result=\"effect2_dropShadow_4124_103042\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_4124_103042\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_4124_103042\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_4124_103042\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip2_4124_103042\">\n<rect width=\"132\" height=\"132\" fill=\"white\" transform=\"translate(16 60)\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_7107_90986)\">\n<g clip-path=\"url(#clip0_7107_90986)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_7107_90986)\">\n<rect x=\"38.588\" y=\"31.1113\" width=\"256\" height=\"140\" rx=\"6\" transform=\"rotate(5 38.588 31.1113)\" fill=\"white\" shape-rendering=\"crispEdges\"/>\n<rect x=\"49.6952\" y=\"53.4668\" width=\"104\" height=\"36\" rx=\"4\" transform=\"rotate(8 49.6952 53.4668)\" fill=\"#F3F4F6\"/>\n<rect width=\"230\" height=\"12\" transform=\"translate(-1.77661 60.6738) rotate(-10)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"6.15896\" cy=\"65.3671\" r=\"3\" transform=\"rotate(-10 6.15896 65.3671)\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"12.8789\" y=\"63.166\" width=\"10\" height=\"2\" rx=\"1\" transform=\"rotate(-10 12.8789 63.166)\" fill=\"white\"/>\n<rect x=\"43.9305\" y=\"100.689\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(3 43.9305 100.689)\" fill=\"#F3F4F6\"/>\n<rect x=\"41.8835\" y=\"146.205\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(9 41.8835 146.205)\" fill=\"#F3F4F6\"/>\n<rect x=\"101.884\" y=\"106.895\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(10 101.884 106.895)\" fill=\"#F3F4F6\"/>\n<rect x=\"96.3936\" y=\"150.604\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(5 96.3936 150.604)\" fill=\"#F3F4F6\"/>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_7107_90986\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_7107_90986\"/>\n</filter>\n<filter id=\"filter1_dd_7107_90986\" x=\"-4.77661\" y=\"18.7344\" width=\"301.391\" height=\"178.156\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"1\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_7107_90986\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_7107_90986\" result=\"effect2_dropShadow_7107_90986\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_7107_90986\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_7107_90986\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_7083_91308)\">\n<g clip-path=\"url(#clip0_7083_91308)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_7083_91308)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"128\" rx=\"4\" fill=\"white\"/>\n<circle cx=\"82\" cy=\"72\" r=\"12\" fill=\"#E8EAED\"/>\n<rect x=\"67\" y=\"92\" width=\"30\" height=\"6\" rx=\"3\" fill=\"#E8EAED\"/>\n<rect x=\"31\" y=\"114.002\" width=\"102\" height=\"16\" rx=\"4\" fill=\"#E8EAED\"/>\n<rect x=\"31\" y=\"142.002\" width=\"102\" height=\"16\" rx=\"4\" fill=\"#E8EAED\"/>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_7083_91308\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_7083_91308\"/>\n</filter>\n<filter id=\"filter1_dd_7083_91308\" x=\"13\" y=\"46\" width=\"138\" height=\"134\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_7083_91308\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_7083_91308\" result=\"effect2_dropShadow_7083_91308\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_7083_91308\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_7083_91308\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport ForbiddenErrorImage from \"../assets/images/errors/403-image.svg\";\nimport AppNotFoundImage from \"../assets/images/errors/404-image.svg\";\nimport ServerError500Image from \"../assets/images/errors/500-image.svg\";\nimport GeneralErrorImage from \"../assets/images/errors/general-error.svg\";\nimport LoginErrorImage from \"../assets/images/errors/login-error.svg\";\nimport { colors } from \"../styling/colors.js\";\nimport { API_STATUS_CODES } from \"./constants.js\";\n\nconst HOME_URL = \"/home\";\n\nconst VerticalWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n`;\n\ninterface Props {\n title: string;\n errorMessage?: string | React.ReactNode;\n buttonText?: string;\n handleButtonClick?: () => void;\n errorCode?: API_STATUS_CODES | \"LOGIN_FAILURE\";\n buttonPath?: string;\n image?: string; // when not set, the image will be based on the errorCode\n secondaryButtonText?: string;\n secondaryButtonAction?: () => void;\n hideActions?: boolean;\n mainButtonType?: \"primary\" | \"ghost\";\n // showActionsOnEmbedRoute?: boolean; // by default, actions are hidden on embed pages\n}\n\n// Most of the errors have this styling anyway\nconst ErrorWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: calc(100vh);\n text-align: center;\n .bold-text {\n font-weight: 500;\n font-size: 24px;\n }\n .page-unavailable-img {\n width: 35%;\n }\n .button-position {\n margin: auto;\n }\n`;\n\nconst TextWrapper = styled.div`\n margin-top: 30px;\n margin-bottom: 30px;\n max-width: 500px;\n`;\n\nconst Title = styled.h3`\n font-size: 1.25rem;\n font-weight: 500;\n margin-bottom: 0.5rem;\n`;\n\nconst ErrorMessage = styled.p`\n color: ${colors.GREY_500};\n`;\n\nconst Button = styled.button`\n border: 1px solid ${colors.GREY_100};\n color: ${colors.GREY_600};\n border-radius: 6px;\n padding: 2px 6px;\n font-size: 1rem;\n font-weight: 400;\n cursor: pointer;\n\n &:hover {\n background-color: ${colors.GREY_100};\n }\n`;\n\nconst ErrorComponent = ({\n title,\n errorMessage,\n buttonText,\n handleButtonClick,\n errorCode,\n buttonPath,\n image: overrideImage,\n secondaryButtonAction,\n secondaryButtonText,\n hideActions,\n}: Props) => {\n let ImageComponent = overrideImage ?? GeneralErrorImage;\n if (!overrideImage) {\n switch (errorCode) {\n case API_STATUS_CODES.RESOURCE_NOT_FOUND:\n ImageComponent = AppNotFoundImage;\n break;\n case API_STATUS_CODES.SERVER_ERROR:\n ImageComponent = ServerError500Image;\n break;\n case API_STATUS_CODES.RESOURCE_FORBIDDEN:\n ImageComponent = ForbiddenErrorImage;\n break;\n case API_STATUS_CODES.TIMEOUT:\n ImageComponent = GeneralErrorImage;\n break;\n case \"LOGIN_FAILURE\":\n ImageComponent = LoginErrorImage;\n break;\n default:\n ImageComponent = GeneralErrorImage; //we should have covered all the cases and Koala should not show, keeping it here since we do not have a default one\n }\n }\n const showActions = !hideActions;\n\n return (\n <ErrorWrapper data-test=\"app-error-container\" className=\"error-wrapper\">\n <VerticalWrapper>\n <ImageComponent />\n <TextWrapper>\n <Title>{title}</Title>\n {errorMessage && (\n <ErrorMessage data-test=\"error-page-subtext\">\n {errorMessage}\n </ErrorMessage>\n )}\n </TextWrapper>\n {showActions && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"12px\" }}>\n {secondaryButtonText && secondaryButtonAction && (\n <Button type=\"button\" onClick={secondaryButtonAction}>\n {secondaryButtonText}\n </Button>\n )}\n <Button\n type={\"button\"}\n onClick={() =>\n handleButtonClick\n ? handleButtonClick()\n : (window.location.pathname = buttonPath ?? HOME_URL)\n }\n data-test=\"error-component-button\"\n >\n {buttonText ? buttonText : \"Return Home\"}\n </Button>\n </div>\n )}\n </VerticalWrapper>\n </ErrorWrapper>\n );\n};\n\nexport default ErrorComponent;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { API_STATUS_CODES } from \"./constants.js\";\nimport ErrorComponent from \"./error-component.jsx\";\n\nconst Wrapper = styled.div`\n text-align: center;\n .bold-text {\n font-weight: 500;\n font-size: 24px;\n }\n .page-unavailable-img {\n width: 35%;\n }\n .button-position {\n margin: auto;\n }\n height: 100%;\n`;\n\nconst PageNotFound = ({\n title = \"Content not found\",\n errorMessage = \"We couldn’t find the page you were looking for. Make sure that you have the right URL. \",\n buttonPath,\n buttonText,\n onButtonClick,\n hideActions,\n}: {\n title?: string;\n errorMessage?: string | React.ReactElement;\n buttonPath?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n hideActions?: boolean;\n}) => {\n return (\n <Wrapper>\n <ErrorComponent\n errorCode={API_STATUS_CODES.RESOURCE_NOT_FOUND}\n title={title}\n errorMessage={errorMessage}\n hideActions={hideActions}\n buttonPath={buttonPath}\n buttonText={buttonText}\n mainButtonType={\"ghost\"}\n handleButtonClick={onButtonClick}\n />\n </Wrapper>\n );\n};\n\nexport default PageNotFound;\n","import { useMemo } from \"react\";\nimport { createAnchorNameStyle } from \"../../../edit-mode/edit-wrapper.js\";\nimport { InteractionLayerProvider } from \"../../../edit-mode/interaction-layer/interaction-context.jsx\";\nimport InteractionLayer from \"../../../edit-mode/interaction-layer/interaction-layer.jsx\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.js\";\nimport { getEditWrapperIdWithType } from \"../../utils/widget-wrapper-naming.js\";\nimport { UnstyledInternalContainer } from \"../components/container/index.jsx\";\nimport useEditor from \"../hooks/use-editor.js\";\nimport type { ContainerLayout } from \"./constants.js\";\nimport type { LegacyRef } from \"react\";\n\nconst EXPANDED: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n};\n\nfunction DroppableContainer({\n name,\n componentType,\n isOpen,\n children,\n layout,\n className,\n dropTargetRef,\n}: {\n name: string;\n componentType: string;\n isOpen: boolean;\n children: React.ReactNode;\n layout: ContainerLayout;\n className: string;\n dropTargetRef?: React.Ref<HTMLElement> | LegacyRef<HTMLElement>;\n}) {\n const { instanceId, sourceId } = useComponentInfo();\n const { isEditing } = useEditor();\n\n const anchorNameStyle = useMemo(() => {\n if (isEditing && isOpen) {\n return createAnchorNameStyle({\n instanceId,\n });\n }\n\n return {};\n }, [isEditing, isOpen, instanceId]);\n\n const internalContainer = useMemo(\n () => (\n <UnstyledInternalContainer\n layout={layout as any}\n isVisible={true}\n data-sb-id={sourceId}\n data-sb-instance-id={instanceId}\n style={{ ...EXPANDED, ...anchorNameStyle }}\n className={className}\n >\n {children}\n </UnstyledInternalContainer>\n ),\n [sourceId, instanceId, children, anchorNameStyle, layout, className],\n );\n\n if (!isEditing) {\n return <div style={EXPANDED}>{internalContainer}</div>;\n }\n\n return (\n <div\n ref={dropTargetRef as any}\n id={getEditWrapperIdWithType(instanceId, componentType)}\n style={EXPANDED}\n >\n <InteractionLayerProvider instanceId={instanceId}>\n {internalContainer}\n </InteractionLayerProvider>\n {isOpen && (\n <InteractionLayer\n rootType={componentType}\n rootInstanceId={instanceId}\n rootName={name}\n />\n )}\n </div>\n );\n}\n\nexport default DroppableContainer;\n","import \"../edit-mode/edit-style.css\";\n\n// CRITICAL: Early console patching before any other JS imports\nimport LibraryEarlyConsoleBuffer from \"./tracing/early-console-buffer.js\";\nLibraryEarlyConsoleBuffer.getInstance().patchEarly();\n\n// eslint-disable-next-line import/order\nimport {\n type CreateChild,\n TriggerStepType,\n} from \"@superblocksteam/library-shared/types\";\nexport { type CreateChild, TriggerStepType };\n\n// User-facing components\nexport {\n InternalContainer,\n UnstyledInternalContainer,\n} from \"./user-facing/components/container/index.jsx\";\nexport { Page } from \"./user-facing/components/page/index.jsx\";\nexport { App } from \"./user-facing/components/app/index.jsx\";\nexport {\n registerComponent,\n type CustomComponentProps,\n type CustomComponentPropertiesDefinition,\n} from \"./user-facing/components/custom/register-custom-component.jsx\";\nexport type { UnknownOption } from \"./user-facing/components/types.ts\";\n\nexport {\n StateVar,\n StateVarPersistence,\n} from \"./user-facing/entities/variable/index.js\";\nexport { Timer } from \"./user-facing/entities/timer/index.js\";\nexport { SbApi } from \"./user-facing/entities/api/index.js\";\n\n// User-facing types\nexport { default as MakeEditableWithSuperblocks } from \"./user-facing/sb-provider.jsx\";\nexport { default as SbProvider } from \"./user-facing/sb-provider.jsx\";\nexport { EventFlow } from \"./user-facing/event-flow.js\";\nexport {\n copyToClipboard,\n navigateTo,\n setQueryParams,\n download,\n logoutIntegrations,\n} from \"./user-facing/global-functions.js\";\n\nexport { loading as loadingProp } from \"./user-facing/properties-panel/mixins/loading.js\";\nexport {\n size as sizeProp,\n widthWithoutFit as widthWithoutFitProp,\n} from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { margin as marginProp } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { visible as visibleProp } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { containerLayout as containerLayoutProps } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { shouldScrollContents as shouldScrollContentsProps } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { default as useEditor } from \"./user-facing/hooks/use-editor.js\";\nexport { usePopoverRootElement } from \"./user-facing/hooks/use-popover-roots.js\";\n\nexport { registerScope } from \"./internal-details/scope/scope.jsx\";\nexport { registerPage } from \"./user-facing/components/page/register-page.js\";\nexport { registerApp } from \"./user-facing/components/app/register-app.js\";\nexport { createScope } from \"./user-facing/state/create-scope.js\";\nexport { type BindingIdentifier } from \"@superblocksteam/library-shared/types\";\nexport { Global, Theme, Embed, Env } from \"./internal-details/scope/global.js\";\nexport type { AppTheme } from \"./internal-details/scope/global.js\";\n\nexport { SbEvent } from \"./internal-details/entities.js\";\nexport { useUpdateProperties } from \"./user-facing/hooks/use-update-properties.js\";\nexport { useTheme } from \"./user-facing/hooks/use-theme.jsx\";\n\nexport {\n Prop,\n Section as PropertyPanelSection,\n PropsPanelCategory,\n} from \"./user-facing/properties-panel/props-builder.js\";\n\nexport { computed } from \"./user-facing/state/computed.js\";\nexport type { ElementPassthroughProps } from \"./user-facing/component-base/use-passthrough-props.js\";\n\nexport {\n Dim,\n type DimModes,\n SB,\n Property,\n NO_CONTENT_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nexport type { EditorConfig } from \"@superblocksteam/library-shared\";\nexport type {\n EditorTemplate,\n CreationContext,\n} from \"./internal-details/sb-wrapper.jsx\";\n\nexport type {\n FromChildToParentMessageTypes,\n FromChildToParentMessageTypesMap,\n FromParentToChildMessageTypes,\n FromParentToChildMessageTypesMap,\n} from \"./internal-details/lib/types.js\";\n\n// we need Outlet and Link types to be user-facing because we import it in code-demo-app/App.tsx directly\nexport { Outlet, Link, generatePath } from \"react-router\";\n\n// These exports are injected from our Vite plugin and will be\n// available at runtime but hidden from TypeScript auto-completion\n\n/** @internal */\nexport { RouteLoadError } from \"./internal-details/internal-components/route-load-error.jsx\";\n\n/** @internal */\nexport { createRoot } from \"react-dom/client\";\n\n/** @internal */\nexport * from \"react-router\";\n\nexport { useDialogEditing } from \"./user-facing/hooks/use-dialog-editing.js\";\nexport { default as InteractionLayer } from \"../edit-mode/interaction-layer/interaction-layer.jsx\";\n/** @internal */\nexport { default as PageNotFound } from \"./user-facing/error-pages/page-not-found.jsx\";\n\nexport { default as DroppableContainer } from \"./user-facing/component-base/droppable-container.jsx\";\n\nexport {\n /** @deprecated should not be used externally **/\n INSTANCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\n\nexport { PORTAL_ROOT_ID } from \"./user-facing/constants.js\";\n\n/** @internal */\nexport { editorBridge } from \"../edit-mode/superblocks-editor-bridge.js\";\n\n/** @internal */\nexport {\n BuildErrorModal,\n type BuildError,\n type BuildErrorModalProps,\n} from \"../edit-mode/build-error-notification.js\";\n\nexport {\n FileManager,\n getFileWithUploadId,\n} from \"./internal-details/lib/evaluator/file-utils.js\";\nexport type { FileMetadataPrivate } from \"./internal-details/lib/evaluator/file-utils.js\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["VERTICAL_ALIGNMENT_MAP: Record<\n VerticalAlignment<\"vertical\">,\n string\n>","HORIZONTAL_ALIGNMENT_MAP: Record<\n HorizontalAlignment<\"horizontal\">,\n string\n>","layoutStyle: CSSProperties","ThemeProvider: React.FC<\n React.PropsWithChildren<{\n theme: UserAccessibleTheme;\n }>\n>","useTheme","INSTANCE_ID_ATTRIBUTE","computed","ComponentInfoProvider: React.FC<\n React.PropsWithChildren<ComponentInfo>\n>","rootStore","instanceId","sourceId","BASE_THEME_EXISTING_APPS_PADDING: Padding","Dim","PADDING_PRESETS_V1_THEME: Record<\n PaddingPresetNameWithClassic,\n PaddingPreset\n>","PADDING_PRESETS_V3_THEME: Record<PaddingPresetName, PaddingPreset>","PADDING_PRESETS_BY_THEME_VERSION: Record<\n number,\n Record<PaddingPresetName, PaddingPreset>\n>","DEFAULT_TYPOGRAPHIES_LEGACY: Typographies","DEFAULT_TYPOGRAPHIES_NEW: Typographies","DEFAULT_TYPOGRAPHIES_BY_VERSION: Record<number, Typographies>","noBorder: (theme: UserAccessibleTheme) => Border","Dim","noBorderOject: (theme: UserAccessibleTheme) => PerSideBorder","EMPTY_RADIUS: PerCornerBorderRadius","DEFAULT_SYSTEM_RADIUS: PerCornerBorderRadius","BASE_THEME_V5: UserDefinedThemeWithTypography","BASE_THEMES_BY_VERSION: Record<\n number,\n UserDefinedThemeWithPalette\n>","styles: CSSProperties","border","borderRadius","Dim","padding","backgroundStyle: CSSProperties","useTheme","border","borderRadius","padding","rootStore","bindingIds: Record<string, Readonly<BindingIdentifier>>","getBinding","isEqual","ScopeProvider: React.FC<React.PropsWithChildren<State>>","rootStore","Component","useTheme","rootStore","LEGACY_AVAILABLE_FONTS: Record<string, FontFamily>","rule","INSTANCE_ID_ATTRIBUTE","border","borderRadius","Dim","spacing","padding","rootStore","shouldScrollContents","usePassthroughProps","useEditor","useTheme","useAlignmentStyles","containerStyle: CSSProperties","Button","ErrorIcon","CloseIcon","StyledClarkIcon: React.FC","ClarkIcon","ErrorMessage","rootStore","AiStarsIcon","ErrorBoundary","rootStore","ActionsProvider: React.FC<\n React.PropsWithChildren<{\n actions: ReturnType<typeof createEntityActions>;\n }>\n>","INSTANCE_ID_ATTRIBUTE","cachedRect: DOMRect | null","context","updateEntity","rootStore","useTheme","rootStore","Dim","Component","loading","INSTANCE_ID_ATTRIBUTE","ErrorBoundary","ReactiveComponent","rootStore","rootStore","instanceRestrictions: Array<\n DropRestriction<DnDInstanceRestrictionParams>\n>","typeRestrictions: Array<DropRestriction<DnDTypeRestrictionParams>>","rootStore","safeDimensions: {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo; // TODO remove this once we get rid of legacy Icon widget\n }","Property","size","depth","editStore","targetNode: HTMLElement | null","defaultContext: InteractionContextType","context","throttle","timeoutId: ReturnType<typeof setTimeout>","rootStore","editorConfig","canResizeHeight","canResizeWidth","ErrorIcon","HideIcon","NamePill: ReturnType<typeof observer<NamePillProps>>","TooltipRoot","AiStarsIcon","NamePill","canResizeWidth","canResizeHeight","observer","components: { instanceId: SbInstance; sourceId: SbElement }[]","selectedRects: SelectionInfo[]","rootStore","hoveredPills: SbInstance[]","hoveredActual: SbInstance[]","INSTANCE_ID_ATTRIBUTE","rootStore","throttle","DropLayer","stableEffectOptions: UseStableEffectOptions","Dim","stableEffectOptions","context","stableEffectOptions: UseStableEffectOptions","widgetMeta: InternalRuntimeWidgetMeta","stableEffectOptions","metaChildren: Array<InternalChildElement>","reactChildren: Array<ReactNode>","EditWrapper","editStore","isEmpty","INSTANCE_ID_ATTRIBUTE","NO_CONTENT_ATTRIBUTE","InvisiblePattern","DroppableWidget","InteractionLayer","defaultBorderStyle: BorderStyleBlock","Dim","bodyTypeface: TextStyleBlock","defaultPadding: Padding","padding","builtinBodyTypeface: TextStyleBlock","EXCLUDED_PROPERTIES: Record<string, string[]>","CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>>","context","lines: string[]","prop","generatedInterfaces: string[]","derivedProps: Array<PropContainer>","metaProps: Array<PropContainer>","props","serverUrl: string","timeoutId: ReturnType<typeof setTimeout> | undefined","stopSocketHeartbeat: (() => void) | undefined","rootStore","operationAPI","stableEffectOptions: UseStableEffectOptions","Dim","rootStore","_processedTransactions","SbComponent","INSTANCE_ID_ATTRIBUTE","rootStore","instanceId","EditWrapper","Component","ReactiveComponent","defaultEditorConfig: EditorConfig","catalog: Catalog","config","Entity","editorConfig: EditorConfig","propertiesDefinition","Dim","rootStore","editorConfig","editorConfig: EditorConfig","propertiesDefinition","rootStore","allSections: Record<string, Section<any>>","propertiesDefinition","propertiesDefinition","StateVarPersistence","propertiesDefinition","rootStore","BuildErrorNotification","buildError: BuildError","rootStore","ErrorMessage","rootStore","Property","properties: PropertyValues<any> & Record<string, PropertyInfo>","size","context: CreationContext","context","editorTemplateCreateRequest","baseProperties","otherComponentsUpdates","fixCursorSnapOffset: CollisionDetection","Property","Dim","rootStore","possibleNewComponentId: SbElement | undefined","pointerConfig: PointerSensorOptions","collisionDetection","runtimeEntitiesManager: RuntimeEntitiesManager","action","payload: ReparentRequest","payload: DeleteRequest","operation","asSetProperties: SetPropertiesRequest","payload: SetPropertiesRequest","rootStore","renameRequest: RenameElementRequest","SourceUpdateApi","editStore: EditStore","runtimeEntitiesManager: RuntimeEntitiesManager","entityManager: IEntityManager","componentsManager: ComponentRegistry","propertiesDefinition","allUpdates: Record<\n SbElement,\n {\n props?: Record<string, PropertyInfo<unknown>>;\n meta?: Record<string, unknown>;\n }\n >","propUpdates: Record<\n SbElement,\n Record<string, PropertyInfo<unknown>>\n >","metaUpdates: Record<SbElement, Record<string, unknown>>","lookup: Record<string, Prop<any, any>>","cachedGetters: Record<K, IComputedValue<T>>","computed","SB","rootStore","nameManager: NameManager","widgetChildren: Array<ChildElement>","acc","nameManager: NameManager","entityManager: IEntityManager","RuntimeWidgetsManager","ops: Record<SbElement, OptimisticAction[]>","changes","rootStore","rootStore","childRect","placeholders: StackPlaceholderPos[]","offsetPx: number","DEFAULT_PREVIEW_SIZE: typeof this._draggingWidgetSize","root: RootStore","Dim","canResizeWidth","canResizeHeight","properties: Record<string, PropertyInfo<unknown>>","Property","root: RootStore","editStore: EditStore","computed","UIStore","OperationManager","RuntimeEntitiesManager","PropertiesPanelManager","InteractionLayerManager","ConnectionManager","rootStore","useHotkeysOriginal","IframeConnected","handleInit: IframeEventHandler<\"sb-init\">","sourceUpdateApi","handleDragStart: IframeEventHandler<\"dragstart\">","rootStore","WithUserWrapper","timeout: NodeJS.Timeout","bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n >","updateActiveAgentsListener: IframeEventHandler<\n \"sb-update-active-agents\"\n >","retrievePropertyPanelPropsListener: IframeEventHandler<\n \"sb-retrieve-property-panel-props\"\n >","editOperationAcknowledgeListener: IframeEventHandler<\n \"sb-edit-operation-acknowledge\"\n >","updatePropertyWithEffectsListener: IframeEventHandler<\n \"sb-update-property-with-effects\"\n >","createComponentListener: IframeEventHandler<\n \"sb-create-component\"\n >","error","toggleLivePreviewListener: IframeEventHandler<\n \"sb-toggle-live-preview\"\n >","globalSyncListener: IframeEventHandler<\"sb-global-sync\">","navigateToListener: IframeEventHandler<\"route-change\">","generatePath","aiUpdatesListener: IframeEventHandler<\"ai-updates\">","action","sourceIds: SbElement[]","Auth0Wrapper","EmbedWrapper","timeout: NodeJS.Timeout","rootStore","bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n >","globalSyncListener: IframeEventHandler<\"sb-global-sync\">","navigateToListener: IframeEventHandler<\"route-change\">","generatePath","action","rootStore","ErrorMessage","VARIABLES: Record<string, string>","VARIABLE_VALUES: Record<keyof typeof VARIABLES, string>","componentVariables: Record<string, string>","componentVariableValues: Record<string, string>","registry: Record<string, string>","loadApisIntoLibrary","Auth0Wrapper","EditorAuth0Wrapper","AppAuth0Wrapper","EmbedWrapper","EditorEmbedWrapper","AppEmbedWrapper","SbProvider","resolvePromiseListener: IframeEventHandler<\"resolve-promise\">","rejectPromiseListener: IframeEventHandler<\"reject-promise\">","finalUrl: string","logoutResult: any","Component","rootStore","Component","useThemeInternal","ErrorBoundary","mobxComputed","fn","ErrorMessage","useEditor","GeneralErrorImage","AppNotFoundImage","ServerError500Image","ForbiddenErrorImage","LoginErrorImage","ErrorComponent","EXPANDED: React.CSSProperties","useEditor","InteractionLayer","LibraryEarlyConsoleBuffer"],"sources":["../src/lib/user-facing/component-base/constants.ts","../src/lib/hooks/use-alignment-styles.tsx","../src/lib/internal-details/theme-context.tsx","../src/lib/user-facing/component-base/use-passthrough-props.ts","../src/lib/hooks/use-observer-memo.ts","../src/lib/internal-details/component-info-context.tsx","../src/lib/user-facing/hooks/use-editor.tsx","../src/lib/user-facing/themes/padding-constants.ts","../src/lib/user-facing/themes/typography-constants.ts","../src/lib/user-facing/themes/constants.ts","../src/lib/user-facing/themes/generate-class-name.ts","../src/lib/user-facing/themes/generate-border-styles.ts","../src/lib/user-facing/themes/generatedStyles/generate-padding-style.ts","../src/lib/user-facing/themes/generatedStyles/generate-component-styles.ts","../src/lib/user-facing/state/create-bindable-entity-proxy.ts","../src/lib/user-facing/state/create-scope.ts","../src/lib/hooks/use-stable-effect.ts","../src/lib/internal-details/scope/scope-context.tsx","../src/lib/internal-details/scope/scope.tsx","../src/lib/internal-details/scope/global.tsx","../src/lib/user-facing/themes/typeface-constants.ts","../src/lib/user-facing/themes/typefaces/utils.tsx","../src/lib/user-facing/styling/style-as-class.ts","../src/lib/user-facing/themes/utils.ts","../src/lib/user-facing/properties-panel/mixins/appearance-properties.ts","../src/lib/user-facing/properties-panel/mixins/appearance.ts","../src/lib/user-facing/properties-panel/mixins/layout-section.ts","../src/lib/user-facing/properties-panel/mixins/loading.ts","../src/lib/user-facing/components/stack/stack-classes.ts","../src/lib/user-facing/components/stack/index.tsx","../src/lib/user-facing/components/container/index.tsx","../src/lib/internal-details/internal-components/spinner.tsx","../src/lib/internal-details/css-constants.ts","../src/edit-mode/dnd/hooks/use-component-draggable.ts","../src/edit-mode/dnd/use-draggable-widget.ts","../src/lib/internal-details/draggable-context-provider.tsx","../src/lib/user-facing/assets/icons/close.svg","../src/lib/user-facing/layers.ts","../src/edit-mode/duplicated-name-popover.tsx","../src/lib/user-facing/assets/images/clark.svg","../src/lib/internal-details/internal-components/common.ts","../src/edit-mode/assets/ai-stars.svg","../src/lib/internal-details/internal-components/fix-with-clark-button.tsx","../src/lib/user-facing/component-base/error-boundary.tsx","../src/lib/internal-details/actions-context.tsx","../src/lib/internal-details/component-suspense-style-context.tsx","../src/lib/internal-details/entities-state.ts","../src/lib/internal-details/lib/evaluator/suspense-helpers.ts","../src/lib/internal-details/lib/evaluator/use-shallow-mobx-observer.ts","../src/lib/internal-details/lib/suspense/suspense-fallback.tsx","../src/lib/internal-details/remove-bindings.tsx","../src/lib/internal-details/reactive-component.tsx","../src/lib/internal-details/editor-reactive-component.tsx","../src/lib/utils/is-component-type-detached.ts","../src/lib/utils/widget-wrapper-naming.ts","../src/edit-mode/assets/canvasInvisible.svg","../src/edit-mode/dnd/hooks/use-component-droppable.ts","../src/edit-mode/interaction-utils.ts","../src/edit-mode/dnd/hooks/use-widget-node-ref.ts","../src/edit-mode/dnd/utils.ts","../src/edit-mode/dnd/droppable-widget.tsx","../src/edit-mode/hooks/use-right-click-menu.ts","../src/edit-mode/identifier-context.tsx","../src/edit-mode/interaction-layer/interaction-context.tsx","../src/lib/internal-details/lib/throttle.ts","../src/lib/user-facing/constants.ts","../src/edit-mode/dnd/stack-drop.tsx","../src/edit-mode/dnd/drop-layer.tsx","../src/edit-mode/extended-clickable-area.ts","../src/lib/user-facing/assets/icons/hide.svg","../src/edit-mode/resize-capabilities.ts","../src/edit-mode/interaction-layer/interaction-rect-name-pill.tsx","../src/edit-mode/interaction-layer/interaction-rect-actions.tsx","../src/edit-mode/interaction-layer/interaction-rect-handles.tsx","../src/edit-mode/interaction-layer/use-viewport-intersection.ts","../src/edit-mode/interaction-layer/interaction-rect.tsx","../src/edit-mode/interaction-layer/interaction-layer.tsx","../src/edit-mode/roots.tsx","../src/lib/internal-details/is-sb-component.tsx","../src/lib/utils/children.ts","../src/edit-mode/runtime-edit-tracking.ts","../src/edit-mode/edit-wrapper.tsx","../src/lib/user-facing/themes/generate-colors.ts","../src/lib/user-facing/themes/generate-typographies.ts","../src/lib/user-facing/themes/generate-theme.ts","../src/lib/user-facing/themes/default-theme.ts","../src/docs-utils/generate-docs-utils.ts","../src/edit-mode/async-socket.ts","../src/edit-mode/source-update-api.ts","../src/lib/internal-details/component-docs-service.ts","../src/lib/internal-details/identifier-normalizer.ts","../src/lib/internal-details/use-track-runtime-widget.ts","../src/lib/internal-details/sb-wrapper.tsx","../src/lib/user-facing/components/page/editor.ts","../src/lib/user-facing/components/page/props.ts","../src/lib/user-facing/components/page/index.tsx","../src/lib/user-facing/components/app/editor.ts","../src/lib/user-facing/components/app/props.ts","../src/lib/user-facing/components/app/index.tsx","../src/lib/user-facing/components/custom/register-custom-component.tsx","../src/lib/user-facing/entities/variable/props.ts","../src/lib/user-facing/entities/variable/index.ts","../src/lib/user-facing/entities/timer/props.ts","../src/lib/user-facing/entities/timer/index.ts","../src/lib/user-facing/entities/api/suspensible-api.ts","../src/lib/user-facing/entities/api/props.ts","../src/lib/user-facing/entities/api/index.ts","../src/lib/internal-details/lib/features/injected-features.ts","../src/edit-mode/build-error-notification.tsx","../src/edit-mode/dnd/is-nestable.ts","../src/edit-mode/create-component.ts","../src/edit-mode/dnd/collision-detection.ts","../src/edit-mode/dnd/handle-stack-drop.ts","../src/edit-mode/dnd/hooks/use-handle-dnd-events.ts","../src/edit-mode/dnd/dnd-provider.tsx","../src/edit-mode/dnd/new-components-drag-layer.tsx","../src/edit-mode/features/ai-store.ts","../src/edit-mode/features/connection-manager.ts","../src/edit-mode/features/interaction-layer-manager.ts","../src/edit-mode/features/operation-store.ts","../src/edit-mode/features/properties-panel-manager.ts","../src/lib/internal-details/lib/mobx-cached-getter.ts","../src/edit-mode/properties.ts","../src/edit-mode/features/runtime-widgets-manager.ts","../src/edit-mode/features/runtime-entities-manager.ts","../src/lib/utils/is-component-stacklike.ts","../src/lib/utils/get-component-layout.ts","../src/lib/utils/is-component-vstack.ts","../src/edit-mode/dnd/stack-utils.ts","../src/edit-mode/dnd/stack-store.ts","../src/edit-mode/features/drag-and-drop-store.ts","../src/edit-mode/features/resizing-store.ts","../src/edit-mode/features/ui-store.ts","../src/edit-mode/edit-store.ts","../src/lib/hooks/use-editor-hotkeys.ts","../src/lib/hooks/use-key-pressed.ts","../src/edit-mode/editor-hotkeys.tsx","../src/edit-mode/iframe-wrappers.tsx","../src/lib/internal-details/app-wrappers.tsx","../src/lib/internal-details/internal-components/error-boundary/index.tsx","../src/lib/internal-details/routing.ts","../src/lib/user-facing/styling/styles.ts","../src/lib/user-facing/sb-provider.tsx","../src/lib/user-facing/global-functions.ts","../src/lib/user-facing/hooks/use-popover-roots.ts","../src/lib/user-facing/components/page/register-page.ts","../src/lib/user-facing/components/app/register-app.tsx","../src/lib/internal-details/entities.ts","../src/lib/user-facing/hooks/use-update-properties.ts","../src/lib/user-facing/hooks/use-theme.tsx","../src/lib/user-facing/state/observable-computed.tsx","../src/lib/user-facing/state/computed.ts","../src/lib/internal-details/internal-components/route-load-error.tsx","../src/lib/user-facing/hooks/use-dialog-editing.tsx","../src/lib/user-facing/error-pages/constants.ts","../src/lib/user-facing/assets/images/errors/403-image.svg","../src/lib/user-facing/assets/images/errors/404-image.svg","../src/lib/user-facing/assets/images/errors/500-image.svg","../src/lib/user-facing/assets/images/errors/general-error.svg","../src/lib/user-facing/assets/images/errors/login-error.svg","../src/lib/user-facing/error-pages/error-component.tsx","../src/lib/user-facing/error-pages/page-not-found.tsx","../src/lib/user-facing/component-base/droppable-container.tsx","../src/lib/index.ts"],"sourcesContent":["export type ContainerLayout = \"vertical\" | \"horizontal\";\n\nexport type ContainerVariant = \"none\" | \"card\";\n\nexport type VerticalAlignment<\n LayoutType extends \"vertical\" | \"horizontal\" | undefined = undefined,\n> = LayoutType extends \"horizontal\"\n ? \"top\" | \"center\" | \"bottom\" | \"stretch\"\n : \"top\" | \"center\" | \"bottom\" | \"space-between\" | \"space-around\";\n\nexport type HorizontalAlignment<\n LayoutType extends \"vertical\" | \"horizontal\" | undefined = undefined,\n> = LayoutType extends \"vertical\"\n ? \"left\" | \"center\" | \"right\" | \"stretch\"\n : \"left\" | \"center\" | \"right\" | \"space-between\" | \"space-around\";\n\nexport const VERTICAL_ALIGNMENT_MAP: Record<\n VerticalAlignment<\"vertical\">,\n string\n> = {\n top: \"flex-start\",\n center: \"center\",\n bottom: \"flex-end\",\n \"space-between\": \"space-between\",\n \"space-around\": \"space-around\",\n};\n\nexport const HORIZONTAL_ALIGNMENT_MAP: Record<\n HorizontalAlignment<\"horizontal\">,\n string\n> = {\n left: \"flex-start\",\n center: \"center\",\n right: \"flex-end\",\n \"space-between\": \"space-between\",\n \"space-around\": \"space-around\",\n};\n","import {\n HORIZONTAL_ALIGNMENT_MAP,\n VERTICAL_ALIGNMENT_MAP,\n type VerticalAlignment,\n type HorizontalAlignment,\n} from \"../user-facing/component-base/constants.js\";\nimport type { ContainerLayout } from \"../user-facing/component-base/constants.js\";\nimport type { CSSProperties } from \"react\";\n\nconst useAlignmentStyles = ({\n layout,\n verticalAlign,\n horizontalAlign,\n}: {\n layout?: ContainerLayout;\n verticalAlign?: VerticalAlignment;\n horizontalAlign?: HorizontalAlignment;\n}) => {\n const layoutStyle: CSSProperties = {};\n\n if (layout === \"vertical\") {\n if (verticalAlign) {\n layoutStyle.justifyContent = VERTICAL_ALIGNMENT_MAP[verticalAlign];\n }\n if (horizontalAlign) {\n layoutStyle.alignItems = HORIZONTAL_ALIGNMENT_MAP[horizontalAlign];\n }\n } else if (layout === \"horizontal\") {\n if (horizontalAlign) {\n layoutStyle.justifyContent = HORIZONTAL_ALIGNMENT_MAP[horizontalAlign];\n }\n if (verticalAlign) {\n layoutStyle.alignItems = VERTICAL_ALIGNMENT_MAP[verticalAlign];\n }\n }\n\n return layoutStyle;\n};\n\nexport default useAlignmentStyles;\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\nconst ThemeContext = createContext<{\n theme: UserAccessibleTheme;\n}>(null!);\n\nexport const ThemeProvider: React.FC<\n React.PropsWithChildren<{\n theme: UserAccessibleTheme;\n }>\n> = ({ theme, children }) => {\n const value = useMemo(() => {\n return { theme };\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const useTheme = () => {\n return useContext(ThemeContext);\n};\n","import {\n ROOT_WIDGET_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_DISABLE_DND,\n} from \"@superblocksteam/library-shared\";\nimport { useMemo } from \"react\";\n\nexport type StrictElementPassthroughProps = React.HTMLAttributes<HTMLElement> &\n Record<`${string}-${string}`, any> & {\n ref?: (el: HTMLElement | null) => void;\n };\nexport type ElementPassthroughProps = Record<string, any>;\n\nconst PASSTHROUGH_KEYS = [\n \"type\",\n \"style\",\n \"data-test\",\n \"className\",\n SOURCE_ID_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_DISABLE_DND,\n];\n\nconst usePassthroughProps = (\n props: Record<string, unknown>,\n): ElementPassthroughProps => {\n const passThroughItems = PASSTHROUGH_KEYS.map((key) => props[key]);\n\n return useMemo(() => {\n return passThroughItems.reduce<ElementPassthroughProps>(\n (acc, item, index) => {\n if (item !== undefined) {\n const key = PASSTHROUGH_KEYS[index] as keyof ElementPassthroughProps;\n acc[key] =\n item as ElementPassthroughProps[keyof ElementPassthroughProps];\n }\n return acc;\n },\n {} as ElementPassthroughProps,\n );\n // the length of this array is fixed and corresponds to each potential passthrough\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, passThroughItems);\n};\n\nexport default usePassthroughProps;\n","import { computed, reaction } from \"mobx\";\nimport { useEffect, useMemo, useState, useRef } from \"react\";\nimport type { IComputedValue } from \"mobx\";\n\n/**\n * The component that uses this hook must be wrapped `observer`, otherwise state changes will not\n * cause this hook to re-run.\n */\nexport const useObserverMemo = <T>(fn: () => T, deps: any[]) => {\n return useMemo<IComputedValue<T>>(() => {\n return computed(fn);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps).get();\n};\n\n/**\n * Like useObserverMemo, but does not require the component to be wrapped in an observer.\n * It is recommended to use useObserverMemo instead.\n * @see useObserverMemo\n *\n * Note: This implementation uses MobX reactions to track both observable changes and\n * dependency changes.\n */\nexport const useStandaloneObserverMemo = <T>(fn: () => T, deps: any[]) => {\n const fnRef = useRef(fn);\n fnRef.current = fn;\n\n const [result, setResult] = useState<T>(fnRef.current);\n useEffect(\n () =>\n reaction(() => fnRef.current(), setResult, {\n fireImmediately: true,\n name: \"useStandaloneObserverMemo\",\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n deps,\n );\n\n return result;\n};\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ComponentInfo = {\n sourceId: SbElement;\n instanceId: SbInstance;\n name: string;\n};\n\nconst ComponentInfoContext = createContext<ComponentInfo>(null!);\n\nexport const ComponentInfoProvider: React.FC<\n React.PropsWithChildren<ComponentInfo>\n> = ({ sourceId, instanceId, name, children }) => {\n const componentInfo = useMemo(\n () => ({ sourceId, name, instanceId }),\n [sourceId, instanceId, name],\n );\n return (\n <ComponentInfoContext.Provider value={componentInfo}>\n {children}\n </ComponentInfoContext.Provider>\n );\n};\n\nexport const useComponentInfo = () => {\n return useContext(ComponentInfoContext);\n};\n","import { getEditStore } from \"../../../edit-mode/get-edit-store.js\";\nimport { useStandaloneObserverMemo } from \"../../hooks/use-observer-memo.js\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.jsx\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport type EditorFeatures = {\n /**\n * Whether drag and drop functionality is enabled\n */\n dragAndDrop: boolean;\n\n /**\n * Whether nudging elements with arrow keys is enabled\n */\n nudging: boolean;\n\n /**\n * The currently selected widget\n */\n selectWidget: SbInstance | null;\n};\n\nexport type FeatureState<T> = {\n value: T;\n set: (value: T) => void;\n};\n\nexport type RecordFeatureState<T> = {\n [K in keyof T]: FeatureState<T[K]>;\n};\n\ntype HookResult = {\n features: RecordFeatureState<EditorFeatures>;\n isEditing: boolean;\n};\n\n/**\n * Hook that provides access to editor-specific features.\n *\n * This hook allows you to control editor-only functionality on a per-widget basis.\n * Note: These features only work in editor mode and have no effect in deployed apps.\n *\n * @example\n * // Disable drag and drop for a widget\n * const { features } = useEditor();\n * features.dragAndDrop.set(false);\n *\n * // Disable nudging with arrow keys\n * features.nudging.set(false);\n */\nconst useEditor = (): HookResult => {\n // TODO (alex): use instanceId instead\n const { sourceId } = useComponentInfo();\n const result = useStandaloneObserverMemo(() => {\n const dndStore = rootStore.editStore?.ui.dnd;\n if (!dndStore) {\n // If we're not in edit mode, this is a no-op. However, this hook should still be part of the user-facing code\n return {\n features: {\n dragAndDrop: { value: false, set: () => {} },\n nudging: { value: false, set: () => {} },\n selectWidget: { value: null, set: () => {} },\n },\n isEditing: false,\n };\n }\n\n const editStore = getEditStore();\n\n // Get the instanceId for this component\n const instanceId =\n editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n\n const canDrag = instanceId ? dndStore.canDragWidget(instanceId) : false;\n const canNudge = instanceId ? dndStore.canNudgeWidget(instanceId) : false;\n\n const selectedInstanceIds = editStore.ui.getSelectedInstanceIds();\n return {\n features: {\n dragAndDrop: {\n value: canDrag,\n set: (value: boolean) => {\n dndStore.setWidgetFeatures(sourceId, {\n dragAndDrop: value,\n });\n },\n },\n nudging: {\n value: canNudge,\n set: (value: boolean) => {\n dndStore.setWidgetFeatures(sourceId, {\n nudging: value,\n });\n },\n },\n selectWidget: {\n value: selectedInstanceIds.length > 0 ? selectedInstanceIds[0] : null,\n set: (instanceId: SbInstance | null) => {\n if (instanceId) {\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (!sourceId) {\n return;\n }\n // this is for detached component to get selected when opened by trigger component or navigation side bar\n editStore.ui.selectWidget(instanceId);\n editStore.ui.setFocusedSourceId(sourceId);\n } else {\n editStore.ui.selectWidget(null);\n editStore.ui.setFocusedSourceId(null);\n }\n },\n },\n },\n isEditing: Boolean(editStore.isInitialized) && !editStore.isLivePreview,\n } satisfies HookResult;\n }, [sourceId]);\n return result;\n};\n\nexport default useEditor;\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\ntype PaddingPreset = {\n value: Padding;\n label: string;\n shortLabel?: string;\n};\n\ntype PaddingPresetName = \"none\" | \"small\" | \"medium\" | \"large\";\ntype PaddingPresetNameWithClassic = PaddingPresetName | \"classic\";\n\nexport const BASE_THEME_EXISTING_APPS_PADDING: Padding = {\n top: Dim.px(11),\n bottom: Dim.px(11),\n left: Dim.px(16),\n right: Dim.px(16),\n};\n\nconst PADDING_PRESETS_V1_THEME: Record<\n PaddingPresetNameWithClassic,\n PaddingPreset\n> = {\n none: {\n value: {\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n },\n label: \"None\",\n shortLabel: \"None\",\n },\n small: {\n value: {\n top: Dim.px(5),\n bottom: Dim.px(5),\n left: Dim.px(5),\n right: Dim.px(5),\n },\n label: \"Small (0.5x)\",\n shortLabel: \"S (0.5x)\",\n },\n medium: {\n value: {\n top: Dim.px(11),\n bottom: Dim.px(11),\n left: Dim.px(11),\n right: Dim.px(11),\n },\n label: \"Medium (1x)\",\n shortLabel: \"M (1x)\",\n },\n large: {\n value: {\n top: Dim.px(23),\n bottom: Dim.px(23),\n left: Dim.px(23),\n right: Dim.px(23),\n },\n label: \"Large (2x)\",\n shortLabel: \"L (2x)\",\n },\n classic: {\n value: BASE_THEME_EXISTING_APPS_PADDING,\n label: `Classic`,\n },\n};\n\nconst PADDING_PRESETS_V2_THEME = PADDING_PRESETS_V1_THEME;\n\nconst PADDING_PRESETS_V3_THEME: Record<PaddingPresetName, PaddingPreset> = {\n none: {\n value: {\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n },\n label: \"None (0px)\",\n shortLabel: \"None (0px)\",\n },\n small: {\n value: {\n top: Dim.px(6),\n bottom: Dim.px(6),\n left: Dim.px(6),\n right: Dim.px(6),\n },\n label: \"Small (6px)\",\n shortLabel: \"S (6px)\",\n },\n medium: {\n value: {\n top: Dim.px(12),\n bottom: Dim.px(12),\n left: Dim.px(12),\n right: Dim.px(12),\n },\n label: \"Medium (12px)\",\n shortLabel: \"M (12px)\",\n },\n large: {\n value: {\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n },\n label: \"Large (24px)\",\n shortLabel: \"L (24px)\",\n },\n};\n\nconst PADDING_PRESETS_V4_THEME = PADDING_PRESETS_V3_THEME;\nconst PADDING_PRESETS_V5_THEME = PADDING_PRESETS_V3_THEME;\n\nexport const PADDING_PRESETS_BY_THEME_VERSION: Record<\n number,\n Record<PaddingPresetName, PaddingPreset>\n> = {\n 1: PADDING_PRESETS_V1_THEME,\n 2: PADDING_PRESETS_V2_THEME,\n 3: PADDING_PRESETS_V3_THEME,\n 4: PADDING_PRESETS_V4_THEME,\n 5: PADDING_PRESETS_V5_THEME,\n};\n","import type {\n NonCustomTypography,\n TextStyleBlock,\n Typographies,\n} from \"@superblocksteam/library-shared/types\";\nimport type { DropdownOption } from \"@superblocksteam/shared\";\n\ntype PropertiesByTypography = Record<string, Array<keyof TextStyleBlock>>;\n\nexport const USER_SELECTABLE_VARIANTS: Array<NonCustomTypography> = [\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"body1\",\n \"body2\",\n \"body3\",\n \"label\",\n \"inputLabel\",\n \"inputText\",\n];\n\nexport const TYPOGRAPHY_KEYS: Array<keyof Omit<Typographies, \"custom\">> = [\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"body1\",\n \"body2\",\n \"body3\",\n \"label\",\n \"buttonLabel\",\n \"inputLabel\",\n \"inputText\",\n \"inputPlaceholder\",\n \"link\",\n \"code\",\n];\n\nexport const DEFAULT_INPUT_TEXT_STYLE_VARIANT: keyof Typographies = \"inputText\";\nexport const DEFAULT_HEADER_TEXT_STYLE_VARIANT: keyof Typographies = \"heading3\";\nexport const SB_CUSTOM_TEXT_STYLE = \"SB_CUSTOM_TEXT_STYLE\";\n\nexport type UnitOption = {\n label: string;\n value: string;\n numberless?: boolean;\n} & Partial<DropdownOption>;\n\nconst SCALE_HELP_TEXT_LINE_HEIGHT =\n \"A value to be multiplied by font size. Equivalent to unitless in CSS\";\nconst SCALE_HELP_TEXT_LETTER_SPACING =\n \"A value to be multiplied by font size. Equivalent to em in CSS\";\n\nconst PIXEL_OPTION: UnitOption = {\n label: \"Pixels\",\n value: \"px\",\n subText: \"Fixed value that remains constant\",\n};\n\nconst EM_OPTION: UnitOption = {\n label: \"Scale\",\n value: \"em\",\n subText: SCALE_HELP_TEXT_LETTER_SPACING,\n};\n\nconst SCALE_OPTION: UnitOption = {\n label: \"Scale\",\n value: \"\",\n subText: SCALE_HELP_TEXT_LINE_HEIGHT,\n};\n\nconst NORMAL_OPTION: UnitOption = {\n label: \"Normal\",\n value: \"normal\",\n numberless: true,\n subText: \"Browser default for the font family\",\n};\n\nexport const LINE_HEIGHT_UNIT_OPTIONS = [\n PIXEL_OPTION,\n SCALE_OPTION,\n NORMAL_OPTION,\n];\n\nexport const LETTER_SPACING_UNIT_OPTIONS = [\n PIXEL_OPTION,\n EM_OPTION,\n NORMAL_OPTION,\n];\n\nexport const TEXT_TRANSFORM_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Uppercase\", value: \"uppercase\" },\n { label: \"Lowercase\", value: \"lowercase\" },\n { label: \"Capitalize\", value: \"capitalize\" },\n];\n\nexport const FONT_WEIGHT_OPTIONS = [\n {\n label: \"Thin (100)\",\n value: 100,\n },\n {\n label: \"Extra light (200)\",\n value: 200,\n },\n {\n label: \"Light (300)\",\n value: 300,\n },\n {\n label: \"Normal (400)\",\n value: 400,\n },\n {\n label: \"Medium (500)\",\n value: 500,\n },\n {\n label: \"Semi-bold (600)\",\n value: 600,\n },\n {\n label: \"Bold (700)\",\n value: 700,\n },\n {\n label: \"Extra bold (800)\",\n value: 800,\n },\n {\n label: \"Black (900)\",\n value: 900,\n },\n];\n\nexport const FONT_STYLE_OPTIONS = [\n { label: \"Normal\", value: \"normal\" },\n { label: \"Italic\", value: \"italic\" },\n];\n\nexport const DISABLED_PROPERTIES_BY_TYPOGRAHY: PropertiesByTypography = {\n code: [\"textColor\"],\n};\n\nexport const LOCKED_PROPERTIES_BY_TYPOGRAHY: PropertiesByTypography = {\n link: [\n \"fontSize\",\n \"lineHeight\",\n \"fontFamily\",\n \"letterSpacing\",\n \"textTransform\",\n ],\n inputPlaceholder: [\n \"fontSize\",\n \"lineHeight\",\n \"fontFamily\",\n \"fontStyle\",\n \"letterSpacing\",\n \"textTransform\",\n ],\n buttonLabel: [\"textColor\"],\n};\n\nexport const LOCKED_TOOLTIP_BY_TYPOGRAPHY: Record<string, string> = {\n link: \"Inherited from the text in which the link is included\",\n inputPlaceholder:\n \"Inherited from the input text where the placeholder is shown\",\n buttonLabel: \"Inherited based on the button variant\",\n};\n\nexport const DEFAULT_TYPOGRAPHIES_LEGACY: Typographies = {\n heading1: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"36px\",\n fontWeight: 500,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading2: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"28px\",\n fontWeight: 500,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading3: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"22px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n lineHeight: \"26px\",\n },\n heading4: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"18px\",\n lineHeight: \"24px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n },\n heading5: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"16px\",\n lineHeight: 1.2,\n fontWeight: 500,\n letterSpacing: \"0em\",\n },\n heading6: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral900\",\n },\n fontSize: \"14px\",\n lineHeight: \"16px\",\n fontWeight: 500,\n letterSpacing: \"normal\",\n },\n body1: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"16px\",\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: \"0em\",\n },\n body2: {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"16px\",\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n letterSpacing: \"normal\",\n },\n body3: {\n fontSize: \"12px\",\n fontWeight: 400,\n lineHeight: \"14px\",\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n letterSpacing: \"normal\",\n },\n label: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"13px\",\n fontWeight: 500,\n lineHeight: \"16px\",\n letterSpacing: \"normal\",\n },\n inputLabel: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n disabled: \"colors.neutral300\",\n error: \"colors.danger\",\n },\n fontSize: \"13px\",\n fontWeight: 500,\n lineHeight: 1.5,\n letterSpacing: \"normal\",\n },\n buttonLabel: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"primary500\",\n },\n fontSize: \"14px\",\n fontWeight: 500,\n lineHeight: \"16px\",\n letterSpacing: \"normal\",\n },\n inputText: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: 1.2,\n letterSpacing: \"normal\",\n },\n inputPlaceholder: {\n fontWeight: 400,\n textColor: {\n default: \"colors.neutral300\",\n },\n // everything else is inherited\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n lineHeight: \"inherit\",\n letterSpacing: \"inherit\",\n fontStyle: \"inherit\",\n textTransform: \"inherit\",\n textDecoration: \"inherit\",\n },\n link: {\n fontFamily: \"inherit\",\n textColor: {\n default: \"colors.primary500\",\n },\n fontSize: \"inherit\",\n fontWeight: 400,\n lineHeight: \"inherit\",\n textDecoration: \"none\",\n letterSpacing: \"inherit\",\n textTransform: \"inherit\",\n },\n code: {\n fontFamily: \"Roboto Mono\",\n textColor: {\n default: \"colors.neutral700\",\n },\n fontSize: \"13px\",\n fontWeight: 400,\n lineHeight: 1.4,\n letterSpacing: \"normal\",\n },\n};\n\nexport const DEFAULT_TYPOGRAPHIES_NEW: Typographies = {\n ...DEFAULT_TYPOGRAPHIES_LEGACY,\n heading3: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading3,\n fontSize: \"24px\",\n letterSpacing: \"-0.01em\",\n lineHeight: 1.2,\n },\n heading4: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading4,\n fontSize: \"20px\",\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n },\n heading6: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.heading6,\n lineHeight: 1.2,\n },\n body2: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.body2,\n lineHeight: 1.5,\n },\n body3: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.body3,\n lineHeight: 1.5,\n },\n label: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.label,\n lineHeight: 1.5,\n fontSize: \"14px\",\n },\n inputLabel: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.inputLabel,\n lineHeight: 1.5,\n fontSize: \"14px\",\n },\n buttonLabel: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.buttonLabel,\n lineHeight: 1.2,\n },\n code: {\n ...DEFAULT_TYPOGRAPHIES_LEGACY.code,\n lineHeight: 1.2,\n },\n};\n\nexport const DEFAULT_TYPOGRAPHIES_BY_VERSION: Record<number, Typographies> = {\n 1: DEFAULT_TYPOGRAPHIES_LEGACY,\n 2: DEFAULT_TYPOGRAPHIES_LEGACY,\n 3: DEFAULT_TYPOGRAPHIES_LEGACY,\n 4: DEFAULT_TYPOGRAPHIES_LEGACY,\n 5: DEFAULT_TYPOGRAPHIES_NEW,\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\n\nimport { ThemeMode } from \"@superblocksteam/library-shared/types\";\nimport { colors } from \"../styling/colors.js\";\nimport { PADDING_PRESETS_BY_THEME_VERSION } from \"./padding-constants.js\";\n\nimport { DEFAULT_TYPOGRAPHIES_NEW } from \"./typography-constants.js\";\nimport type {\n Border,\n PerCornerBorderRadius,\n PerSideBorder,\n Typographies,\n UserAccessibleTheme,\n UserDefinedPalette,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const CURRENT_THEME_VERSION = 5;\n\nexport const LIGHT_APP_BG = colors.GREY_25;\nexport const DARK_APP_BG = \"#131516\";\n\nconst DEFAULT_DARK_PALETTE = {\n primaryColor: colors.ACCENT_BLUE_500,\n appBackgroundColor: DARK_APP_BG,\n};\n\nconst DEFAULT_LIGHT_PALETTE = {\n primaryColor: colors.ACCENT_BLUE_500,\n appBackgroundColor: LIGHT_APP_BG,\n};\n\nexport const noBorder: (theme: UserAccessibleTheme) => Border = (theme) => ({\n width: Dim.px(0),\n style: \"solid\",\n color: theme.colors.neutral100,\n});\n\nconst onePixelTransparentBorder: () => Border = () => ({\n width: Dim.px(1),\n style: \"solid\",\n color: \"transparent\",\n});\n\nconst defaultContainerBorder: (theme: UserAccessibleTheme) => Border = (\n theme,\n) => ({\n width: Dim.px(1),\n style: \"solid\",\n color: theme.colors.neutral100,\n});\n\nexport const noBorderOject: (theme: UserAccessibleTheme) => PerSideBorder = (\n theme,\n) => ({\n left: noBorder(theme),\n right: noBorder(theme),\n top: noBorder(theme),\n bottom: noBorder(theme),\n});\n\nexport const onePixelTransparentBorderObject: () => PerSideBorder = () => ({\n left: onePixelTransparentBorder(),\n right: onePixelTransparentBorder(),\n top: onePixelTransparentBorder(),\n bottom: onePixelTransparentBorder(),\n});\n\nexport const EMPTY_RADIUS: PerCornerBorderRadius = {\n topLeft: Dim.px(0),\n topRight: Dim.px(0),\n bottomLeft: Dim.px(0),\n bottomRight: Dim.px(0),\n};\n\nexport const DEFAULT_SYSTEM_RADIUS: PerCornerBorderRadius = {\n topLeft: Dim.px(4),\n topRight: Dim.px(4),\n bottomLeft: Dim.px(4),\n bottomRight: Dim.px(4),\n};\n\nexport const defaultContainerBorderObject: (\n theme: UserAccessibleTheme,\n) => PerSideBorder = (theme) => ({\n left: defaultContainerBorder(theme),\n right: defaultContainerBorder(theme),\n top: defaultContainerBorder(theme),\n bottom: defaultContainerBorder(theme),\n});\n\nexport type UserDefinedThemeWithPalette = UserDefinedTheme & {\n palette: {\n dark: UserDefinedPalette;\n light: UserDefinedPalette;\n };\n};\n\ntype UserDefinedThemeWithTypography = UserDefinedThemeWithPalette & {\n typographies: Typographies; // make required\n};\n\nexport type UserDefinedThemeWithVersion = (\n | UserDefinedTheme\n | UserDefinedThemeWithPalette\n | UserDefinedThemeWithTypography\n) & {\n version: number;\n};\n\n// export const BASE_THEME_EXISTING_APPS: UserDefinedThemeWithPalette = {\n// typeFace: \"Roboto\",\n// borderRadius: { value: 4, mode: \"px\" },\n// mode: ThemeMode.LIGHT,\n// primaryColor: colors.ACCENT_BLUE_500,\n// padding: BASE_THEME_EXISTING_APPS_PADDING,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// version: 1,\n// };\n\n// BASE_THEME_EXISTING_APPS represents the styles used for apps before theming was released\n// const BASE_THEME_V1 = BASE_THEME_EXISTING_APPS;\n\n// const BASE_THEME_V2: UserDefinedThemeWithPalette = {\n// typeFace: \"Roboto\",\n// borderRadius: Dim.px(4),\n// mode: ThemeMode.AUTO,\n// primaryColor: colors.ACCENT_BLUE_500,\n// padding: PADDING_PRESETS_BY_THEME_VERSION[2].medium.value,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// version: 2,\n// };\n\n// const BASE_THEME_V3: UserDefinedThemeWithPalette = {\n// // Same as v2 except padding\n// typeFace: \"Roboto\",\n// borderRadius: { value: 4, mode: \"px\" },\n// mode: ThemeMode.AUTO,\n// primaryColor: colors.ACCENT_BLUE_500,\n// palette: {\n// dark: DEFAULT_DARK_PALETTE,\n// light: DEFAULT_LIGHT_PALETTE,\n// },\n// padding: PADDING_PRESETS_BY_THEME_VERSION[3].medium.value,\n// version: 3,\n// };\n\n// with typography but using legacy typographies\n// const BASE_THEME_V4: UserDefinedThemeWithTypography = {\n// ...BASE_THEME_V3,\n// typographies: DEFAULT_TYPOGRAPHIES_LEGACY,\n// version: 4,\n// };\n\n// update typogrpahies to match new design system\nexport const BASE_THEME_V5: UserDefinedThemeWithTypography = {\n typeFace: \"Roboto\",\n borderRadius: Dim.px(8),\n mode: ThemeMode.LIGHT,\n primaryColor: colors.ACCENT_BLUE_500,\n padding: PADDING_PRESETS_BY_THEME_VERSION[5].medium.value,\n spacing: Dim.px(12),\n palette: {\n dark: DEFAULT_DARK_PALETTE,\n light: DEFAULT_LIGHT_PALETTE,\n },\n typographies: DEFAULT_TYPOGRAPHIES_NEW,\n version: 5,\n};\n\nexport const BASE_THEMES_BY_VERSION: Record<\n number,\n UserDefinedThemeWithPalette\n> = {\n // 1: BASE_THEME_V1,\n // 2: BASE_THEME_V2,\n // 3: BASE_THEME_V3,\n // 4: BASE_THEME_V4,\n 5: BASE_THEME_V5,\n};\n\nexport const BASE_THEME_NEW_APPS =\n BASE_THEMES_BY_VERSION[CURRENT_THEME_VERSION];\n\nexport const CODE_EDITOR_LIGHT_COLORS = {\n text: \"#2e383c\",\n comment: \"#c0c0c0\",\n property: \"#7a7a7a\",\n number: \"#ccabd4\",\n tag: \"#9c3328\",\n string: \"#18a0fb\",\n variable: \"#929adc\",\n keyword: \"#91c9e4\",\n builtin: \"#e5ab64\",\n};\n\nexport const CODE_EDITOR_DARK_COLORS = {\n text: \"#eaeaea\",\n comment: \"#7a7a7a\",\n property: \"#b3b3b3\",\n number: \"#f3b7f9\", // Brighter version of the previous color for contrast\n tag: \"#f76e61\", // Brightened for visibility against dark background\n string: \"#4fb7ff\", // A more luminous blue for better visibility\n variable: \"#b8b8ff\", // Brighter version for visibility\n keyword: \"#b1e4ff\", // A more luminous shade to stand out on dark\n builtin: \"#ffb68a\", // Brightened for better contrast\n};\n\nexport const LIGHT_MODE_NEUTRALS = [\n \"#FFFFFF\", // neutral\n \"#F9FAFB\", // 25\n \"#F3F4F6\", // 50\n \"#E8EAED\", // 100\n \"#C6CAD2\", // 200\n \"#A4AAB7\", // 300\n \"#818A9C\", // 400\n \"#6C7689\", // 500\n \"#454D5F\", // 700\n \"#1F2633\", // 900\n];\n\nexport const DARK_MODE_NEUTRALS = [\n \"#1C1F21\", // neutral\n \"#1E2224\", // 25\n \"#262A2C\", // 50\n \"#2F3437\", // 100\n \"#393F42\", // 200\n \"#545E63\", // 300\n \"#677379\", // 400\n \"#859197\", // 500\n \"#DEE1E3\", // 700\n \"#FFFFFF\", // 900\n];\n\nexport const BOX_SHADOWS = {\n popover: {\n light:\n \"0px 0px 1px 0px rgba(34, 39, 47, 0.32), 0px 12px 32px -8px rgba(34, 39, 47, 0.16), 0px 1px 3px 0px rgba(34, 39, 47, 0.12)\",\n dark: \"0px 0px 1px 0px rgba(200, 200, 200, 0.32), 0px 12px 32px -8px rgba(200, 200, 200, 0.16), 0px 1px 3px 0px rgba(200, 200, 200, 0.12)\",\n },\n modal: {\n light:\n \"0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05)\",\n dark: \"0 3px 6px -4px rgba(160, 160, 160, 0.03), 0 6px 16px 0 rgba(160, 160, 160, 0.01)\",\n },\n};\n\nexport const INPUT_PADDING = {\n left: Dim.px(10),\n right: Dim.px(10),\n top: Dim.px(8),\n bottom: Dim.px(8),\n};\n\nexport const DROPDOWN_PADDING = INPUT_PADDING;\nexport const BUTTON_PADDING = INPUT_PADDING;\n\nexport const KEY_VALUE_PADDING = {\n left: Dim.px(20),\n right: Dim.px(20),\n top: Dim.px(12),\n bottom: Dim.px(12),\n};\n\nexport const KEY_VALUE_SPACING = Dim.px(24);\n","// Before you change how this works\n// This className is used for the following:\n// 1. Resize bounds\n// 2. Property pane reference for positioning\n// superblocks_widget_0 is also used for setting background color of canvas root\nexport const generateClassName = (seed?: string) => {\n return `superblocks_widget_${seed}`;\n};\n\nexport const getCanvasClassName = () => \"canvas\";\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport type {\n PerSideBorder,\n PerCornerBorderRadius,\n} from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nexport const createPerSideBorder = ({\n color,\n width,\n}: {\n color: string;\n width: number;\n}): PerSideBorder => {\n const borderSide = {\n color,\n width: Dim.px(width),\n };\n\n return {\n top: borderSide,\n right: borderSide,\n bottom: borderSide,\n left: borderSide,\n };\n};\n\nexport const generateBorderStyleObject = ({\n border,\n fallbackBorderColor,\n borderRadius,\n overrideBorderColor,\n}: {\n border?: PerSideBorder;\n fallbackBorderColor?: string;\n borderRadius?: PerCornerBorderRadius;\n overrideBorderColor?: string;\n}): CSSProperties => {\n return {\n ...generateBorderWidthAndColorStyleObject({\n border,\n fallbackBorderColor,\n overrideBorderColor,\n }),\n ...generateBorderRadiusStyleObject({ borderRadius }),\n };\n};\n\nconst generateBorderWidthAndColorStyleObject = ({\n border,\n fallbackBorderColor,\n overrideBorderColor,\n}: {\n border?: PerSideBorder;\n fallbackBorderColor?: string;\n overrideBorderColor?: string;\n borderRadius?: PerCornerBorderRadius;\n}): CSSProperties => {\n const styles: CSSProperties = {};\n /**\n * In legacy code, `border` was undefined if not user set,\n * so PRIMARY_BUTTON got the fallbackBorderColor.\n * This is required for a consistent UX (set 1px solid same color as background when there is no user set border for Primary)\n *\n * We need to apply this in code-mode as well when there user did not set any border themselves.\n */\n if (!border && fallbackBorderColor) {\n styles.borderColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderTopColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderRightColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderBottomColor = overrideBorderColor ?? fallbackBorderColor;\n styles.borderLeftColor = overrideBorderColor ?? fallbackBorderColor;\n }\n\n if (border?.left) {\n styles.borderLeftColor =\n overrideBorderColor ?? border.left.color ?? fallbackBorderColor;\n styles.borderLeftWidth = border.left.width\n ? `${border.left.width.value ?? 0}${border.left.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderLeftStyle = border.left.style ?? \"solid\";\n }\n if (border?.right) {\n styles.borderRightColor =\n overrideBorderColor ?? border.right.color ?? fallbackBorderColor;\n styles.borderRightWidth = border.right.width\n ? `${border.right.width.value ?? 0}${border.right.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderRightStyle = border.right.style ?? \"solid\";\n }\n if (border?.top) {\n styles.borderTopColor =\n overrideBorderColor ?? border.top.color ?? fallbackBorderColor;\n styles.borderTopWidth = border.top.width\n ? `${border.top.width.value ?? 0}${border.top.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderTopStyle = border.top.style ?? \"solid\";\n }\n if (border?.bottom) {\n styles.borderBottomColor =\n overrideBorderColor ?? border.bottom.color ?? fallbackBorderColor;\n styles.borderBottomWidth = border.bottom.width\n ? `${border.bottom.width.value ?? 0}${border.bottom.width.mode ?? \"px\"}`\n : \"0px\";\n styles.borderBottomStyle = border.bottom.style ?? \"solid\";\n }\n return styles;\n};\n\nexport const generateBorderRadiusStyleObject = ({\n borderRadius,\n}: {\n borderRadius?: PerCornerBorderRadius;\n}): CSSProperties => {\n const styles: CSSProperties = {};\n if (borderRadius?.topLeft) {\n styles.borderTopLeftRadius = `${\n borderRadius.topLeft.value ?? 0\n }${borderRadius.topLeft.mode ?? \"px\"}`;\n }\n if (borderRadius?.topRight) {\n styles.borderTopRightRadius = `${\n borderRadius.topRight.value ?? 0\n }${borderRadius.topRight.mode ?? \"px\"}`;\n }\n if (borderRadius?.bottomLeft) {\n styles.borderBottomLeftRadius = `${\n borderRadius.bottomLeft.value ?? 0\n }${borderRadius.bottomLeft.mode ?? \"px\"}`;\n }\n if (borderRadius?.bottomRight) {\n styles.borderBottomRightRadius = `${\n borderRadius.bottomRight.value ?? 0\n }${borderRadius.bottomRight.mode ?? \"px\"}`;\n }\n return styles;\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { css } from \"styled-components\";\nimport { getVariableName } from \"./styles-utils.js\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\nimport type { CSSProperties } from \"react\";\n\nexport const ZERO_PADDING = {\n left: Dim.px(0),\n right: Dim.px(0),\n top: Dim.px(0),\n bottom: Dim.px(0),\n};\n\nexport const generatePaddingCss = (padding?: Padding) => css`\n padding-left: ${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"};\n padding-right: ${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"};\n padding-top: ${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"};\n padding-bottom: ${padding?.bottom?.value ?? 0}${padding?.bottom?.mode ?? \"px\"};\n`;\n\nexport const generatePaddingStyleObject = (\n padding?: Padding,\n): CSSProperties => ({\n paddingLeft: `${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"}`,\n paddingRight: `${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"}`,\n paddingTop: `${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"}`,\n paddingBottom: `${padding?.bottom?.value ?? 0}${\n padding?.bottom?.mode ?? \"px\"\n }`,\n});\n\nexport const INPUT_PADDING_TOP_NAME = \"padding-top\";\nexport const INPUT_PADDING_RIGHT_NAME = \"padding-right\";\nexport const INPUT_PADDING_BOTTOM_NAME = \"padding-bottom\";\nexport const INPUT_PADDING_LEFT_NAME = \"padding-left\";\n\nexport const generatePaddingVariableDeclarationCss = (prefix?: string) => `\n padding-left: var(${getVariableName(INPUT_PADDING_LEFT_NAME, prefix)});\n padding-right: var(${getVariableName(INPUT_PADDING_RIGHT_NAME, prefix)});\n padding-top: var(${getVariableName(INPUT_PADDING_TOP_NAME, prefix)});\n padding-bottom: var(${getVariableName(INPUT_PADDING_BOTTOM_NAME, prefix)});\n`;\n\nexport const generatePaddingVariableAssignmentStyleObject = (\n padding?: Padding,\n prefix?: string,\n): { [key: `--${string}`]: string } => ({\n [getVariableName(INPUT_PADDING_TOP_NAME, prefix)]:\n `${padding?.top?.value ?? 0}${padding?.top?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_RIGHT_NAME, prefix)]:\n `${padding?.right?.value ?? 0}${padding?.right?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_BOTTOM_NAME, prefix)]:\n `${padding?.bottom?.value ?? 0}${padding?.bottom?.mode ?? \"px\"}`,\n [getVariableName(INPUT_PADDING_LEFT_NAME, prefix)]:\n `${padding?.left?.value ?? 0}${padding?.left?.mode ?? \"px\"}`,\n});\n","import { useMemo, type CSSProperties } from \"react\";\nimport { useTheme } from \"../../../internal-details/theme-context.js\";\nimport { generateBorderStyleObject } from \"../generate-border-styles.js\";\nimport { generatePaddingStyleObject } from \"./generate-padding-style.js\";\n\nimport type {\n GeneratedTheme,\n Padding,\n PerCornerBorderRadius,\n PerSideBorder,\n UserAccessibleTheme,\n} from \"@superblocksteam/library-shared/types\";\n\ntype StyleProps = {\n border?: PerSideBorder;\n borderRadius?: PerCornerBorderRadius;\n backgroundColor?: string;\n padding?: Padding;\n fallbackBorderColor?: string;\n};\n\nconst computeWrapperStyle = (\n props: StyleProps,\n): {\n borderStyle: CSSProperties;\n backgroundStyle: CSSProperties;\n paddingStyle: CSSProperties;\n allStyles: CSSProperties;\n} => {\n const borderStyle =\n generateBorderStyleObject({\n border: props.border,\n borderRadius: props.borderRadius,\n fallbackBorderColor: props.fallbackBorderColor,\n }) ?? {};\n\n const paddingStyle = generatePaddingStyleObject(props.padding) ?? {};\n\n const backgroundStyle: CSSProperties = {};\n if (props.backgroundColor) {\n // note, important that it's background rather than backgroundColor. This needs to match the defaultAppBg assigned in ModalComponent.tsx\n backgroundStyle.background = props.backgroundColor;\n }\n return {\n borderStyle,\n backgroundStyle,\n paddingStyle,\n allStyles: { ...borderStyle, ...backgroundStyle, ...paddingStyle },\n };\n};\n\nexport type ComputeStyleProps = {\n border?: PerSideBorder;\n borderRadius?: PerCornerBorderRadius;\n backgroundColor?: string;\n padding?: Padding;\n fallbackBorderColorThemeKey?: keyof GeneratedTheme[\"colors\"];\n fallbackBackgroundColorThemeKey?: keyof GeneratedTheme[\"colors\"];\n};\n\nconst resolveDefaultColor = (\n theme: UserAccessibleTheme,\n key: undefined | keyof GeneratedTheme[\"colors\"],\n fallbackColor: string,\n): string => {\n if (key) {\n const value = theme.colors[key];\n if (typeof value === \"string\") {\n return value;\n }\n }\n return fallbackColor;\n};\n\nexport const useComputeComponentStyles = (props: ComputeStyleProps) => {\n const { theme } = useTheme();\n\n const {\n border,\n borderRadius,\n backgroundColor,\n padding,\n fallbackBorderColorThemeKey,\n fallbackBackgroundColorThemeKey,\n } = props;\n\n const fallbackBackgroundColor = resolveDefaultColor(\n theme,\n fallbackBackgroundColorThemeKey,\n \"transparent\",\n );\n\n const fallbackBorderColor = resolveDefaultColor(\n theme,\n fallbackBorderColorThemeKey,\n theme.colors.neutral100,\n );\n\n return useMemo(() => {\n return computeWrapperStyle({\n borderRadius,\n border,\n fallbackBorderColor,\n backgroundColor: backgroundColor || fallbackBackgroundColor,\n padding,\n });\n }, [\n border,\n borderRadius,\n fallbackBorderColor,\n padding,\n fallbackBackgroundColor,\n backgroundColor,\n ]);\n};\n","import { withBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport {\n type BindingIdentifier,\n BindingMetaSymbol,\n type Entity,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const createBindableEntityProxy = (\n entityAccessor: () => Entity | undefined,\n identifier: BindingIdentifier,\n) => {\n return new Proxy(\n withBindingIdentifier(\n {\n entity: entityAccessor(),\n },\n identifier,\n ),\n {\n get(_target, prop) {\n if (prop === BindingMetaSymbol) {\n return identifier;\n }\n const entity = entityAccessor();\n\n if (prop === \"toJSON\") {\n return () => {\n if (!entity) return null;\n const keys = Object.keys(entity);\n return keys.reduce(\n (acc, key) => {\n if (key === \"bind\") return acc;\n const value = entity[key];\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n };\n }\n\n return entity?.[prop as string];\n },\n\n set(_target, prop, value) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n entity[prop as string] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n delete entity[prop as string];\n return true;\n },\n has(_target, prop) {\n if (prop === BindingMetaSymbol) {\n return true;\n }\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n return prop in entity;\n },\n ownKeys(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return [];\n }\n return Object.keys(entity);\n },\n getOwnPropertyDescriptor(target, prop) {\n const entity = entityAccessor();\n if (!entity) {\n return undefined;\n }\n const descriptor = Object.getOwnPropertyDescriptor(entity, prop);\n // We've gotta follow the invariant rules here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n // Otherwise non-configurable properties will get through and cause runtime errors.\n // We probably don't need to check that target has it, its just a trap object, but lets be thorough.\n if (descriptor && !descriptor.configurable) {\n const targetDescriptor = Object.getOwnPropertyDescriptor(\n target,\n prop,\n );\n if (!targetDescriptor || targetDescriptor.configurable) {\n return undefined;\n }\n }\n return descriptor;\n },\n defineProperty(_target, prop, descriptor) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.defineProperty(entity, prop as string, descriptor);\n return true;\n },\n preventExtensions(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.preventExtensions(entity);\n return true;\n },\n isExtensible(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n return Object.isExtensible(entity);\n },\n getPrototypeOf(_target) {\n const entity = entityAccessor();\n if (!entity) {\n return null;\n }\n return Object.getPrototypeOf(entity);\n },\n setPrototypeOf(_target, proto) {\n const entity = entityAccessor();\n if (!entity) {\n return false;\n }\n Object.setPrototypeOf(entity, proto);\n return true;\n },\n },\n );\n};\n","import { getStableScopeId } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport { createBindableEntityProxy } from \"./create-bindable-entity-proxy.js\";\nimport type { ScopeInstance } from \"./types.js\";\nimport type {\n BindingIdentifier,\n WithBindingIdentifier,\n} from \"@superblocksteam/library-shared/types\";\n\nconst existingScopeIds = new Set<string>();\n\ntype ScopeOptions = {\n parentScopeId?: string; // will be undefined for global scopes\n name: string;\n};\n\ntype InternalScopeOptions = ScopeOptions & {\n scopeId?: string;\n};\n\nexport function internalCreateScope<\n _Bindables extends Record<string, any>,\n SO extends InternalScopeOptions = InternalScopeOptions,\n>(\n getInitialEntities: ({\n entities,\n }: {\n entities: Record<string, any>;\n }) => Record<string, any>, // TODO later, like variables, apis\n options: SO,\n) {\n return createScope(getInitialEntities, options);\n}\n\nexport function createScope<\n _Bindables extends Record<string, any>,\n SO extends ScopeOptions = ScopeOptions,\n>(\n getInitialEntities: ({\n entities,\n }: {\n entities: Record<string, any>;\n }) => Record<string, any>, // TODO later, like variables, apis\n options: SO,\n): ScopeInstance<_Bindables> {\n const { parentScopeId, name } = options;\n if (!name) {\n throw new Error(\"Scope name is required\");\n }\n // sc- is a temporary addition to make sure name overlap doesn't trick us into thinking that things work\n // because otherwise predictableNameGenerator generates the same value that registerScope does\n const stableScopeId =\n (options as InternalScopeOptions).scopeId ?? getStableScopeId(name);\n if (existingScopeIds.has(stableScopeId)) {\n // throw new Error(`Scope with name ${name} already exists`);\n // TODO: createScope lifecycle\n console.warn(`Scope with name ${name} already exists`);\n }\n existingScopeIds.add(stableScopeId);\n\n const scopeId = rootStore.entityManager.createScope({\n parentScopeId,\n name,\n scopeId: stableScopeId,\n });\n\n const bindingIds: Record<string, Readonly<BindingIdentifier>> = {};\n const getBinding = (key: string) => {\n if (bindingIds[key]) {\n return bindingIds[key];\n }\n bindingIds[key] = {\n entityName: key,\n scopeId,\n };\n return bindingIds[key];\n };\n\n const entities = new Proxy(\n {} as _Bindables & Record<string, WithBindingIdentifier>,\n {\n get(_target, key) {\n if (typeof key !== \"string\") {\n return undefined; // no symbols allowed for now\n }\n return createBindableEntityProxy(\n () =>\n rootStore.entityManager.getEntity(\n scopeId,\n {\n value: key as string,\n isAnonymous: false,\n },\n {\n useSuspense: true,\n },\n ),\n getBinding(key),\n );\n },\n },\n );\n\n const safeGetInitialEntities =\n typeof getInitialEntities === \"function\"\n ? getInitialEntities\n : () =>\n typeof getInitialEntities === \"object\" ? getInitialEntities : {};\n\n return {\n entities,\n initialEntities: safeGetInitialEntities({ entities }),\n scopeInfo: {\n scopeId,\n name,\n parentScopeId,\n },\n };\n}\n","import { useEffect, useRef } from \"react\";\nimport type React from \"react\";\n\ntype isType = (a: unknown) => boolean;\n\ntype isEqual = (a: any, b: any) => boolean;\n\n/**\n * Options for the useStableEffect hook.\n */\nexport interface UseStableEffectOptions {\n customEqualChecks?: [isType, isEqual][];\n ignoreKeys?: string[];\n cold?: boolean; // If true, Runs the effect after the first render\n}\n\n/**\n * Custom hook that runs an effect only when specified properties of an object change.\n *\n * @param effect - The effect callback to run.\n * @param obj - The object whose properties are checked for changes.\n * @param options - Optional custom equality checks and keys to ignore when checking for changes.\n */\nconst useStableEffect = (\n effect: React.EffectCallback,\n obj: { [key: string]: unknown },\n options: UseStableEffectOptions = {},\n) => {\n const { customEqualChecks = [], ignoreKeys = [] } = options;\n const ref = useRef<{ [key: string]: unknown }>({ ...obj });\n\n const propsChanged = !Object.keys(obj).every((key) => {\n if (ignoreKeys.includes(key)) {\n return true;\n }\n if (!(key in ref.current)) {\n return false;\n }\n\n const val = obj[key];\n const old = ref.current[key];\n for (const [isType, isEqual] of customEqualChecks) {\n if (isType(val) && isType(old)) {\n return isEqual(val, old);\n }\n }\n\n return Object.is(val, old);\n });\n\n const propRemoved = Object.keys(ref.current).some((key) => !(key in obj));\n\n if (propsChanged || propRemoved) {\n ref.current = { ...obj };\n }\n\n const isFirstRun = useRef(true);\n useEffect(() => {\n if (!options.cold && isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n effect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current]);\n\n if (!options.cold && isFirstRun.current) {\n effect();\n }\n};\n\nexport default useStableEffect;\n","import React, { createContext, useContext } from \"react\";\nimport { GLOBAL_SCOPE_ID } from \"../lib/evaluator/entity-manager.js\";\nimport type { ScopeId } from \"../lib/evaluator/base-entity-manager.js\";\n\ntype State = {\n scopeId: ScopeId;\n};\n\nconst ScopeContext = createContext<State>({\n scopeId: GLOBAL_SCOPE_ID,\n});\n\nexport const ScopeProvider: React.FC<React.PropsWithChildren<State>> = ({\n scopeId,\n children,\n}) => {\n return (\n <ScopeContext.Provider value={{ scopeId }}>\n {children}\n </ScopeContext.Provider>\n );\n};\n\nexport const useScope = () => {\n const scopeInfo = useContext(ScopeContext);\n return scopeInfo ?? { scopeId: GLOBAL_SCOPE_ID };\n};\n","import { predictableNameGenerator } from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport React, { useRef } from \"react\";\nimport { useState } from \"react\";\nimport useStableEffect from \"../../hooks/use-stable-effect.js\";\nimport { getName } from \"../lib/evaluator/names.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport { ScopeProvider, useScope } from \"./scope-context.jsx\";\nimport type { SbApi } from \"../../user-facing/entities/api/index.js\";\nimport type { Timer } from \"../../user-facing/entities/timer/index.js\";\nimport type { StateVar } from \"../../user-facing/entities/variable/index.js\";\nimport type { ScopeInstance } from \"../../user-facing/state/types.js\";\nimport type { SbEvent } from \"../entities.js\";\nimport type { ScopeOptions } from \"@superblocksteam/library-shared/types\";\n\nexport type ScopedEntity =\n | ReturnType<typeof Timer>\n | ReturnType<typeof StateVar>\n | ReturnType<typeof SbEvent>\n | ReturnType<typeof SbApi>;\n\nexport type Scope = {\n [key: string]: ScopedEntity;\n};\n\nfunction initializeEntities(\n scopeId: string,\n initialEntities: ScopeInstance<any>[\"initialEntities\"],\n) {\n Object.entries(initialEntities).forEach(([name, { type, ...rest }]) => {\n if (!type) {\n console.warn(\"Initial entity has no type\", { name });\n return;\n }\n const internalName = getName(name);\n const entity = rootStore.entityManager.getEntity(scopeId, internalName);\n const entityIsInOurScope = entity && scopeId === entity.scopeId;\n\n if (entity && entityIsInOurScope) {\n rootStore.entityManager.updateEntity({\n scopeId,\n name: internalName,\n props: rest,\n });\n } else {\n rootStore.entityManager.createEntity({\n scopeId,\n name: internalName,\n props: rest,\n type,\n });\n // Handle timer auto-start\n if (\n type === \"Timer\" &&\n rest.startOnPageLoad &&\n typeof entity === \"object\" &&\n typeof entity?.start === \"function\"\n ) {\n entity.start();\n }\n }\n });\n}\n\n// @refresh reset\nexport function registerScope<T>(\n Component: React.FC<T>,\n scopeDef: ScopeInstance<any>,\n options?: ScopeOptions,\n): React.FC<React.JSX.IntrinsicAttributes & T> {\n const componentName = Component.displayName || Component.name;\n const scopeInfo = scopeDef.scopeInfo;\n\n const ScopedComponent = function ScopedComponent(\n props: React.JSX.IntrinsicAttributes & T,\n ) {\n const parentScope = useScope();\n const stableScopeId = useRef(\n predictableNameGenerator(`sc-${componentName}`),\n );\n const initialized = useRef(false);\n const initialEntities = useRef(scopeDef.initialEntities);\n const [scopeId, _setScopeId] = useState<string>(() => {\n if (scopeInfo.scopeId) {\n return scopeInfo.scopeId;\n }\n\n const newScopeId = rootStore.entityManager.createScope({\n parentScopeId: parentScope.scopeId,\n name: scopeInfo.name,\n scopeId: stableScopeId.current,\n });\n\n return newScopeId;\n });\n\n if (!initialized.current) {\n initializeEntities(scopeId, scopeDef.initialEntities);\n }\n initialized.current = true;\n\n if (!isEqual(initialEntities.current, scopeDef.initialEntities)) {\n initialEntities.current = scopeDef.initialEntities;\n initializeEntities(scopeId, scopeDef.initialEntities);\n }\n\n if (!initialized.current) {\n initializeEntities(scopeId, scopeDef.initialEntities);\n initialized.current = true;\n }\n\n useStableEffect(\n () => {\n const currentScopeId = scopeId;\n if (!currentScopeId) {\n return;\n }\n\n options?.onScopeLoaded?.(scopeId);\n },\n {\n initialEntities: scopeDef.initialEntities,\n scopeInfo: scopeDef.scopeInfo,\n scopeId,\n },\n {\n cold: true,\n customEqualChecks: [\n [(a) => typeof a === \"object\" && a !== null, (a, b) => isEqual(a, b)],\n ],\n },\n );\n if (!scopeId) {\n return null;\n }\n return (\n <ScopeProvider scopeId={scopeId}>\n <Component {...props} />\n </ScopeProvider>\n );\n };\n\n return ScopedComponent;\n}\n","import { useEffect } from \"react\";\nimport { internalCreateScope } from \"../../user-facing/state/create-scope.js\";\nimport { GLOBAL_SCOPE_ID } from \"../lib/evaluator/entity-manager.js\";\nimport { getName } from \"../lib/evaluator/names.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport { useTheme } from \"../theme-context.jsx\";\nimport { registerScope } from \"./scope.js\";\nimport type { Global as GlobalType } from \"./types.js\";\nimport type {\n Theme as BaseTheme,\n UserAccessibleTheme,\n} from \"@superblocksteam/library-shared/types\";\n\n// The global scope is actually created in the entity manager, but we also need this here\n// for users to be able to access the global scope entities as imports\nconst InternalGlobalScope = internalCreateScope(() => ({}), {\n name: GLOBAL_SCOPE_ID,\n scopeId: GLOBAL_SCOPE_ID,\n});\n\nexport const GlobalScope = registerScope(\n ({ children }: { children: React.ReactNode }) => {\n const { theme } = useTheme();\n\n useEffect(() => {\n const name = getName(\"Theme\");\n const existingTheme = rootStore.entityManager.getEntity(\n GLOBAL_SCOPE_ID,\n name,\n );\n if (existingTheme) {\n rootStore.entityManager.updateEntity({\n name,\n props: theme,\n scopeId: GLOBAL_SCOPE_ID,\n });\n } else {\n rootStore.entityManager.createEntity({\n name,\n type: \"theme\",\n props: theme,\n scopeId: GLOBAL_SCOPE_ID,\n });\n }\n }, [theme]);\n\n // TODO: add all the other stuff we need here\n\n return <>{children}</>;\n },\n InternalGlobalScope,\n);\n\nexport const updateGlobalScope = (global: Record<string, unknown>) => {\n rootStore.entityManager.updateEntity({\n name: getName(\"Global\"),\n props: global as any,\n scopeId: GLOBAL_SCOPE_ID,\n });\n};\n\nexport type AppTheme = BaseTheme;\n\n// We need to proxy the underlying scope entities proxy because we need lazy access to the underlying entity manager\n// entities, otherwise things aren't reactive/bound correctly\nfunction createEntityProxy<T>(entityName: string): T {\n return new Proxy(\n {},\n {\n get(_target, prop: string) {\n const entity = InternalGlobalScope.entities[entityName];\n return entity?.[prop as keyof typeof entity];\n },\n },\n ) as T;\n}\n\nexport const Theme = createEntityProxy<UserAccessibleTheme>(\"Theme\");\nexport const Global = createEntityProxy<GlobalType>(\"Global\");\nexport const Embed = createEntityProxy<any>(\"Embed\");\nexport const Env = createEntityProxy<any>(\"Env\");\n","import type { FontFamily } from \"@superblocksteam/library-shared/types\";\n\nexport const LEGACY_AVAILABLE_FONTS: Record<string, FontFamily> = {\n Roboto: {\n name: \"Roboto\",\n weights: [100, 300, 400, 500, 700, 900],\n type: \"google\",\n key: \"Roboto\",\n },\n Inter: {\n name: \"Inter\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n\n type: \"google\",\n key: \"Inter\",\n },\n Poppins: {\n name: \"Poppins\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Poppins\",\n },\n \"Noto Sans\": {\n name: \"Noto Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Noto Sans\",\n },\n \"Work Sans\": {\n name: \"Work Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"Work Sans\",\n },\n \"DM Sans\": {\n name: \"DM Sans\",\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n type: \"google\",\n key: \"DM Sans\",\n },\n \"Roboto Mono\": {\n name: \"Roboto Mono\",\n weights: [100, 200, 300, 400, 500, 600, 700],\n type: \"google\",\n key: \"Roboto Mono\",\n },\n};\n\nexport const DEFAULT_FONT_WEIGHTS = [300, 400, 500, 700];\n","import {\n DEFAULT_FONT_WEIGHTS,\n LEGACY_AVAILABLE_FONTS,\n} from \"../typeface-constants.js\";\nimport type { GeneratedTheme } from \"@superblocksteam/library-shared/types\";\n\nimport type { FontFamily } from \"@superblocksteam/shared\";\n\ntype ErrorResponse = {\n message: string;\n isValid: false;\n};\ntype SuccessResponse = {\n fontFamilies: Record<string, FontFamily>;\n isValid: true;\n};\n\nconst fontWeightNameToValue: Record<string, number> = {\n thin: 100,\n lighter: 100,\n extralight: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n extrabold: 800,\n black: 900,\n bolder: 900,\n};\n\nconst getWeightValue = (weight: string): number => {\n const weightValue = parseInt(weight, 10);\n if (isNaN(weightValue)) {\n return fontWeightNameToValue[weight.toLowerCase()] || 400;\n }\n return weightValue;\n};\n\nexport function extractFontFamilyNames(cssContent?: string): Array<{\n name: string;\n weights: Array<number>;\n}> {\n if (!cssContent) return [];\n const fontFamilyData: Record<string, number[]> = {};\n const fontFaceRegex =\n /@font-face\\s*{[^}]*font-family:\\s*['\"]?([^'\";]+)['\"]?[^}]*}/g;\n const fontWeightRegex =\n /font-weight:\\s*(normal|bolder|bold|lighter|light|[1-9]00)(?:\\s+([1-9]00))?/gi;\n let match;\n\n while ((match = fontFaceRegex.exec(cssContent)) !== null) {\n const fontFamily = match[1];\n const fontBlock = match[0];\n const weights = [];\n let weightMatch;\n if (!fontFamily || !fontFamily.trim()) continue;\n\n while ((weightMatch = fontWeightRegex.exec(fontBlock)) !== null) {\n const startWeight = getWeightValue(weightMatch[1]);\n const endWeight = weightMatch[2]\n ? getWeightValue(weightMatch[2])\n : startWeight;\n for (let weight = startWeight; weight <= endWeight; weight += 100) {\n weights.push(weight);\n }\n }\n\n // Ensure uniqueness of font weights\n const uniqueWeights = [...new Set(weights)];\n\n fontFamilyData[fontFamily] = fontFamilyData[fontFamily]\n ? [...new Set([...fontFamilyData[fontFamily], ...uniqueWeights])]\n : uniqueWeights;\n }\n\n return Object.entries(fontFamilyData).map(([name, weights]) => {\n weights.sort();\n return {\n name,\n weights: weights.length === 0 ? [400] : weights,\n };\n });\n}\n\nexport async function validateAndParseCustomFontUrl(\n _url: string,\n): Promise<SuccessResponse | ErrorResponse> {\n if (!_url) {\n return {\n message: \"URL is required\",\n isValid: false,\n };\n }\n let url = _url;\n // if its not a valid url\n if (!_url.startsWith(\"http://\") && !_url.startsWith(\"https://\")) {\n url = `https://${_url}`;\n }\n try {\n new URL(url);\n } catch (_e) {\n return {\n message: \"Invalid URL\",\n isValid: false,\n };\n }\n // get the url and ensure that the response type is text/css\n try {\n const response = await fetch(url);\n // if response is not 200\n if (!response.ok) {\n return {\n message: \"Failed to fetch valid CSS file\",\n isValid: false,\n };\n }\n if (!response.headers.get(\"content-type\")?.includes(\"text/css\")) {\n return {\n message: \"URL should point to a CSS file\",\n isValid: false,\n };\n }\n const cssContent = await response.text();\n\n // Validate and extract font family names\n const fontFamilyNames = extractFontFamilyNames(cssContent);\n\n if (fontFamilyNames.length === 0) {\n return {\n message: \"No font families found in the CSS file\",\n isValid: false,\n };\n }\n const fontFamilies = fontFamilyNames.reduce(\n (acc, { name, weights }) => {\n acc[name] = {\n name,\n type: \"custom\",\n key: name, // this needs to be unique\n url,\n weights,\n };\n return acc;\n },\n {} as Record<string, FontFamily>,\n );\n\n return {\n fontFamilies,\n isValid: true,\n };\n } catch (_e) {\n return {\n message: \"Failed to fetch valid CSS file\",\n isValid: false,\n };\n }\n}\n\nconst linkQuerySelector = (fontName: string, isTemporary?: boolean) => {\n return `link[data-font${isTemporary ? \"-temp\" : \"\"}=\"${fontName}\"]`;\n};\n\nexport function loadFont(\n themeFont: FontFamily,\n options?: { isTemporary: boolean },\n) {\n if (themeFont.type === \"google\") {\n const fontName = themeFont.key;\n const weights = (themeFont.weights ?? DEFAULT_FONT_WEIGHTS).join(\",\");\n // Check if the font is already loaded\n const existingLink = document.querySelector(\n linkQuerySelector(fontName, options?.isTemporary),\n );\n if (existingLink) {\n return; // Font is already loaded\n }\n\n // Create a new link element\n const link = document.createElement(\"link\");\n link.href = `https://fonts.googleapis.com/css?family=${fontName}:${weights}${\n options?.isTemporary ? \"&display=swap\" : \"\"\n }`;\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.dataset.font = fontName; // Custom attribute to easily identify the link later\n\n // Append the link element to the document head\n document.head.appendChild(link);\n } else if (themeFont.type === \"custom\" && themeFont.url) {\n const fontName = themeFont.key;\n const existingLink = document.querySelector(\n linkQuerySelector(fontName, options?.isTemporary),\n );\n if (existingLink) {\n return; // Font is already loaded\n }\n // Create a new <link> element for the font URL\n const link = document.createElement(\"link\");\n link.href = themeFont.url;\n link.rel = \"stylesheet\";\n link.type = \"text/css\";\n link.dataset.font = fontName; // Custom attribute to easily identify the link later\n document.head.appendChild(link);\n }\n}\n\nexport function removeFont(\n fontKey: string,\n options?: { isTemporary: boolean },\n) {\n const link = document.querySelector(\n linkQuerySelector(fontKey, options?.isTemporary),\n );\n if (link) {\n link.remove();\n }\n}\n\nexport function loadThemeFonts(generatedTheme: GeneratedTheme) {\n const availableFonts = generatedTheme.availableFonts;\n Object.values(availableFonts).forEach((font) => loadFont(font));\n // remove fonts that are not used in the theme\n const existingLinks = document.querySelectorAll(\"link[data-font]\");\n existingLinks.forEach((link) => {\n const fontKey = link.getAttribute(\"data-font\");\n if (fontKey && !availableFonts[fontKey]) {\n link.remove();\n }\n });\n}\n\nexport const getAvailableFontFamilies = (\n themeFontFamilies?: Record<string, FontFamily>,\n): Record<string, FontFamily> => {\n return themeFontFamilies ?? LEGACY_AVAILABLE_FONTS;\n};\n\nexport const getFontFamilyOptions = (\n themeFontFamilies?: Record<string, FontFamily>,\n) => {\n const options = Object.values(\n getAvailableFontFamilies(themeFontFamilies),\n ).map((font) => ({\n // TODO(code-mode): Add styling to the label depending on the font family\n label: font.name,\n value: font.key,\n }));\n options.sort((a, b) => a.value.localeCompare(b.value));\n return options;\n};\n","import { compile, serialize, stringify, prefixer, middleware } from \"stylis\";\n\nconst insertStyleRule = (rule: string) => {\n // Check if we're in a browser environment\n if (typeof window !== \"undefined\" && window.document) {\n const styleTag = window.document.createElement(\"style\");\n styleTag.appendChild(window.document.createTextNode(rule));\n window.document.head.appendChild(styleTag);\n }\n};\n// Hash the style string to create a predictable namespace\n// See https://stackoverflow.com/a/52171480/610632\nconst cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};\n\n// Allows you to choose the prefix for the classname\nexport const styleWithPrefix =\n (prefix: string) =>\n (strings: TemplateStringsArray, ...params: string[]) => {\n const style = String.raw(strings, ...params);\n // Classnames must start with a letter\n const namespace = prefix + cyrb53(style).toString(36); // alphanumeric\n const parsed = serialize(\n compile(`.${namespace}{${style}}`),\n middleware([prefixer, stringify]),\n );\n insertStyleRule(parsed);\n return namespace;\n };\n\nexport const styleAsClass = styleWithPrefix(\"s\");\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { CUSTOM_THEME_TYPOGRAPHY_KEY } from \"@superblocksteam/library-shared/types\";\nimport { styleWithPrefix } from \"../styling/style-as-class.js\";\nimport { CLASS_NAMES } from \"./classnames.js\";\nimport { DEFAULT_TYPOGRAPHIES_BY_VERSION } from \"./typography-constants.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\nimport type React from \"react\";\n\n// Memoization utility for CSS class generation\nconst createMemoizedClassGenerator = <T extends readonly any[]>(\n generator: (...args: T) => string,\n): ((...args: T) => string) => {\n const cache = new Map<string, string>();\n\n return (...args: T): string => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key)!;\n }\n\n const result = generator(...args);\n cache.set(key, result);\n return result;\n };\n};\n\nexport const getCustomTypographyAccessor = (typographyKey: string) => {\n return `${CUSTOM_THEME_TYPOGRAPHY_KEY}.${typographyKey}.styles`;\n};\n\nexport const getCustomTypographyNameFromAccessor = (accessor: string) => {\n return accessor\n .replace(`${CUSTOM_THEME_TYPOGRAPHY_KEY}.`, \"\")\n .replace(\".styles\", \"\");\n};\n\nexport const getCustomTypographyClassname = (typographyKey: string) => {\n return `sb-custom-${typographyKey}`;\n};\n\nexport const getTextCssClassFromVariant = (\n textStyleVariant?: string,\n): string => {\n switch (textStyleVariant) {\n case \"heading1\":\n return CLASS_NAMES.HEADING1;\n case \"heading2\":\n return CLASS_NAMES.HEADING2;\n case \"heading3\":\n return CLASS_NAMES.HEADING3;\n case \"heading4\":\n return CLASS_NAMES.HEADING4;\n case \"heading5\":\n return CLASS_NAMES.HEADING5;\n case \"heading6\":\n return CLASS_NAMES.HEADING6;\n case \"body1\":\n return CLASS_NAMES.BODY1;\n case \"body2\":\n return CLASS_NAMES.BODY2;\n case \"body3\":\n return CLASS_NAMES.BODY3;\n case \"link\":\n return CLASS_NAMES.LINK;\n case \"label\":\n return CLASS_NAMES.LABEL;\n case \"inputLabel\":\n return CLASS_NAMES.INPUT_LABEL;\n case \"inputText\":\n return CLASS_NAMES.INPUT_TEXT;\n case \"inputPlaceholder\":\n return CLASS_NAMES.INPUT_PLACEHOLDER;\n case \"buttonLabel\":\n return CLASS_NAMES.BUTTON_LABEL;\n case \"code\":\n return CLASS_NAMES.CODE_TEXT;\n case undefined:\n return CLASS_NAMES.BODY1;\n default:\n // custom items are keyed like `custom.custom-item.styles`\n return getCustomTypographyClassname(\n getCustomTypographyNameFromAccessor(textStyleVariant),\n );\n }\n};\n\nexport const camelCaseToSentenceCase = (input: string): string => {\n return input\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // Insert spaces before uppercase letters\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1 $2\") // Handle cases where there are consecutive uppercase letters\n .replace(/([a-zA-Z])([0-9])/g, \"$1 $2\") // Add spaces between letters and numbers\n .toLowerCase() // Convert the entire string to lower case\n .replace(/^./, (str) => str.toUpperCase()); // Capitalize the first letter\n};\n\nexport const extractPixels = (pxValue: string | number): number => {\n if (typeof pxValue === \"number\") {\n return pxValue;\n }\n const pixels = parseInt(pxValue.replace(\"px\", \"\"), 10);\n if (isNaN(pixels)) {\n return 14; // return some reasonable default\n }\n return pixels;\n};\n\nconst isPixelString = (value: any): boolean => {\n if (typeof value !== \"string\") return false;\n const pixelRegex = /^\\d+px$/;\n return pixelRegex.test(value);\n};\n\nexport const getLineHeightInPixels = (\n lineHeight: string | number,\n fontSize: number,\n): number => {\n if (isPixelString(lineHeight)) {\n return extractPixels(String(lineHeight));\n }\n if (lineHeight === \"normal\") {\n return 1.2 * fontSize; // depends on browser & font family, but should be close enough\n }\n // otherwise it's a number so multiply\n return Number(lineHeight) * fontSize;\n};\n\nexport const isColorToken = (value?: string) => {\n if (!value) return false;\n // if it matches the format \"colors.xxx\" then it's a color token\n return value.startsWith(\"colors.\");\n};\n\nexport function getDefaultTypographies(themeVersion?: number) {\n return DEFAULT_TYPOGRAPHIES_BY_VERSION[themeVersion || 2];\n}\n\nexport function generatePaddingStyle(padding: Padding): string {\n if (!padding) return \"\";\n const top = padding.top?.value ?? 0;\n const right = padding.right?.value ?? 0;\n const bottom = padding.bottom?.value ?? 0;\n const left = padding.left?.value ?? 0;\n return `${top}px ${right}px ${bottom}px ${left}px`;\n}\n\nexport function dimToCSS(\n dim: Dim,\n dimension:\n | \"width\"\n | \"height\"\n | \"minWidth\"\n | \"minHeight\"\n | \"maxWidth\"\n | \"maxHeight\",\n primary = true,\n): React.CSSProperties {\n switch (dim.mode) {\n case \"fit\":\n return { [dimension]: \"fit-content\" };\n case \"fill\":\n if (!primary)\n return {\n alignSelf: \"stretch\",\n [dimension]: \"unset\",\n };\n return { flex: dim.value ?? 1 };\n case \"px\":\n return { [dimension]: `${dim.value}px` };\n case \"%\":\n return { [dimension]: `${dim.value}%` };\n default:\n return {};\n }\n}\n\nconst Classes = {\n minHeightZero: styleWithPrefix(\"sb-min-height-zero\")`\n @layer components {\n min-height: 0;\n }\n `,\n minWidthZero: styleWithPrefix(\"sb-min-width-zero\")`\n @layer components {\n min-width: 0;\n }\n `,\n fillWidthParent: styleWithPrefix(\"sb-fill-width-parent\")`\n @layer components {\n width: -webkit-fill-available;\n }\n `,\n fillHeightParent: styleWithPrefix(\"sb-fill-height-parent\")`\n @layer components {\n height: -webkit-fill-available;\n }\n `,\n // For height we never want to shrink fit-content items\n fitPrimaryHeight: styleWithPrefix(\"sb-fit-primary-height\")`\n @layer components {\n flex-basis: auto;\n flex-shrink: 0;\n }\n `,\n // For width we are ok with shrinking fit-content items\n fitPrimaryWidth: styleWithPrefix(\"sb-fit-primary-width\")`\n @layer components {\n flex-basis: auto;\n }\n `,\n fitSecondaryWidth: styleWithPrefix(\"sb-fit-secondary-width\")`\n @layer components {\n max-width: -webkit-fill-available;\n }\n `,\n fitSecondaryHeight: styleWithPrefix(\"sb-fit-secondary-height\")`\n @layer components {\n max-height: -webkit-fill-available;\n }\n `,\n fitWidth: styleWithPrefix(\"sb-fit-width\")`\n @layer components {\n min-width: auto;\n }\n `,\n fitHeight: styleWithPrefix(\"sb-fit-height\")`\n @layer components {\n min-height: auto;\n }\n `,\n\n fillPrimary: createMemoizedClassGenerator(\n (flex: number = 1, basis: string | number = \"auto\") => {\n const styleFunction = styleWithPrefix(`sb-fill-primary-${flex}-${basis}`);\n return styleFunction`\n @layer components {\n flex: ${String(flex)};\n flex-shrink: 1;\n flex-basis: ${String(basis)};\n }\n `;\n },\n ),\n\n pxPrimary: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-primary-${pxValue}`);\n return styleFunction`\n @layer components {\n flex-shrink: 0; \n flex-basis: ${String(pxValue)}px;\n }\n `;\n }),\n\n pxWidth: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-width-${pxValue}`);\n return styleFunction`\n @layer components {\n width: ${String(pxValue)}px;\n min-width: ${String(pxValue)}px;\n }\n `;\n }),\n\n pxHeight: createMemoizedClassGenerator((pxValue: number) => {\n const styleFunction = styleWithPrefix(`sb-px-height-${pxValue}`);\n return styleFunction`\n @layer components {\n height: ${String(pxValue)}px;\n min-height: ${String(pxValue)}px;\n }\n `;\n }),\n\n percentPrimary: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-primary-${percentValue}`);\n return styleFunction`\n @layer components {\n flex-shrink: 0; \n flex-basis: ${String(percentValue)}%;\n }\n `;\n }),\n\n percentWidth: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-width-${percentValue}`);\n return styleFunction`\n @layer components {\n width: ${String(percentValue)}%;\n min-width: ${String(percentValue)}%;\n }\n `;\n }),\n\n percentHeight: createMemoizedClassGenerator((percentValue: number) => {\n const styleFunction = styleWithPrefix(`sb-percent-height-${percentValue}`);\n return styleFunction`\n @layer components {\n height: ${String(percentValue)}%;\n min-height: ${String(percentValue)}%;\n }\n `;\n }),\n};\n\n/**\n * Recursively finds the first parent element that doesn't have display: contents\n * @param element The starting element to search from\n * @returns The first parent element without display: contents, or null if not found\n */\nconst findFirstLayoutParent = (element: Element): Element | null => {\n let currentElement = element.parentElement;\n\n while (currentElement) {\n const computedStyles = window.getComputedStyle(currentElement);\n\n // If this parent doesn't have display: contents, it's a layout parent\n if (computedStyles.display !== \"contents\") {\n return currentElement;\n }\n\n // Move up to the next parent\n currentElement = currentElement.parentElement;\n }\n\n return null;\n};\n\n/**\n * Finds the layout parent of an element using its instance ID and determines the flex direction\n * @param instanceId The current element's instance ID\n * @returns The flex direction of the layout parent element, or undefined if not found or not flex\n */\nconst getParentFlexDirection = (\n instanceId?: string,\n): \"row\" | \"column\" | undefined => {\n if (typeof window === \"undefined\" || !instanceId) {\n return undefined;\n }\n\n try {\n // Query for the current element by its instance ID\n const currentElement = document.querySelector(\n `[${INSTANCE_ID_ATTRIBUTE}=\"${instanceId}\"]`,\n );\n\n if (!currentElement) {\n return undefined;\n }\n\n // Find the first parent that doesn't have display: contents\n const layoutParent = findFirstLayoutParent(currentElement);\n\n if (!layoutParent) {\n return undefined;\n }\n\n // Get computed styles to check if it's using flex layout\n const computedStyles = window.getComputedStyle(layoutParent);\n const display = computedStyles.display;\n\n // Check if the parent is using flex layout\n if (display !== \"flex\" && display !== \"inline-flex\") {\n return undefined;\n }\n\n // Extract the flex direction\n const flexDirection = computedStyles.flexDirection;\n\n // Return normalized direction values\n if (flexDirection === \"column\" || flexDirection === \"column-reverse\") {\n return \"column\";\n } else if (flexDirection === \"row\" || flexDirection === \"row-reverse\") {\n return \"row\";\n }\n\n // Default flex direction is row\n return \"row\";\n } catch {\n // Fail silently in case of any DOM query errors\n return undefined;\n }\n};\n\nexport const getWidthHeightInfo = (\n dim: Dim,\n dimension: \"width\" | \"height\",\n instanceId?: string,\n): {\n classnames: string[];\n} => {\n const direction = getParentFlexDirection(instanceId);\n\n const primaryDimension =\n direction === \"column\" ? dimension === \"height\" : dimension === \"width\";\n if (!dim) return { classnames: [] };\n\n switch (dim.mode) {\n case \"fit\":\n if (direction === undefined) {\n if (dimension === \"width\") return { classnames: [Classes.fitWidth] };\n return { classnames: [Classes.fitHeight] };\n }\n\n if (primaryDimension) {\n if (dimension === \"height\")\n return { classnames: [Classes.fitPrimaryHeight] };\n else return { classnames: [Classes.fitPrimaryWidth] };\n }\n if (dimension === \"width\")\n return { classnames: [Classes.fitSecondaryWidth] };\n return { classnames: [Classes.fitSecondaryHeight] };\n case \"fill\":\n // When direction is unknown, use fill parent as backup\n if (direction === undefined) {\n if (dimension === \"width\")\n return { classnames: [Classes.fillWidthParent] };\n return { classnames: [Classes.fillHeightParent] };\n }\n\n if (primaryDimension) {\n const classnames = [\n Classes.fillPrimary(dim.value ?? 1, dim.basis ?? 0),\n ];\n if (dim.basis === 0 && dimension === \"height\") {\n classnames.push(Classes.minHeightZero);\n }\n if (dim.basis === 0 && dimension === \"width\") {\n classnames.push(Classes.minWidthZero);\n }\n\n return { classnames };\n }\n if (dimension === \"width\")\n return { classnames: [Classes.fillWidthParent] };\n return { classnames: [Classes.fillHeightParent] };\n case \"px\": {\n const pxValue = dim.value ?? 0;\n if (primaryDimension) {\n return { classnames: [Classes.pxPrimary(pxValue)] };\n }\n if (dimension === \"width\") {\n return { classnames: [Classes.pxWidth(pxValue)] };\n }\n return { classnames: [Classes.pxHeight(pxValue)] };\n }\n case \"%\": {\n const percentValue = dim.value ?? 0;\n if (primaryDimension) {\n return { classnames: [Classes.percentPrimary(percentValue)] };\n }\n if (dimension === \"width\") {\n return { classnames: [Classes.percentWidth(percentValue)] };\n }\n return { classnames: [Classes.percentHeight(percentValue)] };\n }\n default:\n return { classnames: [] };\n }\n};\n","import { get } from \"lodash\";\nimport { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { BASE_THEME_NEW_APPS } from \"../../themes/constants.js\";\nimport { getFontFamilyOptions } from \"../../themes/typefaces/utils.jsx\";\nimport {\n FONT_STYLE_OPTIONS,\n SB_CUSTOM_TEXT_STYLE,\n FONT_WEIGHT_OPTIONS,\n LINE_HEIGHT_UNIT_OPTIONS,\n LETTER_SPACING_UNIT_OPTIONS,\n TEXT_TRANSFORM_OPTIONS,\n} from \"../../themes/typography-constants.js\";\nimport { camelCaseToSentenceCase } from \"../../themes/utils.js\";\nimport {\n DEFAULT_INPUT_WIDGET_INPUT_STYLE_VARIANT,\n DEFAULT_INPUT_WIDGET_LABEL_STYLE_VARIANT,\n} from \"../../utils/form.js\";\nimport { Prop } from \"../props-builder.js\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type { TextStyleWithVariant } from \"@superblocksteam/library-shared/types\";\n\nexport const createTextStyleCompositeBase = () => ({\n variant: Prop.string(),\n textColor: Prop.composite({\n default: Prop.string(),\n }),\n fontFamily: Prop.string().propertiesPanel({\n label: \"Font family\",\n controlType: \"DROP_DOWN\",\n options: getFontFamilyOptions(BASE_THEME_NEW_APPS.availableFonts),\n }),\n fontSize: Prop.dimension().propertiesPanel({\n label: \"Font size\",\n unitOptions: [\n {\n label: \"Pixels\",\n value: \"px\",\n subText: \"Fixed value that remains constant\",\n },\n ],\n precision: 0,\n controlType: \"INPUT_NUMBER\",\n minValue: 1,\n }),\n fontWeight: Prop.number().propertiesPanel({\n label: \"Font weight\",\n controlType: \"DROP_DOWN\",\n // filter available options based on the font family\n options: FONT_WEIGHT_OPTIONS,\n }),\n fontStyle: Prop.string().propertiesPanel({\n label: \"Font style\",\n controlType: \"DROP_DOWN\",\n options: FONT_STYLE_OPTIONS,\n }),\n // TODO: this doesn't work as expected. We need to find a way to implement\n // transformValueOnUnitChange function for this and letter spacing\n // todo add warning\n lineHeight: Prop.string().propertiesPanel({\n label: \"Line height\",\n defaultUnit: \"\",\n controlType: \"INPUT_NUMBER\",\n unitOptions: LINE_HEIGHT_UNIT_OPTIONS,\n }),\n letterSpacing: Prop.number().propertiesPanel({\n label: \"Letter spacing\",\n defaultUnit: \"em\",\n unitOptions: LETTER_SPACING_UNIT_OPTIONS,\n controlType: \"INPUT_NUMBER\",\n }),\n textTransform: Prop.string().propertiesPanel({\n label: \"Text transform\",\n controlType: \"DROP_DOWN\",\n options: TEXT_TRANSFORM_OPTIONS,\n }),\n});\n\nexport const basePropertiesPaneDisplay: PropertiesPanelDisplay<TextStyleWithVariant> =\n {\n label: \"Style\",\n controlType: \"TEXT_STYLE\",\n options: function (this) {\n return [\n ...Object.entries(Theme.typographies ?? {}).flatMap(\n ([key, typography]) => {\n return {\n label: (typography.name ??\n camelCaseToSentenceCase(key)) as string,\n value: key,\n subText: typography.fontSize,\n subTextPosition: \"right\",\n };\n },\n ),\n {\n label: \"Custom\",\n value: SB_CUSTOM_TEXT_STYLE, // Inline custom styling\n },\n ];\n },\n childrenDisplayMode: {\n type: \"popover\",\n title: \"Edit custom typography\",\n panelIdPropertyName: \"textStyle\",\n },\n enableTextColorConfig: true,\n defaultValue: function (this: any, _state: any, path: string) {\n const variant = get(this, path)?.variant;\n\n const defaultTextColor = Theme.typographies[variant].textColor.default;\n\n return {\n variant,\n textColor: {\n default: defaultTextColor,\n },\n } as TextStyleWithVariant;\n },\n };\n\nexport const textStyleProp = ({\n baseProp = createTextStyleCompositeBase(),\n propertiesPanel,\n}: {\n baseProp?: ReturnType<typeof createTextStyleCompositeBase>;\n propertiesPanel?: Omit<\n Partial<PropertiesPanelDisplay<TextStyleWithVariant, \"TEXT_STYLE\">>,\n \"controlType\"\n >;\n} = {}) =>\n Prop.composite(baseProp)\n .readAndWrite()\n .propertiesPanel({\n ...basePropertiesPaneDisplay,\n ...propertiesPanel,\n isJSConvertible: false,\n })\n .docs({\n description:\n \"Configures the text styling including font family, size, weight, color, and other typography properties\",\n }) as Prop<TextStyleWithVariant>;\n\nexport const colorProp = (\n schema: Omit<\n Partial<PropertiesPanelDisplay<string, \"COLOR_PICKER\">>,\n \"controlType\"\n >,\n) => {\n return Prop.string()\n .readAndWrite()\n .propertiesPanel({\n ...schema,\n controlType: \"COLOR_PICKER\",\n isJSConvertible: true,\n })\n .docs({\n description:\n \"Allows selection of a color value using a color picker interface\",\n });\n};\n\nexport const labelTextStyle = () =>\n textStyleProp({\n propertiesPanel: {\n label: \"Label style\",\n isVisible: function (this: any) {\n return !!this.label;\n },\n },\n }).default(() => ({\n variant: DEFAULT_INPUT_WIDGET_LABEL_STYLE_VARIANT,\n }));\n\nexport const inputTextStyle = () =>\n textStyleProp({\n propertiesPanel: {\n label: \"Input style\",\n },\n }).default(() => ({\n variant: DEFAULT_INPUT_WIDGET_INPUT_STYLE_VARIANT,\n }));\n","import { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { Prop } from \"../props-builder.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type {\n BorderStyleBlock,\n PerCornerBorderRadius,\n PerSideBorder,\n} from \"@superblocksteam/library-shared/types\";\n\nexport const createPerSideBorder = (\n border: BorderStyleBlock,\n): PerSideBorder => {\n return {\n left: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n right: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n top: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n bottom: {\n color: border.borderColor.default,\n width: border.borderWidth,\n style: border.borderStyle,\n },\n };\n};\n\nexport const border = (\n propertiesPanelConfig: Partial<\n Partial<PropertiesPanelDisplay<PerSideBorder, \"BORDER_CONTROL\">>\n > = {},\n) => {\n return Prop.any<PerSideBorder>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Border\",\n controlType: \"BORDER_CONTROL\",\n description: \"Controls the border of the component\",\n visibility: \"SHOW_NAME\",\n isRemovable: true,\n defaultOnAdd: () => createPerSideBorder(Theme.defaultBorder),\n isJSConvertible: false,\n ...propertiesPanelConfig,\n })\n .docs({\n description:\n \"Component border styling including color, width, and style for all sides\",\n });\n};\n\nexport const createBorderRadiusObject = (\n borderRadius: Dim<\"px\" | \"%\">,\n): PerCornerBorderRadius => {\n return {\n topLeft: borderRadius,\n topRight: borderRadius,\n bottomRight: borderRadius,\n bottomLeft: borderRadius,\n };\n};\n\nexport const borderRadius = (\n propertiesPanelConfig: Partial<\n Partial<\n PropertiesPanelDisplay<PerCornerBorderRadius, \"BORDER_RADIUS_CONTROL\">\n >\n > = {},\n) => {\n return Prop.any<PerCornerBorderRadius>()\n .default(() => {\n const borderRadius = Theme.defaultBorder.borderRadius;\n return borderRadius.value !== 0\n ? createBorderRadiusObject(borderRadius)\n : undefined;\n })\n .readAndWrite()\n .propertiesPanel({\n label: \"Border radius\",\n controlType: \"BORDER_RADIUS_CONTROL\",\n description: \"Controls the border radius of the component\",\n visibility: \"SHOW_NAME\",\n isRemovable: true,\n defaultOnAdd: () =>\n createBorderRadiusObject(Theme.defaultBorder.borderRadius),\n isJSConvertible: false,\n ...propertiesPanelConfig,\n })\n .docs({\n description:\n \"Component border radius settings for each corner (top-left, top-right, bottom-right, bottom-left)\",\n });\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { Theme } from \"../../../internal-details/scope/global.jsx\";\nimport { BASE_THEME_NEW_APPS } from \"../../themes/constants.js\";\nimport { Prop, PropsPanelCategory, Section } from \"../props-builder.js\";\nimport type {\n ContainerLayout,\n HorizontalAlignment,\n VerticalAlignment,\n} from \"../../component-base/constants.js\";\nimport type { DimModes } from \"@superblocksteam/library-shared\";\nimport type { PropertiesPanelDisplay } from \"@superblocksteam/library-shared/props\";\nimport type { ScopedState } from \"@superblocksteam/library-shared/types\";\nimport type { Padding } from \"@superblocksteam/library-shared/types\";\n\n/**\n * Sets width default to `fill` if no default width config provided.\n * Sets height default to `fit` if no default height config provided.\n */\nexport const size = ({\n defaults,\n showWidth,\n showHeight,\n}: {\n defaults?: {\n width?: Dim<DimModes>;\n height?: Dim<DimModes>;\n };\n showWidth?: (this: any, s: ScopedState) => boolean;\n showHeight?: (this: any, s: ScopedState) => boolean;\n} = {}) => {\n // Default behavior must match library/src/lib/internal-details/reactive-component.tsx\n let heightProperty = Prop.dimension().readAndWrite().propertiesPanel({\n label: \"Height\",\n controlType: \"HEIGHT_DROPDOWN\",\n isVisible: showHeight,\n });\n\n if (defaults?.height === undefined) {\n heightProperty = heightProperty.default(Dim.fit());\n } else {\n heightProperty = heightProperty.default(defaults.height);\n }\n heightProperty = heightProperty.docs({\n description: \"Sets the height of the component\",\n });\n\n let widthProperty = Prop.dimension().readAndWrite().propertiesPanel({\n label: \"Width\",\n controlType: \"WIDTH_DROPDOWN\",\n isVisible: showWidth,\n });\n\n if (defaults?.width === undefined) {\n widthProperty = widthProperty.default(Dim.fill());\n } else {\n widthProperty = widthProperty.default(defaults.width);\n }\n widthProperty = widthProperty.docs({\n description: \"Sets the width of the component\",\n });\n\n const sizeProps = {\n width: widthProperty,\n height: heightProperty,\n };\n\n return sizeProps;\n};\n\n/** @deprecated Using it will override the defaults values defined in size() for width */\nexport const widthWithoutFit = () => {\n return {\n width: Prop.dimension<Dim<Exclude<DimModes, \"fit\">>>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Width\",\n controlType: \"WIDTH_DROPDOWN\",\n })\n .docs({\n description:\n \"Sets the width of the component (excluding fit-content mode)\",\n }),\n };\n};\n\nexport const shouldScrollContents = (defaultValue = false) => ({\n shouldScrollContents: Prop.boolean()\n .readAndWrite()\n .propertiesPanel({\n label: \"Scroll contents\",\n controlType: \"SWITCH\",\n })\n .default(defaultValue)\n .docs({\n description: `Enables scrolling when content exceeds the container bounds (true applies overflow: auto, false applies nothing)`,\n }),\n});\n\nexport const visible = () => ({\n isVisible: Prop.boolean()\n .default(true)\n .readAndWrite()\n .propertiesPanel({\n label: \"Visible\",\n })\n .docs({\n description: \"Controls whether the component is visible on the page\",\n }),\n});\n\nexport const spacing = (\n options?: { default?: Dim<\"px\"> } & Partial<\n PropertiesPanelDisplay<Dim<\"px\">, \"SPACING_CONTROL\">\n >,\n) => {\n const { default: defaultSpacing, ...rest } = options ?? {};\n const themeValue = options?.themeValue ?? BASE_THEME_NEW_APPS.spacing;\n if (typeof themeValue === \"function\") {\n // Note: we don't support accessing the theme in `default()` yet\n throw new Error(\"Not implemented yet: theme value cannot be a function\");\n }\n\n let spacing = Prop.dimension<Dim<\"px\">>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Spacing\",\n description:\n \"Space between components in container. If the alignment is space-between or space-around, this is the minimum spacing between items\",\n controlType: \"SPACING_CONTROL\",\n themeValue: themeValue ?? Theme.spacing,\n ...rest,\n })\n .docs({\n description: \"Sets the space between child components in the container\",\n }) as Prop<Dim<\"px\">, false>;\n\n if (defaultSpacing || themeValue) {\n spacing = spacing.default(defaultSpacing ?? themeValue);\n }\n\n return { spacing };\n};\n\nexport const padding = (\n options?: { default?: Padding | ((this: any) => Padding) } & Partial<\n PropertiesPanelDisplay<Padding, \"PADDING_CONTROL\">\n >,\n) => {\n const { default: defaultP, ...rest } = options ?? {};\n const themeValue = options?.themeValue ?? BASE_THEME_NEW_APPS.padding;\n\n if (typeof themeValue === \"function\") {\n // Note: we don't support accessing the theme in `default()` yet\n throw new Error(\"Not implemented yet: theme value cannot be a function\");\n }\n\n let padding = Prop.any<Padding>()\n .readAndWrite()\n .propertiesPanel({\n label: \"Padding\",\n description: \"The padding for the component\",\n controlType: \"PADDING_CONTROL\",\n themeValue: function (this: any) {\n return themeValue ?? Theme.padding;\n },\n ...rest,\n })\n .default(themeValue)\n .docs({\n description: \"Sets the internal spacing around the component's content\",\n }) as Prop<Padding, true>;\n\n if (defaultP || themeValue) {\n padding = padding.default(defaultP ?? themeValue);\n }\n\n return { padding };\n};\n\nexport const margin = () => ({\n margin: Prop.any<\n | {\n top: Dim<\"px\">;\n bottom: Dim<\"px\">;\n left: Dim<\"px\">;\n right: Dim<\"px\">;\n }\n | undefined\n >()\n .default({\n top: Dim.px(0),\n bottom: Dim.px(0),\n left: Dim.px(0),\n right: Dim.px(0),\n })\n .readAndWrite()\n .propertiesPanel({\n label: \"Margin\",\n controlType: \"MARGIN_CONTROL\",\n isRemovable: true,\n visibility: \"SHOW_NAME\",\n })\n .docs({ description: \"Sets the external spacing around the component\" }),\n});\n\nexport const getAlignmentProps = <\n LayoutType extends \"vertical\" | \"horizontal\",\n>() => {\n return {\n // TODO: make default and options dynamic\n verticalAlign: Prop.string<VerticalAlignment<LayoutType>>()\n .readAndWrite()\n .default(function (this: { layout: LayoutType }) {\n // Flexbox defaults: justify-content: flex-start, align-items: stretch\n // For horizontal layout (flex-direction: row): verticalAlign controls align-items (cross-axis) -> default stretch\n // For vertical layout (flex-direction: column): verticalAlign controls justify-content (main-axis) -> default top (flex-start)\n return this.layout === \"horizontal\"\n ? (\"stretch\" as VerticalAlignment<LayoutType>)\n : (\"top\" as VerticalAlignment<LayoutType>);\n })\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n // TODO: When providing static options for a variant, the last variant is overriding\n // the options. Until we fix it, we use dynamic options as a woraround.\n options: function (this: { layout: LayoutType }) {\n const layoutType = this.layout;\n\n return [\n {\n label: \"\",\n value: \"top\",\n icon: \"VERTICAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"VERTICAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n // Add stretch for horizontal layout (cross-axis alignment)\n ...(layoutType === \"horizontal\"\n ? [\n {\n label: \"\",\n value: \"stretch\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ]\n : []),\n // Add space-between/around for vertical layout (main-axis alignment)\n ...(layoutType === \"vertical\"\n ? [\n {\n label: \"\",\n value: \"space-between\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\" as VerticalAlignment<LayoutType>,\n icon: \"VERTICAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ]\n : []),\n ];\n },\n })\n .docs({\n description:\n \"Controls the vertical alignment of child components within the container, defaults to top for vertical layout and stretch for horizontal layout\",\n }),\n // TODO: make default and options dynamic\n horizontalAlign: Prop.string<HorizontalAlignment<LayoutType>>()\n .readAndWrite()\n .default(function (this: { layout: LayoutType }) {\n // Flexbox defaults: justify-content: flex-start, align-items: stretch\n // For vertical layout (flex-direction: column): horizontalAlign controls align-items (cross-axis) -> default stretch\n // For horizontal layout (flex-direction: row): horizontalAlign controls justify-content (main-axis) -> default left (flex-start)\n return this.layout === \"horizontal\"\n ? (\"left\" as HorizontalAlignment<LayoutType>)\n : (\"stretch\" as HorizontalAlignment<LayoutType>);\n })\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n // TODO: When providing static options for a variant, the last variant is overriding\n // the options. Until we fix it, we use dynamic options as a woraround.\n options: function (this: { layout: LayoutType }) {\n const layoutType = this.layout;\n\n return [\n {\n label: \"\",\n value: \"left\",\n icon: \"HORIZONTAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"HORIZONTAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n // Add stretch for vertical layout (cross-axis alignment)\n ...(layoutType === \"vertical\"\n ? [\n {\n label: \"\",\n value: \"stretch\" as HorizontalAlignment<LayoutType>,\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ]\n : []),\n // Add space-between/around for horizontal layout (main-axis alignment)\n ...(layoutType === \"horizontal\"\n ? [\n {\n label: \"\",\n value: \"space-between\" as HorizontalAlignment<LayoutType>,\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\" as HorizontalAlignment<LayoutType>,\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ]\n : []),\n ];\n },\n })\n .docs({\n description:\n \"Controls the horizontal alignment of child components within the container, defaults to left for horizontal layout and stretch for vertical layout\",\n }),\n };\n};\n\nexport const containerLayout = (sizeProps?: Record<string, Prop<any, any>>) =>\n Prop.union({\n shared: {\n layout: Prop.string<ContainerLayout>()\n .readAndWrite()\n .default(\"vertical\")\n .onEdit(({ sourceId, updates }) => {\n const baseUpdate = {\n [sourceId]: {\n props: updates,\n meta: {},\n },\n };\n const editStore = rootStore.editStore;\n if (!editStore) {\n return baseUpdate;\n }\n\n // Layout update logic\n // we can return baseUpdate directly without complex layout conversion logic\n return baseUpdate;\n })\n .propertiesPanel({\n label: \"Layout\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"vertical\",\n icon: \"LAYOUT_VERTICAL_ARROWS\",\n tooltip: \"Vertical\",\n },\n {\n label: \"\",\n value: \"horizontal\",\n icon: \"LAYOUT_HORIZONTAL_ARROWS\",\n tooltip: \"Horizontal\",\n },\n ],\n })\n .docs({\n description:\n \"Controls how child components are arranged - vertical stack or horizontal row\",\n }),\n },\n variants: [\n {\n layout: Prop.literal(\"vertical\"),\n ...getAlignmentProps<\"vertical\">(),\n ...sizeProps,\n },\n {\n layout: Prop.literal(\"horizontal\"),\n ...getAlignmentProps<\"horizontal\">(),\n ...sizeProps,\n },\n ] as const,\n });\n\nexport const basicLayout = ({\n sizeParams = {},\n}: {\n sizeParams?: Parameters<typeof size>[0];\n} = {}) =>\n Section.category(PropsPanelCategory.Layout)\n .add(size(sizeParams))\n .add(visible());\n","import { Prop } from \"../props-builder.js\";\n\nexport const loading = () =>\n Prop.boolean()\n .default(undefined)\n .readAndWrite()\n .propertiesPanel({\n label: \"Loading\",\n controlType: \"RADIO_BUTTON_GROUP\",\n description:\n \"Whether the component is loading, switch to code mode to set the loading state based whatever you want\",\n options: [\n {\n label: \"Off\",\n value: false,\n showTooltip: false,\n },\n {\n label: \"On\",\n value: true,\n showTooltip: false,\n },\n {\n label: \"Auto\",\n tooltip: \"Loading state is based on if referenced data is loading\",\n showTooltip: true,\n value: undefined,\n },\n ],\n })\n .docs({\n description:\n \"Controls the loading state of the component - off, on, or auto-detected based on data loading\",\n });\n","import { useMemo } from \"react\";\nimport { styleWithPrefix } from \"../../styling/style-as-class.js\";\nimport type {\n VerticalAlignment,\n HorizontalAlignment,\n} from \"../../component-base/constants.js\";\n\n// Stack utility classes - created once\nexport const STACK_CLASSES = {\n base: styleWithPrefix(\"sb-stack-base\")`\n @layer components {\n display: flex;\n position: relative;\n box-sizing: border-box;\n }\n `,\n\n // Direction classes\n directionColumn: styleWithPrefix(\"sb-direction-column\")`\n @layer components {\n flex-direction: column;\n }\n `,\n\n directionRow: styleWithPrefix(\"sb-direction-row\")`\n @layer components {\n flex-direction: row;\n }\n `,\n\n // Justify content classes\n justifyStart: styleWithPrefix(\"sb-justify-start\")`\n @layer components {\n justify-content: flex-start;\n }\n `,\n\n justifyCenter: styleWithPrefix(\"sb-justify-center\")`\n @layer components {\n justify-content: center;\n }\n `,\n\n justifyEnd: styleWithPrefix(\"sb-justify-end\")`\n @layer components {\n justify-content: flex-end;\n }\n `,\n\n justifySpaceBetween: styleWithPrefix(\"sb-justify-space-between\")`\n @layer components {\n justify-content: space-between;\n }\n `,\n\n justifySpaceAround: styleWithPrefix(\"sb-justify-space-around\")`\n @layer components {\n justify-content: space-around;\n }\n `,\n\n // Align items classes\n alignStart: styleWithPrefix(\"sb-align-start\")`\n @layer components {\n align-items: flex-start;\n }\n `,\n\n alignCenter: styleWithPrefix(\"sb-align-center\")`\n @layer components {\n align-items: center;\n }\n `,\n\n alignEnd: styleWithPrefix(\"sb-align-end\")`\n @layer components {\n align-items: flex-end;\n }\n `,\n\n alignStretch: styleWithPrefix(\"sb-align-stretch\")`\n @layer components {\n align-items: stretch;\n }\n `,\n\n // Overflow class\n overflowAuto: styleWithPrefix(\"sb-overflow-auto\")`\n @layer components {\n overflow: auto;\n }\n `,\n};\n\n// Stack style generator using utility classes\nexport interface StackStyleProps {\n direction: \"column\" | \"row\";\n verticalAlign?:\n | VerticalAlignment<\"vertical\">\n | VerticalAlignment<\"horizontal\">;\n horizontalAlign?:\n | HorizontalAlignment<\"vertical\">\n | HorizontalAlignment<\"horizontal\">;\n shouldScrollContents?: boolean;\n}\n\nexport const useStackClasses = (props: StackStyleProps): string[] => {\n const { direction, verticalAlign, horizontalAlign, shouldScrollContents } =\n props;\n return useMemo(() => {\n const layout = direction === \"column\" ? \"vertical\" : \"horizontal\";\n\n const classes = [STACK_CLASSES.base];\n\n // Direction\n classes.push(\n direction === \"column\"\n ? STACK_CLASSES.directionColumn\n : STACK_CLASSES.directionRow,\n );\n\n // Alignment logic\n if (layout === \"vertical\") {\n // For vertical layout: verticalAlign controls justify-content, horizontalAlign controls align-items\n if (verticalAlign) {\n switch (verticalAlign) {\n case \"top\":\n classes.push(STACK_CLASSES.justifyStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.justifyCenter);\n break;\n case \"bottom\":\n classes.push(STACK_CLASSES.justifyEnd);\n break;\n case \"space-between\":\n classes.push(STACK_CLASSES.justifySpaceBetween);\n break;\n case \"space-around\":\n classes.push(STACK_CLASSES.justifySpaceAround);\n break;\n }\n }\n if (horizontalAlign) {\n switch (horizontalAlign) {\n case \"left\":\n classes.push(STACK_CLASSES.alignStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.alignCenter);\n break;\n case \"right\":\n classes.push(STACK_CLASSES.alignEnd);\n break;\n case \"stretch\":\n classes.push(STACK_CLASSES.alignStretch);\n break;\n }\n }\n } else if (layout === \"horizontal\") {\n // For horizontal layout: horizontalAlign controls justify-content, verticalAlign controls align-items\n if (horizontalAlign) {\n switch (horizontalAlign) {\n case \"left\":\n classes.push(STACK_CLASSES.justifyStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.justifyCenter);\n break;\n case \"right\":\n classes.push(STACK_CLASSES.justifyEnd);\n break;\n case \"space-between\":\n classes.push(STACK_CLASSES.justifySpaceBetween);\n break;\n case \"space-around\":\n classes.push(STACK_CLASSES.justifySpaceAround);\n break;\n }\n }\n if (verticalAlign) {\n switch (verticalAlign) {\n case \"top\":\n classes.push(STACK_CLASSES.alignStart);\n break;\n case \"center\":\n classes.push(STACK_CLASSES.alignCenter);\n break;\n case \"bottom\":\n classes.push(STACK_CLASSES.alignEnd);\n break;\n case \"stretch\":\n classes.push(STACK_CLASSES.alignStretch);\n break;\n }\n }\n }\n\n // Overflow\n if (shouldScrollContents) {\n classes.push(STACK_CLASSES.overflowAuto);\n }\n\n return classes;\n }, [direction, verticalAlign, horizontalAlign, shouldScrollContents]);\n};\n","import { observer } from \"mobx-react-lite\";\nimport React from \"react\";\n\n// https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n// fixes the automatic type inferences for stack components\n\nimport { colorProp } from \"../../properties-panel/mixins/appearance-properties.js\";\nimport {\n border,\n borderRadius,\n} from \"../../properties-panel/mixins/appearance.js\";\nimport {\n margin,\n visible,\n size,\n padding,\n spacing,\n shouldScrollContents,\n} from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport { Prop, Section } from \"../../properties-panel/props-builder.js\";\nimport { PropsPanelCategory } from \"../../properties-panel/props-builder.js\";\nimport { useStackClasses } from \"./stack-classes.js\";\nimport type {\n HorizontalAlignment,\n VerticalAlignment,\n} from \"../../component-base/constants.js\";\nimport type { InternalPropsWithOptional } from \"../../properties-panel/props-builder.js\";\n\n/**\n * TODO:\n * - add more container props here, currently if any props has default, the container will need to fill missing attributes which is not ideal\n */\n\n// @refresh reset\nconst commonLayoutProps = {\n ...spacing(),\n ...padding(),\n ...size(),\n ...margin(),\n ...shouldScrollContents(true),\n ...visible(),\n};\n\nconst appearance = Section.category(PropsPanelCategory.Appearance).children({\n backgroundColor: colorProp({\n label: \"Background\",\n description: \"Changes the color of the background\",\n }),\n border: border(),\n borderRadius: borderRadius(),\n loading: loading(),\n});\n\nconst _propertiesDefinitionVStack = {\n layout: Section.category(PropsPanelCategory.Layout).add({\n verticalAlign: Prop.string<VerticalAlignment<\"vertical\">>()\n .readAndWrite()\n .default(\"top\") // Matches flexbox default (justify-content: flex-start)\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"top\",\n icon: \"VERTICAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"VERTICAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n {\n label: \"\",\n value: \"space-between\",\n icon: \"VERTICAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\",\n icon: \"VERTICAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ],\n }),\n horizontalAlign: Prop.string<HorizontalAlignment<\"vertical\">>()\n .readAndWrite()\n .default(\"stretch\") // Matches flexbox default (align-items: stretch)\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"left\",\n icon: \"VERTICAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"VERTICAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"VERTICAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n {\n label: \"\",\n value: \"stretch\",\n icon: \"VERTICAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ],\n }),\n ...commonLayoutProps,\n }),\n appearance,\n};\n\nconst _propertiesDefinitionHStack = {\n layout: Section.category(PropsPanelCategory.Layout).add({\n verticalAlign: Prop.string<VerticalAlignment<\"horizontal\">>()\n .readAndWrite()\n .default(\"stretch\") // Matches flexbox default (align-items: stretch)\n .propertiesPanel({\n label: \"Vertical align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"top\",\n icon: \"HORIZONTAL_DISTRIBUTION_TOP\",\n tooltip: \"Top\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_DISTRIBUTION_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"bottom\",\n icon: \"HORIZONTAL_DISTRIBUTION_BOTTOM\",\n tooltip: \"Bottom\",\n },\n {\n label: \"\",\n value: \"stretch\",\n icon: \"HORIZONTAL_ALIGNMENT_STRETCH\",\n tooltip: \"Stretch\",\n },\n ],\n }),\n horizontalAlign: Prop.string<HorizontalAlignment<\"horizontal\">>()\n .readAndWrite()\n .default(\"left\") // Matches flexbox default (justify-content: flex-start)\n .propertiesPanel({\n label: \"Horizontal align\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"\",\n value: \"left\",\n icon: \"HORIZONTAL_ALIGNMENT_LEFT\",\n tooltip: \"Left\",\n },\n {\n label: \"\",\n value: \"center\",\n icon: \"HORIZONTAL_ALIGNMENT_MIDDLE\",\n tooltip: \"Center\",\n },\n {\n label: \"\",\n value: \"right\",\n icon: \"HORIZONTAL_ALIGNMENT_RIGHT\",\n tooltip: \"Right\",\n },\n {\n label: \"\",\n value: \"space-between\",\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_BETWEEN\",\n tooltip: \"Space between\",\n },\n {\n label: \"\",\n value: \"space-around\",\n icon: \"HORIZONTAL_DISTRIBUTION_SPACE_AROUND\",\n tooltip: \"Space around\",\n },\n ],\n }),\n ...commonLayoutProps,\n }),\n appearance,\n};\n\n// Define a type alias for the properties you want to make optional\ntype OptionalProps =\n | \"verticalAlign\"\n | \"horizontalAlign\"\n | \"margin\"\n | \"padding\"\n | \"spacing\"\n | \"backgroundColor\"\n | \"border\"\n | \"borderRadius\"\n | \"shouldScrollContents\"\n | \"loading\";\n\ntype InternalVStackProps = InternalPropsWithOptional<\n typeof _propertiesDefinitionVStack,\n OptionalProps\n>;\n\ntype InternalHStackProps = InternalPropsWithOptional<\n typeof _propertiesDefinitionHStack,\n OptionalProps\n> & {\n [key: string]: any;\n};\n\nconst InternalStack = observer(\n ({\n direction = \"column\",\n spacing,\n children,\n shouldScrollContents,\n className,\n ...props\n }:\n | (InternalVStackProps & {\n direction: \"column\";\n })\n | (InternalHStackProps & {\n direction: \"row\";\n })) => {\n const { height, width, ...rest } = props;\n\n const stackClasses = useStackClasses({\n direction,\n verticalAlign: props.verticalAlign,\n horizontalAlign: props.horizontalAlign,\n shouldScrollContents,\n });\n\n const combinedClassName = [...stackClasses, className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={combinedClassName}\n {...rest}\n ref={props.dropTargetRef as React.LegacyRef<HTMLDivElement>}\n >\n {children}\n </div>\n );\n },\n);\n\nexport const InternalVStack = (props: InternalVStackProps) => {\n const { verticalAlign, ...rest } = props;\n return (\n <InternalStack\n direction={\"column\"}\n {...rest}\n verticalAlign={verticalAlign ?? \"top\"}\n />\n );\n};\n\nexport const InternalHStack = (props: InternalHStackProps) => {\n const { verticalAlign, ...rest } = props;\n return (\n <InternalStack\n direction=\"row\"\n {...rest}\n verticalAlign={verticalAlign ?? \"stretch\"}\n />\n );\n};\n","import { isEmpty } from \"lodash\";\nimport { useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport useAlignmentStyles from \"../../../hooks/use-alignment-styles.jsx\";\nimport { useTheme } from \"../../../internal-details/theme-context.jsx\";\nimport usePassthroughProps from \"../../component-base/use-passthrough-props.js\";\nimport useEditor from \"../../hooks/use-editor.js\";\nimport { CLASS_NAMES } from \"../../themes/classnames.js\";\nimport { noBorderOject } from \"../../themes/constants.js\";\nimport {\n generateClassName,\n getCanvasClassName,\n} from \"../../themes/generate-class-name.js\";\n\nimport { useComputeComponentStyles } from \"../../themes/generatedStyles/generate-component-styles.js\";\nimport { InternalHStack, InternalVStack } from \"../stack/index.jsx\";\nimport type { propertiesDefinition } from \"./props.js\";\nimport type { ContainerLayout } from \"../../component-base/constants.js\";\nimport type { InternalPropsWithOptional } from \"../../properties-panel/props-builder.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { PerSideBorder } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nconst EMPTY_CONTAINER_MIN_HEIGHT = 72;\n\ntype OptionalProps = \"backgroundColor\" | \"border\" | \"borderRadius\" | \"loading\";\n\ntype ContainerProps<T> = Omit<\n InternalPropsWithOptional<typeof propertiesDefinition, OptionalProps>,\n \"layout\"\n> & {\n layout: T;\n};\n\n// Minimal props for the unstyled container - just what's needed for layout switching\ntype UnstyledContainerProps = {\n layout: ContainerLayout;\n style?: CSSProperties;\n className?: string;\n children?: ReactNode;\n isVisible?: boolean;\n spacing?: Dim<\"px\">;\n columns?: number;\n rowHeight?: Dim<\"px\">;\n border?: PerSideBorder;\n};\n\nexport const UnstyledInternalContainer = (props: UnstyledContainerProps) => {\n const { layout = \"vertical\", children, isVisible = true, ...rest } = props;\n\n switch (layout) {\n case \"horizontal\":\n return (\n <InternalHStack\n margin={undefined}\n isVisible={isVisible}\n spacing={rest.spacing}\n {...rest}\n >\n {children}\n </InternalHStack>\n );\n case \"vertical\":\n default:\n return (\n <InternalVStack\n margin={undefined}\n isVisible={isVisible}\n spacing={rest.spacing}\n {...rest}\n >\n {children}\n </InternalVStack>\n );\n }\n};\n\nconst StyledContainerWrapper = styled.div`\n height: 100%;\n width: 100%;\n overflow: hidden;\n box-sizing: border-box;\n`;\n/**\n * TODO:\n * - interaciton rect of children will show outside of container if overflow\n * - move card style related defaultprops to props file and update dynamically when supported\n * - the spacing prop is not same type between stack and grid, enable when we clean it up\n * - consider border and padding for grid layout\n * - border style are showing some control default value even actually undefined. styles are coming from container classes but ideally we should set them as default props?\n * - move more props to inner layout component\n */\n\nexport const InternalContainer = <T extends ContainerLayout>(\n props: ContainerProps<T>,\n) => {\n const { style, ...passThroughProps } = usePassthroughProps(props);\n const { isEditing } = useEditor();\n\n const { theme } = useTheme();\n\n const componentClasses = useMemo(\n () => [\n \"container-component\",\n props.variant === \"card\"\n ? CLASS_NAMES.DEFAULT_CONTAINER_STYLE_CARD\n : CLASS_NAMES.DEFAULT_CONTAINER_STYLE_NONE,\n generateClassName(props.name),\n CLASS_NAMES.STYLED_SCROLLBAR,\n ...(props.shouldScrollContents ? [getCanvasClassName()] : []),\n ...(props.selected ? [CLASS_NAMES.ACTIVE_MODIFIER] : []),\n ],\n [props.variant, props.name, props.shouldScrollContents, props.selected],\n );\n\n const { borderStyle, paddingStyle, backgroundStyle } =\n useComputeComponentStyles({\n border: props.border,\n borderRadius: props.borderRadius,\n padding: props.padding,\n backgroundColor: props.backgroundColor,\n });\n\n const alignmentStyles = useAlignmentStyles({\n layout: props.layout as ContainerLayout,\n verticalAlign: props.verticalAlign,\n horizontalAlign: props.horizontalAlign,\n });\n\n const innerLayoutStyle = useMemo(\n () => ({\n ...alignmentStyles,\n // container wrapper already has correct height set, so inner has height to be 100%.\n height: \"100%\",\n width: \"100%\",\n }),\n [alignmentStyles],\n );\n\n const shouldApplyEmptyContainerMinHeight =\n isEditing && props.height?.mode !== \"px\" && isEmpty(props.children);\n\n const containerStyle: CSSProperties = useMemo(\n () => ({\n // ensures childrens auto sizing are calculated correctly against the container's implicit height\n // (mostly for flex children when the container has no set height [minHeight, maxHeight, auto height])\n display: \"grid\",\n gridTemplate: \"minmax(0px, 1fr) / minmax(0px, 1fr)\",\n ...borderStyle,\n ...paddingStyle,\n ...backgroundStyle,\n ...(props.shouldScrollContents ? { overflow: \"auto\" } : {}),\n ...style,\n ...(shouldApplyEmptyContainerMinHeight\n ? { minHeight: `${EMPTY_CONTAINER_MIN_HEIGHT}px` }\n : {}),\n }),\n [\n borderStyle,\n paddingStyle,\n backgroundStyle,\n props.shouldScrollContents,\n style,\n shouldApplyEmptyContainerMinHeight,\n ],\n );\n\n const classes = useMemo(\n () => [...componentClasses, props.className].join(\" \"),\n [componentClasses, props.className],\n );\n\n // we still need a container wrapper with sb id so the dnd drop works. If put on the conditional div, it will not work.\n return (\n <StyledContainerWrapper\n className={classes}\n style={containerStyle}\n {...passThroughProps}\n data-container-layout={props.layout}\n >\n <UnstyledInternalContainer\n layout={props.layout}\n spacing={props.spacing}\n columns={props.columns}\n rowHeight={props.rowHeight}\n isVisible={props.isVisible ?? true}\n style={innerLayoutStyle}\n border={noBorderOject(theme)}\n >\n {props.children}\n </UnstyledInternalContainer>\n </StyledContainerWrapper>\n );\n};\n\n// TODO unused?\n// export const Container = registerComponentInternal(\n// \"Container\",\n// {\n// propertiesDefinition,\n// },\n// InternalContainer,\n// )\n// .editorConfig(editorConfig)\n// .addEditorTemplate(editorTemplate);\n","import styled from \"styled-components\";\n\nexport const Spinner = styled.span`\n width: 50px;\n height: 50px;\n border: 4px solid #e0e1e5;\n border-bottom-color: #8c95a1;\n border-radius: 50%;\n display: inline-block;\n box-sizing: border-box;\n animation: rotation 0.5s linear infinite;\n\n @keyframes rotation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const FullPageSpinner = () => {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100svh\",\n width: \"100%\",\n }}\n >\n <Spinner />\n </div>\n );\n};\n","export const CSS_CLASSES = {\n SUSPENSE_FALLBACK: \"sb-suspense-fallback\",\n ANCHOR_NAME: \"sb-anchor-name\",\n} as const;\n","import { useDraggable } from \"@dnd-kit/core\";\nimport type { ComponentDraggableData } from \"../types\";\n\nexport function useComponentDraggable({\n instanceId,\n disableDrag,\n}: ComponentDraggableData & { disableDrag: boolean }): ReturnType<\n typeof useDraggable\n> {\n return useDraggable({\n id: instanceId,\n disabled: disableDrag,\n data: {\n instanceId,\n },\n });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useComponentDraggable } from \"./hooks/use-component-draggable.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport function useDraggableWidget(props: {\n instanceId: SbInstance;\n disableDrag?: boolean;\n}) {\n const editStore = getEditStore();\n\n const disableDrag =\n props.disableDrag || editStore.ui.dnd.isDraggingNewComponent;\n\n const specificWidgetDragDisabled = !editStore.ui.dnd.canDragWidget(\n props.instanceId,\n );\n\n const { setNodeRef, isDragging, listeners, attributes } =\n useComponentDraggable({\n instanceId: props.instanceId,\n disableDrag: disableDrag ?? false,\n });\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (e.target instanceof HTMLElement && e.target.dataset.ignoreDnd) {\n return;\n }\n if (specificWidgetDragDisabled) {\n e.stopPropagation();\n } else {\n listeners?.onPointerDown(e);\n }\n },\n [specificWidgetDragDisabled, listeners],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (specificWidgetDragDisabled) {\n e.stopPropagation();\n } else {\n listeners?.onPointerMove(e);\n }\n },\n [specificWidgetDragDisabled, listeners],\n );\n return useMemo(() => {\n return {\n ...listeners,\n ...attributes,\n className: \"sb-draggable-wrapper\",\n \"data-is-dragged\": isDragging,\n onPointerDown,\n onPointerMove,\n setNodeRef,\n };\n }, [\n listeners,\n attributes,\n isDragging,\n onPointerDown,\n onPointerMove,\n setNodeRef,\n ]);\n}\n","import { createContext, useCallback, useContext, useMemo } from \"react\";\nimport { useDraggableWidget } from \"../../edit-mode/dnd/use-draggable-widget.js\";\nimport type { IdentifierInfo } from \"./lib/features/name-manager\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { LegacyRef } from \"react\";\n\nconst DraggablePropsContext = createContext<{\n instanceId: SbInstance | undefined;\n props: {\n className?: string;\n ref: React.Ref<HTMLElement> | LegacyRef<HTMLElement> | null;\n } & React.HTMLAttributes<HTMLElement>;\n}>({\n instanceId: undefined,\n props: {\n className: undefined,\n ref: null,\n },\n});\n\nexport const DraggablePropsProvider = ({\n identifier,\n disableDrag,\n children,\n}: {\n identifier: IdentifierInfo;\n disableDrag: boolean;\n children: React.ReactNode;\n}) => {\n const draggableWidgetProps = useDraggableWidget({\n instanceId: identifier.instanceId,\n disableDrag,\n });\n\n const setNodeRef = draggableWidgetProps.setNodeRef;\n const handleRef = useCallback(\n (el: HTMLElement | null) => {\n setNodeRef(el);\n },\n [setNodeRef],\n );\n\n const value = useMemo(() => {\n return {\n instanceId: identifier.instanceId,\n props: {\n ...draggableWidgetProps,\n ref: handleRef,\n },\n };\n }, [draggableWidgetProps, handleRef, identifier.instanceId]);\n return (\n <DraggablePropsContext.Provider value={value}>\n {children}\n </DraggablePropsContext.Provider>\n );\n};\n\nconst EMPTY_PROPS = {};\nexport const useMyDraggableProps = (instanceId: SbInstance) => {\n const contextValue = useContext(DraggablePropsContext);\n if (contextValue.instanceId !== instanceId) {\n return EMPTY_PROPS;\n }\n return contextValue.props;\n};\n","<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4 12L12 4M4 4L12 12\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n","enum Indices {\n Layer0,\n Layer1,\n Layer2,\n Layer3,\n Layer4,\n Layer5,\n Layer6,\n Layer7,\n Layer8,\n Layer9,\n Layer10,\n Layer11,\n Layer12,\n Layer13,\n Layer14,\n LayerMax = 99999,\n}\n\n// the inside canvas layers and outside layers will not interfere with each other\n// TODO: split them into two Layer objects\nexport const Layers = {\n //-------------- inside canvas --------------\n\n dragPreview: Indices.Layer1,\n\n visibilityOverlay: Indices.Layer4,\n selectedRect: Indices.Layer4, // interaction rect\n focusedRect: Indices.Layer5,\n namePill: Indices.Layer6, // interaction rect name pill\n\n closeButton: Indices.Layer4, // modal or slideout close button\n stickySections: Indices.Layer3,\n scrollbars: Indices.Layer5, // for ScrollContainer, inside positionedWidget\n componentBorder: Indices.Layer3, // for containers\n resizeWrapper: Indices.Layer4, // inside positioned widget, always show\n // only show when focused/selected, in parallel with widgetName\n // selectedWrapper: Indices.Layer4,\n\n parentSelectedWrapper: Indices.Layer3,\n widgetResizer: Indices.Layer4, // widget resizer which is 4 edges and 4 corners\n // TODO: refactor the resizer below, looks like some is not needed.\n resizer: Indices.Layer6, // section column resizer and resizer disabled tooltip,\n dialog: Indices.Layer7, // for dialog component or detached components (such as slideouts, modals)\n\n widgetName: Indices.Layer4,\n selectionConstraintResize: Indices.Layer4, // min max height constraint\n canvasBreadCrumbPopover: Indices.Layer5,\n // layers for vstack dnd\n vstackDropPlaceholder: Indices.Layer2,\n focusedInput: Indices.Layer14, // blueprint control group focused input\n\n max: Indices.LayerMax,\n};\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { observer } from \"mobx-react-lite\";\nimport { useEffect, useId, useState } from \"react\";\nimport { useCallback } from \"react\";\nimport styled from \"styled-components\";\n\nimport CloseIcon from \"../lib/user-facing/assets/icons/close.svg\";\nimport ErrorIcon from \"../lib/user-facing/assets/icons/system-error.svg\";\nimport { Layers } from \"../lib/user-facing/layers.js\";\nimport { colors } from \"../lib/user-facing/styling/colors.js\";\nimport { CLASS_NAMES } from \"../lib/user-facing/themes/classnames.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\n\nconst PopoverContent = styled(Popover.Content)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-size: 14px;\n max-width: var(--radix-popover-content-available-width);\n padding: 6px 8px;\n background: white;\n border: 1px solid ${colors.GREY_25};\n z-index: ${Layers.dialog};\n box-shadow:\n hsl(206 22% 7% / 35%) 0px 10px 38px -10px,\n hsl(206 22% 7% / 20%) 0px 10px 20px -15px;\n`;\n\nconst PopoverClose = styled(Popover.Close)`\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n`;\n\nconst Form = styled.form`\n display: flex;\n gap: 8px;\n`;\n\nconst Input = styled.input`\n border: 1px solid ${colors.GREY_50};\n border-radius: 4px;\n padding: 4px 8px;\n font-size: 12px;\n`;\n\nconst Button = styled.button`\n border: 1px solid ${colors.ACCENT_BLUE_500};\n border-radius: 4px;\n padding: 4px 8px;\n background-color: ${colors.ACCENT_BLUE_500};\n color: white;\n transition: opacity 0.2s ease-in-out;\n font-size: 12px;\n\n &:hover {\n opacity: 0.8;\n }\n`;\n\nconst Text = styled.p`\n max-width: 15rem;\n`;\n\nexport const DuplicatedNamePopover = observer<{\n name: string;\n sourceId: SbElement;\n}>(({ name, sourceId }) => {\n const [newName, setNewName] = useState(name);\n\n const handleRename = useCallback(\n (evt: React.FormEvent<HTMLFormElement>) => {\n evt.preventDefault();\n evt.stopPropagation();\n getEditStore().operationManager.renameWidget({\n sourceId,\n newName,\n renameInAst: false,\n });\n },\n [newName, sourceId],\n );\n\n useEffect(() => {\n setNewName(name);\n }, [name]);\n\n const id = useId();\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <ErrorIcon style={{ color: \"red\" }} />\n </Popover.Trigger>\n <Popover.Portal>\n <PopoverContent>\n <Text>\n There are multiple components named <strong>{name}</strong>. Please\n provide a unique name to continue editing.\n </Text>\n <Form onSubmit={handleRename}>\n <label className=\"sr-only\" htmlFor={id}>\n New name\n </label>\n <Input\n type=\"text\"\n id={id}\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n autoCorrect=\"false\"\n />\n <Button\n className={`${CLASS_NAMES.BUTTON} ${CLASS_NAMES.PRIMARY_BUTTON}`}\n type=\"submit\"\n >\n Rename\n </Button>\n </Form>\n <PopoverClose aria-label=\"Close\">\n <CloseIcon />\n </PopoverClose>\n <Popover.Arrow className=\"PopoverArrow\" style={{ fill: \"white\" }} />\n </PopoverContent>\n </Popover.Portal>\n </Popover.Root>\n );\n});\n","<svg width=\"28\" height=\"20\" viewBox=\"0 0 28 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M20.4101 1.23853C17.6302 1.48173 15.5588 3.8863 15.7067 6.65157L18.3547 6.41988C18.5199 5.44519 19.325 4.66603 20.3558 4.57584C21.5806 4.46868 22.6602 5.37468 22.7674 6.59942C22.8594 7.65142 22.204 8.59642 21.2411 8.90995L21.4215 10.9716L21.4564 10.9921C22.0311 10.9419 22.6694 10.5377 23.0253 10.2436C24.6427 8.90661 24.7352 7.04449 24.7312 6.57165C24.7306 6.50857 24.7781 6.45461 24.841 6.44911L25.1108 6.42549C25.2166 6.41622 25.294 6.32392 25.2779 6.21892C25.21 5.77476 24.9744 4.64168 24.2597 3.80041C24.1964 3.72586 24.2411 3.60595 24.3386 3.59742L24.741 3.56221C24.8834 3.54975 24.9588 3.39563 24.8716 3.28231C24.3794 2.64217 22.8772 1.02267 20.4101 1.23853Z\" fill=\"url(#paint0_linear_735_5200)\"/>\n<path opacity=\"0.12\" d=\"M18.3328 6.98742C18.4399 8.21219 19.5197 9.11815 20.7444 9.011L21.2988 8.9625C20.6867 6.22284 19.3122 5.41204 19.3122 5.41204C19.4647 5.02627 20.3564 4.57581 20.3564 4.57581C19.1316 4.68296 18.2257 5.76269 18.3328 6.98742Z\" fill=\"#2A333D\"/>\n<path d=\"M6.64987 12.5642L6.69529 13.0564L6.46722 10.4494C5.43191 10.2861 4.60087 9.43595 4.50537 8.34472C4.39291 7.05918 5.34387 5.92583 6.62945 5.81337C7.39383 5.74649 8.10441 6.0556 8.57856 6.58745L11.1668 6.36103C10.4551 4.10391 8.25129 2.56222 5.79599 2.77703C3.32876 2.99288 2.13065 4.8486 1.75707 5.56449C1.69093 5.69126 1.79187 5.82995 1.93428 5.81749L2.33677 5.78226C2.43422 5.77372 2.4991 5.88407 2.44967 5.96849C1.89186 6.92107 1.85662 8.07787 1.86689 8.52707C1.86932 8.63326 1.96153 8.71072 2.06734 8.70145L2.33717 8.67787C2.40002 8.67237 2.45614 8.71726 2.46656 8.77949C2.54466 9.24587 2.95917 11.0636 4.78418 12.0994C5.18572 12.3273 6.07514 12.6145 6.64987 12.5642Z\" fill=\"url(#paint1_linear_735_5200)\"/>\n<path opacity=\"0.12\" d=\"M9.16108 7.93755C9.27354 9.22309 8.32258 10.3564 7.037 10.4689L6.45508 10.5198C6.58846 7.57624 7.86146 6.48755 7.86146 6.48755C7.63354 6.11659 6.62969 5.81347 6.62969 5.81347C7.91527 5.70101 9.04858 6.65197 9.16108 7.93755Z\" fill=\"#2A333D\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M21.7197 10.5433C21.2588 7.17688 19.0225 4.53246 15.0345 4.29123C14.926 4.28465 14.8717 4.28138 14.8331 4.25957C14.7984 4.24004 14.7721 4.21207 14.7547 4.17627C14.7353 4.13642 14.7353 4.08396 14.7353 3.97907V3.40726C14.7353 3.24855 14.5539 3.15816 14.4272 3.25371L13.4886 3.9615C13.3619 4.05704 13.1805 3.96665 13.1805 3.80796V3.44681C13.1805 3.28132 12.986 3.19286 12.862 3.30248C12.5925 3.54078 12.3235 3.77969 12.0552 4.01934C11.7949 4.252 11.6647 4.3683 11.5548 4.45011C11.4127 4.55592 11.4033 4.56207 11.2497 4.6503C11.131 4.71857 10.836 4.85477 10.2459 5.12715C7.45166 6.41715 6.1424 9.01238 6.39366 11.8842C6.82328 16.795 9.79797 18.5358 14.6601 18.1105C18.8747 17.7417 22.4177 15.6412 21.7197 10.5433ZM11.6391 10.2C11.7824 10.8209 11.4792 11.4211 10.9618 11.5405C10.4443 11.66 9.90866 11.2535 9.76532 10.6325C9.72401 10.4537 9.71978 10.2765 9.74705 10.112C9.83313 10.172 9.94328 10.1967 10.0535 10.1713C10.2605 10.1235 10.3895 9.91696 10.3418 9.71C10.3135 9.58746 10.2295 9.49219 10.1228 9.44484C10.2162 9.37223 10.3238 9.31942 10.4426 9.292C10.9601 9.17254 11.4957 9.57904 11.6391 10.2ZM18.6818 10.0523C19.1923 9.90592 19.4637 9.29065 19.2881 8.67811C19.1124 8.06554 18.5562 7.68761 18.0457 7.834C17.8998 7.87584 17.7734 7.956 17.6714 8.0635C17.7887 8.10177 17.8856 8.19569 17.9222 8.32331C17.9807 8.52746 17.8627 8.74046 17.6585 8.79904C17.5647 8.82592 17.469 8.81554 17.3872 8.77661C17.3812 8.91638 17.3977 9.06234 17.4395 9.20819C17.6152 9.82073 18.1714 10.1987 18.6818 10.0523ZM13.2339 13.6482L12.9811 10.7518C12.8867 9.67019 13.6397 8.69777 14.7106 8.51854C15.7814 8.33927 16.8101 9.01346 17.073 10.0668L17.7772 12.8876C18.1036 14.1952 17.2462 15.5034 15.917 15.7259C14.5879 15.9485 13.3511 14.9907 13.2339 13.6482Z\" fill=\"currentColor\"/>\n<path opacity=\"0.5\" d=\"M13.8809 14.0962C14.3767 14.5024 15.0394 14.7029 15.7267 14.5879C16.4141 14.4728 16.9753 14.0674 17.3119 13.5219C17.254 14.3216 16.6582 15.0169 15.822 15.1569C14.9857 15.2969 14.196 14.8335 13.8809 14.0962Z\" fill=\"url(#paint2_linear_735_5200)\"/>\n<path opacity=\"0.5\" d=\"M13.1914 13.1439C13.5758 14.1383 14.6198 14.7733 15.728 14.5878C16.8363 14.4023 17.6166 13.4619 17.6561 12.3965L17.7787 12.8875C18.1051 14.1951 17.2477 15.5033 15.9185 15.7258C14.5894 15.9483 13.3526 14.9906 13.2354 13.648L13.1914 13.1439Z\" fill=\"url(#paint3_linear_735_5200)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_735_5200\" x1=\"21.6358\" y1=\"4.1488\" x2=\"17.0271\" y2=\"8.78507\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\"/>\n<stop offset=\"1\" stop-color=\"currentColor\" stop-opacity=\"0.84\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_735_5200\" x1=\"4.53449\" y1=\"6.60276\" x2=\"10.6431\" y2=\"9.71249\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\"/>\n<stop offset=\"1\" stop-color=\"currentColor\" stop-opacity=\"0.84\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_735_5200\" x1=\"15.7877\" y1=\"13.8659\" x2=\"16.0042\" y2=\"15.0933\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\" stop-opacity=\"0.6\"/>\n<stop offset=\"1\" stop-color=\"currentColor\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_735_5200\" x1=\"15.7043\" y1=\"13.5969\" x2=\"16.0698\" y2=\"15.6702\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"currentColor\" stop-opacity=\"0.6\"/>\n<stop offset=\"1\" stop-color=\"currentColor\"/>\n</linearGradient>\n</defs>\n</svg>\n","import styled from \"styled-components\";\nimport ClarkIcon from \"../../user-facing/assets/images/clark.svg\";\nimport { colors } from \"../../user-facing/styling/colors.js\";\nimport type React from \"react\";\n\nexport const ErrorIconContainer = styled.div`\n width: 60px;\n height: 60px;\n min-width: 60px;\n min-height: 60px;\n background: linear-gradient(135deg, #aab 0%, #000033 50%, #000066 100%);\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n flex-shrink: 0;\n animation: scaleIn 0.3s ease-out forwards;\n opacity: 0;\n box-shadow:\n 0 0 1px black,\n 0 4px 12px rgba(0, 85, 187, 0.15),\n 0 2px 4px rgba(0, 85, 187, 0.05);\n\n @keyframes scaleIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n`;\n\nexport const StyledClarkIcon: React.FC = styled(ClarkIcon)`\n width: 54px;\n height: 54px;\n color: white;\n margin-top: 3px;\n margin-left: 1px;\n animation: scaleIn 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n opacity: 0;\n\n @keyframes scaleIn {\n 0% {\n transform: scale(0.6);\n opacity: 0;\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n`;\n\nexport const ErrorTitle = styled.h2`\n font-family: Inter;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 24px;\n line-height: 1.35;\n text-align: center;\n margin-bottom: 6px;\n flex-shrink: 0;\n`;\n\nexport const ErrorMessage = styled.p`\n font-family: Inter;\n font-size: 14px;\n color: #6c7689;\n line-height: 1.5715;\n text-align: center;\n flex-shrink: 0;\n margin-top: 0;\n margin-bottom: 16px;\n`;\n\nexport const ErrorDetails = styled.details`\n margin-top: 24px;\n text-align: left;\n background-color: #f9fafb;\n border-radius: 6px;\n padding: 16px;\n box-shadow:\n 0px 0px 1px 0px #22272f52,\n 0px 1px 3px 0px #22272f1f;\n flex-shrink: 0;\n font-family: Inter;\n\n &[open] summary {\n margin-bottom: 12px;\n }\n`;\n\nexport const ErrorSummary = styled.summary`\n cursor: pointer;\n font-weight: 500;\n color: #374151;\n font-size: 14px;\n user-select: none;\n`;\n\nexport const ErrorStack = styled.pre`\n font-size: 12px;\n color: #dc2626;\n overflow: auto;\n white-space: pre-wrap;\n margin: 16px;\n font-family: monospace;\n`;\n\nexport const ErrorContainer = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n background: rgba(255, 255, 255, 0.5);\n pointer-events: auto;\n`;\n\nexport const ErrorContent = styled.div`\n max-width: 700px;\n padding: 40px;\n overflow-y: auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 20px;\n\n opacity: 0;\n animation: fadeIn 0.3s ease-out forwards;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nexport const SecondaryButton = styled.button`\n color: ${colors.GREY_700};\n border: 1px solid ${colors.GREY_100};\n width: fit-content;\n border-radius: 4px;\n padding: 6px 12px;\n cursor: pointer;\n height: fit-content;\n font-size: 12px;\n\n &:hover {\n opacity: 0.8;\n }\n\n &:active {\n opacity: 0.6;\n }\n`;\n\nexport const ActionsContainer = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: center;\n`;\n","<svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.5004 0.900391C10.7822 0.900391 11.026 1.09647 11.0864 1.3717L11.2193 1.97662C11.2527 2.12902 11.3718 2.24805 11.5242 2.28152L12.1291 2.41435C12.4043 2.47479 12.6004 2.7186 12.6004 3.00038C12.6004 3.28217 12.4043 3.52598 12.1291 3.58642L11.5242 3.71928C11.3718 3.75274 11.2527 3.87177 11.2193 4.02417L11.0864 4.62909C11.026 4.90431 10.7822 5.10039 10.5004 5.10039C10.2186 5.10039 9.9748 4.90431 9.91436 4.62909L9.78151 4.02417C9.74805 3.87177 9.62902 3.75274 9.47662 3.71928L8.87169 3.58642C8.59647 3.52598 8.40039 3.28217 8.40039 3.00038C8.40039 2.7186 8.59648 2.47479 8.8717 2.41435L9.47661 2.28152C9.62902 2.24805 9.74805 2.12902 9.78151 1.97662L9.91436 1.3717C9.97479 1.09647 10.2186 0.900391 10.5004 0.900391ZM5.07658 3.83304C5.00213 3.57671 4.76731 3.40039 4.50039 3.40039C4.23347 3.40039 3.99865 3.57672 3.9242 3.83304L3.70907 4.57373C3.47987 5.36287 2.86285 5.97989 2.0737 6.20909L1.33304 6.4242C1.07672 6.49865 0.900394 6.73347 0.900391 7.00038C0.900387 7.2673 1.07671 7.50212 1.33303 7.57658L2.07376 7.79173C2.86287 8.02094 3.47987 8.63794 3.70907 9.42705L3.9242 10.1677C3.99865 10.4241 4.23348 10.6004 4.50039 10.6004C4.76731 10.6004 5.00213 10.4241 5.07658 10.1677L5.29171 9.42705C5.52092 8.63794 6.13791 8.02094 6.92702 7.79173L7.66775 7.57658C7.92407 7.50212 8.10039 7.2673 8.10039 7.00038C8.10039 6.73347 7.92406 6.49865 7.66774 6.4242L6.92708 6.20909C6.13793 5.97989 5.52091 5.36287 5.29171 4.57373L5.07658 3.83304ZM11.0864 9.37185C11.026 9.09663 10.7822 8.90054 10.5004 8.90054C10.2186 8.90054 9.97479 9.09663 9.91436 9.37185L9.78151 9.97677C9.74805 10.1292 9.62902 10.2482 9.47662 10.2817L8.8717 10.4145C8.59647 10.4749 8.40039 10.7188 8.40039 11.0005C8.40039 11.2823 8.59647 11.5261 8.8717 11.5866L9.47662 11.7194C9.62902 11.7529 9.74805 11.8719 9.78151 12.0243L9.91436 12.6292C9.97479 12.9045 10.2186 13.1005 10.5004 13.1005C10.7822 13.1005 11.026 12.9045 11.0864 12.6292L11.2193 12.0243C11.2527 11.8719 11.3718 11.7529 11.5242 11.7194L12.1291 11.5866C12.4043 11.5261 12.6004 11.2823 12.6004 11.0005C12.6004 10.7188 12.4043 10.4749 12.1291 10.4145L11.5242 10.2817C11.3718 10.2482 11.2527 10.1292 11.2193 9.97677L11.0864 9.37185Z\" fill=\"currentColor\"/>\n</svg>\n","import styled from \"styled-components\";\nimport AiStarsIcon from \"../../../edit-mode/assets/ai-stars.svg\";\nimport { editorBridge } from \"../../../edit-mode/superblocks-editor-bridge.js\";\nimport { colors } from \"../../user-facing/styling/colors.js\";\nimport rootStore from \"../lib/root-store.js\";\nimport type { IdentifierInfo } from \"../lib/features/name-manager.js\";\n\nconst MAX_STACK_FRAMES = 10;\nconst MAX_PROMPT_LENGTH = 8000;\n\n// Build a prompt by keeping the leading error message, skipping noisy node_modules frames,\n// annotating how many frames were dropped, and capping total length before dispatching.\nfunction buildRuntimeErrorPrompt(error: Error | undefined): string {\n const defaultPrompt = \"Fix this error: Unknown error\";\n if (!error) {\n return defaultPrompt;\n }\n\n const stackLines = error.stack?.split(\"\\n\") ?? [];\n const [messageLine, ...rawFrames] = stackLines;\n const message = (messageLine || error.message || error.toString()).trim();\n\n const filteredFrames = rawFrames.filter(\n (line) => line && !line.includes(\"node_modules\"),\n );\n const selectedFrames = filteredFrames.slice(0, MAX_STACK_FRAMES);\n const omittedCount = filteredFrames.length - selectedFrames.length;\n\n const frameSection = [\n ...selectedFrames,\n ...(omittedCount > 0\n ? [\n `... (${omittedCount} additional frame${omittedCount > 1 ? \"s\" : \"\"} omitted)`,\n ]\n : []),\n ]\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n\n const details = frameSection ? `${message}\\n${frameSection}` : message;\n const prompt = `Fix this error: ${details}`;\n\n if (prompt.length <= MAX_PROMPT_LENGTH) {\n return prompt;\n }\n\n const suffix = \"... (truncated)\";\n const availableChars = Math.max(MAX_PROMPT_LENGTH - suffix.length, 0);\n return `${prompt.slice(0, availableChars)}${suffix}`;\n}\n\nconst FixWithClarkButtonContainer = styled.button`\n padding: 6px 12px;\n background-color: ${colors.ACCENT_BLUE_500};\n border-radius: 4px;\n border: none;\n color: white;\n height: fit-content;\n display: flex;\n gap: 4px;\n cursor: pointer;\n transition: opacity 0.2s;\n font-size: 12px;\n align-items: center;\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport function FixWithClarkButton({\n identifier,\n error,\n onClick,\n}: {\n onClick?: () => void;\n identifier?: IdentifierInfo;\n error: Error | undefined;\n}) {\n const isAiEditing = rootStore.editStore?.ai.getIsEditing() ?? false;\n\n const handleFixWithAi = () => {\n onClick?.();\n\n if (identifier) {\n editorBridge.addComponentToAiContext(\n identifier.sourceId,\n identifier.instanceId,\n );\n }\n\n const prompt = buildRuntimeErrorPrompt(error);\n editorBridge.aiGenerate(prompt, true);\n };\n\n return (\n <FixWithClarkButtonContainer\n onClick={handleFixWithAi}\n disabled={isAiEditing}\n >\n <AiStarsIcon /> Fix with Clark\n </FixWithClarkButtonContainer>\n );\n}\n","import { Observer } from \"mobx-react-lite\";\nimport React, { Component } from \"react\";\nimport styled from \"styled-components\";\nimport { editorBridge } from \"../../../edit-mode/superblocks-editor-bridge.js\";\nimport { SecondaryButton } from \"../../internal-details/internal-components/common.js\";\nimport { FixWithClarkButton } from \"../../internal-details/internal-components/fix-with-clark-button.jsx\";\nimport { isEditMode } from \"../../internal-details/is-edit-mode.js\";\nimport rootStore from \"../../internal-details/lib/root-store.js\";\nimport { generateId } from \"../../utils/generate-id.js\";\nimport { colors } from \"../styling/colors.js\";\nimport type { IdentifierInfo } from \"../../internal-details/lib/features/name-manager.js\";\n\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nconst ErrorBoundaryContainer = styled.div`\n background: white;\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n border: 1px solid ${colors.GREY_100};\n border-left: 3px solid ${colors.RED_500};\n border-radius: 4px;\n width: 100%;\n color: ${colors.GREY_700};\n`;\n\nconst ErrorDetailsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nconst ErrorActionsContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n`;\n\ninterface Props {\n children: ReactNode;\n header?: string;\n identifier?: IdentifierInfo;\n}\n\ninterface State {\n id: string;\n hasError: boolean;\n error?: Error;\n}\n\nclass ErrorBoundary extends Component<Props, State> {\n state: State = {\n id: generateId(),\n hasError: false,\n };\n\n static getDerivedStateFromError(e: Error): State {\n return {\n id: generateId(),\n hasError: true,\n error: e,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"Uncaught error:\", error, errorInfo);\n if (isEditMode()) {\n rootStore.editStore?.ai.handleRuntimeError({\n id: this.state.id,\n error: error.toString(),\n errorInfo,\n identifier: this.props.identifier,\n });\n }\n }\n\n reset = () => {\n if (isEditMode()) {\n rootStore.editStore?.ai.clearRuntimeError(this.state.id);\n }\n this.setState({ hasError: false, error: undefined });\n };\n\n componentWillUnmount() {\n // Clear runtime error if component unmounts while in error state\n if (this.state.hasError && isEditMode()) {\n rootStore.editStore?.ai.clearRuntimeError(this.state.id);\n }\n }\n\n handleFixWithAi() {\n const { identifier } = this.props;\n\n if (identifier) {\n editorBridge.addComponentToAiContext(\n identifier.sourceId,\n identifier.instanceId,\n );\n }\n\n let prompt = `Fix this error: `;\n\n if (this.state.error?.stack) {\n const lines = this.state.error.stack.split(\"\\n\");\n const nodeModulesIndex = lines.findIndex((line) =>\n line.includes(\"node_modules\"),\n );\n const relevantLines =\n nodeModulesIndex > -1 ? lines.slice(0, nodeModulesIndex) : lines;\n\n prompt += relevantLines.slice(0, 5).join(\"\\n\");\n } else {\n prompt += this.state.error?.toString();\n }\n\n editorBridge.aiGenerate(prompt);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Observer>\n {() => {\n // Check if AI is currently generating\n const isAIGenerating =\n rootStore.editStore?.ai.getIsEditing() ?? false;\n\n if (isAIGenerating) {\n // During AI generation, don't show error UI\n // Error is already reported to AI in componentDidCatch\n // Children already crashed, so just render nothing\n return null;\n }\n\n // When AI is not generating, show full error UI\n return (\n <ErrorBoundaryContainer>\n <ErrorDetailsContainer>\n <h3>{this.props.header || \"Something went wrong.\"}</h3>\n <details style={{ fontSize: \"0.8em\" }}>\n <summary style={{ paddingLeft: \"0.25rem\" }}>\n Error details\n </summary>\n <div\n style={{\n marginTop: \"0.5rem\",\n maxWidth: \"100%\",\n overflowX: \"auto\",\n scrollbarWidth: \"thin\",\n }}\n >\n <pre\n style={{\n color: \"gray\",\n }}\n >\n <code>\n {this.state.error?.stack\n ? this.state.error.stack\n : this.state.error?.toString()}\n </code>\n </pre>\n </div>\n </details>\n </ErrorDetailsContainer>\n <ErrorActionsContainer>\n {isEditMode() && (\n <FixWithClarkButton\n error={this.state.error}\n identifier={this.props.identifier}\n />\n )}\n <SecondaryButton onClick={this.reset}>\n Try again\n </SecondaryButton>\n </ErrorActionsContainer>\n </ErrorBoundaryContainer>\n );\n }}\n </Observer>\n );\n }\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { createContext, useContext } from \"react\";\nimport type { createEntityActions } from \"./entities-state.js\";\n\nconst ActionsContext = createContext<ReturnType<typeof createEntityActions>>(\n null!,\n);\n\nexport const ActionsProvider: React.FC<\n React.PropsWithChildren<{\n actions: ReturnType<typeof createEntityActions>;\n }>\n> = ({ actions, children }) => {\n return (\n <ActionsContext.Provider value={actions}>\n {children}\n </ActionsContext.Provider>\n );\n};\n\nexport const useActions = () => {\n return useContext(ActionsContext);\n};\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport {\n createContext,\n useContext,\n useState,\n type ReactNode,\n type CSSProperties,\n useMemo,\n useRef,\n} from \"react\";\nimport { createAnchorNameStyle } from \"../../edit-mode/edit-wrapper.jsx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ninterface ComponentStyleContextValue {\n instanceId: string;\n setStyle: (style: CSSProperties) => void;\n getFallbackStyle: () => CSSProperties;\n}\n\nconst ComponentStyleContext = createContext<ComponentStyleContextValue | null>(\n null,\n);\n\nexport function ComponentSuspenseStyleProvider({\n children,\n instanceId,\n}: {\n children: ReactNode;\n instanceId: SbInstance;\n}) {\n const [style, setStyle] = useState<CSSProperties>({});\n const elementRef = useRef<HTMLElement | null>(null);\n\n const previousStyle = useRef<CSSProperties | null>(null);\n const getFallbackStyle = useMemo((): (() => CSSProperties) => {\n const currentElement = document.querySelector(\n `[${INSTANCE_ID_ATTRIBUTE}=\"${instanceId}\"]`,\n );\n\n if (!currentElement) {\n return () => style;\n }\n\n elementRef.current = currentElement as HTMLElement;\n\n return () => {\n if (!elementRef.current || !style) {\n return style || previousStyle.current || {};\n }\n\n let cachedRect: DOMRect | null = null;\n const lazyRect = () => {\n if (cachedRect === null && elementRef.current) {\n cachedRect = elementRef.current.getBoundingClientRect();\n }\n return cachedRect;\n };\n\n const componentStyle = createAnchorNameStyle({\n instanceId,\n });\n\n const fallbackStyle = { ...style, ...componentStyle };\n\n // Replace fit-content with actual dimensions\n if (\n style.width === \"fit-content\" ||\n style.width === \"auto\" ||\n style.width === undefined\n ) {\n fallbackStyle.width = `${lazyRect()?.width}px`;\n }\n if (\n style.height === \"fit-content\" ||\n style.height === \"auto\" ||\n style.height === undefined\n ) {\n fallbackStyle.height = `${lazyRect()?.height}px`;\n }\n\n // If the width or height is 0, use the previous style\n if (fallbackStyle.width === 0 || fallbackStyle.width === \"0px\") {\n fallbackStyle.width = previousStyle.current?.width;\n }\n if (fallbackStyle.height === 0 || fallbackStyle.height === \"0px\") {\n fallbackStyle.height = previousStyle.current?.height;\n }\n\n previousStyle.current = fallbackStyle;\n return fallbackStyle;\n };\n }, [elementRef, style, instanceId]);\n\n return (\n <ComponentStyleContext.Provider\n value={{\n instanceId,\n setStyle,\n getFallbackStyle,\n }}\n >\n {children}\n </ComponentStyleContext.Provider>\n );\n}\n\nexport function useComponentSuspenseStyle() {\n const context = useContext(ComponentStyleContext);\n if (!context) {\n throw new Error(\n \"useComponentStyle must be used within a ComponentStyleProvider\",\n );\n }\n return context;\n}\n","import { runInAction } from \"mobx\";\nimport { getName } from \"./lib/evaluator/names.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport type { ScopeId } from \"./lib/evaluator/base-entity-manager.js\";\nimport type { Entity } from \"@superblocksteam/library-shared/types\";\n\nconst entityActions = {\n reset: (entityName: string, scopeId: ScopeId) => {\n rootStore.entityManager.resetEntity({\n name: getName(entityName),\n scopeId,\n });\n },\n update: (\n entityName: string,\n scopeId: ScopeId,\n run: (entity: Entity) => void,\n ) => {\n runInAction(function updateEntity() {\n const state = rootStore.entityManager.getState(scopeId);\n const entity = state[entityName];\n run(entity as Entity); // TODO: Fix this type\n });\n },\n};\n\n// A function to bind to the entity name\nconst createEntityActions = (entityName: string, scopeId: ScopeId) => ({\n reset: entityActions.reset.bind(null, entityName, scopeId),\n update: entityActions.update.bind(null, entityName, scopeId),\n});\n\nexport { entityActions, createEntityActions };\n","import {\n getBindingIdentifier,\n isEntityWithBindingIdentifier,\n} from \"@superblocksteam/library-shared\";\nimport { toJS } from \"mobx\";\nimport { createBindableEntityProxy } from \"../../../user-facing/state/create-bindable-entity-proxy.js\";\n\nconst SuspenseSymbol = Symbol(\"SuspenseSymbol\");\n\ntype SuspenseResult = {\n __isSuspenseResult: typeof SuspenseSymbol;\n};\n\n// This is somewhat of a hack - entities passed through registered components\n// will lose the bindable information. So we try to restore it here.\nfunction toJSButRestoreBindableSymbol(obj: any) {\n const jsObj = toJS(obj);\n if (isEntityWithBindingIdentifier(obj)) {\n return createBindableEntityProxy(() => jsObj, getBindingIdentifier(obj)!);\n }\n return jsObj;\n}\n\nfunction toJsOrSuspense<T extends Record<string, unknown>>(\n obj: T,\n key?: string,\n): T | SuspenseResult {\n try {\n if (key) {\n return toJSButRestoreBindableSymbol(obj[key as keyof T]) as T;\n }\n return toJSButRestoreBindableSymbol(obj);\n } catch (error) {\n // If we caught a promise (suspenseful behavior), return a special object that will be removed by removeSuspense\n if (error instanceof Promise) {\n return {\n __isSuspenseResult: SuspenseSymbol,\n } as SuspenseResult;\n }\n throw error;\n }\n}\n\nfunction removeSuspense<T extends Record<string, unknown>>(\n keys: string[],\n result: T | SuspenseResult,\n prevSafeResult: T | undefined,\n) {\n const sanitized = {} as T;\n for (const key of keys) {\n const value = (result as any)[key];\n if (value && value.__isSuspenseResult) {\n const preSafeValue = prevSafeResult?.[key as keyof T] || null;\n sanitized[key as keyof T] = preSafeValue as T[keyof T];\n } else {\n sanitized[key as keyof T] = value as T[keyof T];\n }\n }\n return sanitized;\n}\n\nexport { SuspenseSymbol, toJsOrSuspense, removeSuspense };\nexport type { SuspenseResult };\n","import { reaction } from \"mobx\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n toJsOrSuspense,\n removeSuspense,\n type SuspenseResult,\n} from \"./suspense-helpers.js\";\n\n// We use reactions to track changes to the object\n// and return a new object with the changes\nexport const useShallowMobxObserver = <T extends Record<string, unknown>>(\n obj: T,\n useSuspense: boolean = true,\n): T => {\n const isFirstRenderRef = useRef(true);\n const [keys, setKeys] = useState<string[]>(Object.keys(obj));\n\n const preSafeResultRef = useRef<T | undefined>(undefined);\n const [result, setResult] = useState<T | SuspenseResult>(() =>\n toJsOrSuspense(obj),\n );\n\n // If the reference changes\n useEffect(() => {\n if (!isFirstRenderRef.current) {\n setKeys(Object.keys(obj));\n setResult(toJsOrSuspense(obj));\n }\n isFirstRenderRef.current = false;\n }, [obj]);\n\n // If the Object.keys change\n useEffect(() => {\n return reaction(\n () => Object.keys(obj),\n (newKeys) => {\n setKeys(newKeys);\n setResult(\n newKeys.reduce((acc, key: keyof T) => {\n acc[key] = obj[key];\n return acc;\n }, {} as T),\n );\n },\n {\n name: \"shallowMobxObserver-keys\",\n fireImmediately: false,\n },\n );\n }, [obj]);\n\n // If the values change\n useEffect(() => {\n const disposers = [] as (() => void)[];\n for (const key of keys) {\n disposers.push(\n reaction(\n () => toJsOrSuspense(obj, key),\n (v) => {\n setResult((prev: any) => {\n return { ...prev, [key]: v };\n });\n },\n {\n name: `shallowToJS-${key}`,\n fireImmediately: false,\n },\n ),\n );\n }\n return () => disposers.forEach((disposer) => disposer());\n }, [obj, keys]);\n\n const wholeResultIsSuspense = result && result.__isSuspenseResult;\n const aKeyIsSuspense =\n wholeResultIsSuspense ||\n keys?.some((key) => (result as any)[key]?.__isSuspenseResult);\n const somethingIsSuspense = wholeResultIsSuspense || aKeyIsSuspense;\n\n // If we are using suspense and there is a suspense, return the original object\n // This allows access to THROW causing the loading state to be shown\n if (somethingIsSuspense && useSuspense) {\n return obj;\n }\n\n // If we are not using suspense and there is a suspense, return a sanitized object\n // This means access WILl NOT throw the suspense\n if (somethingIsSuspense && !useSuspense) {\n const sanitized = removeSuspense<T>(keys, result, preSafeResultRef.current);\n preSafeResultRef.current = sanitized;\n return sanitized;\n }\n\n // There is no suspense, so we can return the result\n preSafeResultRef.current = result as T;\n return result as T;\n};\n","import styled, { keyframes } from \"styled-components\";\nimport { CSS_CLASSES } from \"../../css-constants.js\";\nimport { useTheme } from \"../../theme-context.jsx\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\ninterface Props {\n children?: ReactNode;\n style?: () => CSSProperties;\n noBorderRadius?: boolean;\n}\n\nconst shimmerAnimation = keyframes`\n 0% {\n background-position: -200px 0;\n }\n 100% {\n background-position: calc(200px + 100%) 0;\n }\n`;\n\nconst ShimmerDiv = styled.div<{\n $backgroundColor: string;\n $shimmerHighlight: string;\n $borderRadius: string;\n}>`\n min-height: 12px;\n min-width: 12px;\n background-color: ${(props) => props.$backgroundColor};\n border-radius: ${(props) => props.$borderRadius};\n position: relative;\n overflow: hidden;\n background: linear-gradient(\n 90deg,\n ${(props) => props.$backgroundColor} 25%,\n ${(props) => props.$shimmerHighlight} 50%,\n ${(props) => props.$backgroundColor} 75%\n );\n background-size: max(100%, 200px) 100%;\n animation: ${shimmerAnimation} 5s infinite linear;\n`;\n\n/**\n * Default fallback component displayed while components are suspended.\n */\nexport function SuspenseFallback({ style, noBorderRadius }: Props) {\n const { theme } = useTheme();\n\n // Extract theme properties with fallbacks\n const backgroundColor = theme?.colors?.neutral50 || \"#f8f9fa\";\n const shimmerHighlight = theme?.colors?.neutral100 || \"#ffffff\";\n const borderRadius = noBorderRadius\n ? \"0px\"\n : theme?.borderRadius.value + theme?.borderRadius.mode;\n\n return (\n <ShimmerDiv\n $backgroundColor={backgroundColor}\n $shimmerHighlight={shimmerHighlight}\n $borderRadius={borderRadius}\n style={style?.()}\n className={CSS_CLASSES.ANCHOR_NAME}\n data-test=\"suspense-fallback\"\n />\n );\n}\n","import {\n isBindingString,\n type BindingString,\n} from \"@superblocksteam/library-shared\";\n\nexport function removeBindings(props: Record<string, unknown>) {\n return Object.entries(props).reduce(\n (acc, [key, value]) => {\n if (isBindingString(value)) {\n acc[key] = (value as BindingString).value;\n } else if (\n typeof value === \"object\" &&\n value !== null &&\n key !== \"children\" &&\n key !== \"bind\"\n ) {\n acc[key] = removeBindings(value as Record<string, unknown>);\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n}\n","import {\n Dim,\n INSTANCE_ID_ATTRIBUTE,\n isDimension,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { isEqual, isNumber, isObject } from \"lodash\";\nimport { observer } from \"mobx-react-lite\";\n// TODO(code-mode): Remove import from edit-mode\nimport {\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\";\nimport { DuplicatedNamePopover } from \"../../edit-mode/duplicated-name-popover.jsx\";\nimport useStableEffect from \"../hooks/use-stable-effect.js\";\nimport ErrorBoundary from \"../user-facing/component-base/error-boundary.jsx\";\nimport { getWidthHeightInfo } from \"../user-facing/themes/utils.js\";\nimport { ActionsProvider } from \"./actions-context.jsx\";\nimport { ComponentInfoProvider } from \"./component-info-context.jsx\";\nimport {\n ComponentSuspenseStyleProvider,\n useComponentSuspenseStyle,\n} from \"./component-suspense-style-context.jsx\";\nimport { createEntityActions } from \"./entities-state.js\";\nimport { isEditMode } from \"./is-edit-mode.js\";\nimport { useShallowMobxObserver } from \"./lib/evaluator/use-shallow-mobx-observer.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { SuspenseFallback } from \"./lib/suspense/suspense-fallback.jsx\";\nimport { removeBindings } from \"./remove-bindings.jsx\";\nimport type { StrictElementPassthroughProps } from \"../user-facing/component-base/use-passthrough-props.js\";\nimport type { Name } from \"./lib/evaluator/names.js\";\nimport type { IdentifierInfo } from \"./lib/features/name-manager.js\";\nimport type { ChildFunction } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { SbComponentProps } from \"../user-facing/component-base/sb-component.js\";\nimport type { LegacyRef } from \"react\";\n\nconst INVISIBLE_OPACITY = 0.5;\n\nconst shouldHideComponent = (isVisible?: boolean): boolean => {\n if (isEditMode() && rootStore.editStore?.isInitialized) {\n return rootStore.editStore.isLivePreview && isVisible === false;\n }\n\n return isVisible === false;\n};\n\nconst useStyleWithSize = (\n props: SbComponentProps,\n instanceId?: string,\n): { style: CSSProperties; classNames: string[] } => {\n const [style, setStyle] = useState<CSSProperties>({});\n const [classNames, setClassNames] = useState<string[]>([]);\n useStableEffect(\n () => {\n const widthInfo = props.width\n ? getWidthHeightInfo(props.width, \"width\", instanceId)\n : { classnames: [] };\n const heightInfo = props.height\n ? getWidthHeightInfo(props.height, \"height\", instanceId)\n : { classnames: [] };\n\n if (props.style) {\n setStyle(props.style);\n }\n\n setClassNames([...widthInfo.classnames, ...heightInfo.classnames]);\n },\n {\n instanceId,\n width: props.width,\n height: props.height,\n style: props.style,\n },\n {\n cold: true,\n customEqualChecks: [\n [isDimension, Dim.isEqual],\n [isObject, (a, b) => isEqual(a, b)],\n ],\n },\n );\n\n return { style, classNames };\n};\n\nexport type ReactiveComponentProps = {\n children: React.ReactNode | ChildFunction;\n Component: React.FC<any>;\n widgetProps: Record<string, unknown>;\n showErrors?: boolean;\n identifier: IdentifierInfo;\n editorProps?: StrictElementPassthroughProps;\n dropTargetRef?: React.RefObject<HTMLElement> | LegacyRef<HTMLElement>;\n};\n\nconst ReactiveComponent = observer<ReactiveComponentProps>(function Component({\n Component,\n children,\n widgetProps,\n showErrors,\n identifier,\n editorProps,\n dropTargetRef,\n}) {\n const {\n name: { value: name },\n sourceId,\n instanceId,\n scopeId,\n } = identifier;\n const currentName = useRef(name);\n const actions = useRef(createEntityActions(name, scopeId));\n\n const isNameDuplicated = rootStore.nameManager.hasDuplicateNames(\n scopeId,\n name,\n );\n\n // If name is duplicated, then the stored information in runtimeEntities might not be correct,\n // as we map the widget props to the widget name and not the id. So we will only have the props\n // for one of the widgets with the same name. For that case, we use the widgetProps which might\n // not be up to date but it's as close as we can get to what the user configured.\n const entity = rootStore.entityManager.getEntity(\n scopeId,\n {\n value: name,\n isAnonymous: false,\n } satisfies Name,\n {\n useSuspense: true,\n },\n );\n\n const safeProps = useMemo(() => {\n return isNameDuplicated || !entity ? removeBindings(widgetProps) : entity;\n }, [isNameDuplicated, widgetProps, entity]);\n\n const reactiveProps = useShallowMobxObserver(\n safeProps,\n safeProps.loading === undefined,\n );\n\n const isAiLoading = rootStore.editStore?.ai.isEditingComponent(sourceId);\n\n const loading = reactiveProps.loading || isAiLoading;\n\n const { style: stylePropWithSize, classNames } = useStyleWithSize(\n reactiveProps,\n instanceId,\n );\n\n const styleProp = useMemo(() => {\n if (reactiveProps.isVisible === false) {\n const existingOpacity = isNumber(stylePropWithSize.opacity)\n ? stylePropWithSize.opacity\n : 1;\n return {\n ...(widgetProps.style as CSSProperties | undefined),\n ...stylePropWithSize,\n opacity: existingOpacity * INVISIBLE_OPACITY,\n };\n }\n return stylePropWithSize;\n }, [reactiveProps.isVisible, stylePropWithSize, widgetProps.style]);\n\n // Update the context with the latest style information, so loading state is updated\n const { setStyle, getFallbackStyle } = useComponentSuspenseStyle();\n useEffect(() => {\n setStyle(styleProp);\n }, [styleProp, setStyle]);\n\n if (currentName.current !== name) {\n currentName.current = name;\n actions.current = createEntityActions(name, scopeId);\n }\n\n const realClickHandler = reactiveProps?.onClick as any;\n const editorClickHandler = editorProps?.onClick;\n const handleClick = useCallback(\n async (e: React.MouseEvent<HTMLElement>, ...rest: any[]) => {\n // EventFlow onClick handlers\n if (typeof realClickHandler === \"function\") {\n realClickHandler(e, ...rest);\n }\n\n try {\n // Selection of component\n const extraClickHandler = editorClickHandler;\n if (typeof extraClickHandler === \"function\") {\n extraClickHandler(e);\n }\n } catch (error) {\n console.error(\"Editor click handler error\", error);\n }\n },\n [editorClickHandler, realClickHandler],\n );\n\n const hide = shouldHideComponent(reactiveProps?.isVisible as boolean);\n\n const fallbackPassthroughProps = useMemo(() => {\n return {\n [INSTANCE_ID_ATTRIBUTE]: instanceId,\n [SOURCE_ID_ATTRIBUTE]: sourceId,\n };\n }, [instanceId, sourceId]);\n\n if (hide) {\n return null;\n }\n\n return (\n <ErrorBoundary\n header={`Something went wrong rendering this widget`}\n identifier={identifier}\n >\n <ComponentInfoProvider\n sourceId={sourceId}\n name={name}\n instanceId={instanceId}\n >\n <ActionsProvider actions={actions.current}>\n {!!(isNameDuplicated && showErrors) && (\n <DuplicatedNamePopover sourceId={sourceId} name={name} />\n )}\n\n {loading === true ? (\n <SuspenseFallback style={getFallbackStyle} />\n ) : (\n <Component\n name={name}\n editorProps={editorProps ?? fallbackPassthroughProps}\n {...reactiveProps}\n dropTargetRef={dropTargetRef} // For detached widgets like modal/slideout\n onClick={handleClick}\n style={{\n ...styleProp,\n ...(editorProps?.style as CSSProperties | undefined),\n }}\n className={[\n widgetProps.className,\n editorProps?.className,\n ...classNames,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </Component>\n )}\n </ActionsProvider>\n </ComponentInfoProvider>\n </ErrorBoundary>\n );\n});\n\nconst LoadingWrapper = (props: { children: React.ReactNode }) => {\n const { getFallbackStyle } = useComponentSuspenseStyle();\n return (\n <Suspense fallback={<SuspenseFallback style={getFallbackStyle} />}>\n {props.children}\n </Suspense>\n );\n};\n\nconst WrappedReactiveComponent = (props: ReactiveComponentProps) => {\n return (\n <ComponentSuspenseStyleProvider instanceId={props.identifier.instanceId}>\n <LoadingWrapper>\n <ReactiveComponent {...props} />\n </LoadingWrapper>\n </ComponentSuspenseStyleProvider>\n );\n};\n\nexport default WrappedReactiveComponent;\n","import { useMemo } from \"react\";\nimport { useMyDraggableProps } from \"./draggable-context-provider.jsx\";\nimport {\n default as ReactiveComponent,\n type ReactiveComponentProps,\n} from \"./reactive-component.jsx\";\n\nconst mergeProps = (\n props1: Record<string, any>,\n props2: Record<string, any>,\n) => {\n const mergedClassName =\n props1.className && props2.className\n ? `${props1.className} ${props2.className}`\n : props1.className || props2.className;\n const mergedStyle = {\n ...props1.style,\n ...props2.style,\n };\n return {\n ...props1,\n ...props2,\n style: mergedStyle,\n className: mergedClassName,\n };\n};\n\n/*\n * We want to make this a separate component because dnd kit will update its internal context provider\n * EVERY time there's a drag event. We have this as a separate component here to isolate those re-renders to this relatively\n * lightweight component.\n */\nexport const EditorReactiveComponent = (props: ReactiveComponentProps) => {\n const { editorProps, ...restProps } = props;\n const myDraggableProps = useMyDraggableProps(props.identifier.instanceId);\n\n const mergedEditorProps = useMemo(() => {\n return mergeProps(editorProps ?? {}, myDraggableProps);\n }, [editorProps, myDraggableProps]);\n\n return <ReactiveComponent {...restProps} editorProps={mergedEditorProps} />;\n};\n","import rootStore from \"../internal-details/lib/root-store.js\";\n\nexport function isComponentTypeDetached(componentType: string | undefined) {\n if (!componentType) {\n return false;\n }\n\n const editorConfig =\n rootStore.componentRegistry.getEditorConfig(componentType);\n\n return editorConfig?.isDetached ?? false;\n}\n","import { isComponentTypeDetached } from \"./is-component-type-detached.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const getWidgetAnchorName = (instanceId: SbInstance) => {\n return `--widget-${instanceId}`;\n};\n\nexport const getWidgetRectAnchorName = (instanceId: SbInstance) => {\n return `--widget-rect-${instanceId}`;\n};\n\n/**\n * @deprecated see ENG-1634. should use getWidgetAnchorName instead.\n */\nexport const getWidgetDropAreaAnchorName = (\n instanceId: SbInstance | null,\n _widgetType?: string,\n) => {\n // if (widgetType && isComponentTypeDetached(widgetType)) {\n // return `--widget-drop-area-${instanceId}`;\n // }\n return `--widget-${instanceId}`;\n};\n\nexport const getEditWrapperId = (instanceId: SbInstance) => {\n return `sb-edit-wrapper-${instanceId}`;\n};\n\nexport const getEditWrapperIdWithType = (\n instanceId: SbInstance,\n widgetType?: string,\n) => {\n if (widgetType && isComponentTypeDetached(widgetType)) {\n return `sb-edit-wrapper-for-${widgetType}-${instanceId}`;\n }\n return `sb-edit-wrapper-${instanceId}`;\n};\n","<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"12\" height=\"12\" fill=\"transparent\" />\n <line x1=\"0\" y1=\"12\" x2=\"12\" y2=\"0\" stroke=\"#C6CAD2\" stroke-width=\"0.5\" transform=\"rotate(-90 6 6)\" />\n</svg>","import { useDroppable } from \"@dnd-kit/core\";\nimport type { ComponentDroppableData } from \"../types\";\nimport \"react\";\n\nexport function useComponentDroppable({\n instanceId,\n rootInstanceId,\n depth,\n disabled,\n}: ComponentDroppableData & { disabled: boolean }): ReturnType<\n typeof useDroppable\n> {\n return useDroppable({\n id: instanceId,\n disabled,\n data: {\n rootInstanceId,\n instanceId,\n depth,\n },\n });\n}\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { getEditWrapperIdWithType } from \"../lib/utils/widget-wrapper-naming.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const getBoundingBoxForWidget = (instanceId: SbInstance) => {\n return getWidgetNode(instanceId)?.getBoundingClientRect();\n};\n\nexport const getWidgetNode = (instanceId: SbInstance): HTMLElement | null => {\n const identifier = rootStore.nameManager.getExistingIdentifier(instanceId);\n const type = identifier?.type;\n return document?.querySelector(\n `[data-sb-selector=\"${getEditWrapperIdWithType(instanceId, type)}\"]`,\n ) as HTMLElement | null;\n};\n\nexport const doesInteractionLayerContainInstance = (\n possibleParent: SbInstance | null | undefined,\n possibleChild: SbInstance | null | undefined,\n handleNewlyCreatedComponents: boolean = false,\n) => {\n if (!possibleParent || !possibleChild) {\n return false;\n }\n const editStore = getEditStore();\n const parentMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(possibleParent);\n const childMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(possibleChild);\n if (!childMeta?.interactionLayerInstanceId && handleNewlyCreatedComponents) {\n // this can happen for newly created components that are not yet added to the interaction layer\n return true;\n }\n\n // make sure if the parent is itself an interaction layer, only check against it and not its parent.\n if (\n editStore.interactionLayerManager.interactionLayerInstanceIds.has(\n possibleParent,\n )\n ) {\n return (\n possibleChild === possibleParent ||\n childMeta?.interactionLayerInstanceId === possibleParent\n );\n }\n\n return (\n parentMeta?.interactionLayerInstanceId ===\n childMeta?.interactionLayerInstanceId\n );\n};\n\nexport const isPage = (instanceId: null | undefined | SbInstance) => {\n if (!instanceId) {\n return false;\n }\n const editStore = getEditStore();\n const instanceMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n return instanceMeta?.type === NATIVE_COMPONENT_TYPES.Page;\n};\n","import { useEffect, useState } from \"react\";\nimport { getWidgetNode } from \"../../interaction-utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const useWidgetNodeRef = (instanceId: SbInstance) => {\n const [nodeRef, setNodeRef] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n // we have to set the nodes manually because the wrapper has display: contents\n const actualElem = getWidgetNode(instanceId);\n if (actualElem) {\n setNodeRef(actualElem as HTMLElement);\n }\n }, [instanceId]);\n\n return nodeRef;\n};\n","import {\n Property,\n type PropertyInfo,\n isDimension,\n type Dim,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype DropRestriction<T> = {\n description: string;\n restriction: (params: T) => boolean; // return true if drop is not allowed\n};\n\nfunction rule<T>(\n description: string,\n restriction: DropRestriction<T>[\"restriction\"],\n) {\n return {\n description,\n restriction,\n };\n}\n\ntype DnDInstanceRestrictionParams = {\n dropTargetInstanceId: SbInstance;\n draggedInstanceId: undefined | null | SbInstance;\n isDraggingNewComponent: boolean;\n};\n\nconst instanceRestrictions: Array<\n DropRestriction<DnDInstanceRestrictionParams>\n> = [\n rule(\n \"Drop target and dragged instance must be in the same interaction layer\",\n ({ dropTargetInstanceId, draggedInstanceId, isDraggingNewComponent }) => {\n if (isDraggingNewComponent || !draggedInstanceId) {\n return false;\n }\n return !doesInteractionLayerContainInstance(\n dropTargetInstanceId,\n draggedInstanceId,\n );\n },\n ),\n rule(\n \"Dragged instance must not be a child of the drop target\",\n ({ dropTargetInstanceId, draggedInstanceId }) => {\n if (!dropTargetInstanceId || !draggedInstanceId) {\n return false;\n }\n return getEditStore().runtimeEntitiesManager.isChildOf(\n dropTargetInstanceId,\n draggedInstanceId,\n );\n },\n ),\n rule(\n \"If the dragged instance has local bindings, it must share its root instance with the drop target\",\n ({ dropTargetInstanceId, draggedInstanceId }) => {\n if (!dropTargetInstanceId || !draggedInstanceId) {\n return false;\n }\n const editStore = getEditStore();\n const hasLocalBinding =\n draggedInstanceId &&\n editStore.runtimeEntitiesManager.doesEntityHaveLocalBindings(\n draggedInstanceId,\n );\n if (!hasLocalBinding) {\n return false;\n }\n\n const dropTargetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n dropTargetInstanceId,\n );\n const draggedMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(draggedInstanceId);\n\n if (dropTargetMeta?.isRoot) {\n return dropTargetMeta.instanceId !== draggedMeta?.rootInstanceId;\n } else {\n return dropTargetMeta?.rootInstanceId !== draggedMeta?.rootInstanceId;\n }\n },\n ),\n];\n\nexport const areDragAndDropInstancesValid = (\n params: DnDInstanceRestrictionParams,\n) => {\n const triggeredRestriction = instanceRestrictions.find((restriction) =>\n restriction.restriction(params),\n );\n return triggeredRestriction == null;\n};\n\ntype DnDTypeRestrictionParams = {\n draggedType: string;\n dropTargetType: string;\n dropTargetEmpty: boolean;\n isDraggingNewComponent: boolean;\n};\n\n// descriptions not used for now, but can use for self-documentation\nconst typeRestrictions: Array<DropRestriction<DnDTypeRestrictionParams>> = [\n rule(\n \"Draggable type must be draggable\",\n ({ draggedType, isDraggingNewComponent }) =>\n !isDraggingNewComponent && !isTypeDraggable(draggedType),\n ),\n rule(\n \"Drop target type must be droppable\",\n ({ dropTargetType }) => !isTypeDroppable(dropTargetType),\n ),\n rule(\n \"Only containers can be dropped on non empty pages\",\n ({ draggedType, dropTargetType, dropTargetEmpty }) => {\n const containerTags = rootStore.componentRegistry.containerTypes;\n return (\n !containerTags.has(draggedType) &&\n dropTargetType === NATIVE_COMPONENT_TYPES.Page &&\n !dropTargetEmpty\n );\n },\n ),\n];\n\nexport const isDragAndDropTypeValid = ({\n draggedType,\n dropTargetType,\n dropTargetEmpty,\n isDraggingNewComponent,\n}: {\n draggedType: string;\n dropTargetType: string;\n dropTargetEmpty: boolean;\n isDraggingNewComponent: boolean;\n}) => {\n const triggeredRestriction = typeRestrictions.find((restriction) =>\n restriction.restriction({\n draggedType,\n dropTargetType,\n dropTargetEmpty,\n isDraggingNewComponent,\n }),\n );\n\n return triggeredRestriction == null;\n};\n\nconst isTypeDroppable = (type: string) => {\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isDroppable === true; // defaults to false\n};\n\nconst isTypeDraggable = (type: string) => {\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isDraggable !== false; // defaults to true\n};\n\nexport const isEntityDraggable = (params: {\n type: string;\n directParentInstanceId?: SbInstance;\n instancesCount: number;\n isRoot: boolean;\n}) => {\n return (\n isTypeDraggable(params.type) &&\n !params.isRoot &&\n params.directParentInstanceId != null &&\n params.instancesCount === 1\n );\n};\n\nexport const isEntityDroppable = (params: { type: string }) => {\n return isTypeDroppable(params.type);\n};\n\n// can the widget be dragged by clicking on the general area (vs the name pill)\nexport const isContentDraggable = (type: string) => {\n if (!isTypeDraggable(type)) {\n return false;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(type);\n return editorConfig?.isContentDraggable !== false; // defaults to true\n};\n\nexport const filterSafeStackDimensionProperties = (existingProps: {\n width?: Dim;\n height?: Dim;\n size?: Dim | unknown;\n}): {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo;\n} => {\n const { width, height, size } = existingProps;\n\n const safeDimensions: {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo; // TODO remove this once we get rid of legacy Icon widget\n } = {};\n\n if (\n height?.mode === \"px\" ||\n height?.mode === \"fit\" ||\n height?.mode === \"fill\"\n ) {\n safeDimensions.height = Property.Dimension(height);\n }\n\n if (width?.mode === \"px\" || width?.mode === \"fit\" || width?.mode === \"fill\") {\n safeDimensions.width = Property.Dimension(width);\n }\n\n if (isDimension(size) && size.mode === \"px\") {\n safeDimensions.size = Property.Dimension(size);\n }\n\n return safeDimensions;\n};\n","import { observer } from \"mobx-react-lite\";\nimport React, { useEffect } from \"react\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useComponentDroppable } from \"./hooks/use-component-droppable.js\";\nimport { useWidgetNodeRef } from \"./hooks/use-widget-node-ref.js\";\nimport { isDragAndDropTypeValid } from \"./utils.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nconst DroppableWidget = observer(\n (props: {\n instanceId: SbInstance;\n children: React.ReactNode;\n dropTargetElem?: HTMLElement | null;\n }) => {\n const editStore = getEditStore();\n const myType = editStore.runtimeEntitiesManager.getEditorWidgetType(\n props.instanceId,\n );\n const rootInstanceId = editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n props.instanceId,\n )?.rootInstanceId;\n\n const depth = useObserverMemo(() => {\n let currentId = props.instanceId;\n let depth = 0;\n while (currentId) {\n const meta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(currentId);\n if (!meta?.parentInstanceId) break;\n currentId = meta.parentInstanceId;\n depth++;\n }\n return depth;\n }, [props.instanceId, editStore.runtimeEntitiesManager]);\n\n const draggedType = editStore.ui.dnd.draggedWidgetType;\n\n const isValidDropForDraggedType = useObserverMemo(() => {\n const editStore = getEditStore();\n const dropTargetEmpty =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(props.instanceId)\n ?.children?.length === 0;\n return (\n draggedType &&\n myType &&\n isDragAndDropTypeValid({\n draggedType,\n dropTargetType: myType,\n isDraggingNewComponent: editStore.ui.dnd.isDraggingNewComponent,\n dropTargetEmpty,\n })\n );\n }, [draggedType, myType, props.instanceId]);\n\n const selfIsDragging =\n editStore.ui.dnd.isDragging &&\n editStore.ui.getSelectedInstanceIds().includes(props.instanceId);\n\n const isDragDropEnabled =\n props.instanceId && editStore.ui.dnd.canDragWidget(props.instanceId);\n\n const disabled =\n !isValidDropForDraggedType || selfIsDragging || !isDragDropEnabled;\n\n const { setNodeRef: setDroppableNodeRef } = useComponentDroppable({\n instanceId: props.instanceId,\n rootInstanceId,\n depth,\n disabled,\n });\n\n const widgetNode = useWidgetNodeRef(props.instanceId);\n\n useEffect(() => {\n // we have to set the nodes like this because the wrapper has display: contents\n // Determine which node to use for the drop target\n let targetNode: HTMLElement | null = null;\n if (props.dropTargetElem) {\n targetNode = props.dropTargetElem;\n } else if (widgetNode) {\n targetNode = widgetNode as HTMLElement;\n }\n\n if (targetNode) {\n setDroppableNodeRef(targetNode);\n }\n }, [widgetNode, setDroppableNodeRef, props.dropTargetElem]);\n\n return <React.Fragment>{props.children}</React.Fragment>;\n },\n);\n\nexport default DroppableWidget;\n","import { useCallback } from \"react\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\nimport type React from \"react\";\n\ninterface RightClickMenuProps {\n sourceId: SbElement;\n}\n\nexport function useRightClickMenu({ sourceId }: RightClickMenuProps) {\n return {\n onContextMenu: useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n editorBridge.registerContextMenuClick(\n sourceId,\n event.clientX,\n event.clientY,\n );\n },\n [sourceId],\n ),\n };\n}\n","import { createContext, useContext } from \"react\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager\";\n\ntype IdentifierContextType = {\n identifier: IdentifierInfo | null;\n};\n\nconst ParentIdentifierContext = createContext<IdentifierContextType | null>({\n identifier: null,\n});\n\nexport function useParentIdentifier() {\n return useContext(ParentIdentifierContext)?.identifier;\n}\n\nexport function ParentIdentifierProvider({\n identifier,\n children,\n}: {\n identifier: IdentifierInfo;\n children: React.ReactNode;\n}) {\n return (\n <ParentIdentifierContext.Provider value={{ identifier }}>\n {children}\n </ParentIdentifierContext.Provider>\n );\n}\n","import { createContext, useContext, useMemo, useEffect } from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype InteractionContextType = {\n rootInstanceId: SbInstance | undefined;\n};\n\nconst defaultContext: InteractionContextType = {\n rootInstanceId: undefined,\n};\n\nconst InteractionLayerContext = createContext<\n InteractionContextType | undefined\n>(undefined);\n\nexport const useInteractionLayerContext = () => {\n const context = useContext(InteractionLayerContext);\n return context ?? defaultContext;\n};\n\nexport const InteractionLayerProvider = (props: {\n children: React.ReactNode;\n instanceId: SbInstance;\n}) => {\n const context = useMemo(\n () => ({ rootInstanceId: props.instanceId }),\n [props.instanceId],\n );\n\n useEffect(() => {\n const editStore = getEditStore();\n editStore.interactionLayerManager.addInteractionLayerInstanceId(\n props.instanceId,\n );\n return () => {\n editStore.interactionLayerManager.removeInteractionLayerInstanceId(\n props.instanceId,\n );\n };\n }, [props.instanceId]);\n\n return (\n <InteractionLayerContext.Provider value={context}>\n {props.children}\n </InteractionLayerContext.Provider>\n );\n};\n","export function throttle<T extends (...args: any[]) => any>(\n func: T,\n delay: number,\n): ((...args: Parameters<T>) => void) & { cancel: () => void } {\n let timeoutId: ReturnType<typeof setTimeout>;\n let lastExecTime = 0;\n\n const throttled = function (this: any, ...args: Parameters<T>) {\n const currentTime = Date.now();\n\n if (currentTime - lastExecTime < delay) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n lastExecTime = currentTime;\n func.apply(this, args);\n }, delay);\n } else {\n lastExecTime = currentTime;\n func.apply(this, args);\n }\n };\n\n throttled.cancel = () => {\n clearTimeout(timeoutId);\n };\n\n return throttled;\n}\n\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n delay: number,\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return function (this: any, ...args: Parameters<T>) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n func.apply(this, args);\n }, delay);\n };\n}\n","export const CANVAS_ROOT_ID = \"canvas-root\";\n\n/**\n * The ID of the element used to target detached components (e.g: modals, slideouts) when they are opened in the app.\n */\nexport const PORTAL_ROOT_ID = \"portal-root\";\n\nexport const POPOVER_ROOT_ID = \"sb-popover-root\";\n","import { observer } from \"mobx-react-lite\";\nimport React from \"react\";\nimport { getWidgetDropAreaAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport type { CSSProperties } from \"react\";\n\nexport const StackDropPreview = observer(() => {\n const editStore = getEditStore();\n const { placeholders } = editStore.ui.dnd.stack.lazyDropInfo;\n const dropTargetId = editStore.ui.dnd.dropTargetId;\n const dropTargetWidgetType = editStore.ui.dnd.dropTargetWidgetType;\n\n return (\n <div\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n positionAnchor: getWidgetDropAreaAnchorName(\n dropTargetId,\n dropTargetWidgetType,\n ),\n } as CSSProperties\n }\n >\n {editStore.ui.dnd.isProspectiveDropValid && placeholders ? (\n <>\n {placeholders.map((placeholder) => (\n <div\n key={placeholder.top + placeholder.left}\n className=\"sb-edit-drop-placeholder\"\n style={{\n top: placeholder.top,\n left: placeholder.left,\n width: placeholder.width,\n height: placeholder.height,\n backgroundColor: \"rgba(0, 135, 224, 0.16)\",\n }}\n data-is-active={placeholder.isActive}\n data-is-valid-drop={true}\n />\n ))}\n </>\n ) : null}\n <div\n className=\"sb-edit-drop-target-outline\"\n data-invalid-target={!editStore.ui.dnd.isProspectiveDropValid}\n />\n </div>\n );\n});\n","import { DragOverlay } from \"@dnd-kit/core\";\nimport { snapCenterToCursor } from \"@dnd-kit/modifiers\";\nimport { observer } from \"mobx-react-lite\";\nimport React from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport { StackDropPreview } from \"./stack-drop.jsx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport const DropLayer = observer((props: { rootInstanceId: SbInstance }) => {\n // putting handlers here instead of at DnDProvider level in case we want to extend the logic with DnDContext later\n\n const editStore = getEditStore();\n const draggedWidgetType = editStore.ui.dnd.draggedWidgetType;\n const dropTargetWidgetType = editStore.ui.dnd.dropTargetWidgetType;\n const isDropTargetStackLike = editStore.ui.dnd.isDropTargetStackLike;\n const dropTargetId = editStore.ui.dnd.dropTargetId;\n\n const isDropTargetInInteractionLayer = doesInteractionLayerContainInstance(\n props.rootInstanceId,\n dropTargetId,\n );\n\n const isDragging = editStore.ui.dnd.isDragging;\n const isPossibleDrop =\n isDragging &&\n isDropTargetInInteractionLayer &&\n Boolean(draggedWidgetType && dropTargetWidgetType);\n\n const possibleStackDrop = isPossibleDrop && isDropTargetStackLike;\n\n // DragOverlay should not be conditionally rendered\n // The entity inside of DragOverlay must always be rendered, since it is tied to the collision detection logic somehow\n return (\n <>\n {possibleStackDrop && <StackDropPreview />}\n <DragOverlay modifiers={[snapCenterToCursor]} dropAnimation={null}>\n {/* {editStore.ui.dnd.isDraggingNewComponent && isPossibleDrop && (\n <div\n className=\"sb-edit-drag-preview\"\n data-is-valid-drop={possibleStackDrop}\n style={{\n visibility: \"visible\",\n height: `${editStore.ui.dnd.draggingWidgetSize.height * 12}px`,\n width: `${editStore.ui.dnd.draggingWidgetSize.width * 12}px`,\n }}\n />\n )} */}\n </DragOverlay>\n </>\n );\n});\n\nexport default DropLayer;\n","export const EXTENDED_CLICKABLE_AREA_DELTA = 6;\n\nexport const EXTENDED_CLICKABLE_ANCHOR_CSS = {\n top: `calc(anchor(top) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n left: `calc(anchor(left) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n right: `calc(anchor(right) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n bottom: `calc(anchor(bottom) - ${EXTENDED_CLICKABLE_AREA_DELTA}px)`,\n};\n\nexport const EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH = `polygon(\n 0% 0%, 0% 100%, 100% 100%, 100% 0%,\n 0% 0%, ${EXTENDED_CLICKABLE_AREA_DELTA}px ${EXTENDED_CLICKABLE_AREA_DELTA}px, calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px) ${EXTENDED_CLICKABLE_AREA_DELTA}px, \n calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px) calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px), ${EXTENDED_CLICKABLE_AREA_DELTA}px calc(100% - ${EXTENDED_CLICKABLE_AREA_DELTA}px), ${EXTENDED_CLICKABLE_AREA_DELTA}px ${EXTENDED_CLICKABLE_AREA_DELTA}px\n )`;\n","<svg width=\"16\" height=\"14\" viewBox=\"0 0 16 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" color=\"#A4AAB7\">\n<g><path d=\"M2.00001 1L3.88386 2.88385M14 13L12.1162 11.1161M12.1162 11.1161C11.0861 11.8322 9.72533 12.3333 8.00001 12.3333C3.33334 12.3333 1.33334 8.66667 1.33334 7C1.33334 5.94952 2.12787 4.10451 3.88386 2.88385M12.1162 11.1161L9.41419 8.41418M3.88386 2.88385L6.58577 5.58576M6.58577 5.58576C6.22382 5.94769 5.99995 6.4477 5.99995 7C5.99995 8.10457 6.89538 9 7.99995 9C8.55225 9 9.05226 8.77613 9.41419 8.41418M6.58577 5.58576L9.41419 8.41418M13.6132 9.66667C13.6954 9.55607 13.7727 9.44476 13.845 9.33333C14.4034 8.47271 14.6667 7.60471 14.6667 7C14.6667 5.33333 12.6667 1.66667 8.00001 1.66667C7.26869 1.66667 6.60286 1.75671 5.99995 1.915C5.88664 1.94475 5.77556 1.97691 5.66668 2.01133\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\"/></g>\n</svg>\n","import rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { Dimension } from \"@superblocksteam/shared\";\n\nconst canResizeWidth = (\n widthMode: Dimension[\"mode\"] | Dim[\"mode\"] | undefined,\n): boolean => {\n return widthMode === \"px\" || widthMode === \"columns\";\n};\n\nconst canResizeHeight = (\n heightMode: Dimension[\"mode\"] | Dim[\"mode\"] | undefined,\n): boolean => {\n return heightMode === \"px\" || heightMode === \"rows\";\n};\n\nexport const useResizeCapabilities = (\n instanceId: SbInstance,\n): { canResizeWidth: boolean; canResizeHeight: boolean } => {\n const componentMeta =\n rootStore.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n\n const componentType = componentMeta?.type;\n\n if (!componentType) {\n throw new Error(\"Component type not found\");\n }\n\n const editorConfig =\n rootStore.componentRegistry.getEditorConfig(componentType);\n\n if (editorConfig && \"isResizable\" in editorConfig) {\n if (typeof editorConfig.isResizable === \"boolean\") {\n return {\n canResizeWidth: editorConfig.isResizable,\n canResizeHeight: editorConfig.isResizable,\n };\n } else if (typeof editorConfig.isResizable === \"function\") {\n const isResizable = editorConfig.isResizable(componentMeta?.props);\n return {\n canResizeWidth: isResizable.width,\n canResizeHeight: isResizable.height,\n };\n } else if (typeof editorConfig.isResizable === \"object\") {\n return {\n canResizeWidth: editorConfig.isResizable.width ?? true,\n canResizeHeight: editorConfig.isResizable.height ?? true,\n };\n }\n }\n\n const widthMode = (componentMeta?.props?.width as Dim)?.mode;\n const heightMode = (componentMeta?.props?.height as Dim)?.mode;\n\n return {\n canResizeWidth: canResizeWidth(widthMode),\n canResizeHeight: canResizeHeight(heightMode),\n };\n};\n","import { observer } from \"mobx-react-lite\";\nimport { useEffect, useMemo } from \"react\";\nimport HideIcon from \"../../lib/user-facing/assets/icons/hide.svg\";\nimport ErrorIcon from \"../../lib/user-facing/assets/icons/system-error.svg\";\nimport { colors } from \"../../lib/user-facing/styling/colors.js\";\nimport { useComponentDraggable } from \"../dnd/hooks/use-component-draggable.js\";\nimport { useWidgetNodeRef } from \"../dnd/hooks/use-widget-node-ref.js\";\nimport { isEntityDraggable } from \"../dnd/utils.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { useResizeCapabilities } from \"../resize-capabilities.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { DraggableAttributes } from \"@dnd-kit/core\";\nimport type { SyntheticListenerMap } from \"@dnd-kit/core/dist/hooks/utilities\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nconst DraggableWrapper = (props: {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) => {\n const { instanceId, displayName, anyIsDragging, type, isVisible } = props;\n const {\n setNodeRef: setDraggableNodeRef,\n listeners,\n attributes,\n } = useComponentDraggable({\n instanceId,\n disableDrag: false,\n });\n\n const widgetNode = useWidgetNodeRef(instanceId);\n\n useEffect(() => {\n // we have to set the nodes like this because the wrapper has display: contents\n if (widgetNode) {\n setDraggableNodeRef(widgetNode as HTMLElement);\n }\n }, [widgetNode, setDraggableNodeRef]);\n\n return (\n <NamePillDiv\n attributes={attributes}\n listeners={listeners}\n displayName={displayName}\n instanceId={instanceId}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n};\n\nconst NamePillDiv = (params: {\n attributes?: DraggableAttributes;\n listeners?: SyntheticListenerMap;\n displayName: string;\n instanceId: SbInstance;\n anyIsDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) => {\n const {\n attributes = {},\n listeners = {},\n displayName,\n instanceId,\n type,\n isVisible,\n } = params;\n\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n\n const { canResizeWidth, canResizeHeight } = useResizeCapabilities(instanceId);\n\n const shouldToggleComponentInAiContext =\n getEditStore().ai.shouldToggleComponentInAiContext();\n\n const selectionStyles = useMemo(() => {\n const baseStyles = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n };\n if (type === \"ERROR\") {\n return {\n ...baseStyles,\n backgroundColor: colors.DANGER,\n };\n }\n if (type === \"SELECTED\" && canResizeHeight && canResizeWidth) {\n return {\n ...baseStyles,\n marginRight: \"8px\",\n };\n }\n return baseStyles;\n }, [type, canResizeHeight, canResizeWidth]);\n\n return (\n <div\n {...attributes}\n {...listeners}\n className=\"sb-edit-selection-name-pill\"\n style={selectionStyles}\n data-test=\"interaction-rect-name-pill\"\n data-pill-name={displayName}\n data-pill-type={type}\n onClick={(ev) => {\n if (shouldToggleComponentInAiContext) {\n if (sourceId) {\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n displayName,\n );\n }\n } else {\n getEditStore().ui.selectWidget(instanceId, ev.shiftKey === true);\n }\n\n ev.stopPropagation();\n }}\n >\n {type === \"ERROR\" && (\n <ErrorIcon\n height={12}\n width={12}\n style={{\n color: \"white\",\n }}\n />\n )}\n {isVisible === false && (\n <HideIcon height={12} width={10} style={{ color: \"white\" }} />\n )}\n {displayName}\n </div>\n );\n};\n\ninterface NamePillProps {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n enableDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}\n\nconst NamePill: ReturnType<typeof observer<NamePillProps>> = observer(\n (props: NamePillProps) => {\n const {\n instanceId,\n displayName,\n anyIsDragging,\n enableDragging,\n type,\n isVisible,\n } = props;\n\n const editStore = getEditStore();\n\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n\n const instancesCount =\n widgetMeta?.sourceId &&\n editStore.runtimeEntitiesManager.widgets.getSourceIdCount(\n widgetMeta.sourceId,\n );\n\n const isDraggable =\n enableDragging &&\n widgetMeta?.type &&\n isEntityDraggable({\n type: widgetMeta.type,\n directParentInstanceId: widgetMeta.directParentInstanceId,\n instancesCount: instancesCount ?? 0,\n isRoot: widgetMeta.isRoot,\n });\n\n if (isDraggable) {\n return (\n <DraggableWrapper\n instanceId={instanceId}\n displayName={displayName}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n } else {\n return (\n <NamePillDiv\n displayName={displayName}\n instanceId={instanceId}\n anyIsDragging={anyIsDragging}\n type={type}\n isVisible={isVisible}\n />\n );\n }\n },\n);\n\nexport default NamePill;\n","import {\n TooltipProvider,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n Root as TooltipRoot,\n} from \"@radix-ui/react-tooltip\";\nimport {\n AiContextMode,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport { getWidgetRectAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport AiStarsIcon from \"../assets/ai-stars.svg\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport NamePill from \"./interaction-rect-name-pill.js\";\n\nexport function InteractionRectActions(props: {\n instanceId: SbInstance;\n displayName: string;\n anyIsDragging: boolean;\n enableDragging: boolean;\n type: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n isVisible?: boolean;\n}) {\n const {\n instanceId,\n displayName,\n anyIsDragging,\n enableDragging,\n type,\n isVisible,\n } = props;\n\n const isPrimaryInstanceId = useObserverMemo(() => {\n const focusedInstanceId = getEditStore().ui.getFocusedInstanceId();\n const selectedInstanceIds = getEditStore().ui.getSelectedInstanceIds();\n\n if (type === \"SELECTED\") {\n return selectedInstanceIds.includes(instanceId);\n } else if (type === \"FOCUSED\") {\n return focusedInstanceId === instanceId;\n } else {\n return true;\n }\n }, [type, instanceId]);\n\n if (!isPrimaryInstanceId) {\n return null;\n }\n\n const handleAddToChat = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (sourceId) {\n editorBridge.addComponentToAiContext(sourceId, instanceId);\n }\n };\n\n const aiContextMode = getEditStore().ai.getAiContextMode();\n const isAiTaggingEnabled = getEditStore().ai.getIsTaggingEnabled();\n\n const shouldHideActions = !isPrimaryInstanceId;\n\n const shouldShowAddToChatButton =\n isAiTaggingEnabled &&\n (aiContextMode === AiContextMode.SILENT ||\n (aiContextMode === AiContextMode.HIGHLIGHT && type !== \"TARGETED\"));\n\n const shouldShowAiPurplePill =\n isAiTaggingEnabled &&\n (aiContextMode === AiContextMode.AUTO_SELECT ||\n (aiContextMode === AiContextMode.HIGHLIGHT && type === \"TARGETED\"));\n\n return (\n <div\n className={`sb-edit-interaction-rect-actions ${shouldShowAiPurplePill ? \"sb-edit-actions-target-mode\" : \"\"}`}\n data-sb-actions-id={instanceId}\n style={\n {\n ...(shouldHideActions ? { display: \"none !important\" } : {}),\n position: \"absolute\",\n bottom: \"anchor(top)\",\n right: \"anchor(right)\",\n positionAnchor: getWidgetRectAnchorName(instanceId),\n visibility: anyIsDragging ? \"hidden\" : \"visible\",\n marginTop: \"1px\",\n paddingBottom: \"1px\",\n zIndex: Layers.namePill,\n display: \"flex\",\n gap: \"2px\",\n } as React.CSSProperties\n }\n >\n {shouldShowAddToChatButton && (\n <TooltipProvider>\n <TooltipRoot>\n <TooltipTrigger asChild>\n <button\n aria-label=\"Add to chat\"\n className=\"sb-edit-add-to-chat-button\"\n onClick={handleAddToChat}\n >\n <AiStarsIcon />\n </button>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 8px\",\n borderRadius: \"6px\",\n fontSize: \"12px\",\n lineHeight: \"1.5\",\n boxShadow:\n \"0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05)\",\n border: \"none\",\n zIndex: 1070,\n }}\n sideOffset={5}\n >\n Add to chat\n </TooltipContent>\n </TooltipPortal>\n </TooltipRoot>\n </TooltipProvider>\n )}\n <NamePill\n instanceId={instanceId}\n displayName={displayName}\n anyIsDragging={anyIsDragging}\n enableDragging={enableDragging}\n type={type}\n isVisible={isVisible}\n />\n </div>\n );\n}\n","import { throttle } from \"lodash\";\nimport { useMemo, useCallback } from \"react\";\nimport styled from \"styled-components\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport { getWidgetRectAnchorName } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport { useResizeCapabilities } from \"../resize-capabilities.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nconst HandlesWrapper = styled.div`\n z-index: ${Layers.resizer};\n position: absolute;\n top: anchor(top);\n left: anchor(left);\n right: anchor(right);\n bottom: anchor(bottom);\n pointer-events: none;\n`;\n\nexport const InteractionRectHandles = (props: {\n instanceId: SbInstance;\n isDragging: boolean;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n}) => {\n const { instanceId, isDragging, selectionType } = props;\n const { canResizeWidth, canResizeHeight } = useResizeCapabilities(instanceId);\n\n const throttledResizeWidget = useMemo(\n () =>\n throttle((e: PointerEvent) => {\n rootStore.editStore?.ui.resizing.resizeWidget(\n e.clientX,\n e.clientY,\n instanceId,\n canResizeWidth,\n canResizeHeight,\n );\n }, 30),\n [instanceId, canResizeWidth, canResizeHeight],\n );\n\n const handlePointerMove = useCallback(\n (e: PointerEvent) => {\n throttledResizeWidget(e);\n },\n [throttledResizeWidget],\n );\n\n const handlePointerUp = useCallback(() => {\n rootStore.editStore?.ui.resizing.applyResize(instanceId);\n\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerMove, instanceId]);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent, position: string) => {\n e.stopPropagation();\n e.preventDefault(); // Prevents selection of text on the browser\n\n // Only start resizing if the direction is allowed\n if ((position === \"left\" || position === \"right\") && !canResizeWidth) {\n return;\n }\n\n if ((position === \"top\" || position === \"bottom\") && !canResizeHeight) {\n return;\n }\n\n rootStore.editStore?.ui.resizing.startResizing(\n e.clientX,\n e.clientY,\n instanceId,\n position,\n );\n\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n },\n [\n instanceId,\n canResizeWidth,\n canResizeHeight,\n handlePointerMove,\n handlePointerUp,\n ],\n );\n\n const handlesToShow = useMemo(() => {\n if (isDragging || selectionType !== \"SELECTED\") {\n return [];\n }\n\n const handles = [\"top\", \"bottom\", \"left\", \"right\"];\n\n if (canResizeWidth && canResizeHeight) {\n return [\n ...handles,\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n ];\n }\n\n return handles;\n }, [isDragging, selectionType, canResizeWidth, canResizeHeight]);\n\n const additionalClassnames = useCallback(\n (pos: string) => {\n if (pos === \"left\" && canResizeWidth && !canResizeHeight) {\n return \"resize-handle-edge left-resize-handle-edge\";\n }\n\n if (pos === \"right\" && canResizeWidth && !canResizeHeight) {\n return \"resize-handle-edge right-resize-handle-edge\";\n }\n\n if (pos === \"top\" && !canResizeWidth && canResizeHeight) {\n return \"resize-handle-edge top-resize-handle-edge\";\n }\n\n if (pos === \"bottom\" && !canResizeWidth && canResizeHeight) {\n return \"resize-handle-edge bottom-resize-handle-edge\";\n }\n\n return \"\";\n },\n [canResizeWidth, canResizeHeight],\n );\n\n return (\n <HandlesWrapper\n style={\n {\n visibility: isDragging ? \"hidden\" : \"visible\",\n positionAnchor: getWidgetRectAnchorName(instanceId),\n } as CSSProperties\n }\n >\n {handlesToShow.map((pos) => (\n <div\n key={pos}\n className={`resize-handle ${pos}-resize-handle ${additionalClassnames(pos)}`}\n onPointerDown={(e) => handlePointerDown(e, pos)}\n />\n ))}\n </HandlesWrapper>\n );\n};\n","import { useEffect, useState, useMemo, useRef } from \"react\";\nimport { getWidgetNode } from \"../interaction-utils.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\n// Performance optimization constants\nexport const VIEWPORT_CULLING_CONFIG = {\n // Root margin for intersection observer - start tracking elements before they enter viewport\n rootMargin: \"100px\",\n // Maximum number of targeted rectangles to render regardless of viewport culling\n maxTargetedRects: 100,\n // Threshold for intersection (0 = any part visible, 1 = fully visible)\n threshold: 0,\n} as const;\n\n/**\n * Hook to track which components are currently visible in the viewport using Intersection Observer.\n * This is used for performance optimization to only render interaction rectangles for visible elements.\n *\n * The hook automatically enforces a maximum limit (VIEWPORT_CULLING_CONFIG.maxTargetedRects) to prevent\n * performance issues when too many components are targeted. Components that enter the viewport first\n * will be prioritized.\n *\n * @param components - Array of component objects with instanceId and sourceId to track for viewport intersection\n * @returns Set of component objects that are currently visible in the viewport (limited to maxTargetedRects)\n */\nexport const useViewportIntersection = (\n components: { instanceId: SbInstance; sourceId: SbElement }[],\n): Set<{ instanceId: SbInstance; sourceId: SbElement }> => {\n const [visibleComponents, setVisibleComponents] = useState<\n Set<{ instanceId: SbInstance; sourceId: SbElement }>\n >(new Set());\n\n const previousComponentsRef = useRef<string>(\"\");\n const stableComponentsRef = useRef<\n { instanceId: SbInstance; sourceId: SbElement }[]\n >([]);\n\n // Create a stable array that only changes when the content actually changes\n const currentComponentsKey = useMemo(() => {\n return components\n .slice()\n .sort((a, b) => a.instanceId.localeCompare(b.instanceId))\n .map((c) => `${c.instanceId}:${c.sourceId}`)\n .join(\",\");\n }, [components]);\n\n if (currentComponentsKey !== previousComponentsRef.current) {\n previousComponentsRef.current = currentComponentsKey;\n stableComponentsRef.current = components\n .slice()\n .sort((a, b) => a.instanceId.localeCompare(b.instanceId));\n }\n\n useEffect(() => {\n const stableComponents = stableComponentsRef.current;\n\n // Clear visible components when components change\n setVisibleComponents(new Set());\n\n if (stableComponents.length === 0) {\n return;\n }\n\n // Create a map to quickly look up component objects by instanceId\n const componentMap = new Map<\n SbInstance,\n { instanceId: SbInstance; sourceId: SbElement }\n >();\n stableComponents.forEach((component) => {\n componentMap.set(component.instanceId, component);\n });\n\n const observer = new IntersectionObserver(\n (entries) => {\n setVisibleComponents((prevVisible) => {\n const newVisible = new Set(prevVisible);\n\n entries.forEach((entry) => {\n const instanceId = entry.target.getAttribute(\n \"data-intersection-instance-id\",\n ) as SbInstance;\n const component = componentMap.get(instanceId);\n\n if (component) {\n if (entry.isIntersecting) {\n // Only add if we haven't reached the maximum limit\n if (\n newVisible.size < VIEWPORT_CULLING_CONFIG.maxTargetedRects\n ) {\n newVisible.add(component);\n }\n } else {\n // Remove the component from the set by finding the matching one\n const toRemove = Array.from(newVisible).find(\n (c) => c.instanceId === instanceId,\n );\n if (toRemove) {\n newVisible.delete(toRemove);\n }\n }\n }\n });\n\n return newVisible;\n });\n },\n {\n rootMargin: VIEWPORT_CULLING_CONFIG.rootMargin,\n threshold: VIEWPORT_CULLING_CONFIG.threshold,\n },\n );\n\n // Find and observe elements for each component\n stableComponents.forEach((component) => {\n const element = getWidgetNode(component.instanceId);\n\n if (element) {\n // Add a data attribute to track which instance this element represents\n element.setAttribute(\n \"data-intersection-instance-id\",\n component.instanceId,\n );\n observer.observe(element);\n }\n });\n\n return () => {\n observer.disconnect();\n // Clean up data attributes\n stableComponents.forEach((component) => {\n const element = getWidgetNode(component.instanceId);\n if (element) {\n element.removeAttribute(\"data-intersection-instance-id\");\n }\n });\n };\n }, [currentComponentsKey]); // Use the stable key\n\n return visibleComponents;\n};\n","import {\n AiContextMode,\n type SbElement,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport React, { useMemo } from \"react\";\nimport { useObserverMemo } from \"../../lib/hooks/use-observer-memo.js\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { Layers } from \"../../lib/user-facing/layers.js\";\nimport {\n getWidgetAnchorName,\n getWidgetRectAnchorName,\n} from \"../../lib/utils/widget-wrapper-naming.js\";\nimport {\n EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH,\n EXTENDED_CLICKABLE_ANCHOR_CSS,\n} from \"../extended-clickable-area.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport { InteractionRectActions } from \"./interaction-rect-actions.jsx\";\nimport { InteractionRectHandles } from \"./interaction-rect-handles.jsx\";\nimport { useViewportIntersection } from \"./use-viewport-intersection.js\";\nimport type { RootType } from \"./interaction-layer.jsx\";\nimport type { IdentifierInfo } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type { CSSProperties } from \"react\";\n\ntype SelectionInfo = {\n sourceId: SbElement;\n instanceId: SbInstance;\n displayName: string;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"TARGETED\";\n type: string | undefined;\n isVisible?: boolean;\n};\n\nexport const isWidgetInCurrentLayer = ({\n instanceId,\n rootType,\n rootInstanceId,\n}: {\n instanceId: SbInstance;\n rootType: RootType;\n rootInstanceId: SbInstance;\n}) => {\n return (\n getEditStore().runtimeEntitiesManager.getClosestAncestorByType(\n instanceId,\n rootType,\n )?.instanceId === rootInstanceId\n );\n};\n\nexport const useWidgetErrors = (params: {\n widgetScopesToNamesToIds: Record<\n string,\n Record<string, Record<SbInstance, IdentifierInfo>>\n >;\n rootType: RootType;\n rootInstanceId: SbInstance;\n scopeId: string;\n}): Record<SbInstance, { name: string; error: string }> => {\n const { widgetScopesToNamesToIds, rootType, rootInstanceId, scopeId } =\n params;\n const namesToIds = widgetScopesToNamesToIds[scopeId];\n const widgetsWithErrors = useObserverMemo(() => {\n if (!namesToIds) return {};\n const duplicatedNames = Object.entries(namesToIds).filter(\n ([_name, ids]) => {\n const idsArr = Object.keys(ids) as SbInstance[];\n return (\n idsArr.length > 1 &&\n idsArr.every((id) => {\n const widgetMeta =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(id);\n return widgetMeta?.isSbComponent;\n })\n );\n },\n );\n return duplicatedNames.reduce(\n (acc, [name, ids]) => {\n (Object.keys(ids) as SbInstance[]).forEach((id) => {\n if (\n isWidgetInCurrentLayer({\n instanceId: id,\n rootType,\n rootInstanceId,\n })\n ) {\n acc[id] = {\n name,\n error: \"NAME_CONFLICT\",\n };\n }\n });\n return acc;\n },\n {} as Record<SbInstance, { name: string; error: string }>,\n );\n }, [namesToIds, rootType, rootInstanceId]);\n\n return widgetsWithErrors;\n};\n\n// TODO (alex): show different rects for sourceId and instanceId - for now just using instanceId\nexport const useSelectionElements = (params: {\n focusedSourceId: SbElement | null;\n selectedSourceIds: SbElement[];\n focusedInstanceId: SbInstance | null;\n selectedInstanceIds: SbInstance[];\n targetedSourceIds: SbElement[];\n rootType: RootType;\n rootId: SbInstance;\n aiContextMode: AiContextMode;\n}): SelectionInfo[] => {\n const {\n focusedInstanceId,\n selectedInstanceIds,\n targetedSourceIds,\n aiContextMode,\n rootId,\n } = params;\n\n const allTargetedComponents = useMemo(() => {\n const components: { instanceId: SbInstance; sourceId: SbElement }[] = [];\n targetedSourceIds.forEach((sourceId) => {\n const sourceInstanceIds =\n getEditStore().runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n components.push(\n ...sourceInstanceIds\n .filter((instanceId) =>\n doesInteractionLayerContainInstance(rootId, instanceId),\n )\n .map((instanceId) => ({ instanceId, sourceId })),\n );\n });\n return components;\n }, [targetedSourceIds, rootId]);\n\n const visibleTargetedComponents = useViewportIntersection(\n allTargetedComponents,\n );\n\n const selectionRects = useObserverMemo<SelectionInfo[]>(() => {\n // TODO https://linear.app/superblocks/issue/FE-687/figure-out-roots-having-parent-ids\n // filter out id that is not in current layer\n // const focusedSourceId = params.focusedSourceId\n // ? isWidgetInCurrentLayer({\n // sourceId: params.focusedSourceId,\n // rootType,\n // rootId,\n // })\n // ? params.focusedSourceId\n // : null\n // : null;\n // const selectedSourceIds = params.selectedSourceIds.filter((sourceId) =>\n // isWidgetInCurrentLayer({\n // sourceId,\n // rootType,\n // rootId,\n // }),\n // );\n\n const selectedRects: SelectionInfo[] = [];\n\n visibleTargetedComponents.forEach((component) => {\n const { type, displayName, isVisible } = selectDisplayNameAndVisibility(\n component.instanceId,\n );\n\n selectedRects.push({\n instanceId: component.instanceId,\n sourceId: component.sourceId,\n displayName,\n selectionType: \"TARGETED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n });\n\n selectedInstanceIds\n .filter((instanceId) =>\n doesInteractionLayerContainInstance(rootId, instanceId),\n )\n .forEach((instanceId) => {\n const { type, displayName, sourceId, isVisible } =\n selectDisplayNameAndVisibility(instanceId);\n if (sourceId && !targetedSourceIds.includes(sourceId)) {\n selectedRects.push({\n instanceId,\n sourceId,\n displayName,\n selectionType: \"SELECTED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n }\n });\n\n if (\n focusedInstanceId &&\n doesInteractionLayerContainInstance(rootId, focusedInstanceId) &&\n (aiContextMode === AiContextMode.AUTO_SELECT ||\n !selectedInstanceIds.includes(focusedInstanceId))\n ) {\n const { type, displayName, sourceId, isVisible } =\n selectDisplayNameAndVisibility(focusedInstanceId);\n\n if (sourceId) {\n selectedRects.push({\n instanceId: focusedInstanceId,\n sourceId,\n displayName,\n selectionType: \"FOCUSED\",\n type,\n isVisible,\n } satisfies SelectionInfo);\n }\n }\n return selectedRects;\n }, [\n focusedInstanceId,\n selectedInstanceIds,\n targetedSourceIds,\n aiContextMode,\n visibleTargetedComponents,\n rootId,\n ]);\n\n return selectionRects;\n};\n\nexport const InteractionRectTargetBorder = ({\n instanceId,\n}: {\n instanceId: SbInstance;\n}) => {\n return (\n <div\n className=\"sb-target-mode-border\"\n style={\n {\n positionAnchor: getWidgetAnchorName(instanceId),\n zIndex: Layers.focusedRect,\n } as CSSProperties\n }\n >\n <div className=\"sb-target-mode-border-top-right\" />\n <div className=\"sb-target-mode-border-top-left\" />\n <div className=\"sb-target-mode-border-bottom-right\" />\n <div className=\"sb-target-mode-border-bottom-left\" />\n </div>\n );\n};\n\nexport const InteractionRect = (props: {\n displayName: string;\n isDragging: boolean;\n instanceId: SbInstance;\n selectionType: \"SELECTED\" | \"FOCUSED\" | \"ERROR\" | \"TARGETED\";\n hideRectBorder?: boolean;\n isVisible?: boolean;\n type?: string;\n}) => {\n const { instanceId, isDragging, selectionType, isVisible, type } = props;\n\n const parentInstanceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n )?.parentInstanceId;\n\n const showExtendedClickArea =\n rootStore.componentRegistry.getEditorConfig(type ?? \"\")\n ?.hasExtendedClickArea && selectionType === \"FOCUSED\";\n\n const aiContextMode = getEditStore().ai.getAiContextMode();\n\n const selectionClass =\n selectionType === \"FOCUSED\"\n ? \"sb-edit-focus\"\n : selectionType === \"ERROR\"\n ? \"sb-edit-error\"\n : selectionType === \"TARGETED\"\n ? \"sb-edit-target\"\n : \"\";\n\n return (\n <>\n {parentInstanceId && selectionType === \"SELECTED\" && (\n <>\n <div\n className=\"sb-edit-selection-rect\"\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n visibility: isDragging ? \"hidden\" : \"visible\",\n anchorName: \"--widget-rect-\" + parentInstanceId,\n positionAnchor: \"--widget-\" + parentInstanceId,\n border: \"1px dashed #27bbff80\",\n ...(props.hideRectBorder ? { border: \"none\" } : {}),\n zIndex: Layers.selectedRect,\n } as any\n }\n />\n </>\n )}\n <div\n className={`sb-edit-selection-rect ${selectionClass} ${aiContextMode === AiContextMode.AUTO_SELECT ? \"sb-edit-target-mode\" : \"\"}`}\n style={\n {\n position: \"absolute\",\n top: \"anchor(top)\",\n left: \"anchor(left)\",\n right: \"anchor(right)\",\n bottom: \"anchor(bottom)\",\n ...(showExtendedClickArea ? EXTENDED_CLICKABLE_ANCHOR_CSS : {}),\n visibility: isDragging ? \"hidden\" : \"visible\",\n anchorName: getWidgetRectAnchorName(instanceId),\n positionAnchor: getWidgetAnchorName(instanceId),\n ...(props.hideRectBorder ? { border: \"none\" } : {}),\n zIndex:\n selectionType === \"FOCUSED\"\n ? Layers.focusedRect\n : Layers.selectedRect,\n } as any\n }\n />\n {showExtendedClickArea && (\n <div\n onClick={(ev) => {\n if (ev.altKey) {\n const sourceId =\n getEditStore().runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (sourceId) {\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n props.displayName,\n );\n }\n ev.stopPropagation();\n return;\n }\n getEditStore().ui.selectWidget(instanceId, ev.shiftKey === true);\n ev.stopPropagation();\n }}\n style={\n {\n position: \"absolute\",\n ...EXTENDED_CLICKABLE_ANCHOR_CSS,\n zIndex: 0,\n pointerEvents: \"auto\",\n positionAnchor: getWidgetAnchorName(instanceId),\n clipPath: EXTENDED_CLICKABLE_ANCHOR_CLIP_PATH,\n } as React.CSSProperties\n }\n />\n )}\n <InteractionRectHandles\n instanceId={instanceId}\n isDragging={isDragging}\n selectionType={selectionType}\n />\n {aiContextMode === AiContextMode.AUTO_SELECT ||\n aiContextMode === AiContextMode.HIGHLIGHT ? (\n selectionType === \"TARGETED\" ? (\n <InteractionRectTargetBorder instanceId={instanceId} />\n ) : null\n ) : null}\n <InteractionRectActions\n instanceId={instanceId}\n displayName={props.displayName}\n anyIsDragging={isDragging}\n enableDragging={selectionType !== \"ERROR\"}\n type={selectionType}\n isVisible={isVisible}\n />\n </>\n );\n};\n\nexport const selectDisplayNameAndVisibility = (\n instanceId: SbInstance,\n): {\n type: string | undefined;\n displayName: string;\n sourceId?: SbElement;\n isVisible?: boolean;\n} => {\n const meta =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n const sourceId = meta?.sourceId;\n const type = meta?.type;\n\n const widgetName = rootStore.nameManager.getWidgetName(instanceId);\n if (!widgetName || widgetName.isAnonymous) {\n return { type, displayName: type ?? \"Unknown\", sourceId };\n }\n\n return {\n type,\n displayName: widgetName.value,\n sourceId,\n isVisible: meta?.props?.isVisible as boolean | undefined,\n };\n};\n","import { INSTANCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback } from \"react\";\nimport { useEffect } from \"react\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { throttle } from \"../../lib/internal-details/lib/throttle.js\";\nimport { useScope } from \"../../lib/internal-details/scope/scope-context.jsx\";\nimport {\n CANVAS_ROOT_ID,\n PORTAL_ROOT_ID,\n} from \"../../lib/user-facing/constants.js\";\nimport { isComponentTypeDetached } from \"../../lib/utils/is-component-type-detached.js\";\nimport { getEditWrapperIdWithType } from \"../../lib/utils/widget-wrapper-naming.js\";\nimport DropLayer from \"../dnd/drop-layer.jsx\";\nimport { EXTENDED_CLICKABLE_AREA_DELTA } from \"../extended-clickable-area.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport {\n InteractionRect,\n useSelectionElements,\n useWidgetErrors,\n} from \"./interaction-rect.jsx\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nexport type RootType = \"App\" | \"Page\" | string;\n\nconst calculateWidgetsAtCursor = (params: {\n x: number;\n y: number;\n rootType: RootType;\n rootElement: HTMLElement | null;\n delta?: { x: number; y: number };\n}) => {\n let elements = document.elementsFromPoint(params.x, params.y);\n if (params.delta) {\n elements = [\n ...document.elementsFromPoint(\n params.x - params.delta.x,\n params.y - params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x + params.delta.x,\n params.y + params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x - params.delta.x,\n params.y + params.delta.y,\n ),\n ...document.elementsFromPoint(\n params.x + params.delta.x,\n params.y - params.delta.y,\n ),\n ];\n }\n const hoveredPills: SbInstance[] = [];\n const hoveredActual: SbInstance[] = [];\n\n new Set(elements).forEach((element) => {\n if (\n params.rootType &&\n params.rootElement &&\n !params.rootElement.contains(element)\n ) {\n return; // Skip elements not within the rootElement\n }\n const idFromActual = element.getAttribute(INSTANCE_ID_ATTRIBUTE);\n if (idFromActual) {\n hoveredActual.push(idFromActual as SbInstance);\n } else {\n const idFromPill = element.getAttribute(\"data-sb-actions-id\");\n if (idFromPill) {\n hoveredPills.push(idFromPill as SbInstance);\n }\n }\n });\n\n return {\n hoveredPills,\n hoveredActual,\n };\n};\n\nfunction getFocusedWidget(\n event: MouseEvent,\n rootType: RootType,\n rootElement: HTMLElement | null,\n editStore: EditStore,\n isExtended: boolean,\n): SbInstance | null {\n if (!rootElement) {\n return null;\n }\n\n const { hoveredPills, hoveredActual } = calculateWidgetsAtCursor({\n x: event.clientX,\n y: event.clientY,\n rootType,\n rootElement,\n delta: isExtended\n ? { x: EXTENDED_CLICKABLE_AREA_DELTA, y: EXTENDED_CLICKABLE_AREA_DELTA }\n : undefined,\n });\n\n const instanceIds = [...hoveredPills, ...hoveredActual];\n const focusedWidget =\n instanceIds.find((id) => {\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(id);\n const hasExtendedClickArea = rootStore.componentRegistry.getEditorConfig(\n widgetMeta?.type ?? \"\",\n )?.hasExtendedClickArea;\n\n return widgetMeta && (isExtended === false || hasExtendedClickArea);\n }) ?? null;\n\n if (focusedWidget) {\n return focusedWidget;\n }\n return null;\n}\n\nfunction useWidgetHover(rootType: RootType) {\n useEffect(() => {\n const rootElement = document.getElementById(\n rootType === \"App\" || rootType === \"Page\"\n ? CANVAS_ROOT_ID\n : PORTAL_ROOT_ID,\n );\n const editStore = getEditStore();\n\n const handleMouseMove = (event: MouseEvent) => {\n // Try to focus on components with \"extended\" focus area first\n const focusedWidgetExtended = getFocusedWidget(\n event,\n rootType,\n rootElement,\n editStore,\n true,\n );\n if (focusedWidgetExtended) {\n editStore.ui.setFocusedInstanceId(focusedWidgetExtended);\n } else {\n // If no \"extended\" focus area, try to focus on components with \"normal\" focus area\n const focusedWidget = getFocusedWidget(\n event,\n rootType,\n rootElement,\n editStore,\n false,\n );\n if (focusedWidget) {\n editStore.ui.setFocusedInstanceId(focusedWidget);\n }\n }\n };\n\n const throttledHandleMouseMove = throttle(handleMouseMove, 25);\n const handleMouseLeave = () => {\n throttledHandleMouseMove.cancel();\n editStore.ui.setFocusedSourceId(null);\n editStore.ui.setFocusedInstanceId(null);\n };\n\n rootElement?.addEventListener(\"mousemove\", throttledHandleMouseMove);\n rootElement?.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n rootElement?.removeEventListener(\"mousemove\", throttledHandleMouseMove);\n rootElement?.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, [rootType]);\n}\n\nconst InteractionLayer = observer(\n (props: {\n rootType: RootType;\n rootInstanceId: SbInstance;\n rootName?: string;\n }) => {\n useWidgetHover(props.rootType);\n\n const { scopeId } = useScope();\n const editStore = getEditStore();\n\n const isActiveRootInstance =\n editStore.interactionLayerManager.activeRootInstanceId ===\n props.rootInstanceId;\n const isActive =\n isActiveRootInstance ||\n (editStore.interactionLayerManager.activeRootInstanceId === undefined &&\n (props.rootType === \"App\" || props.rootType === \"Page\"));\n\n const selectedElements = useSelectionElements({\n focusedSourceId: editStore.ui.getFocusedSourceId(),\n selectedSourceIds: editStore.ui.getSelectedSourceIds(),\n focusedInstanceId: editStore.ui.getFocusedInstanceId(),\n selectedInstanceIds: editStore.ui.getSelectedInstanceIds(),\n targetedSourceIds: editStore.ai.getTargetedComponents(),\n aiContextMode: editStore.ai.getAiContextMode(),\n rootType: props.rootType,\n rootId: props.rootInstanceId,\n });\n\n const widgetWithErrors = useWidgetErrors({\n widgetScopesToNamesToIds: rootStore.nameManager.scopeToNameToIds,\n rootType: props.rootType,\n rootInstanceId: props.rootInstanceId,\n scopeId,\n });\n\n const handleCanvasClick = useCallback(() => {\n editorBridge.canvasClicked();\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"click\", handleCanvasClick, true);\n return () => {\n window.removeEventListener(\"click\", handleCanvasClick, true);\n };\n }, [handleCanvasClick]);\n\n const isAiEditing = editStore.ai.getIsEditing();\n\n if (!isActive || isAiEditing) {\n return null;\n }\n\n // We handle detached components (e.g: Modal, slideouts) differently\n const interactionRectsForSelectedElements = selectedElements\n .filter((info) => {\n const id = getEditWrapperIdWithType(info.instanceId, info.type);\n const element = document.querySelector(`[data-sb-selector=\"${id}\"]`);\n return !isComponentTypeDetached(info.type) && element != null;\n })\n .map((info, index) => {\n return (\n <InteractionRect\n key={info.instanceId + info.selectionType + index}\n isDragging={editStore.ui.dnd.isDragging}\n {...info}\n />\n );\n });\n\n // If the component is detached, we always show if `isActive`, regardless of selection state\n const interactionRectIfDetachedComponent = isComponentTypeDetached(\n props.rootType,\n ) ? (\n <InteractionRect\n key={props.rootInstanceId}\n isDragging={false}\n selectionType=\"FOCUSED\"\n instanceId={props.rootInstanceId}\n displayName={props.rootName ?? \"Unknown\"}\n hideRectBorder={false}\n />\n ) : null;\n\n return (\n <>\n <div className=\"sb-interaction-layer-wrapper\">\n {interactionRectsForSelectedElements}\n {interactionRectIfDetachedComponent}\n {Object.entries(widgetWithErrors).map(([id, { name }]) => (\n <InteractionRect\n key={id}\n isDragging={false}\n selectionType=\"ERROR\"\n displayName={name}\n instanceId={id as SbInstance}\n />\n ))}\n\n <DropLayer rootInstanceId={props.rootInstanceId} />\n </div>\n </>\n );\n },\n);\n\nexport default InteractionLayer;\n","import {\n Dim,\n isDimension,\n PROCESSED_TRANSACTIONS_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n isBindingString,\n isBindingEqual,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport _ from \"lodash\";\nimport React, { useEffect, useMemo } from \"react\";\nimport useStableEffect from \"../lib/hooks/use-stable-effect.js\";\nimport {\n isName,\n isNameEqual,\n} from \"../lib/internal-details/lib/evaluator/names.js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { useScope } from \"../lib/internal-details/scope/scope-context.jsx\";\nimport type { UseStableEffectOptions } from \"../lib/hooks/use-stable-effect.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => isBindingString(a), isBindingEqual],\n [(a) => isName(a), isNameEqual],\n [(a) => isDimension(a), Dim.isEqual],\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => _.isEqual(a, b)],\n ],\n ignoreKeys: [\"children\", PROCESSED_TRANSACTIONS_ATTRIBUTE],\n};\n\nexport function EditorRoot(props: {\n type: string;\n identifier: IdentifierInfo;\n children: any;\n widgetProps: Record<string, unknown>;\n [key: string]: unknown;\n}) {\n const { type, identifier, children, widgetProps } = props;\n\n const transactions = widgetProps[\n PROCESSED_TRANSACTIONS_ATTRIBUTE\n ] as string[];\n // IMPORTANT: identifier.scopeId is not the correct fallback. (it is 99% of the time though)\n const { scopeId: fallbackScopeId } = useScope();\n\n useStableEffect(\n () => {\n if (props.widgetProps[ROOT_WIDGET_ATTRIBUTE]) {\n rootStore.editStore?.operationManager.clearPendingTransactions(\n transactions,\n );\n }\n },\n {\n instanceId: identifier.instanceId,\n fallbackScopeId,\n transactions,\n },\n stableEffectOptions,\n );\n\n const isRoot =\n type === NATIVE_COMPONENT_TYPES.App || type === NATIVE_COMPONENT_TYPES.Page;\n\n return (\n <EditorRootProvider\n instanceId={identifier.instanceId}\n sourceId={identifier.sourceId}\n isRoot={isRoot}\n >\n {children}\n </EditorRootProvider>\n );\n}\n\ntype EditorRootContext = {\n instanceId: SbInstance;\n sourceId: SbElement;\n isRoot: boolean;\n};\n\nconst EditorRootContext = React.createContext<EditorRootContext | undefined>(\n undefined,\n);\n\nfunction EditorRootProvider({\n children,\n instanceId,\n sourceId,\n isRoot,\n}: {\n children: React.ReactNode;\n} & EditorRootContext) {\n const context = useMemo(\n () => ({\n instanceId,\n sourceId,\n isRoot,\n }),\n [instanceId, sourceId, isRoot],\n );\n\n useEffect(() => {\n rootStore.editStore?.ui.addRootInstanceId(\n context.instanceId,\n context.sourceId,\n context.isRoot,\n );\n return () => {\n rootStore.editStore?.ui.removeRootInstanceId(context.instanceId);\n };\n }, [context]);\n\n return (\n <EditorRootContext.Provider value={context}>\n {children}\n </EditorRootContext.Provider>\n );\n}\n\nexport function useEditorRootContext() {\n const context = React.useContext(EditorRootContext);\n return context;\n}\n\nexport function useIsCurrentRoot() {\n const context = useEditorRootContext();\n return context?.isRoot;\n}\n","import type { SbComponentProps } from \"../user-facing/component-base/sb-component\";\nimport type { SOURCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport type { SbElement } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ntype ChildFunction = Function;\n\nexport type StackChildElement = React.ReactElement<\n SbComponentProps & {\n key?: React.Key;\n [SOURCE_ID_ATTRIBUTE]?: SbElement;\n }\n> & {\n type: { sbType: string };\n};\nexport const superblocksComponentSymbol = Symbol(\"SuperblocksComponent\");\nexport function isSbComponent(\n child: ReactNode | ChildFunction,\n): child is StackChildElement {\n return (\n typeof child === \"object\" &&\n (child as any).type?.isSb === superblocksComponentSymbol\n );\n}\n","import React from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport function getValidChildrenNodes(children: ReactNode): ReactNode[] {\n if (Array.isArray(children)) {\n return children.filter(isValidReactNode);\n }\n\n if (\n typeof children === \"object\" &&\n children != null &&\n typeof (children as any)[Symbol.iterator] === \"function\"\n ) {\n return Array.from(children as any).filter(isValidReactNode);\n }\n\n if (isValidReactNode(children)) {\n return [children];\n }\n\n return [];\n}\n\nexport function isValidReactNode(\n element: unknown,\n): element is ReactNode | ReactNode[] {\n if (typeof element === \"string\") {\n return true;\n }\n\n if (\n typeof element === \"object\" &&\n element != null &&\n typeof (element as any)[Symbol.iterator] === \"function\"\n ) {\n return Array.from(element as any).every(isValidReactNode);\n }\n\n if (Array.isArray(element)) {\n return element.every(isValidReactNode);\n }\n return (\n React.isValidElement(element) ||\n typeof element !== \"object\" ||\n element === null\n );\n}\n","import {\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport _ from \"lodash\";\nimport React from \"react\";\nimport { useObserverMemo } from \"../lib/hooks/use-observer-memo.js\";\nimport useStableEffect from \"../lib/hooks/use-stable-effect.js\";\nimport { isSbComponent } from \"../lib/internal-details/is-sb-component.jsx\";\nimport { getValidChildrenNodes } from \"../lib/utils/children.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n ChildFunction,\n InternalChildElement,\n InternalRuntimeWidgetMeta,\n} from \"./features/runtime-widgets-manager\";\nimport type { UseStableEffectOptions } from \"../lib/hooks/use-stable-effect.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => _.isEqual(a, b)],\n ],\n cold: true,\n};\n\nexport function useRuntimeEditTracking(props: {\n parentInstanceId?: SbInstance;\n directParentInstanceId?: SbInstance;\n identifier: IdentifierInfo;\n type: string;\n children: React.ReactNode[] | ChildFunction;\n widgetProps: Record<string, unknown>;\n rootInstanceId?: SbInstance;\n interactionLayerInstanceId?: SbInstance;\n indexWithinParent?: number;\n isRoot: boolean;\n isInsideRoot: boolean;\n}) {\n const {\n parentInstanceId,\n directParentInstanceId,\n identifier,\n type,\n children,\n widgetProps,\n rootInstanceId,\n interactionLayerInstanceId,\n indexWithinParent,\n isRoot,\n isInsideRoot,\n } = props;\n\n const { children: _children, ...rest } = widgetProps;\n\n // Props registration\n useStableEffect(\n () => {\n const widgetMeta: InternalRuntimeWidgetMeta = {\n instanceId: identifier.instanceId,\n isSbComponent: true,\n isOptimistic: false,\n scopeId: identifier.scopeId,\n type,\n name: identifier.name,\n props: rest,\n parentInstanceId,\n directParentInstanceId,\n sourceId: identifier.sourceId,\n rootInstanceId,\n interactionLayerInstanceId,\n isRoot,\n isInsideRoot,\n };\n\n getEditStore().runtimeEntitiesManager.widgets.setWidgetMeta(\n identifier.instanceId,\n widgetMeta,\n );\n },\n {\n instanceId: identifier.instanceId,\n name: identifier.name,\n scopeId: identifier.scopeId,\n sourceId: identifier.sourceId,\n parentInstanceId,\n directParentInstanceId,\n rootInstanceId,\n interactionLayerInstanceId,\n type,\n rest,\n },\n stableEffectOptions,\n );\n\n // Updating own position\n useStableEffect(\n () => {\n if (indexWithinParent !== undefined && directParentInstanceId) {\n getEditStore().runtimeEntitiesManager.widgets.setWidgetChildIndex({\n directParentInstanceId,\n index: indexWithinParent,\n instanceId: identifier.instanceId,\n });\n }\n },\n {\n instanceId: identifier.instanceId,\n indexWithinParent,\n },\n {\n cold: true,\n },\n );\n\n const childrenIsFunction = typeof children === \"function\";\n const { metaChildren, reactChildren } = useObserverMemo<{\n metaChildren?: Array<InternalChildElement>;\n reactChildren?: Array<ReactNode>;\n }>(() => {\n const metaChildren: Array<InternalChildElement> = [];\n const reactChildren: Array<ReactNode> = [];\n\n if (childrenIsFunction) {\n return {};\n }\n\n const validChildrenArray = React.Children.toArray(\n getValidChildrenNodes(children),\n );\n\n validChildrenArray.forEach((child, index) => {\n if (typeof child === \"string\" || typeof child === \"number\") {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n });\n reactChildren.push(child);\n } else if (isSbComponent(child)) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: true,\n });\n const clonedChild = React.cloneElement(child, {\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n [WIDGET_INDEX_WITHIN_PARENT]: index,\n key: `${child.props[SOURCE_ID_ATTRIBUTE]}-${child.key}`,\n } as any);\n reactChildren.push(clonedChild);\n } else if (typeof child === \"function\") {\n metaChildren.push({\n isSupportedElement: false,\n isSbComponent: false,\n value: child,\n });\n reactChildren.push(child);\n } else if (\n React.isValidElement(child) &&\n child.props[SOURCE_ID_ATTRIBUTE]\n ) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n // value: child,\n });\n reactChildren.push(\n React.cloneElement(child, {\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n [WIDGET_INDEX_WITHIN_PARENT]: index,\n } as any),\n ); // TODO this needs to be wrapped in sb component?\n } else if (React.isValidElement(child)) {\n metaChildren.push({\n isSupportedElement: true,\n isSbComponent: false,\n });\n reactChildren.push(child);\n }\n });\n\n return {\n metaChildren,\n reactChildren,\n };\n }, [children, childrenIsFunction, identifier.instanceId]);\n\n // Updating raw children\n useStableEffect(\n () => {\n if (metaChildren) {\n getEditStore().runtimeEntitiesManager.widgets.setWidgetChildren(\n identifier.instanceId,\n metaChildren,\n );\n }\n },\n {\n metaChildren,\n },\n {\n cold: true,\n },\n );\n\n // TODO what to do on unmount?\n\n return reactChildren ?? children;\n}\n","import polyfill from \"@oddbird/css-anchor-positioning/fn\";\n\nimport {\n INSTANCE_ID_ATTRIBUTE,\n NO_CONTENT_ATTRIBUTE,\n ROOT_WIDGET_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { CSS_CLASSES } from \"../lib/internal-details/css-constants.js\";\nimport { DraggablePropsProvider } from \"../lib/internal-details/draggable-context-provider.js\";\n\nimport { EditorReactiveComponent } from \"../lib/internal-details/editor-reactive-component.js\";\nimport { Layers } from \"../lib/user-facing/layers.js\";\nimport { styleAsClass } from \"../lib/user-facing/styling/style-as-class.js\";\nimport {\n getEditWrapperId,\n getWidgetAnchorName,\n} from \"../lib/utils/widget-wrapper-naming.js\";\nimport InvisiblePattern from \"./assets/canvasInvisible.svg\";\nimport DroppableWidget from \"./dnd/droppable-widget.jsx\";\nimport {\n isContentDraggable,\n isEntityDraggable,\n isEntityDroppable,\n} from \"./dnd/utils.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport { useRightClickMenu } from \"./hooks/use-right-click-menu.js\";\nimport {\n ParentIdentifierProvider,\n useParentIdentifier,\n} from \"./identifier-context.jsx\";\nimport {\n InteractionLayerProvider,\n useInteractionLayerContext,\n} from \"./interaction-layer/interaction-context.jsx\";\nimport InteractionLayer from \"./interaction-layer/interaction-layer.jsx\";\nimport { selectDisplayNameAndVisibility } from \"./interaction-layer/interaction-rect.js\";\nimport { EditorRoot, useEditorRootContext } from \"./roots.jsx\";\nimport { useRuntimeEditTracking } from \"./runtime-edit-tracking.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\nimport type { ChildFunction } from \"./features/runtime-widgets-manager.js\";\nimport type { IdentifierInfo } from \"../lib/internal-details/lib/features/name-manager.js\";\nimport type { StrictElementPassthroughProps } from \"../lib/user-facing/component-base/use-passthrough-props.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\nimport type { CSSProperties } from \"react\";\n\nconst VisibilityOverlayClass = styleAsClass`\n position: absolute;\n pointer-events: none;\n top: anchor(top);\n left: anchor(left);\n right: anchor(right);\n bottom: anchor(bottom);\n z-index: ${String(Layers.visibilityOverlay)};\n`;\n\nif (\n typeof window !== \"undefined\" &&\n typeof document.documentElement !== \"undefined\" &&\n !(\"anchorName\" in document.documentElement.style)\n) {\n polyfill();\n}\n\n// The variable --anchor-name is used in the CSS to set the anchor name for the widget\n// on the actual widget element.\nexport const createAnchorNameStyle = (props: {\n instanceId: SbInstance;\n}): React.CSSProperties | undefined => {\n return {\n \"--anchor-name\": getWidgetAnchorName(props.instanceId),\n } as CSSProperties;\n};\n\nconst EditWrapper = observer(function EditWrapper(props: {\n type: string;\n children: React.ReactNode[] | ChildFunction;\n widgetProps: Record<string, unknown>;\n component: React.FC<any>;\n identifier: IdentifierInfo;\n parentInstanceId?: SbInstance;\n directParentInstanceId?: SbInstance;\n indexWithinParent?: number;\n}): React.ReactElement {\n const identifier = props.identifier;\n if (!identifier) {\n throw new Error(\"Identifier is missing\");\n }\n\n const editStore = getEditStore();\n const editorRootContext = useEditorRootContext();\n\n const isInsideRoot = editorRootContext?.isRoot ?? false;\n const rootInstanceId = editorRootContext?.instanceId;\n\n const parentIdentifier = useParentIdentifier();\n\n const isRoot = ROOT_WIDGET_ATTRIBUTE in props.widgetProps;\n\n const { rootInstanceId: interactionLayerInstanceId } =\n useInteractionLayerContext();\n\n const children = useRuntimeEditTracking({\n parentInstanceId: parentIdentifier?.instanceId,\n directParentInstanceId: props.directParentInstanceId,\n identifier,\n type: props.type,\n children: props.children,\n widgetProps: props.widgetProps,\n rootInstanceId,\n interactionLayerInstanceId,\n indexWithinParent: props.indexWithinParent,\n isRoot,\n isInsideRoot,\n });\n\n const instancesCount =\n editStore.runtimeEntitiesManager.widgets.getSourceIdCount(\n identifier.sourceId,\n );\n\n const isDraggable = isEntityDraggable({\n type: props.type,\n directParentInstanceId: props.directParentInstanceId,\n instancesCount,\n isRoot,\n });\n const isDroppable = isEntityDroppable({\n type: props.type,\n });\n const disableDrag = !isDraggable || !isContentDraggable(props.type);\n\n const { onContextMenu } = useRightClickMenu({\n sourceId: props.identifier.sourceId,\n });\n\n const showVisibilityBackground =\n props.widgetProps.isVisible === false &&\n !editStore.ui.getSelectedSourceIds().includes(props.identifier.sourceId);\n\n const handleClick = useCallback(\n (ev: React.MouseEvent) => {\n // sometimes the user might not pass this in as we expect, which is their right, so we need to handle it\n const stopPropagation = () => {\n if (ev.stopPropagation) {\n ev.stopPropagation();\n }\n };\n\n const editStore = getEditStore();\n if (\n ev.altKey ||\n (editStore.ai.getIsTaggingEnabled() &&\n editStore.ai.shouldToggleComponentInAiContext())\n ) {\n const sourceId = props.identifier.sourceId;\n const instanceId = props.identifier.instanceId;\n const { displayName } = selectDisplayNameAndVisibility(instanceId);\n editorBridge.toggleComponentInAiContext(\n sourceId,\n instanceId,\n displayName,\n );\n stopPropagation();\n return;\n }\n\n editStore.ui.selectWidget(\n props.identifier.instanceId,\n ev.shiftKey === true,\n );\n stopPropagation();\n },\n [props.identifier.sourceId, props.identifier.instanceId],\n );\n\n const [dropTargetElem, setDropTargetElem] = useState<HTMLElement | null>(\n null,\n );\n\n const isEmpty = React.Children.count(children) === 0;\n\n const editorProps = useMemo(() => {\n const testProps = identifier.name.isAnonymous\n ? {}\n : { \"data-test\": `component-${identifier.name.value}` };\n const componentClassName = `${CSS_CLASSES.ANCHOR_NAME}`;\n const componentStyle = createAnchorNameStyle({\n instanceId: props.identifier.instanceId,\n });\n\n return {\n [INSTANCE_ID_ATTRIBUTE]: identifier.instanceId,\n className: componentClassName,\n style: componentStyle,\n [NO_CONTENT_ATTRIBUTE]: isEmpty,\n \"data-sb-selector\": getEditWrapperId(props.identifier.instanceId),\n // TODO: what if the user supplies their own onPointerDown, onPointerMove...? we need to merge all listeners\n onClick: handleClick,\n onContextMenu: onContextMenu,\n ...testProps,\n } satisfies StrictElementPassthroughProps;\n }, [\n identifier,\n handleClick,\n onContextMenu,\n props.identifier.instanceId,\n isEmpty,\n ]);\n\n const node = (\n <ParentIdentifierProvider identifier={identifier}>\n <EditorReactiveComponent\n Component={props.component}\n identifier={identifier}\n widgetProps={props.widgetProps}\n editorProps={editorProps}\n dropTargetRef={setDropTargetElem}\n showErrors\n >\n {showVisibilityBackground && (\n <div\n className={VisibilityOverlayClass}\n style={\n {\n background: `url(\"${InvisiblePattern}\")`,\n positionAnchor: getWidgetAnchorName(identifier.instanceId),\n } as CSSProperties\n }\n />\n )}\n {typeof children === \"function\" ? <>{children}</> : children}\n </EditorReactiveComponent>\n </ParentIdentifierProvider>\n );\n\n let content = isRoot ? (\n <EditorRoot\n identifier={identifier}\n type={props.type}\n widgetProps={props.widgetProps}\n >\n {node}\n </EditorRoot>\n ) : (\n node\n );\n\n if (isDraggable) {\n content = (\n <DraggablePropsProvider\n identifier={props.identifier}\n disableDrag={disableDrag}\n >\n {content}\n </DraggablePropsProvider>\n );\n }\n\n if (isDroppable) {\n content = (\n <DroppableWidget\n instanceId={props.identifier.instanceId}\n dropTargetElem={dropTargetElem}\n >\n {content}\n </DroppableWidget>\n );\n }\n\n if (props.type === \"App\" || props.type === \"Page\") {\n return (\n <>\n <InteractionLayerProvider instanceId={props.identifier.instanceId}>\n {content}\n </InteractionLayerProvider>\n <InteractionLayer\n rootType={props.type}\n rootInstanceId={props.identifier.instanceId}\n rootName={identifier.name.value}\n />\n </>\n );\n }\n return content;\n});\n\nexport default EditWrapper;\n","import { APCAcontrast, sRGBtoY } from \"apca-w3\";\nimport tinycolor from \"tinycolor2\";\nimport { colors } from \"../styling/colors.js\";\nimport {\n CODE_EDITOR_DARK_COLORS,\n CODE_EDITOR_LIGHT_COLORS,\n DARK_APP_BG,\n DARK_MODE_NEUTRALS,\n LIGHT_APP_BG,\n LIGHT_MODE_NEUTRALS,\n} from \"./constants.js\";\nimport type { UserDefinedTheme } from \"@superblocksteam/library-shared/types\";\n\nconst READABILITY_THRESHOLD = 20;\nconst CONTRAST_TEXT_THRESHOLD = 25;\nconst MAX_ITERATIONS = 10;\nconst PRIMARY_HIGHLIGHT_OPACITY = 0.08;\n\nfunction getRgbArrayFromHex(hex: string): [number, number, number] {\n // returns an array of numbers representing the rgb values of the hex color\n const color = tinycolor(hex);\n if (color.isValid()) {\n const rgb = color.toRgb();\n return [rgb.r, rgb.g, rgb.b];\n }\n return [0, 0, 0];\n}\n\nexport function chooseContrastTextColor(primaryColor: string) {\n // Decide contrast text on primary\n const whiteContrast = checkContrast(LIGHT_MODE_NEUTRALS[0], primaryColor);\n const darkContrast = checkContrast(DARK_MODE_NEUTRALS[0], primaryColor);\n const contrastText =\n // prefer white text on primary\n whiteContrast >= darkContrast - CONTRAST_TEXT_THRESHOLD\n ? LIGHT_MODE_NEUTRALS[0]\n : DARK_MODE_NEUTRALS[0];\n return contrastText;\n}\n\nfunction checkContrast(foreground: string, background: string) {\n const textColor = getRgbArrayFromHex(foreground);\n const backgroundColor = getRgbArrayFromHex(background);\n const contrastLc = APCAcontrast(sRGBtoY(textColor), sRGBtoY(backgroundColor));\n return Number(contrastLc) > 0 ? Number(contrastLc) : Number(contrastLc) * -1;\n}\n\nfunction adjustForReadability(foreground: string, background: string) {\n if (checkContrast(foreground, background) > READABILITY_THRESHOLD) {\n return foreground;\n }\n\n let iterations = 0;\n let fg = foreground;\n while (\n checkContrast(fg, background) < READABILITY_THRESHOLD &&\n iterations < MAX_ITERATIONS\n ) {\n // adjust text color to be lighter or darker\n if (tinycolor(fg).isDark()) {\n fg = tinycolor(fg).lighten(5).toHexString();\n } else {\n fg = tinycolor(fg).darken(5).toHexString();\n }\n iterations++;\n }\n return fg;\n}\n\nexport const getPrimaryVariants = (\n primaryColor: string,\n neutralColor?: string,\n) => {\n // Determine primary variants\n const shouldLighten = tinycolor(primaryColor).isDark();\n // Ensure that the primary value is readable on the background. adjust if needed\n const primary500 = neutralColor\n ? adjustForReadability(primaryColor, neutralColor)\n : primaryColor;\n const primary600 = shouldLighten\n ? tinycolor(primary500).lighten(10).toHexString()\n : tinycolor(primary500).darken(10).toHexString();\n const primary700 = shouldLighten\n ? tinycolor(primary600).lighten(5).toHexString()\n : tinycolor(primary600).darken(5).toHexString();\n return {\n primary500,\n primary600,\n primary700,\n };\n};\n\nexport function generateThemeColors({\n themePrimaryColor,\n palette,\n isDarkMode,\n}: {\n themePrimaryColor: string;\n isDarkMode: boolean;\n palette?: UserDefinedTheme[\"palette\"];\n}) {\n const primaryColor =\n palette?.[isDarkMode ? \"dark\" : \"light\"]?.primaryColor || themePrimaryColor;\n const appBackground =\n palette?.[isDarkMode ? \"dark\" : \"light\"]?.appBackgroundColor;\n // Base neutrals for light and dark modes\n const neutrals = isDarkMode ? DARK_MODE_NEUTRALS : LIGHT_MODE_NEUTRALS;\n\n // Determine primary variants\n const { primary500, primary600, primary700 } = getPrimaryVariants(\n primaryColor,\n neutrals[0],\n );\n\n const contrastText = chooseContrastTextColor(primary500);\n\n return {\n contrastText: contrastText,\n primary500: primary500,\n primary600: primary600,\n primary700: primary700,\n primaryHighlight: tinycolor\n .mix(primary500, neutrals[0], (1 - PRIMARY_HIGHLIGHT_OPACITY) * 100)\n .toHexString(),\n neutral: neutrals[0],\n neutral25: neutrals[1],\n neutral50: neutrals[2],\n neutral100: neutrals[3],\n neutral200: neutrals[4],\n neutral300: neutrals[5],\n neutral400: neutrals[6],\n neutral500: neutrals[7],\n neutral700: neutrals[8],\n neutral900: neutrals[9],\n appBackground: appBackground || (isDarkMode ? DARK_APP_BG : LIGHT_APP_BG),\n editor: isDarkMode ? CODE_EDITOR_DARK_COLORS : CODE_EDITOR_LIGHT_COLORS,\n // constants (not theme-dependent)\n danger: colors.DANGER,\n warning: colors.WARNING,\n info: colors.INFO,\n success: colors.SUCCESS,\n dangerLight: \"#fdc5c5\",\n };\n}\n","import { get } from \"lodash\";\nimport { getPrimaryVariants } from \"./generate-colors.js\";\nimport type {\n ColorBlock,\n GeneratedTheme,\n TextStyleBlock,\n Typographies,\n} from \"@superblocksteam/library-shared/types\";\n\n// TODO: replace with a faster clone function\nconst fastClone = (obj: any) => structuredClone(obj);\n\nconst generateColorBlock = (\n colorBlock: ColorBlock,\n options: {\n colors: GeneratedTheme[\"colors\"];\n defaultFontFamily: GeneratedTheme[\"fontFamily\"];\n },\n): ColorBlock => {\n const updatedColorBlock = { ...colorBlock };\n Object.keys(colorBlock).forEach((colorKey: string) => {\n const typedColorKey = colorKey as keyof ColorBlock;\n const generatedColor = get(options, colorBlock[typedColorKey] ?? \"\");\n updatedColorBlock[typedColorKey] =\n generatedColor || colorBlock[typedColorKey];\n });\n return updatedColorBlock;\n};\n\nexport const generateTypographies = (\n typographies: Typographies,\n options: {\n colors: GeneratedTheme[\"colors\"];\n defaultFontFamily: GeneratedTheme[\"fontFamily\"];\n },\n): Typographies => {\n // replace all colors of the format colors.colorName with the generated color\n const generatedTypographies = fastClone(typographies);\n Object.keys(generatedTypographies).forEach((key) => {\n const typedKey = key as keyof Typographies;\n const typography = generatedTypographies[typedKey] as TextStyleBlock;\n typography.textColor = generateColorBlock(typography.textColor, options);\n // for links specifically, we need to dynamically generate the hover & active colors based on the default color\n if (typedKey === \"link\") {\n const color = typography.textColor.default;\n const { primary600, primary700 } = getPrimaryVariants(color);\n typography.textColor.hover = primary600;\n typography.textColor.active = primary700;\n // legacy link styles did not set textTransform correctly to inherit\n typography.textTransform = \"inherit\";\n }\n if (typedKey === \"inputPlaceholder\") {\n // legacy apps did not have fontStyle, textTransform, and textDecoration set to inherit\n typography.fontStyle = \"inherit\";\n typography.textTransform = \"inherit\";\n typography.textDecoration = \"inherit\";\n }\n });\n\n return generatedTypographies;\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { ThemeMode } from \"@superblocksteam/library-shared/types\";\nimport { merge } from \"lodash\";\nimport tinycolor from \"tinycolor2\";\n\nimport {\n BASE_THEME_NEW_APPS,\n BOX_SHADOWS,\n BUTTON_PADDING,\n DROPDOWN_PADDING,\n INPUT_PADDING,\n KEY_VALUE_PADDING,\n KEY_VALUE_SPACING,\n} from \"./constants.js\";\nimport { generateThemeColors } from \"./generate-colors.js\";\nimport { generateTypographies } from \"./generate-typographies.js\";\n\nimport { getAvailableFontFamilies } from \"./typefaces/utils.jsx\";\nimport { getDefaultTypographies } from \"./utils.js\";\nimport type {\n BorderStyleBlock,\n GeneratedTheme,\n Padding,\n TextStyleBlock,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nconst prefersDarkMode = () => {\n if (\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ) {\n return true;\n }\n return false;\n};\n\nexport function generateTheme(\n userDefinedTheme: UserDefinedTheme,\n overrides?: Partial<GeneratedTheme>,\n overrideMode?: ThemeMode,\n): GeneratedTheme {\n const {\n typeFace,\n primaryColor,\n mode: storedMode,\n borderRadius,\n padding,\n palette,\n } = userDefinedTheme;\n const mode = overrideMode || storedMode;\n const isDarkMode =\n mode === ThemeMode.DARK || (mode === ThemeMode.AUTO && prefersDarkMode());\n const generatedColors = generateThemeColors({\n themePrimaryColor: primaryColor,\n palette,\n isDarkMode,\n });\n\n const defaultBorderStyle: BorderStyleBlock = {\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderColor: {\n default: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n borderRadius,\n };\n const generatedTypographies = generateTypographies(\n userDefinedTheme.typographies ??\n getDefaultTypographies(userDefinedTheme.version),\n {\n colors: generatedColors,\n defaultFontFamily: typeFace,\n },\n );\n const bodyTypeface: TextStyleBlock = generatedTypographies.body2;\n // For apps created without theme, the userDefinedTheme will always include padding of 16x12\n // If the app was initialized with theme, not all apps had padding set\n const defaultPadding: Padding = padding || BASE_THEME_NEW_APPS.padding;\n\n // used for things like table footer content, table filter menu, etc\n const builtinBodyTypeface: TextStyleBlock = {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"16px\",\n fontFamily: typeFace,\n textColor: {\n default: generatedColors.neutral700,\n },\n };\n const theme: GeneratedTheme = {\n version: 5, // TODO: remove this once we have a real version\n colors: generatedColors,\n fontFamily: typeFace,\n availableFonts: getAvailableFontFamilies(userDefinedTheme.availableFonts),\n borderRadius,\n mode: isDarkMode ? \"DARK\" : \"LIGHT\",\n spacing: userDefinedTheme.spacing,\n defaultBorder: defaultBorderStyle,\n padding: defaultPadding,\n builtinTypographies: {\n body: builtinBodyTypeface,\n system: {\n ...defaultBorderStyle,\n ...builtinBodyTypeface,\n textColor: {\n default: generatedColors.neutral400,\n },\n backgroundColor: {\n default: generatedColors.neutral25,\n },\n padding: {\n left: Dim.px(4),\n right: Dim.px(4),\n top: Dim.px(0),\n bottom: Dim.px(0),\n },\n },\n },\n typographies: generatedTypographies,\n buttons: {\n primary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.contrastText,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n boxShadow: {\n default: \"none\",\n hover: `0px 3px 8px 0px ${tinycolor(generatedColors.primary500)\n .setAlpha(0.32)\n .toRgbString()}`,\n },\n borderColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n },\n secondary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n backgroundColor: {\n default: \"transparent\",\n disabled: generatedColors.neutral100,\n hover: \"transparent\",\n active: \"transparent\",\n },\n borderColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n secondaryNeutral: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.neutral700,\n disabled: generatedColors.neutral300,\n hover: generatedColors.neutral900,\n active: generatedColors.neutral900,\n },\n backgroundColor: {\n default: \"transparent\",\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.neutral50,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral100,\n active: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n tertiary: {\n ...generatedTypographies.buttonLabel,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(1),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n hover: generatedColors.primary600,\n active: generatedColors.primary700,\n },\n backgroundColor: {\n default: \"transparent\",\n },\n borderColor: {\n default: \"transparent\",\n },\n boxShadow: {\n default: \"none\",\n },\n },\n system: {\n ...bodyTypeface,\n padding: BUTTON_PADDING,\n borderWidth: Dim.px(0),\n borderStyle: \"solid\",\n borderRadius,\n textColor: {\n default: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral25,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.neutral50,\n },\n borderColor: {\n default: \"transparent\",\n },\n boxShadow: {\n default: `inset 0 0 0 1px ${generatedColors.neutral100}`,\n },\n },\n },\n inputs: {\n input: {\n ...generatedTypographies.inputText,\n ...defaultBorderStyle,\n padding: INPUT_PADDING,\n textColor: {\n ...generatedTypographies.inputText.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary500,\n active: generatedColors.primary500,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n active: `0px 1px 3px 0px ${tinycolor(generatedColors.primary500)\n .setAlpha(0.24)\n .toRgbString()}`,\n },\n },\n switch: {\n ...bodyTypeface,\n height: Dim.px(20),\n width: Dim.px(32),\n borderWidth: Dim.px(1),\n borderRadius: Dim.px(10), // half of height\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // for a switch, this represents the color of the slider\n default: generatedColors.neutral,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.dangerLight,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n radio: {\n ...bodyTypeface,\n height: Dim.px(16),\n width: Dim.px(16),\n borderWidth: Dim.px(1),\n borderRadius,\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // represents the checkmark color\n default: generatedColors.neutral,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n hover: generatedColors.neutral25,\n disabled: generatedColors.neutral100,\n active: generatedColors.neutral,\n activeHover: generatedColors.neutral,\n },\n borderColor: {\n default: generatedColors.neutral200,\n hover: generatedColors.neutral300,\n disabled: generatedColors.neutral100,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n checkbox: {\n ...bodyTypeface,\n height: { mode: \"px\", value: 16 },\n width: { mode: \"px\", value: 16 },\n borderWidth: { mode: \"px\", value: 1 },\n borderRadius,\n borderStyle: \"solid\",\n padding: {}, // 0px\n textColor: {\n // represents the checkmark color\n default: generatedColors.contrastText,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.dangerLight,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral200,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n error: generatedColors.danger,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n },\n popover: {\n ...bodyTypeface,\n borderWidth: { mode: \"px\", value: 0 },\n borderStyle: \"solid\",\n borderRadius,\n padding: {\n left: { mode: \"px\", value: 6 },\n right: { mode: \"px\", value: 6 },\n top: { mode: \"px\", value: 6 },\n bottom: { mode: \"px\", value: 6 },\n },\n borderColor: {\n default: \"transparent\",\n },\n backgroundColor: {\n default: generatedColors.neutral,\n },\n boxShadow: {\n default: isDarkMode\n ? BOX_SHADOWS.popover.dark\n : BOX_SHADOWS.popover.light,\n },\n },\n dropdown: {\n caratIcon: {\n iconColor: {\n default: generatedColors.neutral300,\n active: generatedColors.primary500,\n },\n },\n closeIcon: {\n iconColor: {\n default: generatedColors.neutral300,\n hover: generatedColors.neutral400,\n active: generatedColors.neutral500,\n },\n },\n menuItem: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n borderColor: {\n default: \"transparent\",\n },\n padding: {\n left: { mode: \"px\", value: 10 },\n right: { mode: \"px\", value: 10 },\n top: { mode: \"px\", value: 6 },\n bottom: { mode: \"px\", value: 6 },\n },\n backgroundColor: {\n default: generatedColors.neutral,\n hover: generatedColors.neutral50,\n active: generatedColors.neutral50,\n },\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n select: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: DROPDOWN_PADDING,\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral100,\n hover: generatedColors.primary500,\n active: generatedColors.primary500,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n tag: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: {\n left: { mode: \"px\", value: 6 },\n right: { mode: \"px\", value: 6 },\n top: { mode: \"px\", value: 4 },\n bottom: { mode: \"px\", value: 4 },\n },\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n },\n backgroundColor: {\n default: generatedColors.neutral,\n disabled: generatedColors.neutral100,\n hover: generatedColors.neutral25,\n },\n borderColor: {\n default: generatedColors.neutral100,\n disabled: generatedColors.neutral200,\n },\n boxShadow: {\n default: \"none\",\n },\n },\n },\n datepicker: {\n cell: {\n ...bodyTypeface,\n ...defaultBorderStyle,\n padding: {}, // 0px\n textColor: {\n ...bodyTypeface.textColor,\n disabled: generatedColors.neutral300,\n active: generatedColors.contrastText,\n activeHover: generatedColors.contrastText,\n },\n backgroundColor: {\n default: \"transparent\",\n hover: generatedColors.neutral25,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n borderColor: {\n default: \"transparent\",\n hover: generatedColors.neutral100,\n active: generatedColors.primary500,\n activeHover: generatedColors.primary600,\n },\n },\n },\n keyValue: {\n padding: KEY_VALUE_PADDING,\n spacing: KEY_VALUE_SPACING,\n divider: {\n color: generatedColors.neutral100,\n size: { mode: \"px\", value: 0 },\n },\n },\n container: {\n section: {\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.appBackground,\n },\n borderWidth: { value: 0, mode: \"px\" },\n borderStyle: \"solid\",\n borderColor: {\n default: generatedColors.neutral100,\n },\n boxShadow: {\n default: \"none\",\n },\n borderRadius: { value: 0, mode: \"px\" },\n padding: {}, // 0px\n },\n notification: {\n ...bodyTypeface,\n borderColor: { default: \"transparent\" },\n boxShadow: {\n default:\n mode === \"DARK\" ? BOX_SHADOWS.modal.dark : BOX_SHADOWS.modal.light,\n },\n borderRadius,\n borderWidth: { mode: \"px\", value: 0 },\n padding: {}, // 0px\n borderStyle: \"solid\",\n backgroundColor: {\n default: generatedColors.neutral,\n },\n },\n default: {\n ...defaultBorderStyle,\n padding: {}, // 0px\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.neutral,\n active: generatedColors.neutral50,\n },\n },\n canvas: {\n ...bodyTypeface,\n borderColor: { default: generatedColors.neutral100 },\n boxShadow: { default: \"none\" },\n borderRadius: { mode: \"px\", value: 0 },\n borderWidth: { mode: \"px\", value: 0 },\n padding: defaultPadding,\n borderStyle: \"solid\",\n backgroundColor: {\n default: \"none\",\n active: generatedColors.neutral50,\n },\n },\n tab: {\n ...bodyTypeface,\n padding: {\n left: { value: 10, mode: \"px\" },\n right: { value: 10, mode: \"px\" },\n top: { value: 10, mode: \"px\" },\n bottom: { value: 0, mode: \"px\" },\n },\n textColor: {\n default: generatedColors.neutral500,\n active: generatedColors.neutral900,\n },\n borderStyle: \"solid\",\n borderWidth: { mode: \"px\", value: 1 },\n borderRadius: { mode: \"px\", value: 0 }, // unused\n boxShadow: {\n default: \"none\",\n },\n backgroundColor: {\n default: \"transparent\",\n },\n borderColor: {\n default: generatedColors.neutral50,\n active: generatedColors.primary500,\n },\n },\n modal: {\n borderColor: { default: \"transparent\" },\n borderStyle: \"solid\",\n borderWidth: { mode: \"px\", value: 0 }, // unused\n borderRadius,\n padding: {}, // 0px\n ...bodyTypeface,\n backgroundColor: {\n default: generatedColors.neutral,\n },\n boxShadow: {\n default: isDarkMode\n ? BOX_SHADOWS.modal.dark\n : BOX_SHADOWS.modal.light,\n },\n },\n closeIcon: {\n iconColor: {\n default: generatedColors.neutral400,\n hover: generatedColors.neutral700,\n },\n },\n },\n icon: {\n default: {\n iconColor: {\n default: generatedColors.neutral700,\n active: generatedColors.primary500,\n disabled: generatedColors.neutral300,\n error: generatedColors.danger,\n },\n },\n },\n };\n return merge(theme, overrides);\n}\n","import { BASE_THEMES_BY_VERSION, CURRENT_THEME_VERSION } from \"./constants.js\";\n\nimport { generateTheme } from \"./generate-theme.js\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\n/**\n * UserAccessibleTheme is a curated subset of GeneratedTheme that we expose to users.\n * TODO: Make GeneratedTheme and UserAccessibleTheme the same thing.\n * - Remove/unify unused properties from GeneratedTheme.\n * - Expose properties in UserAccessibleTheme that are really in use.\n */\nexport const DEFAULT_THEME = generateTheme(\n BASE_THEMES_BY_VERSION[CURRENT_THEME_VERSION],\n) as unknown as UserAccessibleTheme;\n","import {\n Prop,\n PropsPanelCategory,\n RecordProp,\n} from \"../lib/user-facing/properties-panel/props-builder.js\";\nimport { DEFAULT_THEME } from \"../lib/user-facing/themes/default-theme.js\";\nimport type {\n CompositeProp,\n Section,\n} from \"../lib/user-facing/properties-panel/props-builder.js\";\n\n/**\n * Map of component names to arrays of property names that should be excluded\n * from the generated documentation.\n */\nconst EXCLUDED_PROPERTIES: Record<string, string[]> = {\n Table: [\"displayedValue\"],\n};\n\n/**\n * Map of component names to custom type definitions for specific properties.\n * This allows overriding the auto-generated types with custom TypeScript type strings.\n *\n * Usage: Add an entry for your component and property to override the auto-generated type.\n *\n * Example:\n * ```\n * const CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>> = {\n * Table: {\n * tagDisplayConfig: \"{ color?: string; backgroundColor?: string; borderColor?: string }\",\n * anotherProperty: \"string | number\",\n * },\n * Button: {\n * customProp: \"MyCustomType\",\n * },\n * };\n * ```\n */\nconst CUSTOM_PROPERTY_TYPES: Record<string, Record<string, string>> = {};\n\n/**\n * Check if a property should be excluded from documentation generation\n */\nexport function isPropertyExcluded(\n componentName: string,\n propertyName: string,\n): boolean {\n const excludedProps = EXCLUDED_PROPERTIES[componentName];\n return excludedProps ? excludedProps.includes(propertyName) : false;\n}\n\n/**\n * Get custom type definition for a property, if one exists\n */\nexport function getCustomPropertyType(\n componentName: string,\n propertyName: string,\n): string | undefined {\n const componentCustomTypes = CUSTOM_PROPERTY_TYPES[componentName];\n return componentCustomTypes?.[propertyName];\n}\n\n/**\n * Get type hint from a property if it has one set\n */\nexport function getPropertyTypeHint(prop: any): string | undefined {\n if (prop instanceof Prop) {\n try {\n const builtProp = prop.build();\n return builtProp.typeHint;\n } catch (e) {\n console.error(\"Failed to build prop for type hint\", prop, e);\n }\n }\n return undefined;\n}\n\n/**\n * Check if a value looks like a dimension object\n */\nfunction isDimensionObject(value: any): boolean {\n return (\n value &&\n typeof value === \"object\" &&\n typeof value.mode === \"string\" &&\n [\"px\", \"fit\", \"fill\", \"%\", \"columns\", \"rows\"].includes(value.mode) &&\n (value.mode === \"fit\" || typeof value.value === \"number\")\n );\n}\n\n/**\n * Format a dimension object as a readable Dim constructor call\n */\nfunction formatDimensionObject(dimObj: {\n value?: number;\n mode: string;\n}): string {\n switch (dimObj.mode) {\n case \"px\":\n return `Dim.px(${dimObj.value})`;\n case \"%\":\n return `Dim.percent(${dimObj.value})`;\n case \"fit\":\n return `Dim.fit()`;\n case \"fill\":\n return dimObj.value !== undefined\n ? `Dim.fill(${dimObj.value})`\n : `Dim.fill()`;\n case \"columns\":\n return `Dim.columns(${dimObj.value})`;\n case \"rows\":\n return `Dim.rows(${dimObj.value})`;\n default:\n return `Dim.build(${dimObj.value}, '${dimObj.mode}')`;\n }\n}\n\nexport function formatDefaultValue(value: any): string | undefined {\n if (value === undefined) return undefined;\n\n // Handle dimension objects specially\n if (isDimensionObject(value)) {\n return `@default ${formatDimensionObject(value)}`;\n }\n\n return `@default ${JSON.stringify(value)}`;\n}\n\nexport function getDescription(prop: any): string | undefined {\n if (prop instanceof Prop) {\n try {\n const builtProp = prop.build();\n if (builtProp.docs?.description) {\n return builtProp.docs.description;\n }\n } catch (e) {\n console.error(\"Failed to build prop\", prop, e);\n }\n }\n\n if (prop.docs?.description) {\n return prop.docs.description;\n }\n\n return undefined;\n}\n\n/**\n * Props that comply with all of these:\n * - represent dates.\n * - are stored as String types.\n * - their default values are functions that return the current date.\n *\n * Instead of being smart about detecting these props, we are being explicit.\n * Their default on the generated md file will be: \"Current datetime\".\n */\nconst PROPS_WITH_CURRENT_DATE_AS_DEFAULT_VALUE = [\n \"outputDateUtc\",\n \"outputDateLocal\",\n];\n\nexport function getDefaultValue(prop: any, propName: string): any {\n // For Prop instances, try to get the default value using the build method\n if (prop instanceof Prop && typeof prop.build === \"function\") {\n try {\n const builtProp = prop.build();\n if (typeof builtProp.default === \"function\") {\n if (PROPS_WITH_CURRENT_DATE_AS_DEFAULT_VALUE.includes(propName)) {\n return \"Current datetime\";\n }\n try {\n return builtProp.default.bind({})({\n theme: DEFAULT_THEME,\n }); // TODO: should be bind to the entity props instead of empty {}\n } catch (_themeError) {\n // Many default functions expect a full component context or specific theme properties\n // that aren't available during docs generation. Rather than trying to mock all possible\n // contexts, we'll return a descriptive placeholder for these computed defaults.\n console.warn(\n `Could not evaluate default value for prop '${propName}' - using placeholder`,\n );\n return \"Computed at runtime\";\n }\n }\n\n return builtProp.default;\n } catch (e) {\n console.error(\"Failed to build prop\", e);\n // If build fails, fall back to checking direct default property\n return prop.default;\n }\n }\n // For non-Prop objects, check for a direct default property\n return prop.default;\n}\n\nconst indentLine = (text: string, indent: number = 2) => {\n return `${\" \".repeat(indent)}${text}`;\n};\n\nconst propToLine = (\n propName: string,\n typeString: string,\n indent: number = 2,\n) => {\n return indentLine(`${propName}?: ${typeString};`, indent);\n};\n\nconst defToLine = (def: string, indent: number = 2) => {\n return indentLine(`/** ${def} */`, indent);\n};\n\nexport function guessTypeString(\n prop: any,\n key: string,\n componentName?: string,\n): string {\n // Check for property-level type hint first\n const typeHint = getPropertyTypeHint(prop);\n if (typeHint) {\n return typeHint;\n }\n\n // Check for custom type definition from global config\n if (componentName) {\n const customType = getCustomPropertyType(componentName, key);\n if (customType) {\n return customType;\n }\n }\n\n if (prop instanceof Prop) {\n // First check for special \"any\" props that are actually composite types based on control type\n if (prop.type === \"any\") {\n try {\n const builtProp = prop.build();\n const controlType = builtProp.propertiesPanelDisplay?.controlType;\n\n // Map control types to their actual TypeScript types\n if (controlType === \"BORDER_RADIUS_CONTROL\") {\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n }\n if (controlType === \"BORDER_CONTROL\") {\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n }\n if (controlType === \"PADDING_CONTROL\") {\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n }\n if (controlType === \"TEXT_STYLE\") {\n return \"Record<string, any>\"; // TextStyle is complex, keep as Record for now\n }\n\n // For DROP_DOWN controls, check if the prop name suggests a specific type\n if (controlType === \"DROP_DOWN\") {\n if (key.includes(\"borderRadius\") || key.endsWith(\"BorderRadius\")) {\n return \"Dim\"; // DROP_DOWN borderRadius controls typically return Dim values\n }\n }\n } catch (_e) {\n // If we can't build the prop, fall through to other checks\n }\n }\n\n switch (prop.type) {\n case \"string\":\n // Check if this string prop has options defined (union type)\n try {\n const builtProp = prop.build();\n if (builtProp.propertiesPanelDisplay?.options) {\n // Handle static options arrays\n if (Array.isArray(builtProp.propertiesPanelDisplay.options)) {\n const options = builtProp.propertiesPanelDisplay.options;\n // If there are too many options (e.g., icon enums with 500+ values),\n // just use string type to avoid bloating the docs\n const MAX_OPTIONS_FOR_UNION = 20;\n if (options.length > MAX_OPTIONS_FOR_UNION) {\n return \"string\";\n }\n const unionValues = options\n .map((option: any) => `\"${option.value}\"`)\n .join(\" | \");\n return unionValues;\n }\n // Handle function-based options by trying to call them with reasonable context\n else if (\n typeof builtProp.propertiesPanelDisplay.options === \"function\"\n ) {\n try {\n // Try to call the function with different layout contexts to get all possible values\n const contexts = [\n { layout: \"vertical\" },\n { layout: \"horizontal\" },\n ];\n\n const allOptions = new Set<string>();\n\n for (const context of contexts) {\n try {\n const options =\n builtProp.propertiesPanelDisplay.options.call(\n context,\n context,\n builtProp.path,\n );\n if (Array.isArray(options)) {\n options.forEach((option: any) => {\n if (option.value) {\n allOptions.add(`\"${option.value}\"`);\n }\n });\n }\n } catch {\n // Ignore context-specific errors\n }\n }\n\n if (allOptions.size > 0) {\n const MAX_OPTIONS_FOR_UNION = 20;\n if (allOptions.size > MAX_OPTIONS_FOR_UNION) {\n return \"string\";\n }\n return Array.from(allOptions).join(\" | \");\n }\n } catch {\n // If function call fails, fall back to special cases\n }\n }\n }\n } catch (_e) {\n // If build fails, fall back to string type\n // Silently continue with string type\n }\n\n // Special case handling for known alignment properties\n if (key === \"verticalAlign\") {\n return '\"top\" | \"center\" | \"bottom\" | \"space-between\" | \"space-around\"';\n }\n if (key === \"horizontalAlign\") {\n return '\"left\" | \"center\" | \"right\" | \"space-between\" | \"space-around\"';\n }\n\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"event\":\n return \"EventFlow\";\n case \"dimension\":\n return \"Dim\";\n case \"recordOf\":\n return `Record<string, ${getRecordValueType(prop, key, componentName)}>`;\n case \"composite\": {\n // Check for TEXT_STYLE controls first\n try {\n const builtProp = prop.build();\n const controlType = builtProp.propertiesPanelDisplay?.controlType;\n if (controlType === \"TEXT_STYLE\") {\n return \"TextStyleWithVariant\";\n }\n } catch (_e) {\n // If we can't build the prop, fall through to other checks\n console.log(\"Failed to build prop\", key);\n }\n\n if (key === \"padding\" || key === \"margin\")\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n if (key === \"borderRadius\")\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n if (key === \"border\")\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n\n const compositeProp = prop as unknown as CompositeProp<any>;\n\n const lines: string[] = [];\n lines.push(`{`);\n Object.entries(compositeProp.nestedProps).forEach(\n ([propName, prop]) => {\n const defaultValue = getDefaultValue(prop, propName);\n const def =\n defaultValue !== undefined\n ? formatDefaultValue(defaultValue)\n : undefined;\n if (def) lines.push(defToLine(def, 4));\n lines.push(\n propToLine(\n propName,\n guessTypeString(prop, propName, componentName),\n 4,\n ),\n );\n },\n );\n lines.push(`}`);\n\n return lines.join(\"\\n\");\n }\n\n case \"any\":\n // Fallback for \"any\" props - try to guess based on prop name\n if (key === \"padding\" || key === \"margin\")\n return \"{ left: Dim; right: Dim; top: Dim; bottom: Dim }\";\n if (\n key === \"borderRadius\" ||\n key.endsWith(\"BorderRadius\") ||\n key.includes(\"borderRadius\")\n )\n return \"{ topLeft: Dim; topRight: Dim; bottomLeft: Dim; bottomRight: Dim }\";\n if (\n key === \"border\" ||\n key.endsWith(\"Border\") ||\n key.includes(\"border\")\n )\n return \"{ left: Border; right: Border; top: Border; bottom: Border }\";\n return \"any\";\n default:\n return \"any\";\n }\n }\n if (prop.options?.length) {\n return prop.options.map((o: any) => JSON.stringify(o.value)).join(\" | \");\n }\n return \"any\";\n}\n\nexport function generateInterfaceFromNestedProps(\n nestedProps: any,\n interfaceName: string,\n componentName?: string,\n): string {\n const lines: string[] = [];\n lines.push(`interface ${interfaceName} {`);\n\n // Traverse the nested props structure\n for (const [_sectionKey, section] of Object.entries<any>(nestedProps)) {\n if (section && typeof section === \"object\") {\n // Get props from section - could be in props, childrenObject, or children\n const props =\n section.props ?? section.childrenObject ?? section.children ?? {};\n\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties for nested interfaces too\n if (componentName && isPropertyExcluded(componentName, propName)) {\n continue;\n }\n if (prop instanceof Prop) {\n const typeString = guessTypeString(prop, propName, componentName);\n const description = getDescription(prop);\n const defaultValue = getDefaultValue(prop, propName);\n\n if (description) {\n lines.push(defToLine(description));\n }\n\n if (defaultValue !== undefined) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(defToLine(def));\n }\n\n lines.push(propToLine(propName, typeString));\n }\n }\n }\n }\n\n lines.push(`}`);\n return lines.join(\"\\n\");\n}\n\nexport function getRecordValueType(\n prop: any,\n key: string,\n componentName?: string,\n): string {\n // For record props with nested properties, generate dynamic interface\n if (prop instanceof RecordProp) {\n const interfaceName = `${componentName || \"Component\"}${key.charAt(0).toUpperCase() + key.slice(1)}Properties`;\n // For now, return a generic name - we'll need to store/cache the generated interfaces\n return interfaceName;\n }\n\n return \"any\";\n}\n\nexport type PropContainer = {\n name: string;\n type: string;\n defaultValue: any;\n description?: string;\n};\n\n/**\n * Generates the component state interface documentation from derived properties\n */\nexport function generateStateInterface(\n componentName: string,\n derivedProps: Array<PropContainer>,\n): string[] {\n if (derivedProps.length === 0) {\n return [];\n }\n\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\n \"And the following properties can be referenced on this component in the Superblocks state object:\",\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${componentName}ComponentState {`);\n\n for (const prop of derivedProps) {\n if (prop.description) {\n lines.push(` /** ${prop.description} */`);\n }\n\n const defaultValue = prop.defaultValue;\n // Only show default value if it's not undefined and not a function\n if (\n defaultValue !== undefined &&\n typeof defaultValue !== \"function\" &&\n defaultValue !== \"undefined\" &&\n JSON.stringify(defaultValue) !== \"undefined\"\n ) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(` /** ${def} */`);\n }\n lines.push(` ${prop.name}?: ${prop.type};`);\n }\n\n lines.push(\"}\");\n lines.push(\"```\");\n\n return lines;\n}\n\n/**\n * Generates the meta properties interface documentation\n */\nexport function generateMetaInterface(\n componentName: string,\n metaProps: Array<PropContainer>,\n): string[] {\n if (metaProps.length === 0) {\n return [];\n }\n\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\n \"And the following properties are settable via BindEntity.{propertyName} = newValue;\",\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${componentName}MetaProperties {`);\n\n for (const prop of metaProps) {\n if (prop.description) {\n lines.push(` /** ${prop.description} */`);\n }\n\n const defaultValue = prop.defaultValue;\n // Only show default value if it's not undefined and not a function\n if (\n defaultValue !== undefined &&\n typeof defaultValue !== \"function\" &&\n defaultValue !== \"undefined\" &&\n JSON.stringify(defaultValue) !== \"undefined\"\n ) {\n const def = formatDefaultValue(defaultValue);\n if (def) lines.push(` /** ${def} */`);\n }\n lines.push(` ${prop.name}?: ${prop.type};`);\n }\n\n lines.push(\"}\");\n lines.push(\"```\");\n\n return lines;\n}\n\nexport function generateComponentDoc(component: {\n name: string;\n props: Record<string, Section<any>>;\n}): string {\n const lines: string[] = [];\n const generatedInterfaces: string[] = []; // Store generated interfaces\n\n lines.push(`## ${component.name}`);\n lines.push(\"\");\n lines.push(\n `The following is the type definition for the ${component.name} component.`,\n );\n lines.push(\"\");\n lines.push(\"```typescript\");\n lines.push(`interface ${component.name}Props {`);\n\n // Save derived properties for the second interface\n const derivedProps: Array<PropContainer> = [];\n\n // Save meta properties for the third interface\n const metaProps: Array<PropContainer> = [];\n\n for (const [_sectionKey, section] of Object.entries<any>(component.props)) {\n if (section.category === PropsPanelCategory.Derived) {\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n const defaultValue = getDefaultValue(prop, propName);\n const description = getDescription(prop);\n derivedProps.push({\n name: propName,\n type: typeString,\n defaultValue,\n description,\n });\n }\n continue;\n }\n if (section.category === PropsPanelCategory.Meta) {\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n const defaultValue = getDefaultValue(prop, propName);\n const description = getDescription(prop);\n metaProps.push({\n name: propName,\n type: typeString,\n defaultValue,\n description,\n });\n }\n continue;\n }\n\n const props = section.props ?? section.childrenObject ?? {};\n for (const [propName, prop] of Object.entries<any>(props)) {\n // Skip excluded properties\n if (isPropertyExcluded(component.name, propName)) {\n continue;\n }\n const typeString = guessTypeString(prop, propName, component.name);\n\n // Check if this prop needs a generated interface\n if (prop instanceof RecordProp) {\n const interfaceName = `${component.name}${propName.charAt(0).toUpperCase() + propName.slice(1)}Properties`;\n const recordProp = prop as RecordProp<any>; // Explicit cast to access nestedProps\n const generatedInterface = generateInterfaceFromNestedProps(\n recordProp.nestedProps,\n interfaceName,\n component.name,\n );\n generatedInterfaces.push(generatedInterface);\n }\n\n const description = getDescription(prop);\n const defaultValue = getDefaultValue(prop, propName);\n\n if (description) {\n lines.push(defToLine(description));\n }\n\n const def =\n defaultValue !== undefined\n ? formatDefaultValue(defaultValue)\n : undefined;\n if (def) lines.push(defToLine(def));\n\n lines.push(propToLine(propName, typeString));\n }\n }\n\n lines.push(\"}\");\n\n // Add any generated interfaces\n if (generatedInterfaces.length > 0) {\n lines.push(\"\");\n lines.push(\"// Referenced interfaces:\");\n lines.push(\"\");\n for (const generatedInterface of generatedInterfaces) {\n lines.push(generatedInterface);\n lines.push(\"\");\n }\n }\n\n lines.push(\"```\");\n\n // Generate and append state interface if needed\n const stateInterfaceLines = generateStateInterface(\n component.name,\n derivedProps,\n );\n lines.push(...stateInterfaceLines);\n\n // Generate and append meta interface if needed\n const metaInterfaceLines = generateMetaInterface(component.name, metaProps);\n lines.push(...metaInterfaceLines);\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n","import type { ServerMethods } from \"@superblocksteam/library-shared/types\";\nimport type { ISocketClient } from \"@superblocksteam/shared\";\n\nexport type EditorSocket = ISocketClient<ServerMethods>;\n\nexport class AsyncSocket {\n private socket: EditorSocket | undefined;\n private socketResolvers: ((s: EditorSocket) => void)[] = [];\n\n setSocket(s: EditorSocket) {\n this.socket = s;\n this.socketResolvers.forEach((resolver) => resolver(s));\n this.socketResolvers.length = 0;\n }\n\n clearSocket() {\n this.socket = undefined;\n this.socketResolvers.length = 0;\n }\n\n async waitForSocket(): Promise<EditorSocket> {\n if (this.socket) return this.socket;\n return new Promise((resolve) => this.socketResolvers.push(resolve));\n }\n\n isConnected(): boolean {\n return !!this.socket;\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport {\n connectWebSocket,\n createISocketClient,\n ISocketWithClientAuth,\n} from \"@superblocksteam/shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { sendNotification } from \"../lib/user-facing/utils/notification.jsx\";\n\nimport { AsyncSocket } from \"./async-socket.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n ServerMethods,\n LibraryClientMethods,\n SbElement,\n RegisterComponentDocsRequest,\n} from \"@superblocksteam/library-shared/types\";\nimport type {\n ISocketClient,\n RequestContextBase,\n} from \"@superblocksteam/shared\";\n\nconst PING_INTERVAL_MS = 15_000;\n\ntype OperationApiISocket = ISocketClient<ServerMethods>;\n\nclass OperationAPI {\n private retryAttempts = 0;\n private asyncSocket = new AsyncSocket();\n\n constructor(private readonly serverUrl: string) {}\n\n /**\n * @throws {Error} if the websocket connection can't be initiated after 3 attempts\n */\n async connect({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n try {\n const socket = await connectSocket(this.serverUrl, {\n peerId,\n userId,\n applicationId,\n onClose: this.handleSocketClose({ peerId, userId, applicationId }),\n });\n if (socket) {\n this.retryAttempts = 0;\n this.asyncSocket.setSocket(socket);\n } else {\n throw new Error(\"Failed to create socket connection\");\n }\n } catch {\n this.retryAttempts++;\n console.info(\n `App<>Dev box initial connection failed, retrying attempt ${this.retryAttempts}...`,\n );\n // this retry could fail too\n await this.retryConnection({ peerId, userId, applicationId });\n }\n }\n\n ensureFilesSynced = async () => {\n try {\n const socket = await this.asyncSocket.waitForSocket();\n await socket.call.editor.ensureFilesSynced();\n } catch (error) {\n console.error(\"Error ensuring files synced\", error);\n }\n };\n\n registerComponentDocs = async (payload: RegisterComponentDocsRequest) => {\n try {\n const socket = await this.asyncSocket.waitForSocket();\n await socket.call.editor.registerComponentDocs(payload);\n } catch (error) {\n console.error(\"Error registering component docs\", error);\n }\n };\n\n // Happens after initial connection\n private handleSocketClose({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n return async (event: CloseEvent) => {\n // Code 1008 is what we use for application ID mismatch\n if (event.code === 1008) {\n sendNotification({\n message: \"Application ID mismatch\",\n description: `You likely switched between multiple tabs. Please refresh the page.`,\n type: \"warning\",\n duration: 10 * 60, // 10 minutes\n });\n rootStore.editStore?.connectionManager.disconnect();\n return; // Don't retry for application ID mismatch\n }\n\n console.info(\n `App<>Dev box Socket closed, retrying attempt ${this.retryAttempts + 1}...`,\n );\n rootStore.editStore?.connectionManager.disconnect();\n\n await this.retryConnection({ peerId, userId, applicationId });\n\n if (this.retryAttempts >= 3) {\n this.asyncSocket.clearSocket();\n }\n this.retryAttempts++;\n };\n }\n\n private async retryConnection({\n peerId,\n userId,\n applicationId,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n }) {\n if (this.retryAttempts < 3) {\n await this.connect({ peerId, userId, applicationId });\n } else {\n console.info(\n `App<>Dev box Socket closed, failed to reconnect after 3 attempts. Throwing error.`,\n );\n throw new Error(\"Failed to reconnect after 3 attempts\");\n }\n }\n}\n\nexport default new OperationAPI(\n typeof window !== \"undefined\" ? window.location.origin : \"\",\n);\n\n// TODO: remove this once we move the heartbeat logic to the WebSocket RPC framework\n/** Returns a function that can be used to stop the heartbeat */\nfunction startSocketHeartbeat(socket: OperationApiISocket) {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let canceled = false;\n (function loop() {\n if (canceled) return;\n timeoutId = setTimeout(async () => {\n try {\n await socket.call.editor.ping();\n console.debug(\"Pinged library socket\");\n } catch (e) {\n console.warn(\"Ping library socket error\", e);\n }\n loop();\n }, PING_INTERVAL_MS);\n })();\n return () => {\n canceled = true;\n clearTimeout(timeoutId);\n };\n}\n\nasync function connectSocket(\n serverUrl: string,\n {\n peerId,\n userId,\n applicationId,\n onClose,\n }: {\n peerId: string;\n userId?: string;\n applicationId: string;\n onClose: (event: CloseEvent) => void;\n },\n) {\n if (!serverUrl) {\n return undefined;\n }\n\n const wsUrl = new URL(\"/sb-updates\", serverUrl);\n wsUrl.searchParams.set(\"peerId\", peerId);\n if (userId) {\n wsUrl.searchParams.set(\"userId\", userId);\n }\n wsUrl.searchParams.set(\"applicationId\", applicationId);\n\n rootStore.editStore?.connectionManager.initializeSocket();\n\n try {\n let stopSocketHeartbeat: (() => void) | undefined;\n const ws = await connectWebSocket(wsUrl.toString());\n const isocket = new ISocketWithClientAuth<\n LibraryClientMethods,\n ServerMethods,\n RequestContextBase\n >(\n ws,\n undefined,\n {\n nonVisualEdit: [\n async () => {\n getEditStore().ui.selectWidget(null); // this also sends a postMessage to parent\n },\n ],\n setApisLoaded: [\n async () => {\n rootStore.setApisLoaded();\n },\n ],\n updateApiParams: [\n async (payload) => {\n rootStore.apis.setApiDepCandidates(\n payload.scopeId,\n payload.apiName,\n payload.params,\n );\n rootStore.apis.setApiReferences(\n payload.scopeId,\n payload.apiName,\n payload.apiDependencies,\n );\n },\n ],\n updateApis: [\n async (payload) => {\n payload.forEach(({ api, oldName, scopeId }) => {\n rootStore.apis.updateApi(api, scopeId);\n if (oldName) {\n rootStore.apis.renameApi({\n api,\n oldName,\n scopeId,\n });\n }\n });\n },\n ],\n deleteApis: [\n async (payload) => {\n payload.forEach(({ apiName, scopeId }) => {\n rootStore.apis.deleteApi(apiName, scopeId);\n });\n },\n ],\n setApiDefinitions: [\n async (payload) => {\n rootStore.apis.setAllApis(payload);\n },\n ],\n updateLocalBindingEntities: [\n async (payload) => {\n getEditStore().runtimeEntitiesManager.setEntitiesWithLocalBindings(\n payload.entities,\n );\n },\n ],\n renameRegisteredComponent: [\n async (payload) => {\n // TODO: do we need a better way to track components?\n const { name, oldName } = payload;\n if (oldName) {\n rootStore.componentRegistry.renameCustomComponent(oldName, name);\n }\n },\n ],\n removeRegisteredComponent: [\n async (payload) => {\n // TODO: do we need a better way to track components?\n rootStore.componentRegistry.deleteCustomComponent(payload.name);\n },\n ],\n deleteEntities: [\n async (payload) => {\n payload.forEach((entity) => {\n if (entity.entityName) {\n rootStore.entityManager.deleteEntity({\n name: {\n isAnonymous: false,\n value: entity.entityName,\n },\n scopeId: entity.scopeId,\n });\n } else if (entity.sourceId) {\n const instanceId =\n rootStore.editStore?.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n entity.sourceId as SbElement,\n );\n if (instanceId) {\n rootStore.entityManager.deleteEntityById({\n scopeId: entity.scopeId,\n entityId: instanceId,\n });\n }\n } else if (entity.entityId) {\n rootStore.entityManager.deleteEntityById({\n scopeId: entity.scopeId,\n entityId: entity.entityId,\n });\n }\n });\n },\n ],\n clientImport: [\n async (payload) => {\n const { importPath } = payload;\n try {\n await import(/* @vite-ignore */ `${importPath}?v=${Date.now()}`);\n return undefined;\n } catch (error) {\n const err = error as Error;\n return {\n message: err.message,\n stack: err.stack,\n name: err.name,\n };\n }\n },\n ],\n },\n [],\n trace.getTracer(\"superblocks-ui-framework\"),\n {\n onClose: (event) => {\n stopSocketHeartbeat?.();\n stopSocketHeartbeat = undefined;\n onClose(event as unknown as CloseEvent);\n console.log(\"App<>Dev box Socket closed\");\n rootStore.editStore?.connectionManager.disconnect();\n },\n\n timeouts: {\n connectionTimeoutInSeconds: undefined,\n noResponseTimeoutInSeconds: 60,\n },\n },\n );\n const socket = createISocketClient<\n ServerMethods,\n LibraryClientMethods,\n RequestContextBase\n >(isocket);\n console.log(\"connected to socket\");\n stopSocketHeartbeat = startSocketHeartbeat(socket);\n rootStore.editStore?.connectionManager.connect();\n return socket;\n } catch (error) {\n console.error(\"Error connecting to socket\", error);\n rootStore.editStore?.connectionManager.disconnect();\n throw error;\n }\n}\n","import { generateComponentDoc } from \"../../docs-utils/generate-docs-utils.js\";\nimport operationAPI from \"../../edit-mode/source-update-api.js\";\nimport type { PropertiesDefinition } from \"../user-facing/properties-panel/props-builder.js\";\n\nexport interface ComponentDocsPayload {\n name: string;\n markdown: string;\n contentHash: string;\n importPath?: string;\n}\n\nasync function sendComponentDocs(payload: ComponentDocsPayload): Promise<void> {\n try {\n await operationAPI.registerComponentDocs(payload);\n } catch (error) {\n console.warn(`Failed to send docs for component ${payload.name}:`, error);\n }\n}\n\n/**\n * Generate and send component documentation to the vite plugin\n */\nexport function generateAndSendComponentDocs(options: {\n name: string;\n propertiesDefinition: PropertiesDefinition;\n isCustomComponent?: boolean;\n}): void {\n try {\n const markdown = generateComponentDoc({\n name: options.name,\n props: options.propertiesDefinition,\n });\n\n void sendComponentDocs({\n name: options.name,\n markdown,\n contentHash: btoa(markdown).substring(0, 8),\n importPath: options.isCustomComponent\n ? undefined\n : \"@superblocksteam/library\",\n });\n } catch (error) {\n console.warn(\n `Failed to generate docs for component ${options.name}:`,\n error,\n );\n }\n}\n","import type { BindingIdentifier } from \"@superblocksteam/library-shared/types\";\n\nexport const getNormalizedIdInfo = (params: {\n bind: BindingIdentifier | undefined;\n fallbackScopeId: string;\n}): {\n name: string | undefined;\n scopeId: string;\n} => {\n const name = params.bind?.entityName;\n const scopeId = params.bind?.scopeId ?? params.fallbackScopeId;\n\n return {\n name,\n scopeId,\n };\n};\n","import {\n Dim,\n getBindingIdentifier,\n isBindingEqual,\n isBindingString,\n isDimension,\n isEntityWithBindingIdentifier,\n PROCESSED_TRANSACTIONS_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport { isObservable } from \"mobx\";\nimport { getEditStore } from \"../../edit-mode/get-edit-store.js\";\nimport { useObserverMemo } from \"../hooks/use-observer-memo.js\";\nimport useStableEffect from \"../hooks/use-stable-effect.js\";\nimport { isName, isNameEqual } from \"./lib/evaluator/names.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport type { InputProp } from \"./lib/evaluator/base-entity-manager.js\";\nimport type { Name } from \"./lib/evaluator/names.js\";\nimport type { ChildFunction } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { UseStableEffectOptions } from \"../hooks/use-stable-effect.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst stableEffectOptions: UseStableEffectOptions = {\n customEqualChecks: [\n /* isType, isEqual */\n [(a) => isBindingString(a), isBindingEqual],\n [(a) => isName(a), isNameEqual],\n [(a) => isDimension(a), Dim.isEqual],\n [\n (a) => isEntityWithBindingIdentifier(a),\n (a, b) => {\n return isEqual(getBindingIdentifier(a), getBindingIdentifier(b));\n },\n ],\n [(a) => isObservable(a), (a, b) => isEqual(a, b)],\n [(a) => typeof a === \"function\", (a, b) => a.toString() === b.toString()],\n [(a) => typeof a === \"string\", (a, b) => a === b],\n [(a) => typeof a === \"object\" && a !== null, (a, b) => isEqual(a, b)],\n ],\n ignoreKeys: [\"children\", PROCESSED_TRANSACTIONS_ATTRIBUTE],\n};\n\nconst updateEntity = (params: {\n sourceId: SbElement;\n scopeId: string;\n name: Name;\n type: string;\n props: Record<string, InputProp>;\n instanceId: SbInstance;\n}) => {\n const { scopeId, name, type, props, sourceId, instanceId } = params;\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n\n if (entity) {\n rootStore.entityManager.updateEntity({\n scopeId,\n name,\n props,\n instanceId,\n });\n } else {\n rootStore.entityManager.createEntity({\n scopeId,\n props,\n name,\n type,\n instanceId,\n sourceId,\n });\n }\n};\n\nfunction useTrackRuntimeWidget(\n instanceId: SbInstance,\n params: {\n name: Name;\n type: string;\n props: Record<string, unknown> & {\n children?: ReactNode[] | ReactNode | ChildFunction;\n };\n isEditing: boolean;\n scopeId: string;\n sourceId: SbElement;\n },\n) {\n const { name, props, isEditing } = params;\n\n const propsForUpdateEntity = useObserverMemo(() => {\n const {\n children: _children,\n [PROCESSED_TRANSACTIONS_ATTRIBUTE]: _processedTransactions,\n bind: _bind,\n ...propsWithoutChildrenAndExtras\n } = props;\n\n if (!isEditing || !rootStore.editStore) {\n return {\n ...propsWithoutChildrenAndExtras,\n name: name.value,\n };\n }\n\n const editStore = getEditStore();\n\n if (\n isEditing &&\n editStore.runtimeEntitiesManager.hasEditOperationsPending()\n ) {\n const meta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n if (meta?.props) {\n const {\n [PROCESSED_TRANSACTIONS_ATTRIBUTE]: _processedTransactions,\n ...propsWithoutTransactions\n } = meta.props;\n return propsWithoutTransactions;\n }\n return propsWithoutChildrenAndExtras;\n }\n\n return {\n ...propsWithoutChildrenAndExtras,\n name: name.value,\n };\n }, [props, name, isEditing, instanceId]);\n\n // TODO(Alex) investigate: this keeps firing during updates even when the props don't semantically change.\n useStableEffect(\n () => {\n updateEntity({\n props: propsForUpdateEntity as Record<string, InputProp>,\n type: params.type,\n name: params.name,\n scopeId: params.scopeId,\n sourceId: params.sourceId,\n instanceId,\n });\n },\n propsForUpdateEntity,\n stableEffectOptions,\n );\n}\n\nexport default useTrackRuntimeWidget;\n","import {\n WIDGET_INDEX_WITHIN_PARENT,\n WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE,\n INSTANCE_ID_ATTRIBUTE,\n SOURCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nimport { getBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\n// TODO(code-mode): Remove import from edit-mode\nimport EditWrapper from \"../../edit-mode/edit-wrapper.jsx\";\nimport { getEditStore } from \"../../edit-mode/get-edit-store.js\";\nimport {\n createManagedPropsList,\n createInternalPropsList,\n} from \"../user-facing/properties-panel/create-managed-props-list.js\";\nimport { generateAndSendComponentDocs } from \"./component-docs-service.js\";\nimport { getNormalizedIdInfo } from \"./identifier-normalizer.js\";\nimport { isEditMode } from \"./is-edit-mode.js\";\nimport { superblocksComponentSymbol } from \"./is-sb-component.jsx\";\nimport {\n DEFAULT_ANONYMOUS_SOURCE_ID,\n type IdentifierInfo,\n} from \"./lib/features/name-manager.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport ReactiveComponent from \"./reactive-component.jsx\";\nimport { useScope } from \"./scope/scope-context.jsx\";\nimport useTrackRuntimeWidget from \"./use-track-runtime-widget.js\";\nimport type { ElementPassthroughProps } from \"../user-facing/component-base/use-passthrough-props.js\";\nimport type { DefaultTagNames } from \"./lib/features/component-registry.js\";\nimport type {\n ExternalProps,\n InternalProps,\n PropertiesDefinition,\n RawPropsToExternal,\n} from \"../user-facing/properties-panel/props-builder.js\";\nimport type { DataTypeString } from \"@superblocksteam/library-shared/props\";\nimport type {\n AnonymousSbEntity,\n CreateChild,\n PropertyInfo,\n SbElement,\n SbInstance,\n WithBindingIdentifier,\n Catalog,\n EditorConfig,\n} from \"@superblocksteam/library-shared/types\";\nimport type { LegacyRef } from \"react\";\n\nexport type InjectedProps = {\n dropTargetRef?: React.Ref<HTMLElement> | LegacyRef<HTMLElement>;\n editorProps?: ElementPassthroughProps;\n};\n\nexport type ParentInfo = {\n type?: string;\n};\n\nexport interface CreationContext {\n generateUniqueName: (baseName: string) => string;\n parentInfo: ParentInfo;\n defaultTagNames: DefaultTagNames;\n selfTagName: string;\n}\n\nexport type PropertyValues<Def extends PropertiesDefinition> = {\n [K in keyof GetAllPropsFromDefinition<Def>]?:\n | PropertyInfo\n | PropertyValues<Def>;\n};\n\n// Helper type to extract all property keys from a PropertiesDefinition\ntype GetAllPropsFromDefinition<Def extends PropertiesDefinition> = {\n [SectionKey in keyof Def]: Def[SectionKey] extends { props: infer Props }\n ? Props extends Record<string, any>\n ? Props\n : never\n : never;\n}[keyof Def];\n\nexport interface EditorTemplate<Def extends PropertiesDefinition> {\n catalog?: Catalog;\n /***\n * Config for the newly created component when added to the canvas from the Editor.\n * @returns a single CreateRequest or an array of CreateRequests.\n *\n * When returning Array<CreateRequests>:\n * - The 1st CreateRequest's type must match the componentType passed to createComponent.\n * - The last CreateRequest's will be the selected component after drag & drop.\n *\n * Example: [Modal, Button]\n * A modal that when drag & dropped on the page will add a trigger button.\n * The modal is closed by default, so the selected component after drop will be the trigger button.\n */\n create?: (\n context: CreationContext,\n ) => CreateRequest<Def> | Array<CreateRequest<Def>>;\n}\nexport interface CreateRequest<Def extends PropertiesDefinition> {\n type: string;\n /**\n * Should it automatically generate a binding?\n * e.g: <Input bind={Input1}>\n *\n * Default is false (no binding)\n *\n * `generateBinding` can also receive a string. e.g: \"Input1\".\n * This is useful if you need to create children components that rely on the parent's binding (e.g: a button inside a modal to close the modal).\n * To generate these unique names, you can use `context.generateUniqueName` and pass the component type (e.g: \"Modal\")\n *\n * A good rule of thumb:\n * - Components that expose a user's input should have an automatically generated binding (e.g: Input, Checkbox, Table, etc)\n * - Components that don't expose a user's input should not have an automatically generated binding (e.g: Button, Text, etc)\n *\n * Note:\n * Apps builders can always manually set a binding on the editor or source code.\n */\n generateBinding?: boolean | string;\n properties?: PropertyValues<Def>; // default is empty object\n createAt?: \"root\" | \"dropLocation\"; // default is \"dropLocation\"\n children?: CreateChild[];\n}\n\n// Chainable component interface\nexport interface ChainableComponent<\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD>,\n> extends React.FC<EP> {\n addEditorTemplate: (config: EditorTemplate<PD>) => ChainableComponent<PD, EP>;\n editorConfig: (config: EditorConfig) => ChainableComponent<PD, EP>;\n\n isSb: symbol;\n sbType: string;\n displayName: string;\n isCustomComponent: boolean;\n isDroppable: boolean;\n propertiesDefinition: PropertiesDefinition;\n}\n\n/**\n * Register a component to be used with the framework.\n *\n * Returns a chainable component that can be used as a React component and also provides\n * additional methods for editor integration.\n *\n * // TODO: All these params should be migrated to editor template or editorConfig\n * @param type - The string identifier for the component type. This should be unique, is used internally to reference the component, and is also the tag name on source code.\n * @param config - An object containing configuration options for the component:\n * - customComponent (optional): If true, marks this as a custom user-defined component.\n * - propertiesDefinition: The definition of the component's properties, used for property panel generation and validation.\n * @param Component - The React functional component implementation. Receives internal props (including drop target props) as its argument.\n *\n * @returns A chainable component that can be used as a React component and also provides methods for editor integration (such as addEditorTemplate and editorConfig).\n */\nexport const registerComponentInternal = <\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD> = ExternalProps<PD>,\n IP extends InternalProps<PD> & InjectedProps = InternalProps<PD> &\n InjectedProps,\n>(\n type: string,\n config: {\n customComponent?: boolean;\n propertiesDefinition: PD;\n },\n Component: React.FC<IP>,\n): ChainableComponent<PD, EP> => {\n const managedProps = createManagedPropsList(config.propertiesDefinition);\n\n // Generate and send component docs\n if (isEditMode()) {\n generateAndSendComponentDocs({\n name: type,\n propertiesDefinition: config.propertiesDefinition,\n isCustomComponent: config.customComponent,\n });\n }\n\n // Syntactic sugar to set isDroppable to true when the component has children\n const isDroppable = !!managedProps.find(\n (p) => p.dataType === (\"children\" as DataTypeString),\n );\n\n rootStore.onEditorRegistered(() => {\n getEditStore().propertiesPanelManager.setPropertiesDefinition(\n type,\n config.propertiesDefinition,\n );\n });\n\n const SbComponent = observer(function SbComponent(\n props: ExternalProps<PD> & {\n [SOURCE_ID_ATTRIBUTE]: SbElement;\n [INSTANCE_ID_ATTRIBUTE]?: SbInstance; // only passed down in edit mode\n [WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]?: SbInstance; // injected in edit mode\n [WIDGET_INDEX_WITHIN_PARENT]?: number; // injected in edit mode\n bind?: WithBindingIdentifier;\n },\n ) {\n const { scopeId: fallbackScopeId } = useScope();\n const sourceId = props[SOURCE_ID_ATTRIBUTE];\n const instanceId = props[INSTANCE_ID_ATTRIBUTE];\n const isEditing =\n Boolean(rootStore.editStore?.isInitialized) &&\n Boolean(!rootStore.editStore?.isLivePreview);\n const identifier = useRef<IdentifierInfo>();\n const { name: passedName, scopeId } = getNormalizedIdInfo({\n bind: getBindingIdentifier(props.bind),\n fallbackScopeId,\n });\n if (!identifier.current) {\n identifier.current = rootStore.nameManager.registerAndGetIdentifiers({\n sourceId,\n name: passedName,\n scopeId,\n existingInstanceId: instanceId,\n type,\n });\n }\n useEffect(() => {\n if (identifier.current) {\n rootStore.nameManager.registerIdentifier(identifier.current);\n }\n return () => {\n if (identifier.current?.instanceId) {\n rootStore.nameManager.unregisterIdentifier(\n identifier.current?.instanceId,\n );\n }\n };\n }, [identifier.current?.instanceId]);\n\n const didNameChange =\n (passedName && identifier.current.name.value !== passedName) ||\n (!passedName && !identifier.current.name.isAnonymous);\n if (didNameChange) {\n identifier.current =\n rootStore.nameManager.changeWidgetName(\n identifier.current.instanceId,\n passedName,\n ) ?? identifier.current;\n }\n const widgetProps = useMemo(() => {\n const { [INSTANCE_ID_ATTRIBUTE]: instanceId, children, ...rest } = props;\n return rest;\n }, [props]);\n\n useTrackRuntimeWidget(identifier.current.instanceId, {\n name: identifier.current.name,\n type,\n props: widgetProps,\n scopeId: identifier.current.scopeId,\n isEditing,\n sourceId,\n });\n\n if (\n isEditing &&\n identifier.current.sourceId !== DEFAULT_ANONYMOUS_SOURCE_ID\n ) {\n return (\n <EditWrapper\n type={type}\n widgetProps={widgetProps}\n component={Component}\n identifier={identifier.current}\n directParentInstanceId={props[WIDGET_PARENT_INSTANCE_ID_ATTRIBUTE]}\n indexWithinParent={props[WIDGET_INDEX_WITHIN_PARENT]}\n >\n {props.children}\n </EditWrapper>\n );\n }\n if (props.isVisible === false) return null;\n return (\n <ReactiveComponent\n Component={Component}\n identifier={identifier.current}\n widgetProps={props}\n >\n {props.children}\n </ReactiveComponent>\n );\n }) as any;\n\n SbComponent.isSb = superblocksComponentSymbol;\n SbComponent.sbType = type;\n SbComponent.displayName = type;\n SbComponent.isCustomComponent = config.customComponent ?? false;\n SbComponent.propertiesDefinition = config.propertiesDefinition;\n\n if (config.customComponent) {\n rootStore.componentRegistry.addCustomComponent(type, SbComponent);\n } else {\n rootStore.componentRegistry.addType(type, SbComponent);\n }\n rootStore.componentRegistry.addManagedProps(type, managedProps ?? []);\n\n const defaultEditorConfig: EditorConfig = {};\n\n // TODO: This is only necessary on edit-mode\n if (isDroppable) {\n defaultEditorConfig.isDroppable = true;\n rootStore.componentRegistry.addEditorConfig(type, defaultEditorConfig);\n }\n\n const chainableComponent = Object.assign(SbComponent, {\n addEditorTemplate: (\n templateConfig: EditorTemplate<PD>,\n ): ChainableComponent<PD, EP> => {\n // TODO: This is only necessary on edit-mode (same as some other props that we currently always load, eg: isDroppable, hasExtendedClickArea)\n const catalog: Catalog = templateConfig.catalog ?? {\n displayName: type,\n category: \"MISC\",\n };\n rootStore.componentRegistry.addEditorTemplate(type, {\n ...templateConfig,\n catalog,\n });\n\n return chainableComponent;\n },\n editorConfig: (config: EditorConfig): ChainableComponent<PD, EP> => {\n // TODO: This is only necessary on edit-mode\n rootStore.componentRegistry.addEditorConfig(type, {\n ...defaultEditorConfig,\n ...config,\n });\n\n return chainableComponent;\n },\n }) as ChainableComponent<PD, EP>;\n\n return chainableComponent;\n};\n\nexport function registerEntity<\n PROPS,\n PD extends PropertiesDefinition,\n EP extends ExternalProps<PD> = ExternalProps<PD>,\n>(\n name: string,\n config: { propertiesDefinition: PD },\n Entity: (args: RawPropsToExternal<PROPS>) => EP & AnonymousSbEntity,\n): (args: RawPropsToExternal<PROPS>) => EP & AnonymousSbEntity {\n const managedProps = createManagedPropsList(config.propertiesDefinition);\n const internalProps = createInternalPropsList(config.propertiesDefinition);\n\n rootStore.componentRegistry.addManagedProps(name, managedProps ?? []);\n rootStore.componentRegistry.addInternalProps(name, internalProps ?? []);\n\n rootStore.onEditorRegistered(() => {\n getEditStore().propertiesPanelManager.setPropertiesDefinition(\n name,\n config.propertiesDefinition,\n );\n });\n\n return Entity;\n}\n","import type { EditorConfig } from \"@superblocksteam/library-shared/types\";\n\nexport const editorConfig: EditorConfig = {\n icon: \"page\",\n isDraggable: false,\n isDroppable: true,\n};\n","import { Dim } from \"@superblocksteam/library-shared\";\nimport { size } from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport {\n Prop,\n PropsPanelCategory,\n Section,\n} from \"../../properties-panel/props-builder.js\";\n\nexport const propertiesDefinition = {\n contents: Section.category(PropsPanelCategory.Content).children({\n children: Prop.children(),\n }),\n layout: Section.category(PropsPanelCategory.Layout).add(\n size({\n defaults: {\n width: Dim.fill(),\n height: Dim.fill(),\n },\n showWidth: () => false,\n showHeight: () => false,\n }),\n ),\n appearance: Section.category(PropsPanelCategory.Appearance).children({\n loading: loading(),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onLoad: Prop.event().propertiesPanel({\n label: \"onPageLoad\",\n }),\n }),\n};\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { FullPageSpinner } from \"../../../internal-details/internal-components/spinner.js\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerComponentInternal, useScope } from \"../../internal-index.js\";\nimport { InternalVStack } from \"../stack/index.jsx\";\nimport { editorConfig } from \"./editor.js\";\nimport { propertiesDefinition } from \"./props.js\";\n// @refresh reset\n\nconst SpinnerFadeIn = styled.div`\n display: contents;\n animation: fadein 0.2s ease-in-out forwards;\n @keyframes fadein {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const Page = registerComponentInternal(\n NATIVE_COMPONENT_TYPES.Page,\n {\n propertiesDefinition,\n },\n (props) => {\n const { name, isAnonymous, style, onLoad, editorProps, ...other } = props;\n\n const { scopeId } = useScope();\n\n useEffect(() => {\n return rootStore.onPageLoaded(scopeId, () => {\n onLoad?.();\n });\n }, [onLoad, scopeId]);\n\n const [initializing, setInitializing] = useState(true);\n useEffect(() => {\n // This is to give the browser a chance to process the page switch.\n // Large child trees will block the render thread.\n setInitializing(false);\n }, []);\n\n return (\n <div style={{ height: \"100%\", width: \"100%\", overflow: \"auto\" }}>\n <InternalVStack\n {...editorProps}\n isVisible\n // TODO: default style has to be merged with the styles coming from ReactiveComponent's useStyleWithSize. We will move default style like minHeight to page layout props after the refactoring on layout helpers is done.\n style={{\n height: \"100%\",\n width: \"100%\",\n // TODO: this is added because we have not applied the flex-shrink: 0 to stack child yet, so if width/height with px is set, the page might not respect that if height is 100%.\n // minHeight: \"fit-content\",\n ...style,\n }}\n {...other}\n >\n {initializing ? (\n <SpinnerFadeIn>\n <FullPageSpinner />\n </SpinnerFadeIn>\n ) : (\n props.children\n )}\n </InternalVStack>\n </div>\n );\n },\n).editorConfig(editorConfig);\n","import type { EditorConfig } from \"@superblocksteam/library-shared/types\";\n\nexport const editorConfig: EditorConfig = {\n icon: \"app\",\n isDraggable: false,\n};\n","import {\n Prop,\n PropsPanelCategory,\n Section,\n} from \"../../properties-panel/props-builder.js\";\n\nexport const propertiesDefinition = {\n contents: Section.category(PropsPanelCategory.Content).children({\n children: Prop.children(),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onLoad: Prop.event().propertiesPanel({\n label: \"onAppLoad\",\n }),\n }),\n};\n","import { NATIVE_COMPONENT_TYPES } from \"@superblocksteam/library-shared\";\nimport { useEffect } from \"react\";\nimport rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerComponentInternal, useScope } from \"../../internal-index.js\";\nimport { editorConfig } from \"./editor.js\";\nimport { propertiesDefinition } from \"./props.js\";\n\nexport const App = registerComponentInternal(\n NATIVE_COMPONENT_TYPES.App,\n {\n propertiesDefinition,\n },\n (props) => {\n const { onLoad } = props;\n\n const { scopeId } = useScope();\n\n useEffect(() => {\n return rootStore.onAppLoaded(() => {\n onLoad?.();\n });\n }, [onLoad, scopeId]);\n\n return <>{props.children}</>;\n },\n).editorConfig(editorConfig);\n","import React from \"react\";\nimport usePassthroughProps from \"../../component-base/use-passthrough-props.js\";\nimport { registerComponentInternal } from \"../../internal-index.js\";\nimport { basicLayout } from \"../../properties-panel/mixins/layout-section.js\";\nimport { loading } from \"../../properties-panel/mixins/loading.js\";\nimport {\n Section,\n PropsPanelCategory,\n} from \"../../properties-panel/props-builder.js\";\nimport { Prop } from \"../../properties-panel/props-builder.js\";\nimport type { ChainableComponent } from \"../../../internal-details/sb-wrapper.jsx\";\nimport type { EventFlow } from \"../../event-flow.js\";\nimport type {\n ExtractProps,\n InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport type { WithBindingIdentifier } from \"@superblocksteam/library-shared/types\";\nimport type { ReactNode } from \"react\";\n\nconst defaultSectionsTemplate = () => ({\n appearance: Section.category(PropsPanelCategory.Appearance).children({\n loading: loading(),\n className: Prop.string()\n .propertiesPanel({\n label: \"Styles\",\n controlType: \"TAILWIND_CLASS_BUILDER\",\n isRemovable: true,\n visibility: \"SHOW_NAME\",\n defaultOnAdd: \"\",\n })\n .docs({\n description:\n \"Classes to apply to the avatar. This can be tailwind CSS classes or any other CSS classes.\",\n }),\n }),\n layout: basicLayout(),\n});\n\nconst restrictedKeys = Object.values(defaultSectionsTemplate()).reduce(\n (keys, section) => {\n return [...keys, ...Object.keys(section.props)];\n },\n [] as string[],\n);\n\nexport type CustomComponentPropertiesDefinition =\n | {\n [key: string]: Prop<any>;\n }\n | {\n [key: string]: Section<any>;\n };\n\nexport type StrictExtractProps<\n T,\n DefaultsBehavior extends \"AlwaysOptional\" | \"RequiredIfDefault\",\n IsEvaluated extends boolean,\n> = {\n [K in keyof ExtractProps<T, DefaultsBehavior, IsEvaluated> as string extends K\n ? never\n : K]: ExtractProps<T, DefaultsBehavior, IsEvaluated>[K];\n};\n\ntype WrappedEventProps<IP extends InternalProps<any>> = {\n [K in keyof IP]: IP[K] extends EventFlow | undefined\n ? () => Promise<void>\n : IP[K];\n};\n\ntype SectionProps<\n PD extends Record<string, Prop<any>> | Record<string, Section<any>>,\n> =\n PD extends Record<string, Prop<any>>\n ? Record<string, Section<any>> & ReturnType<typeof defaultSectionsTemplate>\n : PD;\n\nexport type CustomComponentProps<\n PD extends Record<string, Prop<any>> | Record<string, Section<any>>,\n SP extends SectionProps<PD> = SectionProps<PD>,\n IP extends InternalProps<SP> = InternalProps<SP>,\n> = WrappedEventProps<IP>;\n\nexport type CustomComponentOutputProps<\n PD extends CustomComponentPropertiesDefinition,\n> = StrictExtractProps<PD, \"AlwaysOptional\", false> & {\n bind?: WithBindingIdentifier;\n} & StrictExtractProps<\n ReturnType<typeof defaultSectionsTemplate>,\n \"AlwaysOptional\",\n false\n >;\n\nexport function registerComponent<\n PD extends CustomComponentPropertiesDefinition,\n>(\n name: string,\n propertiesDefinition: PD,\n // todo: laura\n component: React.FC<CustomComponentProps<PD>>,\n): ChainableComponent<any, CustomComponentOutputProps<PD>> {\n // check if the properties are already in sections\n\n let allSections: Record<string, Section<any>>;\n const defaultSections = defaultSectionsTemplate();\n const containsSections = Object.values(propertiesDefinition).every(\n (prop) => prop instanceof Section,\n );\n\n if (!containsSections) {\n const contentSection = Section.category(\n PropsPanelCategory.Content,\n ).children(\n Object.fromEntries(\n Object.entries(\n propertiesDefinition as Record<string, Prop<any>>,\n ).filter(([key, prop]) => {\n if (restrictedKeys.includes(key)) {\n return false;\n }\n return prop.type !== \"event\";\n }),\n ),\n );\n const eventSection = Section.category(\n PropsPanelCategory.EventHandlers,\n ).children(\n Object.fromEntries(\n Object.entries(\n propertiesDefinition as Record<string, Prop<any>>,\n ).filter(([key, prop]) => {\n if (restrictedKeys.includes(key)) {\n return false;\n }\n return prop.type === \"event\";\n }),\n ),\n );\n allSections = {\n content: contentSection,\n ...defaultSections,\n events: eventSection,\n };\n } else {\n allSections = propertiesDefinition as Record<string, Section<any>>;\n\n // We search for default props that are not in the propertiesDefinition\n // If don't find them, we add them to the propertiesDefinition in the correct section\n const allCurrentProps = Object.values(allSections).flatMap((section) =>\n Object.keys(section.props),\n );\n Object.entries(defaultSections).forEach(([sectionName, section]) => {\n Object.entries(section.props).forEach(([propName, prop]) => {\n if (!allCurrentProps.includes(propName)) {\n if (!allSections[sectionName]) {\n allSections[sectionName] =\n defaultSections[sectionName as keyof typeof defaultSections];\n }\n allSections[sectionName].add({ [propName]: prop });\n }\n });\n });\n }\n\n return registerComponentInternal<any, any, any>(\n name,\n {\n propertiesDefinition: allSections,\n customComponent: true,\n },\n (props) => {\n const Component = component(props);\n\n // TODO for Alex to figure out how to inject instance IDs into the inner contents\n // const shouldClone =\n // !isSbComponent(Component) &&\n // React.isValidElement(Component) &&\n // Component.props[SOURCE_ID_ATTRIBUTE] == null;\n\n const shouldClone = false;\n if (shouldClone) {\n return (\n <CloneWithPassthrough\n componentNode={Component as React.ReactElement}\n widgetProps={props}\n />\n );\n }\n return Component;\n },\n );\n}\n\nfunction CloneWithPassthrough(props: {\n widgetProps: Record<string, unknown>;\n componentNode: React.ReactElement;\n}) {\n const passthroughProps = usePassthroughProps(props.widgetProps);\n const FinalCoponent = React.cloneElement(\n props.componentNode,\n passthroughProps,\n );\n return FinalCoponent;\n}\n\nexport function isCustomComponent(child: ReactNode) {\n return (\n typeof child === \"object\" && Boolean((child as any).type?.isCustomComponent)\n );\n}\n","import { StateVarPersistence } from \"@superblocksteam/library-shared/types\";\nimport {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\n\ntype Variable = InternalProps<typeof propertiesDefinition>;\n\nexport const propertiesDefinition = {\n general: Section.category(PropsPanelCategory.Uncategorized)\n .propertiesPanel({ showHeader: false })\n .children({\n defaultValue: Prop.any().readAndWrite().propertiesPanel({\n label: \"Default value\",\n description: \"Sets the default value of the state variable\",\n placeholder: \"Hello, ${currentUser.value}\",\n controlType: \"INPUT_TEXT\",\n }),\n value: Prop.any().readAndWrite(),\n persistence: Prop.string<StateVarPersistence>()\n .default(StateVarPersistence.TEMPORARY)\n .readAndWrite()\n .propertiesPanel({\n label: \"Persistence\",\n description: \"Sets the persistence of the state variable\",\n controlType: \"RADIO_BUTTON_GROUP\",\n options: [\n {\n label: \"Temp\",\n icon: \"STATE_VAR_TEMPORARY\",\n value: StateVarPersistence.TEMPORARY,\n },\n {\n label: \"Local\",\n icon: \"STATE_VAR_LOCAL_STORAGE\",\n value: StateVarPersistence.LOCAL_STORAGE,\n },\n ],\n }),\n }),\n functions: Section.category(PropsPanelCategory.Functions).children({\n set: Prop.function(function (this, value: any) {\n const widget = this as unknown as Variable;\n widget.value = value;\n }),\n reset: Prop.function(function (this) {\n const widget = this as unknown as Variable;\n widget.value = widget.defaultValue;\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n StateVarPersistence,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\nexport { StateVarPersistence };\n\ntype Props<T = any> = {\n defaultValue: T;\n persistence?: StateVarPersistence;\n};\n\nexport const StateVar = registerEntity(\n SbEntityType.VARIABLE,\n {\n propertiesDefinition,\n },\n ({ defaultValue, persistence }: RawPropsToExternal<Props>) => {\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.VARIABLE,\n defaultValue,\n value: defaultValue,\n persistence,\n };\n },\n);\n","import {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport { VALIDATORS } from \"../../properties-panel/validators.js\";\n\ntype Timer = InternalProps<typeof propertiesDefinition> & {\n stop: () => void;\n start: () => void;\n toggle: () => void;\n};\n\nexport const propertiesDefinition = {\n general: Section.category(PropsPanelCategory.Uncategorized)\n .propertiesPanel({ showHeader: false })\n .children({\n intervalMs: Prop.number().default(300).readAndWrite().propertiesPanel({\n label: \"Interval\",\n description: \"Sets the interval of the timer\",\n placeholder: \"1000\",\n isJSConvertible: false,\n controlType: \"TIMER_INTERVAL\",\n }),\n startOnPageLoad: Prop.boolean().readAndWrite().propertiesPanel({\n label: \"Start on page load\",\n description: \"Sets whether the timer should start on page load\",\n controlType: \"SWITCH\",\n }),\n }),\n events: Section.category(PropsPanelCategory.EventHandlers).children({\n onFire: Prop.event().propertiesPanel({ label: \"onFire\" }),\n }),\n metadata: Section.category(PropsPanelCategory.Meta).children({\n timerId: Prop.string().validate(VALIDATORS.TEXT_ALLOW_UNDEFINED),\n isRunning: Prop.boolean().default(function (this: Timer) {\n return this.timerId !== undefined;\n }),\n }),\n functions: Section.category(PropsPanelCategory.Functions).children({\n start: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n if (timer.timerId) clearInterval(timer.timerId);\n timer.timerId = setInterval(() => {\n timer?.onFire?.();\n }, timer.intervalMs) as any;\n }),\n stop: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n clearInterval(timer.timerId);\n timer.timerId = undefined;\n }),\n toggle: Prop.function(function (this, _s) {\n const timer = this as unknown as Timer;\n if (timer.isRunning) {\n timer.stop();\n } else {\n timer.start();\n }\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { EventFlow } from \"../../../index.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\ntype Props = {\n intervalMs?: number;\n startOnPageLoad?: boolean;\n onFire?: EventFlow;\n};\n\nexport const Timer = registerEntity(\n SbEntityType.TIMER,\n {\n propertiesDefinition,\n },\n ({ onFire, intervalMs, startOnPageLoad }: RawPropsToExternal<Props>) => {\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.TIMER,\n intervalMs,\n startOnPageLoad,\n onFire,\n };\n },\n);\n","import { action, makeAutoObservable } from \"mobx\";\nimport type { SbApiRunOptions } from \"@superblocksteam/library-shared/types\";\n\nexport class SuspensibleAPI<TData = any, TArgs extends any[] = any[]> {\n private _response: TData | undefined;\n private _error: Error | undefined;\n private _promise: Promise<TData> | undefined;\n private _isLoading: boolean = false;\n private _runFn: (options?: SbApiRunOptions) => Promise<TData>;\n private _cancelFn: (...args: TArgs) => Promise<void>;\n\n constructor({\n runFn,\n cancelFn,\n }: {\n runFn: (options?: SbApiRunOptions) => Promise<TData>;\n cancelFn: (...args: TArgs) => Promise<void>;\n }) {\n this._runFn = runFn;\n this._cancelFn = cancelFn;\n makeAutoObservable(this);\n }\n\n /**\n * Context-aware response getter that either returns data or throws promises to trigger React Suspense.\n */\n get response(): TData | undefined {\n // If we are still loading, throw the Promise so React suspends\n if (this._isLoading && this._promise) {\n throw this._promise;\n }\n // Return whatever data we have (could be undefined if loading or no data)\n return this._response;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n get error(): Error | undefined {\n return this._error;\n }\n\n async run(options?: SbApiRunOptions): Promise<TData> {\n this._isLoading = true;\n this._error = undefined;\n\n this._promise = this._runFn(options)\n .then(\n action((data) => {\n this._response = data;\n this._isLoading = false;\n return data;\n }),\n )\n .catch(\n action((error) => {\n this._error = error;\n this._isLoading = false;\n throw error;\n }),\n );\n\n return this._promise;\n }\n\n async cancel(...args: TArgs): Promise<void> {\n this._isLoading = false;\n await this._cancelFn(...args);\n }\n}\n","import rootStore from \"../../../internal-details/lib/root-store.js\";\nimport {\n Section,\n Prop,\n PropsPanelCategory,\n type InternalProps,\n} from \"../../properties-panel/props-builder.js\";\nimport { SuspensibleAPI } from \"./suspensible-api.js\";\nimport type { ApiResult } from \"../../../internal-details/lib/features/api-store.js\";\nimport type { SbApiRunOptions } from \"@superblocksteam/library-shared/types\";\n\nexport type ApiEntity = Omit<\n InternalProps<typeof propertiesDefinition>,\n \"_suspensibleApi\"\n> & {\n run: () => Promise<any>;\n cancel: () => Promise<any>;\n _suspensibleApi: SuspensibleAPI<any, any[]>;\n};\n\nexport const propertiesDefinition = {\n events: Section.category(PropsPanelCategory.EventHandlers)\n .children({\n onSuccess: Prop.event().propertiesPanel({ label: \"onSuccess\" }),\n onError: Prop.event().propertiesPanel({ label: \"onError\" }),\n })\n .propertiesPanel({\n isDefaultOpen: true,\n showHeader: true,\n headerType: \"Large\",\n subHeader:\n \"Configure frontend event handlers to run in response to the API\",\n }),\n metadata: Section.category(PropsPanelCategory.Meta).children({\n response: Prop.any()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.response;\n })\n .readable(),\n error: Prop.any()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.error;\n })\n .readable(),\n isLoading: Prop.boolean()\n .computed(function (this: ApiEntity) {\n return this._suspensibleApi.isLoading;\n })\n .readable(),\n }),\n functions: Section.category(\"Derived\").children({\n run: Prop.function(async function (\n this,\n args?: { traceHeaders?: Record<string, string> } & Record<\n string,\n unknown\n >,\n ): Promise<any> {\n const api = this as unknown as ApiEntity;\n try {\n const result = await api._suspensibleApi.run(args);\n await api.onSuccess?.();\n return result;\n } catch (error) {\n await api.onError?.();\n throw error;\n }\n }),\n cancel: Prop.function(async function (this) {\n const api = this as unknown as ApiEntity;\n await api._suspensibleApi.cancel();\n }),\n }),\n\n internal: Section.category(PropsPanelCategory.Internal).children({\n /**\n * Internal SuspensibleAPI instance that manages loading states and React Suspense integration.\n * This property is hidden from the public interface but accessible to other properties.\n */\n _suspensibleApi: Prop.internal(function (this: any) {\n const api = this as unknown as ApiEntity;\n return new SuspensibleAPI({\n runFn: async (options?: SbApiRunOptions): Promise<any> => {\n const result = await rootStore.apis\n .runApi(api.name, api.scopeId, options)\n .catch(\n (err): ApiResult => ({\n error: err,\n data: null,\n }),\n );\n\n if (result.error) {\n throw result.error;\n }\n return result.data;\n },\n cancelFn: async (): Promise<void> => {\n // TODO: is there a wayt to end the span here?\n rootStore.apis.cancelApi(api.name, api.scopeId);\n },\n });\n }),\n }),\n};\n","import {\n SbEntityType,\n sbEntitySymbol,\n} from \"@superblocksteam/library-shared/types\";\nimport { registerEntity } from \"../../../internal-details/sb-wrapper.jsx\";\nimport { propertiesDefinition } from \"./props.js\";\nimport type { EventFlow } from \"../../../index.js\";\nimport type { RawPropsToExternal } from \"../../properties-panel/props-builder.js\";\n\ntype Props = {\n onSuccess?: EventFlow;\n onError?: EventFlow;\n};\n\nexport const SbApi = registerEntity(\n SbEntityType.API,\n {\n propertiesDefinition,\n },\n ({ onSuccess, onError }: RawPropsToExternal<Props>) => {\n // Response and error are intentionally not included here, they will be\n // set at runtime, after APIs are executed\n return {\n [sbEntitySymbol]: true,\n type: SbEntityType.API,\n onSuccess,\n onError,\n };\n },\n);\n","// import TokenProvider from \"../../TokenProvider\";\n\nimport { useMemo } from \"react\";\n\n// export const userApi = createApi({\n// reducerPath: \"userApi\",\n// baseQuery: fetchBaseQuery({\n// baseUrl: \"https://dev.superblocks.com/api/v1/\",\n// prepareHeaders(headers) {\n// headers.set(\"Authorization\", `Bearer ${TokenProvider.getToken()}`);\n// return headers;\n// },\n// }),\n// endpoints: (builder) => ({\n// getCurrentUser: builder.query({\n// query: () => ({\n// url: \"/users/me\",\n// responseHandler: async (response) => {\n// const data = await response.json();\n// lastRenderedProps.Global = {\n// user: data.data.user,\n// };\n// console.log(\"retrieved user\", data.data.user);\n// return data;\n// },\n// }),\n// }),\n// }),\n// });\n\nexport function useGetCurrentUserQuery() {\n return useMemo(() => {\n return {\n isLoading: false,\n data: {\n user: {\n name: \"Test User\",\n },\n },\n };\n }, []);\n}\n","import * as Dialog from \"@radix-ui/react-dialog\";\nimport { isEqual } from \"lodash\";\nimport { observer } from \"mobx-react-lite\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport {\n ErrorIconContainer,\n StyledClarkIcon,\n ErrorTitle,\n ErrorMessage,\n ErrorDetails,\n ErrorSummary,\n ErrorStack,\n ActionsContainer,\n SecondaryButton,\n} from \"../lib/internal-details/internal-components/common.js\";\nimport { FixWithClarkButton } from \"../lib/internal-details/internal-components/fix-with-clark-button.js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\n\n// Global functions injected by the vanilla error overlay\ndeclare global {\n interface Window {\n __SB_MARK_APP_LOADED?: () => void;\n }\n\n // Vite HMR types for import.meta.hot\n interface ImportMeta {\n readonly hot?: {\n on: (event: string, callback: (payload: any) => void) => void;\n };\n }\n}\n\nconst ModalOverlay = styled(Dialog.Overlay)`\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n animation: fadeIn 0.2s ease-out;\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`;\n\nconst ModalContent = styled(Dialog.Content)`\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border-radius: 8px;\n box-shadow:\n 0 0 1px rgba(0, 0, 0, 0.1),\n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 650px;\n max-height: 80vh;\n width: 90vw;\n padding: 16px;\n overflow-y: auto;\n z-index: 1001;\n animation: slideIn 0.2s ease-out;\n scrollbar-width: thin;\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n &:focus {\n outline: none;\n }\n`;\n\nconst InnerModalContent = styled.div`\n position: relative;\n padding: 2.5rem;\n`;\n\nconst ModalCloseButtonContainer = styled.div`\n position: sticky;\n top: 0;\n width: 100%;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst ModalCloseButton = styled(Dialog.Close)`\n height: fit-content;\n background: none;\n border: none;\n color: #6c7689;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: #f3f4f6;\n }\n\n &:focus {\n outline: 2px solid #08a4ff;\n outline-offset: 2px;\n }\n`;\n\nconst ErrorNotificationButton = styled.button`\n position: fixed;\n right: 16px;\n bottom: 16px;\n z-index: 1000;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: none;\n`;\n\nconst ErrorNotificationContent = styled.div`\n background: #ef4444;\n color: white;\n padding: 12px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n max-width: 40rem;\n box-shadow:\n 0 10px 25px -5px rgba(0, 0, 0, 0.1),\n 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow:\n 0 20px 25px -5px rgba(0, 0, 0, 0.15),\n 0 10px 10px -5px rgba(0, 0, 0, 0.1);\n }\n`;\n\nconst ErrorText = styled.span`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ErrorIcon = styled.svg`\n flex-shrink: 0;\n`;\n\nexport type BuildError =\n | {\n errorType: \"import\";\n error: string;\n stack: string;\n importPath: string;\n }\n | {\n errorType: \"general\";\n error: string;\n stack?: string;\n };\n\nexport type BuildErrorModalProps = {\n isOpen: boolean;\n error: BuildError | null;\n onClose: () => void;\n};\n\nexport const BuildErrorNotification = observer(\n function BuildErrorNotification() {\n const [currentError, setCurrentError] = useState<BuildError | null>(null);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const lastBuildError = useRef<BuildError | null>(null);\n\n useEffect(() => {\n // Signal to the vanilla error overlay that React has loaded\n if (typeof window !== \"undefined\" && window.__SB_MARK_APP_LOADED) {\n window.__SB_MARK_APP_LOADED();\n }\n\n // Listen to Vite's error events\n if (import.meta.hot) {\n import.meta.hot.on(\"vite:error\", (payload) => {\n const error = payload?.err || payload;\n const errorMessage = error?.message || String(error);\n\n // Parse error type based on error name or message\n let buildError: BuildError;\n\n // Check for import errors\n if (error?.name === \"ImportError\" || error?.importPath) {\n buildError = {\n errorType: \"import\",\n error: errorMessage,\n stack: error?.stack || \"\",\n importPath: error?.importPath || \"unknown\",\n };\n } else if (errorMessage.includes(\"Failed to resolve import\")) {\n // Fallback for non-custom import errors\n const importMatch = errorMessage.match(\n /Failed to resolve import [\"'](.+?)[\"']/,\n );\n buildError = {\n errorType: \"import\",\n error: errorMessage,\n stack: error?.stack || \"\",\n importPath: importMatch ? importMatch[1] : \"unknown\",\n };\n } else {\n buildError = {\n errorType: \"general\",\n error: errorMessage,\n stack: error?.stack,\n };\n }\n\n setCurrentError(buildError);\n });\n\n // Clear errors on successful updates\n import.meta.hot.on(\"vite:beforeUpdate\", () => {\n setCurrentError(null);\n setIsModalOpen(false);\n });\n\n // Mark build success after a successful HMR update so the loader can hide\n import.meta.hot.on(\"vite:afterUpdate\", () => {\n rootStore.editStore?.ai.markFirstBuildSuccess();\n });\n }\n }, []);\n\n // Auto-open modal when new error appears\n useEffect(() => {\n if (currentError && !isEqual(lastBuildError.current, currentError)) {\n setIsModalOpen(true);\n lastBuildError.current = currentError;\n }\n }, [currentError]);\n\n // Check if AI is currently generating\n const isAIGenerating = rootStore.editStore?.ai.getIsEditing() ?? false;\n\n // During AI generation, don't show any error UI\n if (!currentError || isAIGenerating) {\n return null;\n }\n\n const displayCornerError = !isModalOpen;\n const errorText =\n currentError.errorType === \"import\" ? \"Import Error\" : \"Build Error\";\n\n return (\n <>\n <BuildErrorModal\n isOpen={isModalOpen}\n error={currentError}\n onClose={() => setIsModalOpen(false)}\n />\n {displayCornerError ? (\n <ErrorNotificationButton onClick={() => setIsModalOpen(true)}>\n <ErrorNotificationContent>\n <ErrorIcon\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8z\" />\n <path d=\"M7.002 11a1 1 0 112 0 1 1 0 01-2 0zM7.1 4.995a.905.905 0 111.8 0l-.35 3.507a.552.552 0 01-1.1 0L7.1 4.995z\" />\n </ErrorIcon>\n <ErrorText>{errorText}</ErrorText>\n </ErrorNotificationContent>\n </ErrorNotificationButton>\n ) : null}\n </>\n );\n },\n);\n\nexport function BuildErrorModal({\n isOpen,\n error,\n onClose,\n}: BuildErrorModalProps) {\n if (!error) return null;\n\n const title = error.errorType === \"import\" ? \"Import error\" : \"Build error\";\n const message =\n error.errorType === \"import\" ? (\n <>\n Error importing <code>{error.importPath}</code>\n </>\n ) : (\n \"An error occurred during the build process\"\n );\n\n // Combine error message with stack trace for full details\n const details =\n error.stack && error.stack.trim()\n ? `${error.error}\\n${error.stack}`\n : error.error;\n\n // Create an Error object for FixWithClarkButton\n const errorObj = new Error(error.error);\n errorObj.stack = details || error.error;\n if (error.errorType === \"import\") {\n errorObj.name = \"ImportError\";\n }\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={onClose}>\n <Dialog.Portal>\n <ModalOverlay />\n <ModalContent data-test=\"build-error-modal\">\n <ModalCloseButtonContainer>\n <ModalCloseButton aria-label=\"Close error dialog\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M12.8 4.4L11.6 3.2 8 6.8 4.4 3.2 3.2 4.4 6.8 8 3.2 11.6 4.4 12.8 8 9.2 11.6 12.8 12.8 11.6 9.2 8z\" />\n </svg>\n </ModalCloseButton>\n </ModalCloseButtonContainer>\n\n <InnerModalContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <Dialog.Title asChild>\n <ErrorTitle>{title}</ErrorTitle>\n </Dialog.Title>\n\n <ErrorMessage data-test=\"build-error-message\">\n {message}\n </ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={errorObj} onClick={onClose} />\n <SecondaryButton onClick={() => window.location.reload()}>\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {details ? (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{details}</ErrorStack>\n </ErrorDetails>\n ) : error.errorType === \"general\" && error.error ? (\n <ErrorDetails>\n <ErrorSummary>Error details</ErrorSummary>\n <ErrorStack>{error.error}</ErrorStack>\n </ErrorDetails>\n ) : null}\n </InnerModalContent>\n </ModalContent>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { PAGE_COMPONENT_TYPE } from \"@superblocksteam/library-shared\";\n\n// Keeping parentType in the signature for now, in case we need to make it more complex later\nexport function isNestable(\n componentType: string,\n _parentType?: string,\n): boolean {\n if (componentType === PAGE_COMPONENT_TYPE) {\n return false;\n }\n\n return true;\n}\n","import { Property } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\n\nimport { isNestable } from \"./dnd/is-nestable.js\";\nimport { filterSafeStackDimensionProperties } from \"./dnd/utils.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport type {\n CreationContext,\n PropertyValues,\n ParentInfo,\n CreateRequest as EditorTemplateCreateRequest,\n} from \"../lib/internal-details/sb-wrapper.jsx\";\nimport type { Dim } from \"@superblocksteam/library-shared\";\nimport type {\n PropertyInfo,\n SbElement,\n SourceLocation,\n} from \"@superblocksteam/library-shared/types\";\n\nimport type { CreateRequest } from \"@superblocksteam/library-shared/types\";\n\nfunction getParentInfo(parent: SourceLocation): ParentInfo {\n const parentComponentMeta =\n getEditStore().runtimeEntitiesManager.getAnyEditorWidgetMeta(parent.id);\n return {\n type: parentComponentMeta?.type,\n };\n}\n\nexport const generateUniqueName = (componentType: string) => {\n const baseName = componentType;\n\n let counter = 1;\n let name = `${baseName}${counter}`;\n while (rootStore.nameManager.hasEntityWithName(name)) {\n counter++;\n name = `${baseName}${counter}`;\n }\n return name;\n};\n\nfunction getBinding({\n componentType,\n editorTemplateCreateRequest,\n}: {\n componentType: string;\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>;\n}): PropertyInfo<string> | undefined {\n if (editorTemplateCreateRequest?.generateBinding === true) {\n return Property.Static(generateUniqueName(componentType));\n } else if (typeof editorTemplateCreateRequest?.generateBinding === \"string\") {\n return Property.Static(editorTemplateCreateRequest.generateBinding);\n } else {\n return undefined;\n }\n}\n\nfunction getComponentBaseProperties(\n componentType: string,\n _parentInfo: ParentInfo,\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>,\n) {\n let properties: PropertyValues<any> & Record<string, PropertyInfo> = {};\n\n const editorTemplates =\n rootStore.componentRegistry.getEditorTemplates(componentType);\n if (editorTemplates && editorTemplates.length > 1) {\n throw new Error(\n `Multiple editor templates are not supported yet. Found ${editorTemplates.length} for component type: ${componentType}.`,\n );\n }\n\n if (editorTemplateCreateRequest?.properties) {\n properties = {\n ...properties,\n ...editorTemplateCreateRequest.properties,\n };\n }\n\n const binding = getBinding({\n componentType,\n editorTemplateCreateRequest,\n });\n if (binding) {\n properties.name = binding;\n }\n\n const { width, height, size } = properties;\n\n const safeDimensions = filterSafeStackDimensionProperties({\n width: width?.value as Dim | undefined,\n height: height?.value as Dim | undefined,\n size: size?.value as Dim | undefined | unknown,\n });\n return {\n properties: {\n ...properties,\n ...safeDimensions,\n },\n children: editorTemplateCreateRequest?.children ?? [],\n };\n}\n\nfunction getCreateAtParentElement(\n relativeParent: SourceLocation,\n createAt?: \"root\" | \"dropLocation\",\n): { source: SourceLocation } {\n if (createAt === \"root\") {\n const parentInstanceId =\n getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n relativeParent.id,\n );\n\n const pageComponent =\n getEditStore().runtimeEntitiesManager.getClosestAncestorByType(\n parentInstanceId,\n \"Page\",\n );\n\n if (!pageComponent) {\n throw new Error(\n `Page component not found for parent: ${relativeParent.id}`,\n );\n }\n\n return { source: { id: pageComponent.sourceId } };\n } else {\n return { source: relativeParent };\n }\n}\n\n// Create components from the Editor\nexport default async function createComponent({\n componentType,\n parent,\n scopeName,\n baseProperties = {},\n skipSecondaryComponentsCreation, // will only create the primary component. Secondary components are usually trigger components (e.g: Button that triggers the modal)\n otherComponentsUpdates,\n}: {\n componentType: string;\n parent: SourceLocation;\n scopeName: string;\n baseProperties?: Record<string, PropertyInfo>;\n skipSecondaryComponentsCreation?: boolean; // e.g. only create modal and not trigger button\n otherComponentsUpdates?: Record<SbElement, Record<string, PropertyInfo>>;\n}): Promise<SbElement | undefined> {\n const parentInfo = getParentInfo(parent);\n\n if (!isNestable(componentType, parentInfo.type)) {\n console.error(`${componentType} cannot be nested under ${parentInfo.type}`);\n return;\n }\n\n const editorTemplates =\n rootStore.componentRegistry.getEditorTemplates(componentType);\n if (editorTemplates && editorTemplates.length > 1) {\n throw new Error(\n `Multiple editor templates are not supported yet. Found ${editorTemplates.length} for component type: ${componentType}.`,\n );\n }\n\n const context: CreationContext = {\n generateUniqueName,\n parentInfo,\n defaultTagNames: rootStore.componentRegistry.defaultTagNames,\n selfTagName: componentType,\n };\n\n // Creation\n const editorTemplateCreateRequest = editorTemplates?.[0]?.create?.(context);\n\n const primaryEditorTemplateCreateRequest = Array.isArray(\n editorTemplateCreateRequest,\n )\n ? editorTemplateCreateRequest[0]\n : editorTemplateCreateRequest;\n\n if (\n editorTemplateCreateRequest &&\n primaryEditorTemplateCreateRequest?.type !== componentType\n ) {\n throw new Error(\n `When defining a ${Array.isArray(editorTemplateCreateRequest) ? \"multiple\" : \"single\"} component to be created on an EditorTemplate, the type must match with the component being created. got: ${primaryEditorTemplateCreateRequest?.type} when it should have been ${componentType}`,\n );\n }\n\n const editorTemplateCreateRequests = Array.isArray(\n editorTemplateCreateRequest,\n )\n ? editorTemplateCreateRequest\n : [editorTemplateCreateRequest];\n\n const editStore = getEditStore();\n\n function editorTemplateCreateRequestToInternalCreateRequest({\n editorTemplateCreateRequest,\n baseProperties,\n }: {\n editorTemplateCreateRequest?: EditorTemplateCreateRequest<any>;\n baseProperties: Record<string, PropertyInfo>;\n }): CreateRequest {\n const type = editorTemplateCreateRequest?.type ?? componentType;\n\n const { properties: propertiesFromType, children } =\n getComponentBaseProperties(type, parentInfo, editorTemplateCreateRequest);\n\n const properties = {\n ...propertiesFromType,\n ...baseProperties,\n };\n\n const createAtParentElement = getCreateAtParentElement(\n parent,\n editorTemplateCreateRequest?.createAt,\n );\n\n const primaryComponent: CreateRequest = {\n parentElement: createAtParentElement,\n tagName: type,\n properties,\n children,\n scopeName,\n id: editStore.operationManager.generateSourceId(),\n };\n\n return primaryComponent;\n }\n\n const createRequests = editorTemplateCreateRequests.map(\n (editorTemplateCreateRequest, index) =>\n editorTemplateCreateRequestToInternalCreateRequest({\n editorTemplateCreateRequest,\n baseProperties: index === 0 ? baseProperties : {}, // baseProperties are only applied to the primary component\n }),\n );\n\n const hasOtherComponentsUpdates =\n otherComponentsUpdates && Object.keys(otherComponentsUpdates).length > 0;\n\n const hasMultipleCreateComponents =\n editorTemplateCreateRequests.length > 1 && !skipSecondaryComponentsCreation;\n\n const isBatchOperation =\n hasOtherComponentsUpdates || hasMultipleCreateComponents;\n\n if (isBatchOperation) {\n const performOtherComponentsUpdates = (\n otherComponentsUpdates: Record<SbElement, Record<string, PropertyInfo>>,\n ) => {\n Object.entries(otherComponentsUpdates).forEach(([sourceId, updates]) => {\n editStore.operationManager.setWidgetProperties({\n sourceId: sourceId as SbElement,\n properties: updates,\n });\n });\n };\n\n editStore.operationManager.batchUpdate(() => {\n if (skipSecondaryComponentsCreation) {\n editStore.operationManager.createComponent(createRequests[0]);\n } else {\n createRequests.forEach((createRequest) => {\n editStore.operationManager.createComponent(createRequest);\n });\n }\n\n if (hasOtherComponentsUpdates) {\n performOtherComponentsUpdates(otherComponentsUpdates);\n }\n });\n } else {\n editStore.operationManager.createComponent(createRequests[0]);\n }\n\n /**\n * Returns the single id, or the the last component if there are multiple.\n * See EditorTemplate's definition to understand why.\n */\n return createRequests.at(-1)!.id;\n}\n","import { rectIntersection } from \"@dnd-kit/core\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { doesInteractionLayerContainInstance } from \"../interaction-utils.js\";\nimport type { ComponentDroppableData } from \"./types.js\";\nimport type {\n CollisionDetection,\n Collision,\n DroppableContainer,\n} from \"@dnd-kit/core\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype CollisionData = {\n droppableContainer?: DroppableContainer;\n injectedCollisionRect?: {\n width: number;\n height: number;\n bottom: number;\n left: number;\n right: number;\n top: number;\n };\n};\n\n// Extended args type that includes pre-sorted collisions\ntype ExtendedCollisionArgs = Parameters<CollisionDetection>[0] & {\n collisions?: Collision[];\n};\n\n// https://github.com/clauderic/dnd-kit/pull/334#issuecomment-1965708784\nconst fixCursorSnapOffset: CollisionDetection = (args) => {\n // Bail out if keyboard activated\n if (!args.pointerCoordinates) {\n return rectIntersection(args);\n }\n const { x, y } = args.pointerCoordinates;\n const { width, height } = args.collisionRect;\n const updated = {\n ...args,\n // The collision rectangle is broken when using snapCenterToCursor. Reset\n // the collision rectangle based on pointer location and overlay size.\n collisionRect: {\n width,\n height,\n bottom: y + height / 2,\n left: x - width / 2,\n right: x + width / 2,\n top: y - height / 2,\n },\n };\n\n const editStore = getEditStore();\n\n // Get collisions sorted by depth (innermost first)\n const collisions = rectIntersection(updated);\n\n const sortedCollisions = collisions\n .filter((collision) => {\n const activeRootInstanceId =\n editStore.interactionLayerManager.activeRootInstanceId;\n\n if (!activeRootInstanceId) return true;\n return (\n collision.id === activeRootInstanceId ||\n doesInteractionLayerContainInstance(\n activeRootInstanceId,\n collision.id as SbInstance,\n )\n );\n })\n .map((collision: Collision) => {\n const rect = collision.data?.droppableContainer?.rect.current;\n const pointerInside =\n rect &&\n x >= rect.left &&\n x <= rect.right &&\n y >= rect.top &&\n y <= rect.bottom;\n return {\n ...collision,\n pointerInside,\n };\n })\n .sort((a, b) => {\n const aData = a.data?.droppableContainer?.data.current as\n | ComponentDroppableData\n | undefined;\n const bData = b.data?.droppableContainer?.data.current as\n | ComponentDroppableData\n | undefined;\n\n // priotize items with pointer inside\n if (a.pointerInside && !b.pointerInside) return -1;\n if (!a.pointerInside && b.pointerInside) return 1;\n\n // Higher depth = more nested = should come first\n return (bData?.depth ?? 0) - (aData?.depth ?? 0);\n });\n\n // Create a modified args object with the depth-sorted collisions\n const modifiedArgs = {\n ...updated,\n collisions: sortedCollisions,\n };\n\n // Use bubblingToParentIfFar with the depth-sorted collisions\n const result = bubblingToParentIfFar(modifiedArgs);\n\n // Add the injected collision rect to the result\n if (result[0]) {\n result[0].data = {\n ...(result[0].data ?? {}),\n injectedCollisionRect: updated.collisionRect,\n } as CollisionData;\n }\n\n return result;\n};\n\nconst bubblingToParentIfFar = (args: ExtendedCollisionArgs) => {\n const { droppableContainers, pointerCoordinates, collisions } = args;\n\n if (!pointerCoordinates || !collisions?.length) return [];\n\n // Get the closest (innermost) collision\n const closestCollision = collisions[0];\n const closestContainer = droppableContainers.find(\n (c) => c.id === closestCollision.id,\n );\n if (!closestContainer?.rect.current) return [];\n\n // Calculate center point and distances\n const rect = closestContainer.rect.current;\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const halfWidth = rect.width / 2;\n const halfHeight = rect.height / 2;\n const dx = pointerCoordinates.x - centerX;\n const dy = pointerCoordinates.y - centerY;\n\n // If pointer is near the edge, bubble up to parent\n const shouldBubbleUp =\n Math.abs(dx) > halfWidth - 4 || // Less than 4px from the edge\n Math.abs(dy) > halfHeight - 4; // Less than 4px from the edge\n\n const editStore = getEditStore();\n const targetId = shouldBubbleUp\n ? editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n closestCollision.id as SbInstance,\n )?.parentInstanceId\n : (closestCollision.id as SbInstance);\n if (!targetId) return [];\n\n const targetContainer = droppableContainers.find((c) => c.id === targetId);\n if (!targetContainer) return [];\n\n return [\n {\n id: targetId,\n data: {\n ...(closestCollision.data ?? {}),\n droppableContainer: targetContainer,\n } as CollisionData,\n },\n ];\n};\n\nexport default fixCursorSnapOffset;\n","import { Dim, Property } from \"@superblocksteam/library-shared\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport createComponent from \"../create-component.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { filterSafeStackDimensionProperties } from \"./utils.js\";\nimport type { StackDropInfo } from \"./types.js\";\nimport type { ClientRect } from \"@dnd-kit/core\";\nimport type { PropertyInfo } from \"@superblocksteam/library-shared\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ValidStackDropInfo = Extract<StackDropInfo, { insertionIndex: number }>;\n\nconst mergeDroppedDimensions = (\n draggedType: string,\n draggedProps: undefined | Record<string, unknown>,\n activeDragRect: ClientRect | null,\n): {\n width?: PropertyInfo;\n height?: PropertyInfo;\n size?: PropertyInfo;\n} => {\n const safeExistingDimensions = filterSafeStackDimensionProperties({\n width: draggedProps?.width as Dim | undefined,\n height: draggedProps?.height as Dim | undefined,\n size: draggedProps?.size as Dim | undefined | string,\n });\n\n const width = safeExistingDimensions.width;\n const height = safeExistingDimensions.height;\n\n if (draggedType === \"Icon\") {\n const size =\n safeExistingDimensions.size ??\n (activeDragRect?.height\n ? Property.Dimension(Dim.px(activeDragRect.height))\n : Property.Static(\"\"));\n return { size };\n }\n\n return {\n width,\n height,\n };\n};\n\nconst handleStackDropWithinCanvas = (params: {\n dropInfo: ValidStackDropInfo;\n draggedId: SbInstance;\n dropTargetId: SbInstance;\n}) => {\n const { dropInfo, draggedId, dropTargetId } = params;\n const editStore = getEditStore();\n const dropSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(dropTargetId);\n const draggedSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(draggedId);\n\n if (!dropSourceId || !draggedSourceId) {\n throw new Error(`Missing IDs: dragging ${draggedId} to ${dropTargetId}`);\n }\n\n console.log(`Dragged ${draggedSourceId} to ${dropSourceId}`, {\n dropInfo,\n index: dropInfo.insertionIndex,\n });\n\n if (dropInfo.noopDrop) {\n return;\n }\n\n const draggedType =\n editStore.runtimeEntitiesManager.getEditorWidgetType(draggedId);\n if (!draggedType) {\n throw new Error(`Missing dragged type: ${draggedId}`);\n }\n const activeDragRect = editStore.ui.dnd.activeDragRect;\n const draggedProps =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(draggedId)?.props;\n editStore.operationManager.dropComponent({\n from: { source: { id: draggedSourceId } },\n to: {\n source: {\n id: dropSourceId,\n index: dropInfo.insertionIndex,\n },\n },\n propsToChange: {\n ...mergeDroppedDimensions(draggedType, draggedProps, activeDragRect),\n },\n });\n};\n\nconst handleStackDropForNewComponent = ({\n componentType,\n dropInfo,\n dropTargetId,\n}: {\n componentType: string;\n dropTargetId: SbInstance;\n dropInfo: ValidStackDropInfo;\n}): Promise<SbElement | undefined> => {\n const editStore = getEditStore();\n const dropSourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(dropTargetId);\n const dropScopeId =\n editStore.runtimeEntitiesManager.getEditorWidgetScopeId(dropTargetId);\n if (!dropSourceId || !dropScopeId) {\n throw new Error(\"Missing drop source id\");\n }\n const scopeName = rootStore.entityManager.getScopeName(dropScopeId);\n return createComponent({\n componentType,\n parent: { index: dropInfo.insertionIndex, id: dropSourceId },\n scopeName,\n });\n};\n\nexport const handleStackDrop = async ({\n dropInfo,\n draggedId,\n dropTargetId,\n isDraggingNewComponent,\n newComponentType,\n}: {\n dropInfo: StackDropInfo;\n draggedId: SbInstance | undefined | null;\n dropTargetId: SbInstance;\n isDraggingNewComponent: boolean;\n newComponentType: string | null | undefined;\n}): Promise<SbElement | undefined> => {\n if (dropInfo.insertionIndex == null) {\n throw new Error(\"No insertion index found\");\n }\n\n if (isDraggingNewComponent) {\n if (!newComponentType) {\n throw new Error(\"Missing componentType to create new component\");\n }\n\n return handleStackDropForNewComponent({\n componentType: newComponentType,\n dropTargetId,\n dropInfo,\n });\n } else {\n if (!draggedId) {\n throw new Error(\"Missing dragged id\");\n }\n\n handleStackDropWithinCanvas({\n dropInfo,\n draggedId,\n dropTargetId,\n });\n }\n};\n","import { useDndMonitor } from \"@dnd-kit/core\";\nimport { WIDGET_DISABLE_DND } from \"@superblocksteam/library-shared\";\nimport { throttle } from \"lodash\";\nimport { runInAction } from \"mobx\";\nimport { useCallback, useMemo } from \"react\";\nimport { getEditStore } from \"../../get-edit-store.js\";\nimport { getBoundingBoxForWidget } from \"../../interaction-utils.js\";\nimport { editorBridge } from \"../../superblocks-editor-bridge.js\";\nimport { handleStackDrop } from \"../handle-stack-drop.js\";\nimport type { ComponentDraggableData } from \"../types.js\";\n\nimport type {\n ClientRect,\n DragEndEvent,\n DragMoveEvent,\n DragStartEvent,\n} from \"@dnd-kit/core\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst measureRect = (id: SbInstance | null): null | ClientRect => {\n const rect = id ? getBoundingBoxForWidget(id) : null;\n if (!rect) {\n return null;\n }\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n };\n};\n\nexport const useHandleDnDEvents = () => {\n const setActiveDragRect = useMemo(() => {\n const editStore = getEditStore();\n const throttled = throttle(\n (rect: ClientRect | null) => {\n editStore.ui.dnd.setActiveDragRect(rect);\n },\n 10,\n {\n leading: true,\n trailing: true,\n },\n );\n return (val: ClientRect | null) => {\n throttled(val);\n };\n }, []);\n\n const setActiveTargetInfo = useMemo(() => {\n const editStore = getEditStore();\n const throttled = throttle(\n (id: SbInstance | null, rect: ClientRect | null) => {\n editStore.ui.dnd.setDropTargetId(id);\n editStore.ui.dnd.setActiveTargetRect(rect);\n },\n 10,\n {\n leading: true,\n trailing: true,\n },\n );\n return (id: SbInstance | null, val: ClientRect | null) => {\n throttled(id, val);\n };\n }, []);\n\n useDndMonitor({\n onDragStart: useCallback((event: DragStartEvent) => {\n const editStore = getEditStore();\n const activeData = event.active?.data.current as\n | ComponentDraggableData\n | undefined;\n\n if (!activeData && !editStore.ui.dnd.isDraggingNewComponent) {\n console.error(\"No active widget data\");\n return;\n }\n\n editStore.ui.dnd.setDropTargetId(null);\n editStore.ui.dnd.setIsDragging(true);\n\n if (editStore.ui.dnd.isDraggingNewComponent) {\n editStore.ui.selectWidget(null);\n editStore.ui.dnd.resizePageIfNeeded();\n } else {\n editStore.ui.selectWidget(\n event.active?.id ? (event.active.id as SbInstance) : null,\n (event.activatorEvent as PointerEvent)?.shiftKey,\n );\n }\n }, []),\n onDragMove: useCallback(\n (event: DragMoveEvent) => {\n setActiveTargetInfo(\n (event.over?.id ?? null) as SbInstance | null,\n event.over?.rect ?? null,\n );\n const collisionRect =\n event.collisions?.[0]?.data?.injectedCollisionRect;\n\n if (collisionRect) {\n setActiveDragRect(collisionRect);\n } else {\n setActiveDragRect(null);\n }\n },\n [setActiveDragRect, setActiveTargetInfo],\n ),\n onDragOver: useCallback(\n (event: DragMoveEvent) => {\n const overId = (\n event.over?.id ? String(event.over?.id) : null\n ) as SbInstance | null;\n setActiveTargetInfo(overId, measureRect(overId));\n },\n [setActiveTargetInfo],\n ),\n onDragCancel: useCallback((_event: DragEndEvent) => {\n const editStore = getEditStore();\n editStore.ui.dnd.setIsDragging(false);\n editStore.ui.dnd.cancelNewComponentDrag();\n }, []),\n onDragEnd: useCallback(async (event: DragEndEvent) => {\n const editStore = getEditStore();\n\n let possibleNewComponentId: SbElement | undefined;\n\n try {\n const activeData = event.active?.data.current as\n | ComponentDraggableData\n | undefined;\n\n if (activeData?.instanceId) {\n const widgetMeta =\n editStore.runtimeEntitiesManager.getEditorWidgetMeta(\n activeData.instanceId,\n );\n const shouldPreventMove = !!widgetMeta?.props?.[WIDGET_DISABLE_DND];\n\n if (shouldPreventMove) {\n editorBridge.sendNotification(\n \"error\",\n \"This component can't be moved because it's defined in code. Ask Clark to move it.\",\n );\n return;\n }\n }\n\n if (!editStore.ui.dnd.isProspectiveDropValid) {\n editorBridge.sendNotification(\n \"error\",\n \"You cannot drop a component here.\",\n );\n return;\n }\n\n const dropTargetId = event.over?.id\n ? (String(event.over.id) as SbInstance)\n : null;\n const draggedId = event.active?.id\n ? (String(event.active?.id) as SbInstance)\n : null;\n\n if (dropTargetId !== editStore.ui.dnd.dropTargetId) {\n // This should never happen\n throw new Error(\"Drop target id and drag over id do not match\");\n }\n\n if (!dropTargetId) {\n throw new Error(\"No drop target id\");\n }\n\n if (editStore.ui.dnd.isDropTargetStackLike) {\n const dropInfo =\n editStore.ui.dnd.stack.refreshPositionsAndGetDropIndex();\n possibleNewComponentId = await handleStackDrop({\n dropInfo,\n isDraggingNewComponent: editStore.ui.dnd.isDraggingNewComponent,\n newComponentType: editStore.ui.dnd.dragToCanvasComponentType,\n dropTargetId,\n draggedId,\n });\n } else {\n throw new Error(\"Grid is no longer supported\");\n }\n } catch (e) {\n console.error(\"Error dropping item\", e);\n } finally {\n runInAction(() => {\n // this must be called in an action, otherwise the drag may occur again\n // see https://linear.app/superblocks/issue/FE-700/cant-drag-to-create-two-new-components-in-a-row\n // and https://mobx.js.org/actions.html#runinaction\n editStore.ui.dnd.setIsDragging(false);\n editStore.ui.dnd.cancelNewComponentDrag();\n\n if (possibleNewComponentId) {\n editStore.ui.selectNewComponentBySourceId(\n possibleNewComponentId as SbElement,\n );\n }\n });\n }\n }, []),\n });\n};\n","import {\n DndContext,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\n\nimport React from \"react\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport collisionDetection from \"./collision-detection.js\";\nimport { useHandleDnDEvents } from \"./hooks/use-handle-dnd-events.js\";\nimport type { PointerSensorOptions, PointerSensorProps } from \"@dnd-kit/core\";\n\nconst pointerConfig: PointerSensorOptions = {\n activationConstraint: {\n distance: 10, // this is needed otherwise the base elements are not clickable\n },\n};\n\n//@ts-expect-error PointerSensor requires different activators\nclass CustomPointerSensor extends PointerSensor {\n constructor(props: PointerSensorProps) {\n super(props);\n }\n\n static activators = [\n {\n eventName: \"onPointerMove\" as const,\n handler: () => {\n return getEditStore().ui.dnd.isDraggingNewComponent;\n },\n },\n ];\n}\n\n// needs to be rendered inside the DndContext\nconst DragHandlerComponent = () => {\n useHandleDnDEvents();\n return null;\n};\n\nexport const DnDProvider = (props: { children: React.ReactNode }) => {\n const pointerSensor = useSensor(PointerSensor, pointerConfig);\n const customPointerSensor = useSensor(CustomPointerSensor);\n\n const sensors = useSensors(pointerSensor, customPointerSensor);\n\n return (\n <DndContext sensors={sensors} collisionDetection={collisionDetection}>\n {props.children}\n <DragHandlerComponent />\n </DndContext>\n );\n};\n","import { useDraggable } from \"@dnd-kit/core\";\nimport { observer } from \"mobx-react-lite\";\nimport { getEditStore } from \"../get-edit-store.js\";\n\n/**\n * A layer above the editor canvas that triggers the draggable preview for new components.\n */\nexport const NewComponentsDragLayer = observer(() => {\n const { setNodeRef, attributes, listeners } = useDraggable({\n id: \"new-component-to-be-dropped\", // the actual component id gets generated once dropped. See useHandleDnDEvents\n });\n\n if (!getEditStore().ui.dnd.isDraggingNewComponent) {\n // Otherwise, we prevent components within the canvas to be dragged & dropped\n return null;\n }\n\n return (\n <div\n className=\"sb-new-component-dragging-layer\"\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n />\n );\n});\n","import { AiContextMode } from \"@superblocksteam/library-shared/types\";\nimport { makeAutoObservable } from \"mobx\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type RuntimeEntitiesManager from \"./runtime-entities-manager\";\nimport type {\n RuntimeErrorData,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nexport class AiManager {\n private _isTaggingEnabled = false;\n private _isEditing = false;\n private _editingComponents: SbElement[] = [];\n private _contextMode: AiContextMode = AiContextMode.SILENT;\n private _targetedComponents: SbElement[] = [];\n private _targetedInstances: SbInstance[] = [];\n private _hasHadSuccessfulBuild = false;\n private _hasEverHadSuccessfulBuild = false;\n\n constructor(private readonly runtimeEntitiesManager: RuntimeEntitiesManager) {\n makeAutoObservable(this);\n }\n\n getIsTaggingEnabled() {\n return this._isTaggingEnabled;\n }\n\n getIsEditing() {\n return this._isEditing;\n }\n\n getShouldShowLoader() {\n return this._isEditing && !this._hasHadSuccessfulBuild;\n }\n\n setIsTaggingEnabled(isTaggingEnabled: boolean) {\n this._isTaggingEnabled = isTaggingEnabled;\n }\n\n getAiContextMode() {\n return this._contextMode;\n }\n\n shouldToggleComponentInAiContext() {\n return (\n this._isTaggingEnabled && this._contextMode === AiContextMode.AUTO_SELECT\n );\n }\n\n getTargetedComponents() {\n if (this._isTaggingEnabled && this._contextMode !== AiContextMode.SILENT) {\n return this._targetedComponents;\n }\n return [];\n }\n\n isEditingComponent(id: SbElement) {\n return (\n this._isEditing &&\n this._editingComponents.some((component) => component === id)\n );\n }\n\n isTargetingComponent(id: SbElement) {\n return this._targetedComponents.includes(id);\n }\n\n startEditing() {\n this._isEditing = true;\n const canvasHasRenderableWidgets =\n this.runtimeEntitiesManager.hasRenderedWidgets();\n\n if (!this._hasEverHadSuccessfulBuild && canvasHasRenderableWidgets) {\n this._hasEverHadSuccessfulBuild = true;\n this._hasHadSuccessfulBuild = true;\n } else {\n this._hasHadSuccessfulBuild = this._hasEverHadSuccessfulBuild;\n }\n\n this.notifyLoaderState();\n }\n\n setEditingComponents(components: SbElement[]) {\n this._editingComponents = components;\n }\n\n finishEditing() {\n this._isEditing = false;\n this._editingComponents = [];\n if (\n !this._hasEverHadSuccessfulBuild &&\n this.runtimeEntitiesManager.hasRenderedWidgets()\n ) {\n this._hasEverHadSuccessfulBuild = true;\n this._hasHadSuccessfulBuild = true;\n }\n this.notifyLoaderState();\n }\n\n setAiContextMode(mode: AiContextMode, components?: SbElement[]) {\n this._contextMode = mode;\n this._targetedComponents = components ?? [];\n\n if (this._targetedComponents.length > 0) {\n const instanceIds = this._targetedComponents.map((component) =>\n this.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n component,\n ),\n );\n this._targetedInstances = instanceIds;\n }\n }\n\n addTargetedInstance(instanceId: SbInstance) {\n // when you add an instance, we remove all other instances for the same source as targets,\n // since visually for the user we only want to show one target\n this.removeAllSharedInstances(instanceId);\n this._targetedInstances.push(instanceId);\n }\n\n toggleTargetedInstance(instanceId: SbInstance) {\n if (this._targetedInstances.includes(instanceId)) {\n this.removeAllSharedInstances(instanceId);\n } else {\n this.removeAllSharedInstances(instanceId);\n this._targetedInstances.push(instanceId);\n }\n }\n\n isTargetedInstance(instanceId: SbInstance) {\n return this._targetedInstances.includes(instanceId);\n }\n\n /**\n * Returns true if we are targeting a different instance of the same source id, since in some cases we want to keep\n * the same source targeted, but just highlight another instance of it\n */\n isAlternateSourceIdTarget(sourceId: SbElement, instanceId: SbInstance) {\n if (!this.isTargetingComponent(sourceId)) {\n return false;\n }\n\n const allInstanceIds =\n this.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n if (this.isTargetedInstance(instanceId)) {\n return false;\n }\n return allInstanceIds.includes(instanceId);\n }\n\n handleRuntimeError(data: RuntimeErrorData) {\n editorBridge.sendRuntimeError(data);\n }\n\n clearRuntimeError(id: string) {\n editorBridge.sendClearRuntimeError(id);\n }\n\n markFirstBuildSuccess() {\n if (this._hasHadSuccessfulBuild) {\n if (!this._hasEverHadSuccessfulBuild) {\n this._hasEverHadSuccessfulBuild = true;\n }\n return;\n }\n\n this._hasHadSuccessfulBuild = true;\n this._hasEverHadSuccessfulBuild = true;\n this.notifyLoaderState();\n }\n\n private notifyLoaderState() {\n editorBridge.sendAiLoaderState?.(this.getShouldShowLoader());\n }\n\n private removeAllSharedInstances(instanceId: SbInstance) {\n const sourceId =\n this.runtimeEntitiesManager.widgets.getSourceIdForInstanceId(instanceId);\n if (sourceId) {\n this.removeAllInstancesForSource(sourceId);\n }\n }\n\n private removeAllInstancesForSource(sourceId: SbElement) {\n const allInstanceIds =\n this.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n );\n this._targetedInstances = this._targetedInstances.filter(\n (instanceId) => !allInstanceIds.includes(instanceId),\n );\n }\n}\n","import { makeAutoObservable } from \"mobx\";\n\nexport type ConnectionStatus =\n | \"pre-init\"\n | \"disconnected\"\n | \"connecting\"\n | \"connected\";\n\nclass ConnectionManager {\n connectionStatus: ConnectionStatus = \"pre-init\"; // The status of the connection to the remote dev server\n\n constructor() {\n makeAutoObservable(this);\n }\n\n initializeSocket() {\n this.connectionStatus = \"connecting\";\n }\n\n connect() {\n this.connectionStatus = \"connected\";\n }\n\n disconnect() {\n this.connectionStatus = \"disconnected\";\n }\n}\n\nexport default ConnectionManager;\n","import { action, makeAutoObservable } from \"mobx\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\nclass InteractionLayerManager {\n /**\n * The id of the root element that is currently being interacted with\n * the root can be Page, Modal, Slideout, Dialog, Sheet, etc\n * If set to undefined, the interaction layer will be the Page\n * if set to the detached component id, the interaction layer will be disabled on the page\n */\n activeRootInstanceId: SbInstance | undefined = undefined;\n\n interactionLayerInstanceIds: Set<SbInstance> = new Set();\n\n constructor() {\n makeAutoObservable(this);\n }\n\n @action\n addInteractionLayerInstanceId(instanceId: SbInstance) {\n this.interactionLayerInstanceIds.add(instanceId);\n }\n\n @action\n removeInteractionLayerInstanceId(instanceId: SbInstance) {\n this.interactionLayerInstanceIds.delete(instanceId);\n }\n\n @action\n setActiveRootInstanceId(rootInstanceId: SbInstance | undefined) {\n this.activeRootInstanceId = rootInstanceId;\n }\n}\n\nexport default InteractionLayerManager;\n","// https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n// this is for superblocksSlice, import immer\n\nimport {\n generateSourceId,\n NATIVE_COMPONENT_TYPES,\n} from \"@superblocksteam/library-shared\";\nimport { action, makeAutoObservable } from \"mobx\";\nimport rootStore from \"../../lib/internal-details/lib/root-store.js\";\nimport { generateId } from \"../../lib/utils/generate-id.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport SourceUpdateApi from \"../source-update-api.js\";\n\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type {\n BatchUpdateRequest,\n CreateRequest,\n DeleteRequest,\n EditOperationPayload,\n EditOperations,\n EditOperationType,\n PropertyInfo,\n RenameElementRequest,\n ReparentRequest,\n SbElement,\n SbInstance,\n SetPropertiesRequest,\n SetPropertyRequest,\n SourceLocation,\n} from \"@superblocksteam/library-shared/types\";\n\ntype OptimisticOperation<P> = {\n type: keyof EditOperations;\n payload: P;\n id: string;\n callback?: () => void; // called when the operation is cleared by a hot reload\n};\n\nexport type ReparentTransaction = OptimisticOperation<ReparentRequest>;\ntype SetPropertiesTransaction = OptimisticOperation<SetPropertiesRequest>;\ntype SetPropertyTransaction = OptimisticOperation<SetPropertyRequest>;\ntype CreateComponentTransaction = OptimisticOperation<CreateRequest>;\ntype DeleteComponentsTransaction = OptimisticOperation<DeleteRequest>;\n\ntype PendingTransaction =\n | ReparentTransaction\n | SetPropertiesTransaction\n | SetPropertyTransaction\n | CreateComponentTransaction\n | DeleteComponentsTransaction;\n\nclass OperationManager {\n private pendingTransactions: Array<PendingTransaction> = [];\n\n private waitingForBatch: boolean = false;\n private batchOperations: Array<PendingTransaction> = [];\n private batchOperationTransactionId: string | undefined;\n\n visibleSourceIds: string[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n get allPendingTransactions() {\n return this.pendingTransactions;\n }\n\n get pendingReparentOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:moveComponent\",\n ) as ReparentTransaction[];\n }\n\n get pendingDeleteOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:deleteComponents\",\n ) as DeleteComponentsTransaction[];\n }\n\n get pendingSetPropertiesOperations() {\n return this.pendingTransactions.filter(\n (t) => t.type === \"editor:setProperties\",\n ) as SetPropertiesTransaction[];\n }\n\n get hasPendingOperations() {\n return this.pendingTransactions.length > 0;\n }\n\n get allNames() {\n return [];\n }\n\n @action\n private executeOrAddToBatch(\n operation: Omit<OptimisticOperation<PendingTransaction[\"payload\"]>, \"id\">,\n addTransaction: boolean = true,\n ) {\n const transactionId = this.batchOperationTransactionId ?? generateId();\n\n const payload = this.waitingForBatch\n ? operation.payload\n : {\n ...operation.payload,\n transaction: {\n id: transactionId,\n origin: \"LIBRARY\",\n },\n };\n\n const opWithId = {\n ...operation,\n id: transactionId,\n payload,\n } as PendingTransaction;\n\n if (addTransaction) {\n this.addPendingTransaction(opWithId);\n }\n\n if (this.waitingForBatch) {\n this.batchOperations.push(opWithId);\n } else {\n switch (operation.type) {\n case \"editor:moveComponent\":\n return editorBridge.editOpRequest(\n \"editor:moveComponent\",\n payload as ReparentRequest,\n );\n case \"editor:setProperties\":\n return editorBridge.editOpRequest(\n \"editor:setProperties\",\n payload as SetPropertiesRequest,\n );\n case \"editor:createComponent\":\n return editorBridge.editOpRequest(\n \"editor:createComponent\",\n payload as CreateRequest,\n );\n case \"editor:deleteComponents\":\n return editorBridge.editOpRequest(\n \"editor:deleteComponents\",\n payload as DeleteRequest,\n );\n }\n }\n }\n\n @action\n private addPendingTransaction(transaction: PendingTransaction) {\n if (transaction.type === \"editor:createComponent\") {\n getEditStore().runtimeEntitiesManager.addOptimisticCreateWidget(\n transaction.payload as CreateRequest,\n );\n }\n this.pendingTransactions.push(transaction);\n }\n\n @action\n clearPendingTransactions(transactionIds: string[]) {\n const toClear = new Set(transactionIds);\n const { cleared, remaining } = this.pendingTransactions.reduce(\n (acc, transaction) => {\n if (toClear.has(transaction.id)) {\n acc.cleared.push(transaction);\n } else {\n acc.remaining.push(transaction);\n }\n return acc;\n },\n {\n cleared: [] as PendingTransaction[],\n remaining: [] as PendingTransaction[],\n },\n );\n\n this.pendingTransactions = remaining;\n\n // Execute callbacks for cleared transactions\n cleared.forEach((transaction) => {\n if (transaction.callback) {\n transaction.callback();\n }\n });\n }\n\n @action\n batchUpdate(performOperations: () => void) {\n this.waitingForBatch = true;\n this.batchOperationTransactionId = generateId();\n performOperations();\n\n editorBridge.editOpRequest(\"editor:batchUpdate\", {\n updates: this.batchOperations.map(\n (op) =>\n ({\n type: op.type,\n payload: op.payload,\n }) as BatchUpdateRequest[\"updates\"][number],\n ),\n transaction: {\n origin: \"LIBRARY\",\n id: this.batchOperationTransactionId,\n },\n });\n\n this.waitingForBatch = false;\n this.batchOperations = [];\n this.batchOperationTransactionId = undefined;\n }\n\n @action\n createComponent(payload: CreateRequest) {\n this.executeOrAddToBatch({\n type: \"editor:createComponent\",\n payload,\n });\n }\n\n @action\n dropComponent(action: {\n from: { source: SourceLocation };\n to: { source: SourceLocation };\n propsToChange?: Record<string, PropertyInfo>;\n }) {\n const { from, to, propsToChange } = action;\n\n const payload: ReparentRequest = {\n from,\n to,\n changedProps: propsToChange ?? {},\n };\n this.executeOrAddToBatch({\n type: \"editor:moveComponent\",\n payload,\n });\n }\n\n @action\n deleteComponents(sourceIds: SbElement[]) {\n const payload: DeleteRequest = {\n elements: sourceIds.map((sourceId) => ({\n source: { id: sourceId },\n })),\n };\n\n this.executeOrAddToBatch(\n {\n type: \"editor:deleteComponents\",\n payload,\n },\n this.canDeleteComponents(sourceIds),\n );\n }\n\n acknowledgeEditOperation(operation: EditOperationPayload<EditOperationType>) {\n if (\n !(\"transaction\" in operation.payload) ||\n !operation.payload.transaction?.id\n ) {\n console.error(\"No transaction id in edit operation\", operation);\n return;\n }\n\n const addOperation = (\n operation: EditOperationPayload<EditOperationType>,\n batchTransactionId?: string,\n ) => {\n switch (operation.type) {\n case \"editor:createComponent\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:createComponent\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:deleteComponents\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:deleteComponents\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:moveComponent\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:moveComponent\">;\n this.addPendingTransaction({\n type,\n id: batchTransactionId ?? payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:setProperties\": {\n const { type, payload } =\n operation as EditOperationPayload<\"editor:setProperties\">;\n this.addPendingTransaction({\n type,\n id: payload.transaction!.id,\n payload,\n });\n break;\n }\n case \"editor:deleteProperties\": {\n const { payload } =\n operation as EditOperationPayload<\"editor:deleteProperties\">;\n // we can write the deleteProperties as a setProperties\n const asSetProperties: SetPropertiesRequest = {\n element: {\n source: {\n id: payload.element.source.id,\n },\n },\n properties: Object.fromEntries(\n payload.properties.map((p) => [\n p,\n {\n type: \"STATIC\",\n value: undefined,\n __info: true,\n },\n ]),\n ),\n };\n this.addPendingTransaction({\n type: \"editor:setProperties\",\n id: batchTransactionId ?? payload.transaction!.id,\n payload: asSetProperties,\n });\n break;\n }\n default:\n console.error(\"Unknown edit operation\", operation);\n }\n };\n\n if (operation.type === \"editor:batchUpdate\") {\n const { payload } =\n operation as EditOperationPayload<\"editor:batchUpdate\">;\n if (!payload.transaction?.id) {\n console.error(\"No transaction id in batch\", operation);\n return;\n }\n for (const update of payload.updates) {\n addOperation(update, payload.transaction.id);\n }\n } else {\n addOperation(operation);\n }\n }\n\n @action\n writeRuntimeProperties(\n sourceId: SbElement,\n transactionId: string,\n updates: Record<string, PropertyInfo<unknown>>,\n ) {\n // this can't be part of batch because it came from the editor\n this.addPendingTransaction({\n type: \"editor:setProperties\",\n id: transactionId,\n payload: { element: { source: { id: sourceId } }, properties: updates },\n });\n }\n\n @action\n setWidgetProperties({\n sourceId,\n properties,\n callback,\n applySideEffects = false,\n }: {\n sourceId: SbElement;\n properties: Record<string, PropertyInfo<unknown>>;\n callback?: () => void;\n applySideEffects?: boolean;\n }) {\n let changes = properties;\n if (applySideEffects) {\n const withSideEffects =\n getEditStore().propertiesPanelManager.computeAndApplySideEffectsForPropertyUpdate(\n {\n sourceId,\n updates: properties,\n },\n );\n changes = withSideEffects[sourceId];\n }\n\n const payload: SetPropertiesRequest = {\n element: {\n source: {\n id: sourceId,\n },\n },\n properties: changes,\n };\n\n this.executeOrAddToBatch({\n type: \"editor:setProperties\",\n payload,\n callback,\n });\n }\n\n @action\n setWidgetProperty({\n sourceId,\n property,\n value,\n callback,\n }: {\n sourceId: SbElement;\n property: string;\n value: PropertyInfo<unknown>;\n callback?: () => void;\n }) {\n this.setWidgetProperties({\n sourceId,\n properties: { [property]: value },\n callback,\n });\n }\n\n // optimistic update not supported on this\n @action\n renameWidget(params: {\n sourceId: SbElement;\n newName: string;\n renameInAst?: boolean;\n }) {\n const widgetMeta =\n getEditStore().runtimeEntitiesManager.getAnyEditorWidgetMeta(\n params.sourceId,\n );\n const oldName = widgetMeta?.name?.value ?? \"\";\n const kind = widgetMeta?.type === \"Page\" ? \"page\" : \"component\";\n const scopeName = widgetMeta?.scopeId\n ? rootStore.entityManager.getScopeName(widgetMeta.scopeId)\n : undefined;\n if (!scopeName) {\n console.error(\"No scope name found for widget\", params.sourceId);\n return;\n }\n const renameRequest: RenameElementRequest = {\n elementId: params.sourceId,\n newName: params.newName,\n oldName,\n kind,\n scopeName,\n renameInAst: params.renameInAst ?? true,\n };\n editorBridge.editOpRequest(\"editor:renameElement\", renameRequest);\n }\n\n async ensureFilesSynced() {\n await SourceUpdateApi.ensureFilesSynced();\n }\n\n generateSourceId() {\n return generateSourceId();\n }\n\n private canDeleteComponents(sourceIds: SbElement[]) {\n const editStore = getEditStore();\n const widgets = sourceIds.map((id) =>\n editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(id),\n );\n\n const containerTypes = rootStore.componentRegistry.containerTypes;\n // you can always delete a widget that is not a container or page\n if (!widgets.some((widget) => containerTypes.has(widget?.type ?? \"\"))) {\n return true;\n }\n\n if (\n widgets.some((widget) => widget?.type === NATIVE_COMPONENT_TYPES.Page)\n ) {\n return false;\n }\n // as long as you're not deleting the last container in the page\n const containersToDelete = widgets.filter((widget) =>\n containerTypes.has(widget?.type ?? \"\"),\n );\n const containerInstanceIds = new Set(\n containersToDelete\n .filter((container) => container?.instanceId)\n .map((container) => container?.instanceId) as SbInstance[],\n );\n const parentsToCheck = new Set<SbInstance>(\n containersToDelete.reduce((acc, container) => {\n const parentInstanceId = container?.parentInstanceId;\n const parentType =\n parentInstanceId &&\n editStore.runtimeEntitiesManager.getEditorWidgetType(\n parentInstanceId,\n );\n if (!parentType) {\n return acc;\n }\n const parentEditorConfig =\n rootStore.componentRegistry.getEditorConfig(parentType);\n if (parentType === NATIVE_COMPONENT_TYPES.Page) {\n acc.push(parentInstanceId);\n } else if (parentEditorConfig?.isDetached) {\n // modals and slideouts\n acc.push(parentInstanceId);\n }\n return acc;\n }, [] as SbInstance[]),\n );\n const checkIfDeletingAllContainersInParent = (\n parentInstanceId: SbInstance,\n ) => {\n const allParentChildren =\n editStore.runtimeEntitiesManager.getEditorWidgetChildren(\n parentInstanceId,\n );\n return allParentChildren.every(\n (child) => child.isSbComponent && containerInstanceIds.has(child.value),\n );\n };\n\n const isDeletingAllContainersInAnyParent = Array.from(parentsToCheck).some(\n checkIfDeletingAllContainersInParent,\n );\n if (isDeletingAllContainersInAnyParent) {\n return false;\n }\n\n return true;\n }\n}\n\nexport default OperationManager;\n","import {\n SbEntityType,\n ViteMessageKind,\n type PropertyInfo,\n type SbElement,\n type SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport { autorun, makeAutoObservable } from \"mobx\";\nimport { createPropertiesPanelDefinition } from \"../../lib/user-facing/properties-panel/properties-panel-definition.js\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type RuntimeEntitiesManager from \"./runtime-entities-manager.js\";\nimport type { IEntityManager } from \"../../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { ComponentRegistry } from \"../../lib/internal-details/lib/features/component-registry.js\";\nimport type {\n Prop,\n PropertiesDefinition,\n} from \"../../lib/user-facing/properties-panel/props-builder.js\";\nimport type { PropertiesPanelDefinition } from \"@superblocksteam/library-shared/props\";\nimport type { IReactionDisposer } from \"mobx\";\n\nclass PropertiesPanelManager {\n private propertiesDefinitions = new Map<string, PropertiesDefinition>();\n private propertiesPanelTrackerDisposer: IReactionDisposer | null = null;\n\n private nonDynamicPropertyPanels: Map<string, PropertiesPanelDefinition> =\n new Map<string, PropertiesPanelDefinition>();\n\n private _propertyLookupCache = new Map<\n string,\n Record<string, Prop<any, any>>\n >();\n\n private removeHotReloadListener: (() => void) | null = null;\n\n constructor(\n readonly editStore: EditStore,\n readonly runtimeEntitiesManager: RuntimeEntitiesManager,\n readonly entityManager: IEntityManager,\n readonly componentsManager: ComponentRegistry,\n ) {\n makeAutoObservable<PropertiesPanelManager, \"_propertyLookupCache\">(this, {\n _propertyLookupCache: false,\n });\n\n this.attachHotReloadListener();\n }\n\n getPropertiesPanel(\n scopeId: string,\n instanceId: SbInstance,\n ): PropertiesPanelDefinition {\n const props = this.entityManager.getEntityById(scopeId, instanceId);\n\n if (!props?.type) {\n return { sections: [] };\n }\n\n const propertiesDefinition = this.propertiesDefinitions.get(props.type);\n if (!propertiesDefinition) {\n return { sections: [] };\n }\n\n const state = this.entityManager.getState(scopeId);\n return createPropertiesPanelDefinition(propertiesDefinition, props, state);\n }\n\n trackPropertiesPanel(\n scopeId: string,\n instanceId: SbInstance,\n sourceId: string,\n ) {\n if (this.propertiesPanelTrackerDisposer) {\n this.propertiesPanelTrackerDisposer();\n }\n this.propertiesPanelTrackerDisposer = autorun(\n () => {\n const propertiesPanel = this.getPropertiesPanel(scopeId, instanceId);\n editorBridge.addPropertiesPanel(sourceId, propertiesPanel);\n },\n {\n name: `trackPropertiesPanel[${scopeId}-${instanceId}]`,\n },\n );\n }\n\n untrackPropertiesPanel() {\n this.propertiesPanelTrackerDisposer?.();\n this.propertiesPanelTrackerDisposer = null;\n }\n\n getPropertiesDefinition(type: string): PropertiesDefinition | undefined {\n return this.propertiesDefinitions.get(type);\n }\n\n setPropertiesDefinition(\n widgetType: string,\n propertiesDefinition: PropertiesDefinition,\n ) {\n this.propertiesDefinitions.set(widgetType, propertiesDefinition);\n\n /**\n * TODO: support dynamic properties for timer and variables (then Events)\n * This is a temporary solution to unblock showing timer and variable in the properties panel.\n * To make these dynamic as any other component property panel props, we would need to have a way of\n * referencing them from the Editor.\n *\n * To do so, we would need a scopeId (we don't have), and the sourceId (we do have).\n * Then we could follow a similar path as selectWidgets in operations/actions.ts\n */\n if (\n widgetType === SbEntityType.TIMER ||\n widgetType === SbEntityType.VARIABLE ||\n widgetType === SbEntityType.API\n ) {\n this.nonDynamicPropertyPanels.set(\n widgetType,\n createPropertiesPanelDefinition(propertiesDefinition),\n );\n }\n }\n\n updatePropertiesDefinitionForType(type: string) {\n const latestComponent = this.componentsManager.getComponent(type);\n if (!latestComponent) {\n return;\n }\n const latestPropertiesDefinition = latestComponent.propertiesDefinition;\n if (!latestPropertiesDefinition) {\n return;\n }\n this.propertiesDefinitions.set(type, latestPropertiesDefinition);\n }\n\n getNonDynamicPropertiesPanels() {\n return Object.fromEntries(this.nonDynamicPropertyPanels.entries());\n }\n\n // TODO (alex): needs to handle returning updates for multiple widgets at a time\n computeSideEffectsForPropertyUpdate(payload: {\n sourceId: SbElement;\n updates: Record<string, PropertyInfo<unknown>>;\n }) {\n const { sourceId, updates } = payload;\n const allUpdates: Record<\n SbElement,\n {\n props?: Record<string, PropertyInfo<unknown>>;\n meta?: Record<string, unknown>;\n }\n > = {\n [sourceId]: {\n props: updates,\n meta: {},\n },\n };\n\n // TODO (alex): Should we adjust the side effects to take in all instances?\n const anyInstanceId =\n this.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(sourceId);\n const widget =\n this.runtimeEntitiesManager.getEditorWidgetMeta(anyInstanceId);\n const scopeId = widget?.scopeId;\n if (!widget?.type || !scopeId) {\n return allUpdates; // Do nothing, but maybe this is an error?\n }\n\n for (const path of Object.keys(updates)) {\n const prop = this.getPropertyForPath(widget.type, path);\n if (!prop) {\n continue;\n }\n if (prop.onEditProperty) {\n const state = this.entityManager.getState(scopeId);\n const widgetState = widget.name ? state[widget.name.value] : undefined;\n const sideEffects = prop.onEditProperty({\n sourceId,\n updates,\n widgetMeta: widget,\n widgetState,\n propertiesDefinition: this.getPropertiesDefinition(widget.type) ?? {},\n });\n (Object.keys(sideEffects) as SbElement[]).forEach((changeSourceId) => {\n const propChanges = sideEffects[changeSourceId]?.props;\n const metaChanges = sideEffects[changeSourceId]?.meta;\n\n if (propChanges) {\n allUpdates[changeSourceId] ??= {};\n allUpdates[changeSourceId].props = {\n ...allUpdates[changeSourceId].props,\n ...propChanges,\n };\n }\n if (metaChanges) {\n allUpdates[changeSourceId] ??= {};\n allUpdates[changeSourceId].meta = {\n ...allUpdates[changeSourceId].meta,\n ...metaChanges,\n };\n }\n });\n }\n }\n return allUpdates;\n }\n\n computeAndApplySideEffectsForPropertyUpdate(payload: {\n sourceId: SbElement;\n updates: Record<string, PropertyInfo<unknown>>;\n }) {\n const allChanges = this.computeSideEffectsForPropertyUpdate(payload);\n const scopeId = this.runtimeEntitiesManager.getScopeIdForSourceId(\n payload.sourceId,\n );\n if (!scopeId) {\n throw new Error(\"No scope id found for widget\");\n }\n const propUpdates: Record<\n SbElement,\n Record<string, PropertyInfo<unknown>>\n > = {};\n const metaUpdates: Record<SbElement, Record<string, unknown>> = {};\n Object.entries(allChanges).forEach(([sourceId, changes]) => {\n const { props, meta } = changes;\n if (props) {\n propUpdates[sourceId as SbElement] = props;\n }\n if (meta) {\n metaUpdates[sourceId as SbElement] = meta;\n }\n });\n // TODO: This will need to apply side effects to all instances of the given source id\n this.runtimeEntitiesManager.applySideEffects(metaUpdates, scopeId);\n\n return propUpdates;\n }\n\n // TODO (alex): handle nested paths\n private cachedPropertyLookupForType(widgetType: string) {\n if (this._propertyLookupCache.has(widgetType)) {\n return this._propertyLookupCache.get(widgetType);\n }\n const propsDefinition = this.getPropertiesDefinition(widgetType);\n if (!propsDefinition) {\n return null;\n }\n\n const lookup: Record<string, Prop<any, any>> = {};\n\n for (const [_category, categoryDef] of Object.entries(propsDefinition)) {\n for (const propDef of Object.values<Prop<any, any>>(categoryDef.props)) {\n const propPath = propDef.path;\n if (!(propPath in lookup)) {\n lookup[propPath] = propDef;\n }\n }\n }\n this._propertyLookupCache.set(widgetType, lookup);\n return lookup;\n }\n\n getPropertyForPath(widgetType: string, path: string) {\n const lookup = this.cachedPropertyLookupForType(widgetType);\n if (!lookup) {\n return null;\n }\n return lookup[path];\n }\n\n /**\n * When a custom component's source code is updated, we want to update the properties definition for that component.\n * In order to do that, we need to listen to vite's hot reload events. We can't put import.meta.hot calls in the library\n * because Vite just compiled all of those out in library builds, so we inject a listener from the plugin instead.\n * https://github.com/vitejs/vite/blob/v6.2/packages/vite/src/node/plugins/define.ts#L37\n */\n private attachHotReloadListener() {\n this.removeHotReloadListener?.();\n\n this.removeHotReloadListener = this.editStore.onViteMessage(\n ViteMessageKind.UPDATE_CUSTOM_COMPONENT,\n (message) => {\n this.updatePropertiesDefinitionForType(message.component);\n },\n );\n }\n}\n\nexport default PropertiesPanelManager;\n","import { computed } from \"mobx\";\nimport type { IComputedValue } from \"mobx\";\n\n// Creates a lazy getter for each id passed to the function\n// If there are memory leaks, consider using either\n// - mobx computedFn https://github.com/mobxjs/mobx-utils?tab=readme-ov-file#computedfn\n// - or wrap the computed in a weakref\n\nexport const makeMobxCachedGetter = <T, K extends string>(\n getter: (id: K) => T,\n): ((id: K) => T) => {\n const cachedGetters: Record<K, IComputedValue<T>> = {} as any;\n\n const getterFunc = (id: K) => {\n let fn = cachedGetters[id];\n if (!fn) {\n fn = computed(() => getter(id));\n cachedGetters[id] = fn;\n }\n return fn.get();\n };\n\n return getterFunc;\n};\n","import {\n getRuntimeComputedExpression,\n isPropertyInfo,\n SB,\n withBindingIdentifier,\n} from \"@superblocksteam/library-shared\";\nimport {\n type SetStateVarStep,\n type ControlTimerStep,\n type ValidStepDef,\n type StepDef,\n isValidStepDef,\n type ValueInputProp,\n} from \"@superblocksteam/library-shared/types\";\nimport { LazyFunction } from \"../lib/internal-details/lib/evaluator/lazy-function.js\";\nimport {\n getName,\n type Name,\n} from \"../lib/internal-details/lib/evaluator/names.js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { EventFlow } from \"../lib/user-facing/event-flow.js\";\n\n/**\n * Gets the actual value from a PropertyInfo object.\n * This will parse the value based on the type of property.\n * @param property - The property to get the value from.\n * @returns The parsed value of the property.\n */\nexport function getPropertyValue({\n entityKey,\n property,\n name,\n scopeId,\n}: {\n property: unknown;\n entityKey?: string;\n name?: Name;\n scopeId?: string;\n}): unknown {\n if (!isPropertyInfo(property)) {\n return property;\n }\n\n if (property.type === \"BINDING\") {\n return SB([property.value] as unknown as TemplateStringsArray);\n }\n\n if (property.type === \"STATIC\" && Array.isArray(property.value)) {\n return property.value.map((value) =>\n getPropertyValue({ entityKey, property: value, name, scopeId }),\n );\n }\n\n if (\n property.type === \"TEMPLATE\" &&\n typeof property.value === \"string\" &&\n scopeId &&\n name\n ) {\n try {\n return LazyFunction(`return \\`${property.value}\\``);\n } catch (e) {\n console.error(\"Error making template string\", e);\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n return entityKey && entity\n ? (entity[entityKey] ?? property.value)\n : property.value;\n }\n }\n\n if (\n property.type === \"COMPUTED\" &&\n typeof property.value === \"string\" &&\n scopeId &&\n name\n ) {\n try {\n return LazyFunction(\n getRuntimeComputedExpression(property.value),\n property.args,\n );\n } catch (e) {\n console.error(\"Error generating computed value\", e);\n const entity = rootStore.entityManager.getEntity(scopeId, name);\n return entityKey && entity\n ? (entity[entityKey] ?? property.value)\n : property.value;\n }\n }\n\n if (property.type === \"EXPRESSION\" && typeof property.value === \"string\") {\n let parsed = property.value;\n try {\n parsed = JSON.parse(property.value);\n } catch (_e) {\n // do nothing\n }\n return parsed;\n }\n\n if (property.type === \"EVENT\" && scopeId && name) {\n const eventFlows = (property.value as any)\n .map((step: ValidStepDef) => {\n // we just have to be careful so we don't have a runtime error if the editor\n // sends down something we don't expect\n try {\n return getEventFlow(step, scopeId, name);\n } catch {\n return undefined;\n }\n })\n .filter(\n (eventFlow: EventFlow | undefined) => eventFlow !== undefined,\n ) as EventFlow[];\n return EventFlow.sequence(eventFlows);\n }\n\n if (\n property.type === \"STATIC\" &&\n typeof property.value === \"object\" &&\n property.value !== null\n ) {\n return Object.entries(property.value).reduce(\n (acc, [key, value]) => {\n if (isPropertyInfo(value)) {\n acc[key] = getPropertyValue({\n property: value,\n name,\n scopeId,\n });\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n return property.value;\n}\n\nfunction getEventFlow(\n step: StepDef,\n scopeId: string,\n name: Name,\n): EventFlow | undefined {\n if (!isValidStepDef(step)) {\n return undefined;\n }\n\n function getEventPropertyVaue<T>(property: unknown): ValueInputProp<T> {\n if (isPropertyInfo(property)) {\n return getPropertyValue({\n property,\n scopeId,\n name,\n }) as ValueInputProp<T>;\n }\n return property as ValueInputProp<T>;\n }\n\n const getEntity = (entityName: string) => {\n try {\n const entity = rootStore.entityManager.getEntity(\n scopeId,\n getName(entityName),\n );\n if (entity)\n return withBindingIdentifier(entity, {\n entityName,\n scopeId,\n });\n } catch {\n return undefined;\n }\n };\n\n const getEntities = (entityNames: string[]) => {\n return entityNames.map(getEntity).filter((entity) => entity !== undefined);\n };\n\n const createNestedEventFlow = (steps: any) => {\n return Array.isArray(steps) && steps.length > 0\n ? getEventFlow(steps as any, scopeId, name)\n : undefined;\n };\n\n switch (step.type) {\n case \"executeApi\":\n return EventFlow.runApis(step.apis.map((api) => api.name) as any, {\n onSuccess: createNestedEventFlow(step.onSuccess ?? []),\n onError: createNestedEventFlow(step.onError ?? []),\n });\n case \"cancelApi\":\n return EventFlow.cancelApis(\n getEntities(step.apis.map((api) => api.name)),\n createNestedEventFlow(step.onCancel ?? []),\n );\n case \"runJs\":\n return EventFlow.runJS(function (this: any, ...args: any[]) {\n if (step.code) {\n // this is a bit brittle, but works for the runtime case since prop writes will take\n // over once the file is saved\n try {\n const cleanCode = step.code.trim().endsWith(\";\")\n ? step.code.slice(0, -1)\n : step.code;\n new Function(`return (${cleanCode})()`).call(this, ...args);\n } catch (e) {\n console.error(\"Error executing JS code:\", e);\n }\n }\n });\n case \"navigateTo\": {\n const url = getEventPropertyVaue<string>(step.url);\n return EventFlow.navigateTo(url as ValueInputProp<string>, {\n newWindow: step.newWindow,\n replaceHistory: step.replaceHistory,\n arguments: step.arguments,\n });\n }\n case \"navigateToApp\":\n return EventFlow.navigateToApp(step.targetApp.id);\n case \"navigateToRoute\":\n return EventFlow.navigateToRoute(step.routeId);\n case \"setQueryParams\":\n return EventFlow.setQueryParams(\n step.queryParams\n ? JSON.parse(step.queryParams as unknown as string)\n : {},\n {\n keep: step.keepQueryParams,\n },\n );\n case \"controlSlideout\": {\n const slideoutEntity = getEntity(step.name!);\n if (!slideoutEntity) return undefined;\n return EventFlow.controlSlideout(slideoutEntity, {\n action: step.action,\n });\n }\n case \"controlModal\": {\n const modalEntity = getEntity(step.name!);\n if (!modalEntity) return undefined;\n return EventFlow.controlModal(modalEntity, {\n action: step.action,\n });\n }\n case \"controlTimer\": {\n // TODO: StepDef definition needs to be changed in shared package\n const timerStep = step as unknown as ControlTimerStep;\n if (!timerStep.timer?.name) {\n return undefined;\n }\n const timerEntity = getEntity(timerStep.timer.name);\n if (!timerEntity) return undefined;\n return EventFlow.controlTimer(timerEntity, {\n action: step.action ?? \"start\",\n });\n }\n case \"setStateVar\": {\n // TODO: StepDef definition needs to be changed in shared package\n const variableStep = step as unknown as SetStateVarStep;\n const stateEntity = getEntity(variableStep.variable?.name);\n if (!stateEntity) return undefined;\n const value = getEventPropertyVaue<unknown>(variableStep.value);\n return EventFlow.setStateVar(stateEntity, { value: value as any });\n }\n case \"resetStateVar\": {\n // TODO: StepDef definition needs to be changed in shared package\n const variableStep = step as unknown as SetStateVarStep;\n const resetStateEntity = getEntity(variableStep.variable?.name);\n if (!resetStateEntity) return undefined;\n return EventFlow.resetStateVar(resetStateEntity as any);\n }\n case \"resetComponent\": {\n const component = getEntity(step.widget?.name ?? \"\");\n if (!component) return undefined;\n // TODO: support resetChildren\n return EventFlow.resetComponent(\n component,\n step.propertyName\n ? {\n property: step.propertyName,\n }\n : undefined,\n );\n }\n case \"setComponentProperty\": {\n const component = getEntity(step.widget?.name ?? \"\");\n if (!component) return undefined;\n const value = getEventPropertyVaue<any>(step.propertyValue);\n return EventFlow.setComponentProperty(component, {\n property: step.propertyName,\n value,\n });\n }\n // case \"showAlert\":\n // return EventFlow.showAlert(getEventPropertyVaue<string>(step.message), {\n // type: step.style as any,\n // durationMs: step.alertDuration,\n // position: step.alertPosition,\n // });\n case \"setProfile\":\n return EventFlow.setProfile(step.profileId, {\n action: step.action,\n });\n case \"triggerEvent\":\n return EventFlow.triggerEvent(\n step.event?.name,\n step.eventPayload\n ? {\n data: step.eventPayload,\n }\n : undefined,\n );\n default:\n console.warn(\"Unhandled runtime step type\", (step as ValidStepDef).type);\n return undefined;\n }\n}\n","import { SOURCE_ID_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { action, makeObservable, observable } from \"mobx\";\nimport { makeMobxCachedGetter } from \"../../lib/internal-details/lib/mobx-cached-getter.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getPropertyValue } from \"../properties.js\";\nimport type { Name } from \"../../lib/internal-details/lib/evaluator/names.js\";\nimport type { NameManager } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n CreateChild,\n CreateRequest,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\nimport type React from \"react\";\n\nexport type ChildFunction = React.FunctionComponent;\nexport type ChildElement =\n | {\n isSupportedElement: true;\n isSbComponent: boolean;\n value: SbInstance;\n }\n | {\n isSupportedElement: true;\n isSbComponent: false;\n value?: SbInstance;\n }\n | {\n isSupportedElement: false;\n isSbComponent: false;\n value: ChildFunction;\n };\n\nexport type RuntimeWidgetMeta = {\n instanceId: SbInstance;\n sourceId: SbElement;\n isRoot: boolean;\n isInsideRoot: boolean;\n rootInstanceId?: SbInstance;\n interactionLayerInstanceId?: SbInstance; // Components that have their own interaction layer will NOT have this set to itself - it will be its parent\n isSbComponent: boolean; // Whether or not this is a registered component. Is false when we render an External child\n isOptimistic: boolean;\n scopeId?: string;\n type?: string;\n name?: Name;\n props?: Record<string, unknown>;\n children?: ChildElement[];\n parentInstanceId?: SbInstance; // The instance ID of the nearest sb-like ancestor, regardless of how the virtual tree is constructed\n directParentInstanceId?: SbInstance; // The instance ID of the immediate parent - only set if the parent directly renders us\n isUnmounted?: boolean; // TODO - not used yet\n};\n\nexport type InternalChildElement =\n | ChildElement\n | {\n isSupportedElement: true;\n isSbComponent: boolean;\n };\n\nexport type InternalRuntimeWidgetMeta = Omit<RuntimeWidgetMeta, \"children\"> & {\n children?: Array<InternalChildElement>;\n};\n\nclass RuntimeWidgetsManager {\n private widgets: Record<SbInstance, InternalRuntimeWidgetMeta> = {};\n private widgetChildIndexToInstanceIds: Record<\n SbInstance,\n Record<number, SbInstance>\n > = {};\n private sourceIdCount: Record<SbElement, number> = {};\n private sourceToInstanceIdSample: Record<SbElement, SbInstance> = {};\n\n constructor(readonly nameManager: NameManager) {\n makeObservable<\n RuntimeWidgetsManager,\n | \"widgets\"\n | \"setWidgetMeta\"\n | \"sourceToInstanceIdSample\"\n | \"widgetChildIndexToInstanceIds\"\n >(this, {\n widgets: observable.shallow,\n widgetChildIndexToInstanceIds: observable,\n\n setWidgetMeta: action,\n setWidgetChildren: action,\n setWidgetChildIndex: action,\n addWidgetFromPayload: action,\n\n sourceToInstanceIdSample: observable,\n });\n }\n\n public setWidgetMeta(\n instanceId: SbInstance,\n meta: InternalRuntimeWidgetMeta,\n ) {\n const existingMeta = this.widgets[instanceId];\n if (!existingMeta) {\n this.widgets[instanceId] = meta;\n } else {\n this.widgets[instanceId] = { ...existingMeta, ...meta }; // trigger the observers\n }\n this.sourceToInstanceIdSample[meta.sourceId] = instanceId;\n }\n\n public setWidgetChildIndex(params: {\n directParentInstanceId: SbInstance;\n index: number;\n instanceId: SbInstance;\n }) {\n const { directParentInstanceId, index, instanceId } = params;\n this.widgetChildIndexToInstanceIds[directParentInstanceId] ??= {};\n this.widgetChildIndexToInstanceIds[directParentInstanceId][index] =\n instanceId;\n }\n\n public setWidgetChildren(\n instanceId: SbInstance,\n children: InternalChildElement[],\n ) {\n this.widgets[instanceId] = {\n ...this.widgets[instanceId],\n children,\n };\n }\n\n // TODO (alex): Most usage of this method likely requires a refactor to also pass a scopeId for disambiguation\n // this is a temporary unblocker\n public getAnyInstanceIdForSourceId(sourceId: SbElement) {\n return this.sourceToInstanceIdSample[sourceId];\n }\n\n public getAllInstanceIdsForSourceId(sourceId: SbElement) {\n const hasPendingOperations =\n getEditStore().runtimeEntitiesManager.hasEditOperationsPending();\n\n return Object.values(this.widgets)\n .filter((widget) => {\n return (\n widget.sourceId === sourceId &&\n (!hasPendingOperations || !widget.isOptimistic)\n );\n })\n .map((widget) => widget.instanceId);\n }\n\n public getSourceIdForInstanceId(instanceId: SbInstance) {\n return this.widgets[instanceId]?.sourceId;\n }\n\n public addWidgetFromPayload(\n details: {\n rootInstanceId: SbInstance;\n parentInstanceId: SbInstance;\n },\n createRequest: CreateRequest,\n ) {\n const parentMeta = this.widgets[details.parentInstanceId];\n if (!parentMeta || !parentMeta.scopeId) {\n return;\n }\n const parentScopeId = parentMeta.scopeId;\n\n const traverse = (params: {\n child: CreateChild;\n parentInstanceId: SbInstance;\n }): ChildElement => {\n const { child } = params;\n const childName =\n typeof child.properties.name?.value === \"string\"\n ? child.properties.name.value\n : undefined;\n\n const childIdentifier = this.nameManager.registerAndGetIdentifiers({\n sourceId:\n child.id ?? getEditStore().operationManager.generateSourceId(),\n name: childName,\n scopeId: parentScopeId,\n rootId: details.rootInstanceId,\n type: child.tagName,\n });\n const childProps = Object.entries(child.properties).reduce(\n (acc: Record<string, any>, [key, value]) => {\n const propertyValue = getPropertyValue({\n entityKey: key,\n property: value,\n name: childIdentifier.name,\n scopeId: childIdentifier.scopeId,\n });\n acc[key] = propertyValue;\n return acc;\n },\n {\n [SOURCE_ID_ATTRIBUTE]: childIdentifier.sourceId,\n },\n );\n const children = child.children.map((child) =>\n traverse({\n child,\n parentInstanceId: childIdentifier.instanceId,\n }),\n );\n this.setWidgetMeta(childIdentifier.instanceId, {\n instanceId: childIdentifier.instanceId,\n isSbComponent: true,\n isOptimistic: true,\n sourceId: childIdentifier.sourceId,\n rootInstanceId: details.rootInstanceId,\n scopeId: parentScopeId,\n type: child.tagName,\n name: childIdentifier.name,\n props: childProps,\n parentInstanceId: params.parentInstanceId,\n children,\n } as any);\n\n return {\n isSupportedElement: true,\n isSbComponent: true,\n value: childIdentifier.instanceId,\n };\n };\n\n traverse({\n child: createRequest,\n parentInstanceId: details.parentInstanceId,\n });\n }\n\n public getMeta = makeMobxCachedGetter(\n (id: SbInstance): RuntimeWidgetMeta | undefined => {\n const widgetMeta = this.widgets[id];\n const widgetChildIndexToInstanceIds =\n this.widgetChildIndexToInstanceIds[id] ?? {};\n const widgetChildren: Array<ChildElement> =\n widgetMeta?.children?.map((child, idx) => {\n if (widgetChildIndexToInstanceIds[idx]) {\n return {\n ...child,\n value: widgetChildIndexToInstanceIds[idx],\n } as ChildElement;\n } // TODO what happens if instance ID is missing?\n return child as ChildElement;\n }) ?? [];\n return {\n ...widgetMeta,\n children: widgetChildren,\n };\n },\n );\n\n // TODO not working\n public getSourceIdCount(_sourceId: SbElement): number {\n return 1;\n // return this.sourceIdCount[sourceId] ?? 0;\n }\n\n public isChildOf(childId: SbInstance, parentId: SbInstance): boolean {\n const childMeta = this.widgets[childId];\n if (childMeta && childMeta.parentInstanceId === parentId) {\n return true;\n }\n if (!childMeta || !childMeta.parentInstanceId) {\n return false;\n }\n return this.isChildOf(childMeta.parentInstanceId, parentId);\n }\n\n // get the closest ancestor of a widget by type\n public getClosestAncestorByType(\n instanceId: SbInstance,\n type: string,\n ): RuntimeWidgetMeta | undefined {\n if (!instanceId) {\n return undefined;\n }\n const currentWidget = this.getMeta(instanceId);\n if (!currentWidget) {\n return undefined;\n }\n if (currentWidget.type === type) {\n return currentWidget;\n }\n\n if (!currentWidget.parentInstanceId) {\n return undefined;\n }\n\n return this.getClosestAncestorByType(currentWidget.parentInstanceId, type);\n }\n\n public hasRenderableWidgets(): boolean {\n return Object.values(this.widgets).some(\n (widget) => !widget.isRoot && !widget.isOptimistic,\n );\n }\n\n public getDebugState() {\n // Strip away all the non-serializable properties\n try {\n return Object.keys(this.widgets).reduce((acc: any, instanceId) => {\n const widget = this.getMeta(instanceId as SbInstance);\n if (!widget) {\n acc[instanceId] = {\n err: `Widget not found`,\n };\n return acc;\n }\n try {\n const node = (widget as any).node;\n const nodeType =\n typeof node === \"object\" && node ? (node as any).type : undefined;\n\n acc[instanceId] = JSON.parse(\n JSON.stringify({\n ...widget,\n node: {\n type:\n typeof nodeType === \"string\" ? nodeType : nodeType?.sbType,\n },\n props: Object.keys(widget.props ?? {}).reduce((acc: any, key) => {\n acc[key] = typeof widget.props![key];\n return acc;\n }, {}),\n }),\n );\n } catch (e) {\n acc[instanceId] = {\n err: `Error serializing widget ${String(e)}`,\n };\n }\n return acc;\n }, {} as any);\n } catch (e) {\n console.error(\"Error debug\", e);\n return {};\n }\n }\n}\n\nexport default RuntimeWidgetsManager;\n","import { action, makeAutoObservable } from \"mobx\";\nimport { makeMobxCachedGetter } from \"../../lib/internal-details/lib/mobx-cached-getter.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getPropertyValue } from \"../properties.js\";\nimport RuntimeWidgetsManager from \"./runtime-widgets-manager.js\";\nimport type {\n ChildElement,\n RuntimeWidgetMeta,\n} from \"./runtime-widgets-manager.js\";\nimport type { IEntityManager } from \"../../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { NameManager } from \"../../lib/internal-details/lib/features/name-manager.js\";\nimport type {\n CreateRequest,\n DeleteRequest,\n PropertyInfo,\n ReparentRequest,\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype OptimisticAction =\n | {\n type: \"ADD\";\n sourceId: SbElement;\n index: number;\n }\n | {\n type: \"REMOVE\";\n sourceId: SbElement;\n }\n | {\n type: \"REORDER\";\n sourceId: SbElement;\n toIndex: number;\n };\n\nclass RuntimeEntitiesManager {\n public widgets: RuntimeWidgetsManager;\n\n public entitiesWithLocalBindings = new Set<SbElement>();\n\n constructor(\n readonly nameManager: NameManager,\n readonly entityManager: IEntityManager,\n ) {\n this.widgets = new RuntimeWidgetsManager(nameManager);\n makeAutoObservable(this, {\n widgets: false,\n });\n }\n\n @action\n public addOptimisticCreateWidget(createRequest: CreateRequest) {\n const parentMeta = this.getAnyEditorWidgetMeta(\n createRequest.parentElement.source.id,\n );\n if (!parentMeta?.rootInstanceId) {\n return;\n }\n this.widgets.addWidgetFromPayload(\n {\n rootInstanceId: parentMeta.rootInstanceId,\n parentInstanceId: parentMeta.instanceId,\n },\n createRequest,\n );\n }\n\n private getOptimisticWidgetMeta = makeMobxCachedGetter((id: SbInstance) => {\n const meta = this.widgets.getMeta(id);\n if (!meta) {\n return undefined;\n }\n\n if (!this.hasEditOperationsPending()) {\n return meta;\n }\n\n const sourceId = meta.sourceId;\n const scopeId = meta.scopeId;\n const name = meta.name;\n\n let merged = meta;\n\n merged = {\n ...meta,\n children: this.getChildrenWithOptimisticUpdates(id),\n };\n\n const reparentOperations =\n getEditStore().operationManager.pendingReparentOperations;\n // TODO this won't work if there are multiple reparent ops that apply to this widget\n const reparentPropsOverride = reparentOperations.find(\n (op) => op.payload.from.source.id === sourceId,\n )?.payload.changedProps;\n\n if (reparentPropsOverride) {\n const transformedProps = Object.fromEntries(\n Object.entries<PropertyInfo>(reparentPropsOverride).map(\n ([key, value]) => {\n return [\n key,\n getPropertyValue({\n entityKey: key,\n property: value,\n name,\n scopeId,\n }),\n ];\n },\n ),\n );\n merged = {\n ...merged,\n props: {\n ...merged?.props,\n ...transformedProps,\n },\n };\n }\n const propUpdates =\n getEditStore().operationManager.pendingSetPropertiesOperations.filter(\n (op) => op.payload.element.source.id === sourceId,\n );\n if (propUpdates.length > 0) {\n const mergedProps = { ...(merged.props ?? {}) };\n propUpdates.forEach((update) => {\n const { properties } = update.payload;\n Object.entries<PropertyInfo>(properties).forEach(\n ([key, updateEntry]) => {\n mergedProps[key] = getPropertyValue({\n entityKey: key,\n property: updateEntry,\n name,\n scopeId,\n });\n },\n );\n });\n merged = {\n ...merged,\n props: mergedProps,\n };\n }\n\n // Resizing\n const pendingResize = getEditStore().ui.resizing.pendingResize(sourceId);\n if (pendingResize) {\n const { width, height } = pendingResize;\n merged.props = {\n ...(merged.props || {}),\n ...(width && merged.type !== \"Icon\" && { width }),\n ...(height && merged.type !== \"Icon\" && { height }),\n ...(width && merged.type === \"Icon\" && { size: width }),\n };\n }\n\n // Page resizing\n const shouldResizePage = getEditStore().ui.dnd.shouldResizePage;\n if (shouldResizePage && merged.type === \"Page\") {\n merged.props = {\n ...(merged.props || {}),\n ...{ width: \"100%\", height: \"100%\" },\n };\n }\n\n return merged;\n });\n\n public hasRenderedWidgets(): boolean {\n return this.widgets.hasRenderableWidgets();\n }\n\n public getEditorWidgetMeta(\n instanceId: SbInstance,\n ): RuntimeWidgetMeta | undefined {\n return this.getOptimisticWidgetMeta(instanceId);\n }\n\n public getEditorWidgetSourceId(instanceId: SbInstance) {\n const identifier = this.nameManager.getExistingIdentifier(instanceId);\n if (identifier) {\n return identifier.sourceId;\n }\n\n const rawMeta = this.widgets.getMeta(instanceId);\n // instanceId -> sourceId mapping is stable so don't need anything optimistic\n if (!rawMeta) {\n return undefined;\n }\n return rawMeta.sourceId;\n }\n\n public getEditorWidgetScopeId(instanceId: SbInstance) {\n const rawMeta = this.widgets.getMeta(instanceId);\n // instanceId -> sourceId mapping is stable so don't need anything optimistic\n if (!rawMeta) {\n return undefined;\n }\n return rawMeta.scopeId;\n }\n\n public getAnyEditorWidgetMeta(sourceId: SbElement) {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(sourceId);\n return this.getEditorWidgetMeta(instanceId);\n }\n\n public getEditorWidgetName(instanceId: SbInstance) {\n return this.getEditorWidgetMeta(instanceId)?.name?.value;\n }\n\n public getEditorWidgetType(instanceId: SbInstance) {\n return this.getEditorWidgetMeta(instanceId)?.type;\n }\n\n public getEditorWidgetChildrenMeta(\n instanceId: SbInstance,\n ): Array<RuntimeWidgetMeta> {\n return this.getOptimisticWidgetChildrenIds(instanceId).reduce(\n (acc, childId) => {\n const meta = this.getEditorWidgetMeta(childId);\n if (meta) {\n acc.push(meta);\n }\n return acc;\n },\n [] as RuntimeWidgetMeta[],\n );\n }\n\n // TODO (alex): local bindings need to be instance ids?\n public setEntitiesWithLocalBindings(entities: string[]) {\n this.entitiesWithLocalBindings = new Set(entities as SbElement[]);\n }\n\n public doesEntityHaveLocalBindings(entity: SbInstance) {\n const entitySourceId = this.getEditorWidgetSourceId(entity);\n return entitySourceId && this.entitiesWithLocalBindings.has(entitySourceId);\n }\n\n private getOptimisticWidgetChildrenIds(instanceId: SbInstance) {\n return this.getChildrenWithOptimisticUpdates(instanceId).reduce(\n (acc, child) => {\n if (child.isSupportedElement && child.value) {\n acc.push(child.value);\n }\n return acc;\n },\n [] as SbInstance[],\n );\n }\n\n // This currently makes the assumption that any given source ID will only have one parent.\n // maybe these types of operations not supported?\n private getParentSourceId(sourceId: SbElement) {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(sourceId);\n if (!instanceId) {\n return undefined;\n }\n const parentInstanceId = this.widgets.getMeta(instanceId)?.parentInstanceId;\n if (!parentInstanceId) {\n return undefined;\n }\n return this.widgets.getMeta(parentInstanceId)?.sourceId;\n }\n\n private get relevantChildrenOperationsMap(): Record<\n SbElement,\n OptimisticAction[] // TODO (alex) - will need to include create\n > {\n const allPending = getEditStore().operationManager.allPendingTransactions;\n const ops: Record<SbElement, OptimisticAction[]> = {};\n for (const op of allPending) {\n if (op.type === \"editor:moveComponent\") {\n const payload = op.payload as ReparentRequest;\n const movedSource = payload.from.source.id;\n const fromParentSource = this.getParentSourceId(movedSource);\n const toSource = payload.to.source.id;\n\n if (fromParentSource === toSource) {\n ops[toSource] ??= [];\n ops[toSource].push({\n type: \"REORDER\",\n sourceId: movedSource,\n toIndex: payload.to.source.index ?? -1,\n });\n } else {\n ops[toSource] ??= [];\n ops[toSource].push({\n type: \"ADD\",\n sourceId: movedSource,\n index: payload.to.source.index ?? -1,\n });\n\n if (fromParentSource) {\n ops[fromParentSource] ??= [];\n ops[fromParentSource].push({\n type: \"REMOVE\",\n sourceId: movedSource,\n });\n }\n }\n } else if (op.type === \"editor:deleteComponents\") {\n const payload = op.payload as DeleteRequest;\n payload.elements.forEach((element) => {\n const deletedSource = element.source.id;\n const parentSourceId = this.getParentSourceId(deletedSource);\n if (parentSourceId) {\n ops[parentSourceId] ??= [];\n ops[parentSourceId].push({\n type: \"REMOVE\",\n sourceId: deletedSource,\n });\n }\n });\n } else if (op.type === \"editor:createComponent\") {\n const payload = op.payload as CreateRequest;\n const parentSourceId = payload.parentElement.source.id;\n if (parentSourceId && payload.id) {\n ops[parentSourceId] ??= [];\n ops[parentSourceId].push({\n type: \"ADD\",\n sourceId: payload.id,\n index: payload.parentElement.source.index ?? -1,\n });\n }\n }\n }\n return ops;\n }\n\n private getChildrenWithOptimisticUpdates = makeMobxCachedGetter(\n (instanceId: SbInstance): ChildElement[] => {\n const widgetMeta = this.widgets.getMeta(instanceId);\n if (!widgetMeta) {\n return [];\n }\n\n const relevantOperations =\n this.relevantChildrenOperationsMap[widgetMeta.sourceId];\n\n if (!relevantOperations || relevantOperations.length === 0) {\n return widgetMeta.children ?? [];\n }\n\n let optimisticChildren = [...(widgetMeta.children ?? [])];\n\n for (const op of relevantOperations) {\n if (op.type === \"ADD\") {\n // TODO (alex) - this needs to find the matching instance id based on scope\n const childInstanceId = this.widgets.getAnyInstanceIdForSourceId(\n op.sourceId,\n );\n const childMeta = this.getEditorWidgetMeta(childInstanceId);\n if (!childMeta) {\n continue;\n }\n const appendToEnd = op.index === -1;\n const index = appendToEnd ? optimisticChildren.length : op.index;\n optimisticChildren.splice(index, 0, {\n isSbComponent: childMeta.isSbComponent,\n isSupportedElement: true,\n value: childInstanceId,\n });\n } else if (op.type === \"REMOVE\") {\n optimisticChildren = optimisticChildren.filter((child) => {\n if (typeof child.value === \"string\") {\n const childSourceId = this.getEditorWidgetSourceId(child.value);\n return childSourceId !== op.sourceId;\n }\n return true;\n });\n } else if (op.type === \"REORDER\") {\n const elementIndex = optimisticChildren.findIndex((child) => {\n if (typeof child.value === \"string\") {\n const childSourceId = this.getEditorWidgetSourceId(child.value);\n return childSourceId === op.sourceId;\n }\n return false;\n });\n\n if (elementIndex !== -1) {\n const elementToMove = optimisticChildren[elementIndex];\n const appendToEnd =\n op.toIndex === -1 || op.toIndex === optimisticChildren.length;\n\n const placeholder = Symbol(\"reorder-placeholder\");\n (optimisticChildren as any)[elementIndex] = placeholder;\n\n if (appendToEnd) {\n optimisticChildren.push(elementToMove);\n } else {\n optimisticChildren.splice(op.toIndex, 0, elementToMove);\n }\n\n optimisticChildren = (optimisticChildren as any[]).filter(\n (child) => child !== placeholder,\n );\n }\n }\n }\n\n return optimisticChildren;\n },\n );\n\n public getEditorWidgetChildren(instanceId: SbInstance): ChildElement[] {\n return this.getChildrenWithOptimisticUpdates(instanceId);\n }\n\n // TODO will need to include all other operations like\n // widget creation/deletion, etc.\n public hasEditOperationsPending() {\n const hasPendingOperations =\n getEditStore().operationManager.hasPendingOperations;\n const hasPendingResize = getEditStore().ui.resizing.hasAnyPendingResize;\n const shouldResizePage = getEditStore().ui.dnd.shouldResizePage;\n return hasPendingOperations || hasPendingResize || shouldResizePage;\n }\n\n public getPendingOperations() {\n const pendingResizes = getEditStore().ui.resizing.pendingResizes;\n return [\n ...getEditStore().operationManager.allPendingTransactions,\n ...pendingResizes,\n ];\n }\n\n public getScopeIdForSourceId(sourceId: SbElement) {\n const widget = this.getAnyEditorWidgetMeta(sourceId);\n if (!widget) {\n return undefined;\n }\n return widget.scopeId;\n }\n\n public applySideEffects(\n changes: Record<string, Record<string, unknown>>,\n scopeId: string,\n ) {\n const state = this.entityManager.getState(scopeId);\n Object.entries(changes).forEach(([sourceId, changes]) => {\n const instanceId = this.widgets.getAnyInstanceIdForSourceId(\n sourceId as SbElement,\n );\n const entityName = this.getEditorWidgetName(instanceId);\n const entity = entityName ? state[entityName] : undefined;\n if (entity == null || typeof entity !== \"object\") {\n return;\n }\n Object.entries(changes).forEach(([key, value]) => {\n (entity as any)[key] = value;\n });\n });\n }\n\n public isChildOf(childId: SbInstance, parentId: SbInstance): boolean {\n return this.widgets.isChildOf(childId, parentId);\n }\n\n public getClosestAncestorByType(id: SbInstance, type: string) {\n return this.widgets.getClosestAncestorByType(id, type);\n }\n}\n\nexport default RuntimeEntitiesManager;\n","import rootStore from \"../internal-details/lib/root-store.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\n\nexport const isComponentStacklike = (\n component: RuntimeWidgetMeta | undefined,\n) => {\n if (!component || !component.type) {\n return false;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(\n component.type,\n );\n\n if (!editorConfig?.isDroppable) {\n return false;\n }\n\n return true;\n};\n","import rootStore from \"../internal-details/lib/root-store.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\nimport type { ContainerLayout } from \"../user-facing/component-base/constants.js\";\n\nconst DEFAULT_LAYOUT_PROPERTY_PATH = \"layout\";\n\nexport const getComponentLayout = (\n component: RuntimeWidgetMeta | undefined,\n): ContainerLayout | undefined => {\n if (!component || !component.type) {\n return undefined;\n }\n\n const editorConfig = rootStore.componentRegistry.getEditorConfig(\n component.type,\n );\n\n const propertyPath =\n editorConfig?.layoutPropertyPath ?? DEFAULT_LAYOUT_PROPERTY_PATH;\n\n return component.props?.[propertyPath] as ContainerLayout | undefined;\n};\n","import { getComponentLayout } from \"./get-component-layout.js\";\nimport type { RuntimeWidgetMeta } from \"../../edit-mode/features/runtime-widgets-manager.js\";\n\nexport const isComponentVStack = (component: RuntimeWidgetMeta | undefined) => {\n if (!component || !component.type) {\n return false;\n }\n\n const layout = getComponentLayout(component);\n return layout === \"vertical\" || layout === undefined;\n};\n","import type { RectLike, StackDropInfo, StackPlaceholderPos } from \"./types.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\ntype ChildPosInfos = Record<\n SbInstance,\n [pos: RectLike<number>, origIndex: number]\n>;\n\ntype WithSizeLike<T> = {\n width: T;\n height: T;\n};\n\nconst makeRectGetters = (isVertical: boolean) => {\n return {\n major: {\n start: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.top : rectLike.left;\n },\n end: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.bottom : rectLike.right;\n },\n length: <T>(rectLike: WithSizeLike<T>): T => {\n return isVertical ? rectLike.height : rectLike.width;\n },\n },\n minor: {\n start: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.left : rectLike.top;\n },\n end: <T>(rectLike: RectLike<T>): T => {\n return isVertical ? rectLike.right : rectLike.bottom;\n },\n length: <T>(rectLike: WithSizeLike<T>): T => {\n return isVertical ? rectLike.width : rectLike.height;\n },\n },\n };\n};\n\nconst RECT_GETTERS = {\n vertical: makeRectGetters(true),\n horizontal: makeRectGetters(false),\n};\n\nconst DROP_LINE_THICKNESS = 4;\n\nconst computeClosestChildInStack = (params: {\n childRects: ChildPosInfos;\n isVertical: boolean;\n x: number;\n y: number;\n}): {\n instanceId: SbInstance | null;\n widgetIndex: number;\n distance: number;\n posIsAfterMidpoint?: boolean;\n} => {\n const { childRects, isVertical, x, y } = params;\n\n const closestChild = Object.keys(childRects).reduce(\n (\n acc: {\n instanceId: SbInstance | null;\n widgetIndex: number;\n distance: number;\n },\n key,\n ) => {\n const [childRect, origIndex] = childRects[key as SbInstance];\n // TODO layouts: this won't work for Hstacks that wrap\n const distance = isVertical\n ? Math.abs(y - childRect.top)\n : Math.abs(x - childRect.left);\n if (distance < acc.distance) {\n acc = {\n instanceId: key as SbInstance,\n widgetIndex: origIndex,\n distance,\n };\n }\n return acc;\n },\n {\n instanceId: null,\n widgetIndex: -1,\n distance: Number.MAX_SAFE_INTEGER,\n },\n );\n\n if (closestChild.instanceId == null) {\n return closestChild;\n }\n\n const [childRect] = childRects[closestChild.instanceId];\n const midpoint = isVertical\n ? (childRect.top + childRect.bottom) / 2\n : (childRect.left + childRect.right) / 2;\n\n const isAfterMidpoint = (isVertical ? y : x) > midpoint;\n\n return {\n ...closestChild,\n posIsAfterMidpoint: isAfterMidpoint,\n };\n};\n\nconst getChildrenPositionInfo = (\n children: Array<[id: SbInstance, child: RectLike<number>]>,\n) => {\n const childRects = children.reduce(\n (acc: ChildPosInfos, [childId, childRect], idx) => {\n if (!childRect) return acc;\n acc[childId] = [childRect, idx];\n return acc;\n },\n {},\n );\n return childRects;\n};\n\nexport const computeDragInfo = (params: {\n isVertical: boolean;\n childrenNodes: Array<[id: SbInstance, child: RectLike<number>]>;\n baseRect: RectLike<number>;\n draggedItemPos: { x: number; y: number };\n draggedInstance: SbInstance;\n selectedInstances: SbInstance[];\n}): undefined | StackDropInfo => {\n const {\n isVertical,\n childrenNodes,\n draggedItemPos,\n selectedInstances,\n baseRect,\n } = params;\n\n const { major } = isVertical\n ? RECT_GETTERS.vertical\n : RECT_GETTERS.horizontal;\n\n const childRects = getChildrenPositionInfo(childrenNodes);\n // Technically not the geometrically closest child. Just an accurate enough to know where the cursor is within the stack\n const closestChild = computeClosestChildInStack({\n childRects,\n isVertical,\n x: draggedItemPos.x,\n y: draggedItemPos.y,\n });\n\n // we have to filter child instance Ids because modals and slideouts take up space in the child arr, despite being\n // removed entirely from the layout of a stack\n const filteredChildIds = childrenNodes\n .filter(([childId]) => childRects[childId] != null)\n .map(([childId]) => childId);\n\n const hasDraggedOnlyWidgetInParent =\n filteredChildIds.length === 1 &&\n filteredChildIds[0] === params.draggedInstance;\n\n let filteredInsertionIndex = 0;\n const placeholders: StackPlaceholderPos[] = [];\n let noopDrop = false;\n\n // determine if the pointer is before or after the midpoint\n if (closestChild.instanceId != null) {\n const childIndex = filteredChildIds.indexOf(closestChild.instanceId);\n\n const isAfterMidpoint = closestChild.posIsAfterMidpoint ?? false;\n filteredInsertionIndex =\n !hasDraggedOnlyWidgetInParent && isAfterMidpoint\n ? childIndex + 1\n : childIndex;\n // Find the middle of the gap between the two widgets\n const [beforeChildIndex, afterChildIndex] = isAfterMidpoint\n ? [childIndex, childIndex + 1]\n : [childIndex - 1, childIndex];\n const beforeChildId = filteredChildIds[beforeChildIndex];\n const afterChildId = filteredChildIds[afterChildIndex];\n\n const selectedSet = new Set(selectedInstances);\n\n // a rather unintuitive way to determine whether or not the selected widgets are perfectly consecutive\n const maxMin = selectedInstances.reduce(\n (acc: { maxIndex: number; minIndex: number }, instanceId) => {\n const widgetIndex = filteredChildIds.indexOf(instanceId);\n if (widgetIndex < 0) {\n return acc; // this should not happen\n }\n acc.maxIndex = Math.max(acc.maxIndex, widgetIndex);\n acc.minIndex = Math.min(acc.minIndex, widgetIndex);\n return acc;\n },\n {\n maxIndex: -1,\n minIndex: Number.MAX_SAFE_INTEGER,\n },\n );\n // Our objective is to show the placeholders in full size when hovering the dragged item(s) over their original location\n // This is because dropping here would not cause a change in layout, so showing the full size placeholders is more intuitive.\n // When selecting multiple widgets, hovering over \"original location\" is less meaningful if the selected widgets are not consecutive.\n // This is because dropping non-consecutive widgets over ANY location is going to result in some change in layout.\n const selectedWidgetsAreConsecutive =\n maxMin.maxIndex - maxMin.minIndex + 1 === selectedInstances.length;\n const isInsertingNewElement = maxMin.maxIndex === -1;\n\n noopDrop =\n selectedWidgetsAreConsecutive &&\n (selectedSet.has(beforeChildId) || selectedSet.has(afterChildId));\n if (selectedInstances?.length > 0) {\n selectedInstances.forEach((instanceId) => {\n const draggedRect = childRects?.[instanceId]?.[0];\n if (draggedRect) {\n placeholders.push({\n isActive: noopDrop,\n left: draggedRect.left - baseRect.left,\n top: draggedRect.top - baseRect.top,\n width: draggedRect.width,\n height: draggedRect.height,\n });\n }\n });\n }\n\n if (hasDraggedOnlyWidgetInParent) {\n return {\n insertionIndex: 0,\n noopDrop: true,\n placeholders,\n };\n }\n\n // loop through all possible placeholder positions aka insertion indexes\n const potentialInsertionIndexes = Array.from(\n { length: filteredChildIds.length + 1 },\n (_, i) => i,\n );\n potentialInsertionIndexes\n .filter((potentialIdx) => {\n // We should hide the placeholder if and only if inserting here would do nothing.\n // - When the insertion index is touching the selected widget(s)\n // - Don't hide the placeholders if dragging from outside the stack, or if there are multiple widgets and they are not consecutive\n if (isInsertingNewElement || !selectedWidgetsAreConsecutive) {\n return true;\n }\n if (\n selectedSet.has(filteredChildIds[potentialIdx]) ||\n selectedSet.has(filteredChildIds[potentialIdx - 1])\n ) {\n return false;\n }\n return true;\n })\n .forEach((potentialIdx) => {\n // TODO calculate these\n let gapSize = 0;\n const startPaddingGap = 0;\n const endPaddingGap = 0;\n const parentPaddingLeft = 0;\n const parentPaddingRight = 0;\n const parentPaddingBottom = 0;\n const parentPaddingTop = 0;\n // let gapSize = parentSpacingGap;\n // const startPaddingGap =\n // major.start(parentWidgetPadding as PaddingAsRect)?.value ?? 0;\n // const endPaddingGap =\n // major.end(parentWidgetPadding as PaddingAsRect)?.value ?? 0;\n if (potentialIdx === filteredChildIds.length) {\n gapSize = endPaddingGap;\n } else if (potentialIdx === 0) {\n gapSize = startPaddingGap;\n }\n gapSize /= 2;\n\n let offsetPx: number;\n if (potentialIdx === filteredChildIds.length) {\n const lastInstanceId = filteredChildIds[filteredChildIds.length - 1];\n const rect = childRects[lastInstanceId]?.[0];\n if (!rect) {\n return;\n }\n offsetPx = major.end(rect) - DROP_LINE_THICKNESS / 2 + gapSize;\n } else {\n const instanceId = filteredChildIds[potentialIdx];\n const rect = childRects[instanceId]?.[0];\n if (!rect) {\n return;\n }\n offsetPx = major.start(rect) - DROP_LINE_THICKNESS / 2 - gapSize;\n }\n\n if (isVertical) {\n const clamp = (top: number) => {\n return Math.max(\n 0,\n Math.min(top, baseRect.height - DROP_LINE_THICKNESS),\n );\n };\n placeholders.push({\n isActive: potentialIdx === filteredInsertionIndex,\n left: parentPaddingLeft ?? 0,\n top: clamp(offsetPx - baseRect.top),\n width: baseRect.width - parentPaddingRight - parentPaddingLeft,\n height: DROP_LINE_THICKNESS,\n });\n } else {\n const clamp = (left: number) => {\n return Math.max(\n 0,\n Math.min(left, baseRect.width - DROP_LINE_THICKNESS),\n );\n };\n placeholders.push({\n isActive: potentialIdx === filteredInsertionIndex,\n left: clamp(offsetPx - baseRect.left),\n top: parentPaddingTop,\n height: baseRect.height - parentPaddingBottom - parentPaddingTop,\n width: DROP_LINE_THICKNESS,\n });\n }\n });\n } else {\n // There are no children in the stack\n // We need to show the placeholder for the new insertion\n placeholders.push({\n isActive: true,\n left: 0,\n top: 0,\n height: isVertical ? DROP_LINE_THICKNESS : baseRect.height,\n width: isVertical ? baseRect.width : DROP_LINE_THICKNESS,\n });\n }\n\n let insertionIndex = filteredInsertionIndex;\n if (insertionIndex === filteredChildIds.length) {\n insertionIndex = childrenNodes.length;\n } else {\n const widgetAtInsertionIndex = filteredChildIds[filteredInsertionIndex];\n const originalIndex = childRects[widgetAtInsertionIndex]?.[1];\n if (originalIndex != null) {\n insertionIndex = originalIndex;\n }\n }\n\n return {\n insertionIndex,\n placeholders,\n noopDrop,\n };\n};\n","import { makeAutoObservable } from \"mobx\";\nimport { isComponentVStack } from \"../../lib/utils/is-component-vstack.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { computeDragInfo } from \"./stack-utils.js\";\nimport type { RectLike, StackDropInfo } from \"./types.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { DragAndDropManager } from \"../features/drag-and-drop-store.js\";\nimport type { SbInstance } from \"@superblocksteam/library-shared/types\";\n\n// Although this is labeled a \"store\", it's more of a caching layer for computations related to stack DnD\nexport class StackManager {\n private root: RootStore;\n private dnd: DragAndDropManager;\n\n // cannot derive dnd from root because it may not be initialized yet\n constructor(root: RootStore, dnd: DragAndDropManager) {\n this.root = root;\n this.dnd = dnd;\n makeAutoObservable(this);\n }\n\n refreshPositionsAndGetDropIndex() {\n if (this.dnd.dropTargetId) {\n this.dnd.updateChildPositions(this.dnd.dropTargetId);\n }\n return this.lazyDropInfo;\n }\n\n get lazyDropInfo(): StackDropInfo {\n const dropTargetId = this.dnd.dropTargetId;\n const activeRect = this.dnd.activeDragRect;\n const selectedSourceIds = this.root.editStore!.ui.getSelectedSourceIds();\n const draggedSourceId = selectedSourceIds[0];\n const baseRect = this.dnd.activeTargetRect;\n // There's no selectedSourceIds when dragging a new component into the canvas\n const isExistingComponentDrag = !this.dnd.isDraggingNewComponent;\n\n if (\n !dropTargetId ||\n !activeRect ||\n !baseRect ||\n (isExistingComponentDrag && !draggedSourceId)\n ) {\n return { insertionIndex: undefined, placeholders: undefined };\n }\n\n const dropTargetWidget =\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(dropTargetId);\n\n if (!dropTargetWidget) {\n return { insertionIndex: undefined, placeholders: undefined };\n }\n\n const isVertical = isComponentVStack(dropTargetWidget);\n\n const childrenElements =\n getEditStore().runtimeEntitiesManager.getEditorWidgetChildrenMeta(\n dropTargetId,\n );\n\n const childrenNodes = childrenElements.map((childMeta) => {\n const id = childMeta.instanceId;\n return [id, this.dnd.widgetPositions[id]] as [\n SbInstance,\n RectLike<number>,\n ];\n });\n\n const draggedItemX = activeRect.left + activeRect.width / 2;\n const draggedItemY = activeRect.top + activeRect.height / 2;\n\n const selectedInstances =\n this.root.editStore!.ui.getSelectedInstanceIds() ?? [];\n const dragInfo = computeDragInfo({\n isVertical,\n childrenNodes,\n baseRect,\n draggedItemPos: {\n x: draggedItemX,\n y: draggedItemY,\n },\n selectedInstances,\n draggedInstance: selectedInstances[0],\n });\n\n return dragInfo ?? { insertionIndex: undefined, placeholders: undefined };\n }\n}\n","import { ROOT_WIDGET_ATTRIBUTE } from \"@superblocksteam/library-shared\";\nimport { isEqual } from \"lodash\";\nimport { action, makeAutoObservable } from \"mobx\";\nimport { isComponentStacklike } from \"../../lib/utils/is-component-stacklike.js\";\nimport { StackManager } from \"../dnd/stack-store.js\";\n\nimport {\n areDragAndDropInstancesValid,\n isDragAndDropTypeValid,\n} from \"../dnd/utils.js\";\nimport { getEditStore } from \"../get-edit-store.js\";\nimport { getBoundingBoxForWidget } from \"../interaction-utils.js\";\nimport { startEditorSync } from \"../mobx-sync/mobx-editor-sync.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { ClientRect } from \"@dnd-kit/core\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype DNDFeatures = {\n dragAndDrop?: boolean;\n nudging?: boolean;\n};\n\nexport class DragAndDropManager {\n private root: RootStore;\n stack: StackManager;\n\n private _dropTargetInstanceId: SbInstance | null = null;\n private _isDragging = false;\n private _isDraggingNewComponent = false;\n private _activeDragRect: ClientRect | null = null;\n private _activeTargetRect: ClientRect | null = null;\n private _draggingWidgetSize = { height: 0, width: 0 };\n private _dragToCanvasComponentType: string | null = null;\n\n private _validRootIds: SbInstance[] | null = null;\n private _shouldResizePage: boolean = false;\n private _invalidDropTarget = false;\n\n private _perWidgetFeatures: Record<SbElement, DNDFeatures> = {};\n\n public widgetPositions: Record<SbInstance, ClientRect> = {};\n\n constructor(root: RootStore) {\n this.root = root;\n this.stack = new StackManager(root, this);\n\n makeAutoObservable(this);\n\n startEditorSync({\n store: this,\n storeId: \"dnd\",\n\n projection(store) {\n return {\n isDragging: store._isDragging,\n isDraggingNewComponent: store._isDraggingNewComponent,\n };\n },\n });\n }\n\n get isDragging() {\n return this._isDragging;\n }\n\n get isDraggingNewComponent() {\n return this._isDraggingNewComponent;\n }\n\n get draggingWidgetSize() {\n return this._draggingWidgetSize;\n }\n\n get dropTargetId() {\n return this._dropTargetInstanceId;\n }\n\n get activeDragRect() {\n return this._activeDragRect;\n }\n\n get activeTargetRect() {\n return this._activeTargetRect;\n }\n\n get shouldResizePage() {\n return this._shouldResizePage;\n }\n\n get dropTargetWidgetType() {\n return this.dropTargetId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetType(\n this.dropTargetId,\n )\n : undefined;\n }\n\n get isDropTargetStackLike() {\n const dropTargetId = this.dropTargetId;\n const widgetMeta = dropTargetId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(dropTargetId)\n : undefined;\n\n return isComponentStacklike(widgetMeta);\n }\n\n get draggedWidgetType() {\n if (this.isDraggingNewComponent) {\n return this._dragToCanvasComponentType;\n }\n const selectedInstanceIds =\n this.root.editStore!.ui.getSelectedInstanceIds();\n const draggedInstanceId = selectedInstanceIds[0];\n return draggedInstanceId\n ? getEditStore().runtimeEntitiesManager.getEditorWidgetType(\n draggedInstanceId,\n )\n : undefined;\n }\n\n get draggedWidgetInstanceId() {\n if (this.isDraggingNewComponent) {\n return undefined;\n }\n const selectedInstanceIds =\n this.root.editStore!.ui.getSelectedInstanceIds();\n return selectedInstanceIds[0];\n }\n\n get dragToCanvasComponentType() {\n return this._dragToCanvasComponentType;\n }\n\n get validRootIds() {\n return this._validRootIds;\n }\n\n get isProspectiveDropValid() {\n const dropTargetInstanceId = this.dropTargetId;\n const draggedInstanceId = this.draggedWidgetInstanceId;\n if (!dropTargetInstanceId) {\n return false;\n }\n\n const isDraggingNewComponent = this.isDraggingNewComponent;\n const instancesValid = areDragAndDropInstancesValid({\n dropTargetInstanceId,\n draggedInstanceId,\n isDraggingNewComponent,\n });\n\n if (!instancesValid) {\n return false;\n }\n\n const draggedType = this.draggedWidgetType;\n const dropTargetType = this.dropTargetWidgetType;\n if (!draggedType || !dropTargetType) {\n return false;\n }\n const dropTargetEmpty =\n (dropTargetInstanceId &&\n getEditStore().runtimeEntitiesManager.getEditorWidgetMeta(\n dropTargetInstanceId,\n )?.children?.length === 0) ??\n true;\n const typesValid = isDragAndDropTypeValid({\n draggedType,\n dropTargetType,\n isDraggingNewComponent,\n dropTargetEmpty,\n });\n\n return typesValid;\n }\n\n canDragWidget(instanceId: SbInstance): boolean {\n const editStore = getEditStore();\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (!sourceId) return false;\n\n if (editStore.ai.getIsEditing()) {\n return false;\n }\n\n return this._perWidgetFeatures?.[sourceId]?.dragAndDrop ?? true;\n }\n\n // TODO: Implement this, currently unused\n canNudgeWidget(instanceId: SbInstance): boolean {\n const editStore = getEditStore();\n const sourceId =\n editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n if (!sourceId) return false;\n\n if (editStore.ai.getIsEditing()) {\n return false;\n }\n\n return this._perWidgetFeatures?.[sourceId]?.nudging ?? true;\n }\n\n @action\n setWidgetFeatures(id: SbElement, features: Partial<DNDFeatures>) {\n if (!this._perWidgetFeatures[id]) {\n this._perWidgetFeatures[id] = {};\n }\n this._perWidgetFeatures[id] = {\n ...this._perWidgetFeatures[id],\n ...features,\n };\n }\n\n @action\n setIsDragging(isDragging: boolean) {\n this._isDragging = isDragging;\n if (!isDragging) {\n this._activeDragRect = null;\n this._activeTargetRect = null;\n this._validRootIds = null;\n }\n }\n\n /**\n * Indicates a drag of a new component into the canvas (e.g: from the sidebar)\n * Used to handle the dragging preview, and the drop handling\n */\n @action\n startNewComponentDrag({ componentType }: { componentType: string | null }) {\n if (!componentType) {\n return;\n }\n\n this._isDraggingNewComponent = true;\n this._dragToCanvasComponentType = componentType;\n\n const editorTemplates =\n this.root.componentRegistry.getEditorTemplates(componentType);\n\n if (editorTemplates && editorTemplates.length > 1) {\n /**\n * Future: If we implement multiple editor templates per component type,\n * we need to handle the preview size differently.\n *\n * To do so, the editor should send the `\"dragstart\"` message with the catalog id.\n * For now, we just grab the 1st and only one.\n */\n throw new Error(\n `Multiple editor templates per component type not yet supported`,\n );\n }\n\n const catalog = editorTemplates?.[0]?.catalog;\n\n const DEFAULT_PREVIEW_SIZE: typeof this._draggingWidgetSize = {\n width: 8,\n height: 6,\n };\n\n this._draggingWidgetSize = {\n width: ((catalog as any)?.previewSize?.width.value ??\n DEFAULT_PREVIEW_SIZE.width) as number,\n height: ((catalog as any)?.previewSize?.height.value ??\n DEFAULT_PREVIEW_SIZE.height) as number,\n };\n }\n\n @action\n cancelNewComponentDrag() {\n this._isDraggingNewComponent = false;\n this._dragToCanvasComponentType = null;\n this._draggingWidgetSize = { height: 0, width: 0 };\n this.restorePageDimensions();\n }\n\n @action\n setValidRootIds(ids: SbInstance[]) {\n this._validRootIds = ids;\n }\n\n @action\n setDropTargetId(id: SbInstance | null) {\n this._dropTargetInstanceId = id;\n if (id == null) {\n this._activeTargetRect = null;\n } else {\n this.updateChildPositions(id);\n }\n }\n\n @action\n setActiveDragRect(collidingRect: ClientRect | null) {\n if (isEqual(this._activeDragRect, collidingRect)) {\n return;\n }\n\n if (this.isDropTargetStackLike) {\n this._activeDragRect = collidingRect;\n return;\n }\n\n this._activeDragRect = collidingRect;\n }\n\n @action\n setActiveTargetRect(rect: ClientRect | null) {\n if (isEqual(this._activeTargetRect, rect)) {\n return;\n }\n this._activeTargetRect = rect;\n if (this.dropTargetId) {\n this.updateChildPositions(this.dropTargetId);\n }\n }\n\n @action\n setWidgetPosition(id: SbInstance, rect: ClientRect | null) {\n if (rect == null) {\n delete this.widgetPositions[id];\n } else {\n if (isEqual(this.widgetPositions[id], rect)) {\n return;\n }\n this.widgetPositions[id] = rect;\n }\n }\n\n @action\n updateChildPositions(id: SbInstance) {\n const children =\n getEditStore().runtimeEntitiesManager.getEditorWidgetChildrenMeta(id);\n children.forEach((child) => {\n const boundingBox = getBoundingBoxForWidget(child.instanceId);\n const rect = boundingBox\n ? ({\n left: boundingBox.left,\n top: boundingBox.top,\n width: boundingBox.width,\n height: boundingBox.height,\n right: boundingBox.right,\n bottom: boundingBox.bottom,\n } satisfies ClientRect)\n : null;\n this.setWidgetPosition(child.instanceId, rect);\n });\n }\n\n private getPageElement() {\n return document.querySelector(\n `[${ROOT_WIDGET_ATTRIBUTE}=\"true\"]`,\n ) as HTMLElement | null;\n }\n\n // If the page is new, there might not be a surface for the element to be dropped on\n resizePageIfNeeded() {\n const page = this.getPageElement();\n if (page) {\n const pageRect = page.getBoundingClientRect();\n if (pageRect.width === 0 || pageRect.height === 0) {\n this._shouldResizePage = true;\n }\n }\n }\n\n private restorePageDimensions() {\n this._shouldResizePage = false;\n }\n}\n","import { Property, Dim } from \"@superblocksteam/library-shared\";\nimport { makeAutoObservable } from \"mobx\";\nimport { startEditorSync } from \"../mobx-sync/mobx-editor-sync.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { PropertyInfo } from \"@superblocksteam/library-shared\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\ntype ResizeState = {\n instanceId: SbInstance;\n sourceId: SbElement;\n dragStartX: number;\n dragStartY: number;\n start: {\n width: number;\n height: number;\n };\n resizedPosition: string;\n widthToUpdate: Dim | null;\n heightToUpdate: Dim | null;\n isApplyingResize: boolean;\n};\n\nexport class ResizingManager {\n private _activeResizes: Map<SbElement, ResizeState> = new Map();\n\n constructor(private root: RootStore) {\n makeAutoObservable(this);\n\n startEditorSync({\n store: this,\n storeId: \"resizing\",\n projection(store) {\n const resize = store.activeResize;\n return {\n isResizing: resize != null,\n activeResize: resize\n ? {\n width: resize.widthToUpdate,\n height: resize.heightToUpdate,\n }\n : null,\n };\n },\n });\n }\n\n get activeResize() {\n const selectedSourceId = this.root.editStore?.ui.getSelectedSourceIds()[0];\n if (!selectedSourceId) {\n return null;\n }\n return this._activeResizes.get(selectedSourceId);\n }\n\n private isLockedAspectRatio(instanceId: SbInstance) {\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n\n const editorConfig = widget?.type\n ? this.root.componentRegistry.getEditorConfig(widget?.type)\n : null;\n return editorConfig?.isFixedAspectRatio === true;\n }\n\n public startResizing(\n dragStartX: number,\n dragStartY: number,\n instanceId: SbInstance,\n position: string,\n ) {\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n if (!widget) {\n console.error(`Could not find metadata ${instanceId}`);\n return;\n }\n\n const parentInstanceId = widget?.parentInstanceId;\n const parentWidget =\n parentInstanceId &&\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n parentInstanceId,\n );\n\n if (!parentWidget) {\n console.error(`Could not find parent for ${instanceId}`);\n return;\n }\n\n this._activeResizes.set(widget.sourceId, {\n instanceId,\n sourceId: widget.sourceId,\n dragStartX,\n dragStartY,\n start: {\n width:\n (widget?.props?.width as Dim)?.value ??\n (widget?.props?.size as Dim)?.value ??\n 0,\n height: (widget?.props?.height as Dim)?.value ?? 0,\n },\n resizedPosition: position,\n widthToUpdate: null,\n heightToUpdate: null,\n isApplyingResize: false,\n });\n }\n\n private calculateDimension(baseValue: number, delta: number): number {\n return Math.floor(Math.max(baseValue + delta, 0));\n }\n\n private handleResizeDimension(params: {\n resizeState: ResizeState;\n dimension: \"width\" | \"height\";\n delta: number;\n canResize: boolean;\n mode: string;\n position: string;\n }) {\n const { resizeState, dimension, delta, canResize, position } = params;\n if (!canResize) return;\n\n const isHorizontal = dimension === \"width\";\n const startValue = resizeState.start[dimension];\n\n let newValue = null;\n\n if (position.includes(isHorizontal ? \"left\" : \"top\")) {\n newValue = this.calculateDimension(startValue, -delta);\n } else if (position.includes(isHorizontal ? \"right\" : \"bottom\")) {\n newValue = this.calculateDimension(startValue, delta);\n }\n\n return () => {\n if (newValue) {\n resizeState[`${dimension}ToUpdate`] = Dim.px(newValue);\n }\n };\n }\n\n public resizeWidget(\n currentX: number,\n currentY: number,\n instanceId: SbInstance,\n canResizeWidth: boolean,\n canResizeHeight: boolean,\n ) {\n const sourceId =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n const type =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetType(\n instanceId,\n );\n const resizeState = sourceId && this._activeResizes.get(sourceId);\n if (!resizeState) {\n return;\n }\n\n const widget =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetMeta(\n instanceId,\n );\n\n let widthMode = (widget?.props?.width as Dim)?.mode;\n const heightMode = (widget?.props?.height as Dim)?.mode;\n\n const lockedAspectRatio = this.isLockedAspectRatio(instanceId);\n\n const deltaX = currentX - resizeState.dragStartX;\n const deltaY = lockedAspectRatio\n ? deltaX\n : currentY - resizeState.dragStartY;\n\n if (type === \"Icon\") {\n widthMode = (widget?.props?.size as Dim)?.mode;\n if (!widthMode) {\n widthMode = \"px\";\n }\n }\n\n const updateWidth = this.handleResizeDimension({\n resizeState,\n dimension: \"width\",\n delta: deltaX,\n canResize: canResizeWidth,\n mode: widthMode,\n position: resizeState.resizedPosition,\n });\n\n const updateHeight = this.handleResizeDimension({\n resizeState,\n dimension: \"height\",\n delta: deltaY,\n canResize: canResizeHeight,\n mode: heightMode,\n position: resizeState.resizedPosition,\n });\n\n if (updateWidth) {\n updateWidth();\n }\n if (updateHeight) {\n updateHeight();\n }\n\n this._activeResizes.set(sourceId, resizeState);\n }\n\n // sourceId rather than instance because we are resizing all items of this source at the same time.\n public pendingResize(sourceId: SbElement) {\n const resizeState = this._activeResizes.get(sourceId);\n if (!resizeState) {\n return null;\n }\n return {\n width: resizeState.widthToUpdate,\n height: resizeState.heightToUpdate,\n };\n }\n\n public get hasAnyPendingResize() {\n return Array.from(this._activeResizes.values()).some(\n // Margins are not here because they are not part of the actual resizing, they are just to improve the UX with the positioning\n (state) => state.widthToUpdate || state.heightToUpdate,\n );\n }\n\n public get pendingResizes() {\n return Array.from(this._activeResizes.values()).filter(\n (state) => !state.isApplyingResize,\n );\n }\n\n public applyResize(instanceId: SbInstance) {\n const sourceId =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n const type =\n this.root.editStore?.runtimeEntitiesManager.getEditorWidgetType(\n instanceId,\n );\n const resizeState = sourceId && this._activeResizes.get(sourceId);\n if (!resizeState) {\n return;\n }\n\n resizeState.isApplyingResize = true;\n\n const properties: Record<string, PropertyInfo<unknown>> = {\n ...(resizeState.heightToUpdate &&\n type !== \"Icon\" && {\n height: Property.Dimension(resizeState.heightToUpdate),\n }),\n ...(resizeState.widthToUpdate &&\n type !== \"Icon\" && {\n width: Property.Dimension(resizeState.widthToUpdate),\n }),\n ...(resizeState.widthToUpdate &&\n type === \"Icon\" && {\n size: Property.Dimension(resizeState.widthToUpdate),\n }),\n };\n\n if (Object.keys(properties).length > 0) {\n this.root.editStore?.operationManager.setWidgetProperties({\n applySideEffects: true,\n sourceId: resizeState.sourceId,\n properties,\n callback: () => {\n this._activeResizes.delete(sourceId);\n },\n });\n }\n }\n}\n","import { action, computed, makeObservable, observable, when } from \"mobx\";\nimport { editorBridge } from \"../superblocks-editor-bridge.js\";\nimport { DragAndDropManager } from \"./drag-and-drop-store.js\";\nimport { ResizingManager } from \"./resizing-store.js\";\nimport type { RootStore } from \"../../lib/internal-details/lib/root-store.js\";\nimport type { EditStore } from \"../edit-store.js\";\nimport type {\n SbElement,\n SbInstance,\n} from \"@superblocksteam/library-shared/types\";\n\nconst MULTI_SELECT_ENABLED = false; // TODO https://linear.app/superblocks/issue/FE-1673\n\nclass UIStore {\n dnd: DragAndDropManager;\n resizing: ResizingManager;\n\n // TODO (Alex): audit ALL usage of these 4 to ensure interactions work correctly\n private _selectedSourceIds: SbElement[] = [];\n private _selectedInstanceIds: SbInstance[] = [];\n private _focusedSourceId: SbElement | null = null;\n private _focusedInstanceId: SbInstance | null = null;\n\n private _rootInstanceData: Map<\n SbInstance,\n {\n sourceId: SbElement;\n isRoot: boolean;\n }\n > = new Map();\n\n private newComponentSelectPromise:\n | (Promise<void> & { cancel(): void })\n | null = null;\n\n constructor(\n readonly root: RootStore,\n readonly editStore: EditStore,\n ) {\n this.dnd = new DragAndDropManager(root);\n this.resizing = new ResizingManager(root);\n\n makeObservable<\n UIStore,\n | \"_selectedSourceIds\"\n | \"_selectedInstanceIds\"\n | \"_focusedSourceId\"\n | \"_focusedInstanceId\"\n | \"focusedSourceId\"\n | \"focusedInstanceId\"\n >(this, {\n _selectedSourceIds: observable,\n _selectedInstanceIds: observable,\n _focusedSourceId: observable,\n _focusedInstanceId: observable,\n\n focusedSourceId: computed,\n focusedInstanceId: computed,\n\n setSelectedSourceIds: action,\n setSelectedInstanceIds: action,\n setFocusedSourceId: action,\n setFocusedInstanceId: action,\n selectWidget: action,\n });\n }\n\n // TODO (Alex): For these getters, we should differentiate between source and instance selection\n isSourceSelected(sourceId: SbElement) {\n if (this._selectedSourceIds.includes(sourceId)) {\n return true;\n }\n const anyInstanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n return (\n anyInstanceId != null && this._selectedInstanceIds.includes(anyInstanceId)\n );\n }\n isInstanceSelected(instanceId: SbInstance) {\n if (this._selectedInstanceIds.includes(instanceId)) {\n return true;\n }\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n return Boolean(sourceId && this.isSourceSelected(sourceId));\n }\n isSourceFocused(sourceId: SbElement): boolean {\n if (this._focusedSourceId === sourceId) {\n return true;\n }\n const anyInstanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n return anyInstanceId != null && this.isInstanceFocused(anyInstanceId);\n }\n isInstanceFocused(instanceId: SbInstance): boolean {\n if (this._focusedInstanceId === instanceId) {\n return true;\n }\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(instanceId);\n return sourceId != null && this.isSourceFocused(sourceId);\n }\n getSelectedSourceIds(): SbElement[] {\n const sourceSet = new Set<SbElement>();\n this._selectedSourceIds.forEach((sourceId) => {\n sourceSet.add(sourceId);\n });\n this._selectedInstanceIds.forEach((instanceId) => {\n const sourceId =\n this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n instanceId,\n );\n if (sourceId) {\n sourceSet.add(sourceId);\n }\n });\n return Array.from(sourceSet);\n }\n getSelectedInstanceIds(): SbInstance[] {\n const hasPendingOperations =\n this.editStore.runtimeEntitiesManager.hasEditOperationsPending();\n if (!hasPendingOperations) {\n return this._selectedInstanceIds.filter((instanceId) => {\n const widgetMeta =\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n return !widgetMeta?.isOptimistic;\n });\n }\n return this._selectedInstanceIds;\n }\n\n getRootDataByInstanceId(instanceId: SbInstance) {\n return this._rootInstanceData.get(instanceId);\n }\n\n addRootInstanceId(\n instanceId: SbInstance,\n sourceId: SbElement,\n isRoot: boolean,\n ) {\n this._rootInstanceData.set(instanceId, { sourceId, isRoot });\n }\n\n removeRootInstanceId(instanceId: SbInstance) {\n this._rootInstanceData.delete(instanceId);\n }\n\n isInstanceRoot(instanceId: SbInstance) {\n const rootInstanceData = this._rootInstanceData.get(instanceId);\n return rootInstanceData?.isRoot;\n }\n\n private get focusedSourceId(): SbElement | null {\n if (this._focusedSourceId) {\n return this._focusedSourceId;\n }\n\n const focusedSourceForInstanceId = this._focusedInstanceId\n ? this.editStore.runtimeEntitiesManager.getEditorWidgetSourceId(\n this._focusedInstanceId,\n )\n : null;\n return focusedSourceForInstanceId ?? null;\n }\n\n private get focusedInstanceId(): SbInstance | null {\n if (this._focusedInstanceId) {\n return this._focusedInstanceId;\n }\n const sourceId = this.getFocusedSourceId();\n const instanceIds = sourceId\n ? this.editStore.runtimeEntitiesManager.widgets.getAllInstanceIdsForSourceId(\n sourceId,\n )\n : null;\n return instanceIds && instanceIds.length > 0 ? instanceIds[0] : null;\n }\n\n getFocusedSourceId(): SbElement | null {\n return this.focusedSourceId;\n }\n getFocusedInstanceId(): SbInstance | null {\n return this.focusedInstanceId;\n }\n // End of getters that need to be eventually improved\n\n setSelectedSourceIds(sourceIds: SbElement[]) {\n this.newComponentSelectPromise?.cancel();\n const validIds = sourceIds.filter((sourceId) => {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(sourceId);\n return !!entityMeta;\n });\n this._selectedSourceIds = validIds;\n }\n\n setSelectedInstanceIds(ids: SbInstance[]) {\n this.newComponentSelectPromise?.cancel();\n const validIds = ids.filter((id) => {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(id);\n return !!entityMeta;\n });\n this._selectedInstanceIds = validIds;\n }\n\n setFocusedInstanceId(instanceId: SbInstance | null) {\n this._focusedInstanceId = instanceId;\n }\n\n setFocusedSourceId(sourceId: SbElement | null) {\n if (sourceId) {\n const entityMeta =\n this.editStore.runtimeEntitiesManager.getAnyEditorWidgetMeta(sourceId);\n if (entityMeta) {\n this._focusedSourceId = sourceId;\n }\n } else {\n this._focusedSourceId = null;\n }\n }\n\n selectWidget(\n instanceId: SbInstance | null,\n _addToSelection: boolean = false,\n ) {\n this.newComponentSelectPromise?.cancel();\n\n const addToSelection = _addToSelection && MULTI_SELECT_ENABLED;\n const meta =\n instanceId &&\n this.editStore.runtimeEntitiesManager.getEditorWidgetMeta(instanceId);\n const sourceId = meta?.sourceId;\n const scopeId = meta?.scopeId;\n if (!meta || !sourceId || !scopeId) {\n editorBridge.selectWidgets([]);\n this.setSelectedSourceIds([]);\n this.setSelectedInstanceIds([]);\n this.editStore.propertiesPanelManager.untrackPropertiesPanel();\n return;\n }\n\n const sourceIds = addToSelection\n ? [...this._selectedSourceIds, sourceId]\n : [sourceId];\n const instanceIds = addToSelection\n ? [...this._selectedInstanceIds, instanceId]\n : [instanceId];\n this.setSelectedSourceIds(sourceIds);\n this.setSelectedInstanceIds(instanceIds);\n\n if (scopeId) {\n this.editStore.propertiesPanelManager.trackPropertiesPanel(\n scopeId,\n instanceId,\n sourceId,\n );\n }\n\n editorBridge.selectWidgets(sourceIds);\n }\n\n /**\n * This is cursed because component selection actually needs to be done by instance ids, but\n * instance IDs are only guaranteed to be stable after the component is rendered, while source IDs\n * are assigned by the source tracker.\n *\n * If _any_ other selection comes in before we select something, we will cancel this reaction\n */\n async selectNewComponentBySourceId(\n sourceId: SbElement,\n instanceIdsToIgnore = new Set<SbInstance>(),\n ) {\n this.newComponentSelectPromise?.cancel();\n\n // first select the instance id that is already rendered, it will be an optimistic instance id\n this.newComponentSelectPromise = when(\n () =>\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n ) != null &&\n !instanceIdsToIgnore.has(\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n ),\n ),\n );\n await this.newComponentSelectPromise;\n\n const havePendingOperations =\n this.editStore.runtimeEntitiesManager.getPendingOperations().length !== 0;\n\n const instanceId =\n this.editStore.runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n if (instanceId) {\n this.selectWidget(instanceId);\n\n // then we select our new instance id from the actual source code, but we ignore the first one because it is already rendered\n if (havePendingOperations) {\n instanceIdsToIgnore.add(instanceId);\n await this.selectNewComponentBySourceId(sourceId, instanceIdsToIgnore);\n }\n }\n }\n}\n\nexport default UIStore;\n","import { OBS_TAG_APPLICATION_ID } from \"@superblocksteam/shared\";\nimport { action, makeObservable, observable } from \"mobx\";\nimport posthog from \"posthog-js\";\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { AiManager } from \"./features/ai-store.js\";\nimport ConnectionManager from \"./features/connection-manager.js\";\nimport InteractionLayerManager from \"./features/interaction-layer-manager.js\";\nimport OperationManager from \"./features/operation-store.js\";\nimport PropertiesPanelManager from \"./features/properties-panel-manager.js\";\nimport RuntimeEntitiesManager from \"./features/runtime-entities-manager.js\";\nimport UIStore from \"./features/ui-store.js\";\nimport { startEditorSync } from \"./mobx-sync/mobx-editor-sync.js\";\n\nimport type { IEntityManager } from \"../lib/internal-details/lib/evaluator/base-entity-manager.js\";\nimport type { RootStore } from \"../lib/internal-details/lib/root-store.js\";\nimport type { ViteMessageKind } from \"@superblocksteam/library-shared/types\";\nimport type { ViteMessage } from \"@superblocksteam/library-shared/types\";\n\ndeclare global {\n interface Window {\n _SB_ENABLE_SESSION_RECORDING?: boolean;\n __SUPERBLOCKS_EDITOR_HOOK__: InstanceType<typeof EditStore>;\n }\n}\n\nconst isSessionRecordingEnabled = (): boolean => {\n return window._SB_ENABLE_SESSION_RECORDING ?? false;\n};\n\n// A single instance of this is created and attached to the root store when the app is using edit mode\nexport class EditStore {\n ui: UIStore;\n operationManager: OperationManager;\n propertiesPanelManager: PropertiesPanelManager;\n runtimeEntitiesManager: RuntimeEntitiesManager;\n interactionLayerManager: InteractionLayerManager;\n connectionManager: ConnectionManager;\n ai: AiManager;\n\n isInitialized = false;\n recordingInitialized = false;\n isLivePreview = false;\n\n private viteMessageListeners: Map<\n ViteMessageKind,\n Array<(message: any) => void>\n > = new Map();\n\n constructor(rootStore: RootStore) {\n this.ui = new UIStore(rootStore, this);\n this.operationManager = new OperationManager();\n this.runtimeEntitiesManager = new RuntimeEntitiesManager(\n rootStore.nameManager,\n rootStore.entityManager,\n );\n this.propertiesPanelManager = new PropertiesPanelManager(\n this,\n this.runtimeEntitiesManager,\n rootStore.entityManager,\n rootStore.componentRegistry,\n );\n this.interactionLayerManager = new InteractionLayerManager();\n this.connectionManager = new ConnectionManager();\n this.ai = new AiManager(this.runtimeEntitiesManager);\n makeObservable(this, {\n isInitialized: observable,\n isLivePreview: observable,\n setIsInitialized: action,\n });\n\n // TODO: restore after Jesse's demo, but with changes to make it better\n startEditorSync({\n storeId: \"scope\",\n store: rootStore.entityManager,\n projection: (store: IEntityManager) => {\n return store.getFullState;\n },\n debounce: 100,\n });\n\n startEditorSync({\n storeId: \"validationState\",\n store: rootStore.entityManager,\n projection: (store: IEntityManager) => {\n return store.getValidationState;\n },\n debounce: 100,\n });\n }\n\n setIsInitialized(isInitialized: boolean) {\n if (this.isInitialized) return;\n this.isInitialized = isInitialized;\n }\n\n setIsLivePreview(isLivePreview: boolean) {\n this.isLivePreview = isLivePreview;\n }\n\n onViteMessage<\n T extends ViteMessageKind,\n Message extends Extract<ViteMessage, { kind: T }>,\n >(kind: T, callback: (message: Message) => void) {\n this.viteMessageListeners.set(kind, [\n ...(this.viteMessageListeners.get(kind) || []),\n callback,\n ]);\n\n return () => {\n this.viteMessageListeners.set(\n kind,\n this.viteMessageListeners.get(kind)?.filter((cb) => cb !== callback) ||\n [],\n );\n };\n }\n\n triggerViteMessage<\n T extends ViteMessageKind,\n Message extends Extract<ViteMessage, { kind: T }>,\n >(kind: T, message: Message) {\n this.viteMessageListeners.get(kind)?.forEach((cb) => cb(message));\n }\n\n startRecording(recording: {\n userId: string;\n appId: string;\n sessionRecordingKey: string;\n }) {\n if (this.recordingInitialized || !isSessionRecordingEnabled()) {\n return;\n }\n\n posthog.init(recording.sessionRecordingKey, {\n api_host: \"https://us.i.posthog.com\",\n defaults: \"2025-05-24\",\n session_recording: {\n recordCrossOriginIframes: true,\n },\n });\n posthog.identify(recording.userId);\n posthog.register({\n [OBS_TAG_APPLICATION_ID]: recording.appId,\n });\n this.recordingInitialized = true;\n }\n}\n\nif (!window.__SUPERBLOCKS_EDITOR_HOOK__) {\n // Singleton instance for global access to EditStore\n window.__SUPERBLOCKS_EDITOR_HOOK__ = new EditStore(rootStore);\n}\n\nexport function initializeEditStore() {\n if (!window.__SUPERBLOCKS_EDITOR_HOOK__) {\n return;\n }\n window.__SUPERBLOCKS_EDITOR_HOOK__.setIsInitialized(true);\n}\n","import { useHotkeys as useHotkeysOriginal } from \"react-hotkeys-hook\";\nimport type { KeyHandler } from \"hotkeys-js\";\nimport type { Options } from \"react-hotkeys-hook\";\n\nexport function useEditorHotkeys<T extends Element>(\n keys: string,\n callback: KeyHandler,\n options?: any[] | Options,\n deps?: any[],\n): React.MutableRefObject<T | null> | undefined {\n if (options instanceof Array) {\n deps = options;\n options = undefined;\n }\n\n return useHotkeysOriginal(keys, callback, options, [...(deps ?? []), false]);\n}\n","import { useEffect } from \"react\";\n\nexport function useKeyPressed(\n key: string,\n callback: (isPressed: boolean) => void,\n) {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === key && !e.repeat) {\n callback(true);\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === key) {\n callback(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, [key, callback]);\n}\n","import { AiContextMode } from \"@superblocksteam/library-shared/types\";\nimport { useEditorHotkeys } from \"../lib/hooks/use-editor-hotkeys.js\";\nimport { useKeyPressed } from \"../lib/hooks/use-key-pressed.js\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport { selectDisplayNameAndVisibility } from \"./interaction-layer/interaction-rect.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\n\nexport function EditorHotkeys({ children }: { children: React.ReactNode }) {\n useEditorHotkeys(\n \"ctrl+z, command+z\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.undo();\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n useEditorHotkeys(\n \"c\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n const selectedSourceIds = getEditStore().ui.getSelectedSourceIds();\n const selectedInstanceIds = getEditStore().ui.getSelectedInstanceIds();\n if (selectedSourceIds.length > 0) {\n editorBridge.toggleComponentInAiContext(\n selectedSourceIds[0],\n selectedInstanceIds[0],\n selectDisplayNameAndVisibility(selectedInstanceIds[0])?.displayName,\n );\n }\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n\n useEditorHotkeys(\n \"ctrl+shift+z, command+shift+z\",\n (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.redo();\n },\n {\n filterPreventDefault: false,\n },\n [],\n );\n\n useEditorHotkeys(\"backspace, delete\", (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n e.target instanceof HTMLInputElement ||\n e.target instanceof HTMLTextAreaElement\n ) {\n return;\n }\n const editStore = getEditStore();\n editStore.operationManager.deleteComponents(\n editStore.ui.getSelectedSourceIds(),\n );\n editStore.ui.selectWidget(null);\n });\n\n useKeyPressed(\"Alt\", (isPressed) => {\n editorBridge.setAiContextMode(\n isPressed ? AiContextMode.AUTO_SELECT : AiContextMode.SILENT,\n );\n });\n\n useEditorHotkeys(\"esc\", (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n editorBridge.setAiContextMode(AiContextMode.SILENT);\n });\n\n return <>{children}</>;\n}\n","import {\n AiGenerationState,\n ViteMessageKind,\n type SbApi,\n type SbElement,\n} from \"@superblocksteam/library-shared/types\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { generatePath, useLocation, useNavigate } from \"react-router\";\nimport { FullPageSpinner } from \"../lib/internal-details/internal-components/spinner.jsx\";\nimport { isEditMode } from \"../lib/internal-details/is-edit-mode.js\";\nimport { getName } from \"../lib/internal-details/lib/evaluator/names.js\";\nimport { useGetCurrentUserQuery } from \"../lib/internal-details/lib/features/injected-features.js\";\nimport {\n isEmbeddedBySuperblocksFirstParty,\n iframeMessageHandler,\n} from \"../lib/internal-details/lib/iframe.js\";\n\nimport rootStore from \"../lib/internal-details/lib/root-store.js\";\nimport { updateGlobalScope } from \"../lib/internal-details/scope/global.jsx\";\nimport runEventHandlers from \"../lib/triggers/run-event-handlers.js\";\nimport { EventFlow } from \"../lib/user-facing/event-flow.js\";\nimport { BuildErrorNotification } from \"./build-error-notification.jsx\";\nimport createComponent from \"./create-component.js\";\nimport { DnDProvider } from \"./dnd/dnd-provider.jsx\";\nimport { NewComponentsDragLayer } from \"./dnd/new-components-drag-layer.jsx\";\nimport { initializeEditStore } from \"./edit-store.js\";\nimport { EditorHotkeys } from \"./editor-hotkeys.jsx\";\nimport { getEditStore } from \"./get-edit-store.js\";\nimport sourceUpdateApi from \"./source-update-api.js\";\nimport { editorBridge } from \"./superblocks-editor-bridge.js\";\nimport type { IframeEventHandler } from \"../lib/internal-details/lib/iframe.js\";\nimport type { MessageAction } from \"../lib/user-facing/types.js\";\n\nconst IframeConnected = observer(function IframeConnected(\n props: React.PropsWithChildren,\n) {\n useEffect(() => {\n if (!isEmbeddedBySuperblocksFirstParty()) {\n return;\n }\n\n const handleInit: IframeEventHandler<\"sb-init\"> = async ({ data }) => {\n initializeEditStore();\n\n const editStore = getEditStore();\n editorBridge.connected();\n rootStore.setEditStore(editStore);\n\n const { aiState } = data.payload;\n if (\n aiState?.generationState &&\n (aiState.generationState === AiGenerationState.GENERATING ||\n aiState.generationState === AiGenerationState.DEBUGGING)\n ) {\n editStore.ai.startEditing();\n if (aiState.editingComponents) {\n editStore.ai.setEditingComponents(aiState.editingComponents);\n }\n }\n\n if (\n data.payload.sessionRecordingKey &&\n data.payload.userId &&\n data.payload.appId\n ) {\n editStore.startRecording({\n userId: data.payload.userId,\n appId: data.payload.appId,\n sessionRecordingKey: data.payload.sessionRecordingKey,\n });\n }\n\n try {\n await sourceUpdateApi.connect({\n peerId: data.payload.peerId,\n userId: data.payload.userId,\n applicationId: data.payload.appId,\n });\n } catch (error) {\n console.error(\n \"Error connecting to internal socket from library\",\n error,\n );\n // This will close the iframe\n editorBridge.socketError(\n \"Error connecting to the remote dev server, please refresh the page\",\n );\n return;\n }\n\n editorBridge.updatePropertiesPanels(\n editStore.propertiesPanelManager.getNonDynamicPropertiesPanels(),\n );\n };\n iframeMessageHandler.addEventListener(\"sb-init\", handleInit);\n editorBridge.sendReady();\n\n return () => {\n iframeMessageHandler.removeEventListener(\"sb-init\", handleInit);\n };\n }, []);\n\n // for drag and drop\n useEffect(() => {\n const handleDragStart: IframeEventHandler<\"dragstart\"> = ({ data }) => {\n getEditStore().ui.dnd.startNewComponentDrag({\n componentType: data.item.componentType,\n });\n };\n iframeMessageHandler.addEventListener(\"dragstart\", handleDragStart);\n return () => {\n iframeMessageHandler.removeEventListener(\"dragstart\", handleDragStart);\n };\n }, []);\n\n // This is not a production-ready hack because it prevents all embedding\n const isPossiblyEditor = useMemo(isEmbeddedBySuperblocksFirstParty, []);\n\n const connectionStatus =\n rootStore.editStore?.connectionManager.connectionStatus;\n if (connectionStatus === \"pre-init\" || connectionStatus === \"connecting\") {\n return <FullPageSpinner />;\n }\n\n if (\n isPossiblyEditor &&\n rootStore.editStore?.isInitialized &&\n typeof window !== \"undefined\"\n ) {\n return (\n <DnDProvider>\n <NewComponentsDragLayer />\n {props.children}\n </DnDProvider>\n );\n }\n\n if (isEditMode()) {\n console.log(\"In edit mode, but editor has not initialized yet\");\n return null;\n }\n\n return <React.Fragment>{props.children}</React.Fragment>;\n});\n\nconst WithUserWrapper = (props: React.PropsWithChildren) => {\n const { data: currentUser, isLoading } = useGetCurrentUserQuery();\n\n if (isLoading) {\n return <FullPageSpinner />;\n }\n\n if (!currentUser) {\n return <div>No user found</div>;\n }\n\n return <>{props.children}</>;\n};\n\nconst Auth0Wrapper = (props: React.PropsWithChildren) => {\n return (\n <WithUserWrapper>\n <IframeConnected>{props.children}</IframeConnected>\n </WithUserWrapper>\n );\n};\n\nconst EmbedWrapper = (props: React.PropsWithChildren) => {\n const isRetrievingToken = useRef(false);\n const [error, setError] = useState<string | undefined>();\n const [isLoaded, setIsLoaded] = useState(false);\n\n const navigate = useNavigate();\n\n useEffect(() => {\n const maxRetries = 20;\n let retryCount = 0;\n let timeout: NodeJS.Timeout;\n\n const attemptBootstrap = () => {\n if (rootStore.apis.isInitialized()) {\n return;\n }\n\n if (retryCount < maxRetries) {\n retryCount++;\n\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n\n timeout = setTimeout(attemptBootstrap, 200);\n } else {\n setError(\"Token took too long to load after multiple retries\");\n }\n };\n\n timeout = setTimeout(attemptBootstrap, 200);\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n const bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n > = (event) => {\n try {\n rootStore.applicationId = event.data.payload.appId;\n rootStore.userId = event.data.payload.userId;\n rootStore.apis.agentUrls =\n event.data.payload.agentUrls ??\n (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);\n rootStore.apis.setTokens(\n event.data.payload.token,\n event.data.payload.accessToken,\n );\n\n const windowOriginUrl = event.data.payload.logContext\n .superblocks_window_origin_url as string;\n rootStore.windowOriginUrl = windowOriginUrl;\n\n if (rootStore.windowOriginUrl) {\n import(\"../lib/utils.js\").then(({ initTracerProviderWithOrigin }) => {\n initTracerProviderWithOrigin(rootStore.windowOriginUrl!);\n\n import(\"../lib/tracing/logs.js\").then(\n ({ initLibraryLoggerProvider }) => {\n initLibraryLoggerProvider({\n windowOriginUrl: rootStore.windowOriginUrl!,\n appId: event.data.payload.appId,\n userId: event.data.payload.logContext\n .superblocks_user_id as string,\n userEmail: event.data.payload.logContext\n .superblocks_user_email as string,\n orgId: event.data.payload.logContext\n .superblocks_org_id as string,\n orgName: event.data.payload.logContext\n .superblocks_org_name as string,\n environment: event.data.payload.logContext\n .superblocks_env as string,\n });\n },\n );\n });\n }\n\n setIsLoaded(true);\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n } catch (e) {\n setError(e?.toString());\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n\n const updateActiveAgentsListener: IframeEventHandler<\n \"sb-update-active-agents\"\n > = (event) => {\n rootStore.apis.agentUrls = event.data.payload.agentUrls;\n };\n iframeMessageHandler.addEventListener(\n \"sb-update-active-agents\",\n updateActiveAgentsListener,\n );\n\n const retrievePropertyPanelPropsListener: IframeEventHandler<\n \"sb-retrieve-property-panel-props\"\n > = (event) => {\n const sourceId = event.data.payload.sourceId as SbElement;\n\n const instanceId =\n getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n const scopeId =\n getEditStore().runtimeEntitiesManager.getScopeIdForSourceId(sourceId);\n\n if (!sourceId || !scopeId) {\n getEditStore().ui.setSelectedSourceIds([]);\n getEditStore().ui.setSelectedInstanceIds([]);\n getEditStore().ui.setFocusedSourceId(null);\n getEditStore().ui.setFocusedInstanceId(null);\n return;\n }\n\n const alreadySelected = getEditStore().ui.isSourceSelected(sourceId);\n if (!alreadySelected) {\n getEditStore().ui.setSelectedSourceIds([sourceId]);\n getEditStore().ui.setSelectedInstanceIds([instanceId]);\n getEditStore().ui.setFocusedSourceId(sourceId);\n getEditStore().ui.setFocusedInstanceId(instanceId);\n }\n getEditStore().propertiesPanelManager.trackPropertiesPanel(\n scopeId,\n instanceId,\n sourceId,\n );\n };\n iframeMessageHandler.addEventListener(\n \"sb-retrieve-property-panel-props\",\n retrievePropertyPanelPropsListener,\n );\n\n const editOperationAcknowledgeListener: IframeEventHandler<\n \"sb-edit-operation-acknowledge\"\n > = (event) => {\n getEditStore().operationManager.acknowledgeEditOperation(\n event.data.payload,\n );\n };\n iframeMessageHandler.addEventListener(\n \"sb-edit-operation-acknowledge\",\n editOperationAcknowledgeListener,\n );\n\n const updatePropertyWithEffectsListener: IframeEventHandler<\n \"sb-update-property-with-effects\"\n > = (event) => {\n const payload = {\n sourceId: event.data.payload.sourceId as SbElement,\n updates: event.data.payload.updates,\n };\n const propUpdates =\n getEditStore().propertiesPanelManager.computeAndApplySideEffectsForPropertyUpdate(\n payload,\n );\n\n editorBridge.resolvePromise(event.data.payload.callbackId, propUpdates);\n\n Object.keys(propUpdates).forEach((sourceId) => {\n getEditStore().operationManager.writeRuntimeProperties(\n sourceId as SbElement,\n event.data.payload.transaction.id,\n propUpdates[sourceId as SbElement],\n );\n });\n };\n iframeMessageHandler.addEventListener(\n \"sb-update-property-with-effects\",\n updatePropertyWithEffectsListener,\n );\n\n const createComponentListener: IframeEventHandler<\n \"sb-create-component\"\n > = async (event) => {\n const {\n componentType,\n parent,\n scopeName,\n baseProperties,\n skipSecondaryComponentsCreation,\n otherComponentsUpdates,\n } = event.data.payload;\n\n try {\n await createComponent({\n componentType,\n parent,\n scopeName,\n baseProperties,\n skipSecondaryComponentsCreation,\n otherComponentsUpdates,\n });\n } catch (error) {\n console.error(\"Failed to create component:\", error);\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-create-component\",\n createComponentListener,\n );\n\n const toggleLivePreviewListener: IframeEventHandler<\n \"sb-toggle-live-preview\"\n > = async (event) => {\n const { isLivePreview } = event.data.payload;\n\n rootStore.editStore?.setIsLivePreview(isLivePreview);\n };\n iframeMessageHandler.addEventListener(\n \"sb-toggle-live-preview\",\n toggleLivePreviewListener,\n );\n\n const globalSyncListener: IframeEventHandler<\"sb-global-sync\"> = (\n event,\n ) => {\n const { global } = event.data.payload;\n updateGlobalScope(global);\n };\n iframeMessageHandler.addEventListener(\"sb-global-sync\", globalSyncListener);\n\n const navigateToListener: IframeEventHandler<\"route-change\"> = async (\n event,\n ) => {\n const { route, routeParams, queryParams } = event.data.payload;\n\n const eventSearch = new URLSearchParams(queryParams);\n const nextSearch = new URLSearchParams(window.location.search);\n\n for (const [key, value] of eventSearch.entries()) {\n nextSearch.set(key, value);\n }\n\n await navigate({\n pathname: generatePath(route, routeParams),\n search: nextSearch.toString(),\n });\n };\n iframeMessageHandler.addEventListener(\"route-change\", navigateToListener);\n\n const aiUpdatesListener: IframeEventHandler<\"ai-updates\"> = (event) => {\n const { type } = event.data.payload;\n switch (type) {\n case \"start-editing\": {\n getEditStore().ai.startEditing();\n if (event.data.payload.components) {\n getEditStore().ai.setEditingComponents(\n event.data.payload.components,\n );\n }\n break;\n }\n case \"update-editing-entities\": {\n getEditStore().ai.setEditingComponents(event.data.payload.components);\n break;\n }\n case \"finish-editing\": {\n getEditStore().ai.finishEditing();\n break;\n }\n case \"set-ai-context-mode\": {\n const { mode, components } = event.data.payload;\n getEditStore().ai.setAiContextMode(mode, components);\n break;\n }\n case \"set-tagging-enabled\": {\n const { isTaggingEnabled } = event.data.payload;\n getEditStore().ai.setIsTaggingEnabled(isTaggingEnabled);\n break;\n }\n }\n };\n\n iframeMessageHandler.addEventListener(\"ai-updates\", aiUpdatesListener);\n\n return () => {\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-update-active-agents\",\n updateActiveAgentsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-edit-operation-acknowledge\",\n editOperationAcknowledgeListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-update-property-with-effects\",\n updatePropertyWithEffectsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-retrieve-property-panel-props\",\n retrievePropertyPanelPropsListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-create-component\",\n createComponentListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-global-sync\",\n globalSyncListener,\n );\n iframeMessageHandler.removeEventListener(\n \"route-change\",\n navigateToListener,\n );\n iframeMessageHandler.removeEventListener(\"ai-updates\", aiUpdatesListener);\n };\n }, [navigate]);\n\n useEffect(() => {\n const messageListener = (event: MessageEvent) => {\n if (event.data?.type === \"parent-action-batch\" && event.data.payload) {\n event.data.payload.forEach((action: MessageAction) => {\n // TODO(code-mode): we ideally have a way to share this payload type from the editor, or\n // the editor should be able to import this type from the library\n switch (action.type) {\n case \"operations/editor:selectWidgets\": {\n const sourceIds: SbElement[] = action.payload.sourceIds;\n\n getEditStore().ui.setSelectedSourceIds(sourceIds);\n\n const instanceIds = sourceIds.map((sourceId) => {\n return getEditStore().runtimeEntitiesManager.widgets.getAnyInstanceIdForSourceId(\n sourceId,\n );\n });\n getEditStore().ui.setSelectedInstanceIds(instanceIds);\n break;\n }\n case \"RUN_API\": {\n const { apiName, scopeId, manualRun, traceHeaders } =\n action.payload;\n const api = rootStore.entityManager.getEntity(\n scopeId,\n getName(apiName),\n );\n if (!api || api.type !== \"SbApi\") {\n throw new Error(`API ${apiName} not found`);\n }\n runEventHandlers({\n flow: EventFlow.runApis([api as SbApi]),\n name: getName(apiName),\n scopeId,\n additionalContext: {\n manualRun,\n traceHeaders,\n },\n });\n\n break;\n }\n }\n });\n }\n };\n\n window.addEventListener(\"message\", messageListener);\n return () => window.removeEventListener(\"message\", messageListener);\n }, []);\n\n /**\n * This effect registers a listener that's called by the Vite dev server\n * after creating a new page. This helps us avoid race conditions by first\n * waiting for the page to be fully loaded and registered in the router\n * before attempting to navigate to it.\n * */\n const location = useLocation();\n useEffect(() => {\n try {\n const editStore = getEditStore();\n return editStore.onViteMessage(\n ViteMessageKind.ROUTE_CHANGE,\n async (message) => {\n try {\n const { route, routeTestParams } = message;\n const path = generatePath(route, routeTestParams);\n await navigate({ pathname: path, search: location.search });\n } catch (error) {\n throw new Error(`Failed to navigate to route: ${error}`);\n }\n },\n );\n } catch {\n return;\n }\n }, [navigate, location, isLoaded]);\n\n if (!isLoaded && error) {\n return (\n <div>\n <h3>There was an error logging in to Superblocks.</h3>\n <p>{error}</p>\n </div>\n );\n }\n\n if (!rootStore.apis.isInitialized() && !isLoaded) {\n if (!isRetrievingToken.current && window.parent !== window.self) {\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n isRetrievingToken.current = true;\n }\n\n return <FullPageSpinner />;\n }\n\n return (\n <WithUserWrapper>\n <IframeConnected>\n <BuildErrorNotification />\n <EditorHotkeys>{props.children}</EditorHotkeys>\n </IframeConnected>\n </WithUserWrapper>\n );\n};\n\nexport { EmbedWrapper, Auth0Wrapper };\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { generatePath, useNavigate } from \"react-router\";\nimport runEventHandlers from \"../triggers/run-event-handlers.js\";\nimport { EventFlow } from \"../user-facing/event-flow.js\";\nimport { FullPageSpinner } from \"./internal-components/spinner.jsx\";\nimport { getName } from \"./lib/evaluator/names.js\";\nimport { useGetCurrentUserQuery } from \"./lib/features/injected-features.js\";\nimport { iframeMessageHandler } from \"./lib/iframe.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { updateGlobalScope } from \"./scope/global.jsx\";\nimport type { IframeEventHandler } from \"./lib/iframe.js\";\nimport type { MessageAction } from \"../user-facing/types.js\";\nimport type { SbApi } from \"@superblocksteam/library-shared/types\";\n\nconst WithUserWrapper = (props: React.PropsWithChildren) => {\n const { data: currentUser, isLoading } = useGetCurrentUserQuery();\n\n if (isLoading) {\n return <FullPageSpinner />;\n }\n\n if (!currentUser) {\n return <div>No user found</div>;\n }\n\n return <>{props.children}</>;\n};\n\nconst Auth0Wrapper = (props: React.PropsWithChildren) => {\n return <WithUserWrapper>{props.children}</WithUserWrapper>;\n};\n\nconst EmbedWrapper = (props: React.PropsWithChildren) => {\n const isRetrievingToken = useRef(false);\n const [error, setError] = useState<string | undefined>();\n const [isLoaded, setIsLoaded] = useState(false);\n const navigate = useNavigate();\n useEffect(() => {\n const maxRetries = 20;\n let retryCount = 0;\n let timeout: NodeJS.Timeout;\n\n const attemptBootstrap = () => {\n if (rootStore.apis.isInitialized()) {\n return;\n }\n\n if (retryCount < maxRetries) {\n retryCount++;\n\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n\n timeout = setTimeout(attemptBootstrap, 200);\n } else {\n setError(\"Token took too long to load after multiple retries\");\n }\n };\n\n timeout = setTimeout(attemptBootstrap, 200);\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n const bootstrapResponseListener: IframeEventHandler<\n \"sb-bootstrap-response\"\n > = (event) => {\n try {\n rootStore.applicationId = event.data.payload.appId;\n rootStore.apis.agentUrls =\n event.data.payload.agentUrls ??\n (event.data.payload.agentUrl ? [event.data.payload.agentUrl] : []);\n rootStore.apis.setTokens(\n event.data.payload.token,\n event.data.payload.accessToken,\n );\n\n const windowOriginUrl = event.data.payload.logContext\n .superblocks_window_origin_url as string;\n rootStore.windowOriginUrl = windowOriginUrl;\n\n if (rootStore.windowOriginUrl) {\n import(\"../utils.js\").then(({ initTracerProviderWithOrigin }) => {\n initTracerProviderWithOrigin(rootStore.windowOriginUrl!);\n\n // NEW: Initialize logging with full context\n import(\"../tracing/logs.js\").then(\n ({ initLibraryLoggerProvider }) => {\n initLibraryLoggerProvider({\n windowOriginUrl: rootStore.windowOriginUrl!,\n appId: event.data.payload.appId,\n userId: event.data.payload.logContext\n .superblocks_user_id as string,\n userEmail: event.data.payload.logContext\n .superblocks_user_email as string,\n orgId: event.data.payload.logContext\n .superblocks_org_id as string,\n orgName: event.data.payload.logContext\n .superblocks_org_name as string,\n environment: event.data.payload.logContext\n .superblocks_env as string,\n });\n },\n );\n });\n }\n\n setIsLoaded(true);\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n } catch (e) {\n setError(e?.toString());\n }\n };\n iframeMessageHandler.addEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n\n const globalSyncListener: IframeEventHandler<\"sb-global-sync\"> = (\n event,\n ) => {\n const { global } = event.data.payload;\n updateGlobalScope(global);\n };\n iframeMessageHandler.addEventListener(\"sb-global-sync\", globalSyncListener);\n\n const navigateToListener: IframeEventHandler<\"route-change\"> = async (\n event,\n ) => {\n const { route, routeParams, queryParams } = event.data.payload;\n\n const eventSearch = new URLSearchParams(queryParams);\n const nextSearch = new URLSearchParams(window.location.search);\n\n for (const [key, value] of eventSearch.entries()) {\n nextSearch.set(key, value);\n }\n\n await navigate({\n pathname: generatePath(route, routeParams),\n search: nextSearch.toString(),\n });\n };\n iframeMessageHandler.addEventListener(\"route-change\", navigateToListener);\n\n return () => {\n iframeMessageHandler.removeEventListener(\n \"sb-bootstrap-response\",\n bootstrapResponseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"sb-global-sync\",\n globalSyncListener,\n );\n iframeMessageHandler.removeEventListener(\n \"route-change\",\n navigateToListener,\n );\n };\n }, [navigate]);\n\n useEffect(() => {\n const messageListener = (event: MessageEvent) => {\n // TODO confirm we can get rid of these event handlers - they may only run in edit mode\n if (event.data?.type === \"parent-action-batch\" && event.data.payload) {\n event.data.payload.forEach((action: MessageAction) => {\n // TODO(code-mode): we ideally have a way to share this payload type from the editor, or\n // the editor should be able to import this type from the library\n switch (action.type) {\n case \"RUN_API\": {\n const { apiName, scopeId, manualRun } = action.payload;\n const api = rootStore.entityManager.getEntity(\n scopeId,\n getName(apiName),\n );\n if (!api || api.type !== \"SbApi\") {\n throw new Error(`API ${apiName} not found`);\n }\n runEventHandlers({\n flow: EventFlow.runApis([api as SbApi]),\n name: getName(apiName),\n scopeId,\n additionalContext: {\n manualRun,\n },\n });\n\n break;\n }\n }\n });\n }\n };\n\n window.addEventListener(\"message\", messageListener);\n return () => window.removeEventListener(\"message\", messageListener);\n }, []);\n\n if (!isLoaded && error) {\n return (\n <div>\n <h3>There was an error logging in to Superblocks.</h3>\n <p>{error}</p>\n </div>\n );\n }\n\n if (!rootStore.apis.isInitialized() && !isLoaded) {\n if (!isRetrievingToken.current && window.parent !== window.self) {\n window.parent.postMessage(\n {\n type: \"sb-editor-request-bootstrap\",\n },\n \"*\",\n );\n isRetrievingToken.current = true;\n }\n\n return <FullPageSpinner />;\n }\n\n return <WithUserWrapper>{props.children}</WithUserWrapper>;\n};\n\nexport { EmbedWrapper, Auth0Wrapper };\n","import { Observer } from \"mobx-react-lite\";\nimport React from \"react\";\nimport rootStore from \"../../lib/root-store.js\";\nimport {\n ErrorIconContainer,\n StyledClarkIcon,\n ErrorTitle,\n ErrorMessage,\n ErrorDetails,\n ErrorSummary,\n ErrorStack,\n ErrorContainer,\n ErrorContent,\n SecondaryButton,\n ActionsContainer,\n} from \"../common.js\";\nimport { FixWithClarkButton } from \"../fix-with-clark-button.jsx\";\nimport type { UserAccessibleTheme } from \"@superblocksteam/library-shared/types\";\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n theme?: UserAccessibleTheme;\n}\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"Superblocks application error:\", error, errorInfo);\n }\n\n handleRefresh = () => {\n window.location.reload();\n };\n\n render() {\n if (this.state.hasError) {\n return (\n <Observer>\n {() => {\n // Check if AI is currently generating\n const isAIGenerating =\n rootStore.editStore?.ai.getIsEditing() ?? false;\n\n if (isAIGenerating) {\n // During AI generation, don't show error UI\n // Children already crashed, so just render nothing\n return null;\n }\n\n // When AI is not generating, show full error UI\n return (\n <ErrorContainer>\n <ErrorContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <ErrorTitle>Something went wrong</ErrorTitle>\n <ErrorMessage>\n {this.state.error?.message || \"Unknown error\"}\n </ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={this.state.error} />\n <SecondaryButton onClick={this.handleRefresh}>\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {this.state.error && (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{this.state.error.stack}</ErrorStack>\n </ErrorDetails>\n )}\n </ErrorContent>\n </ErrorContainer>\n );\n }}\n </Observer>\n );\n }\n\n return this.props.children;\n }\n}\n","import equal from \"@superblocksteam/fast-deep-equal/es6\";\nimport { useContext, useEffect, useMemo, useRef } from \"react\";\nimport {\n UNSAFE_DataRouterContext,\n useLocation,\n useNavigate,\n useParams,\n type Location,\n} from \"react-router\";\nimport { editorBridge } from \"../../edit-mode/superblocks-editor-bridge.js\";\nimport rootStore from \"./lib/root-store.js\";\nimport { isLocalLink } from \"./utils/is-local-link.js\";\nimport { navigation } from \"./utils/navigation.js\";\nimport type { NavigationEvent } from \"./utils/navigation.js\";\n\nexport function useTrackRouteChange() {\n const routerContext = useContext(UNSAFE_DataRouterContext);\n const location = useLocation();\n const params = useParams();\n const prevLocation = useRef<Location>();\n\n const routes = useMemo(() => {\n const rootRoute = routerContext?.router.routes.find(\n (route) => route.path === \"/\",\n );\n\n if (!rootRoute) return [];\n\n return [rootRoute, ...(rootRoute?.children ?? [])];\n }, [routerContext?.router.routes]);\n\n useEffect(() => {\n if (equal(location, prevLocation.current)) return;\n rootStore.locationStore?.updateLocation(location, routes, params);\n // TODO: how do we decouple this routing change from the widget selection?\n rootStore.editStore?.ui.selectWidget(null);\n prevLocation.current = location;\n }, [location, params, routes]);\n}\n\nexport function useInterceptNavigation() {\n const navigate = useNavigate();\n\n useEffect(() => {\n const navigationHandler = (event: NavigationEvent) => {\n if (\n event.navigationType === \"traverse\" ||\n event.navigationType === \"reload\"\n ) {\n return;\n }\n\n if (isLocalLink(event.destination.url)) {\n if (!event.userInitiated) {\n return;\n }\n\n const newURL = new URL(event.destination.url, window.location.origin);\n const currentURL = new URL(window.location.href);\n\n if (\n newURL.pathname === currentURL.pathname &&\n newURL.search === currentURL.search &&\n newURL.hash === currentURL.hash\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n navigate({\n pathname: newURL.pathname,\n search: newURL.search,\n hash: newURL.hash,\n });\n } else {\n // TODO: move the bridge interface so its not \"editorBridge\". right now this works because the bridge is mocked in\n // deployed mode, but its gross.\n editorBridge.navigateTo(event.destination.url, event.newWindow);\n }\n };\n\n navigation.addEventListener(\"navigate\", navigationHandler);\n\n return () => {\n navigation.removeEventListener(\"navigate\", navigationHandler);\n };\n }, [navigate]);\n}\n","import { compile, middleware, prefixer, serialize, stringify } from \"stylis\";\n\nexport const VARIABLES: Record<string, string> = {\n primaryColor: \"--primary-color\",\n};\n\nconst VARIABLE_VALUES: Record<keyof typeof VARIABLES, string> = {\n primaryColor: \"blue\",\n};\n\nlet componentVariables: Record<string, string> = {};\nlet componentVariableValues: Record<string, string> = {};\n\nconst createStyleSheetFromString = (sheetId: string, styleSheet: string) => {\n const styles = serialize(\n compile(styleSheet),\n middleware([prefixer, stringify]),\n );\n const existingStyleTag = document.getElementById(sheetId);\n const styleTag = existingStyleTag ?? document.createElement(\"style\");\n styleTag.setAttribute(\"id\", sheetId);\n styleTag.replaceChildren(document.createTextNode(styles));\n if (existingStyleTag) return;\n document.head.appendChild(styleTag);\n};\n\nconst registry: Record<string, string> = {};\nexport const registerComponentStyle = (\n componentName: string,\n styleSheet: string,\n variableDefns: Record<string, string>,\n variableValues: Record<string, string>,\n) => {\n componentVariables = { ...componentVariables, ...variableDefns };\n componentVariableValues = { ...componentVariableValues, ...variableValues };\n const sheetId = `${componentName}-styles`;\n registry[sheetId] = styleSheet;\n};\n\nexport const initializeStyles = (appName: string) => {\n const stylesheet = Object.entries(registry)\n .map(([, styleSheet]) => styleSheet)\n .join(\"\\n\");\n const allVariables = { ...VARIABLES, ...componentVariables };\n const allVariableValues = { ...VARIABLE_VALUES, ...componentVariableValues };\n const variableDefns = Object.keys(allVariables)\n .map(\n (variable) =>\n `${allVariables[variable]}: ${allVariableValues[variable]};`,\n )\n .join(\"\\n\");\n createStyleSheetFromString(\n appName,\n `:${appName} {${variableDefns}}\\n${stylesheet}`,\n );\n};\n\nexport const MIN_EMPTY_WIDGET_SIZE = \"15px\";\n","import { getBindingIdentifier } from \"@superblocksteam/library-shared\";\nimport { merge } from \"lodash\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n Auth0Wrapper as EditorAuth0Wrapper,\n EmbedWrapper as EditorEmbedWrapper,\n} from \"../../edit-mode/iframe-wrappers.jsx\";\nimport {\n Auth0Wrapper as AppAuth0Wrapper,\n EmbedWrapper as AppEmbedWrapper,\n} from \"../internal-details/app-wrappers.jsx\";\nimport { ErrorBoundary } from \"../internal-details/internal-components/error-boundary/index.jsx\";\nimport { FullPageSpinner } from \"../internal-details/internal-components/spinner.jsx\";\nimport { isEditMode } from \"../internal-details/is-edit-mode.js\";\nimport { DevTools } from \"../internal-details/lib/devtools/index.jsx\";\nimport {\n iframeMessageHandler,\n type IframeEventHandler,\n} from \"../internal-details/lib/iframe.js\";\nimport {\n rejectById,\n resolveById,\n} from \"../internal-details/lib/resolve-id-singleton.js\";\nimport rootStore from \"../internal-details/lib/root-store.js\";\nimport {\n useInterceptNavigation,\n useTrackRouteChange,\n} from \"../internal-details/routing.js\";\nimport { GlobalScope } from \"../internal-details/scope/global.jsx\";\nimport { ThemeProvider } from \"../internal-details/theme-context.jsx\";\nimport {\n CANVAS_ROOT_ID,\n POPOVER_ROOT_ID,\n PORTAL_ROOT_ID,\n} from \"./constants.js\";\nimport { initializeStyles } from \"./styling/styles.js\";\nimport { BASE_THEME_V5 } from \"./themes/constants.js\";\nimport { DEFAULT_THEME } from \"./themes/default-theme.js\";\nimport { generateTheme } from \"./themes/generate-theme.js\";\nimport type {\n GeneratedTheme,\n Theme,\n UserAccessibleTheme,\n UserDefinedTheme,\n} from \"@superblocksteam/library-shared/types\";\n\nconst originalLog = console.log;\n\nconsole.log = (...args) => {\n try {\n const processedArgs = args.map((arg) => {\n if (\n arg &&\n typeof arg === \"object\" &&\n (getBindingIdentifier(arg) || getBindingIdentifier(arg.bind ?? {}))\n ) {\n return JSON.parse(JSON.stringify(arg));\n }\n return arg;\n });\n originalLog(...processedArgs);\n } catch {\n // Do nothing\n }\n};\n\nconst loadApisIntoLibrary = async function loadApisIntoLibrary() {\n if (!isEditMode()) {\n try {\n const mod = await import(\"./build-manifest.js\");\n rootStore.apis.loadApiManifest(mod.default);\n } catch (error) {\n console.error(\"Error loading apis into library\", error);\n }\n }\n};\n\nconst Auth0Wrapper = isEditMode() ? EditorAuth0Wrapper : AppAuth0Wrapper;\nconst EmbedWrapper = isEditMode() ? EditorEmbedWrapper : AppEmbedWrapper;\n\nconst SbProvider = function SbProvider({\n name = \"codemode\",\n settings,\n children,\n}: {\n name: string;\n settings?: Record<string, any> & {\n theme?: Theme;\n themeOverrides?: Partial<GeneratedTheme>;\n };\n children?: React.ReactNode;\n}) {\n const isEmbedded =\n typeof window !== \"undefined\" && window.parent !== window.self;\n\n const [isApisInitialized, setIsApisInitialized] = useState(false);\n const [userAccessibleTheme, setUserAccessibleTheme] =\n useState<UserAccessibleTheme>(DEFAULT_THEME);\n\n const runApiInitialization = useCallback(async () => {\n await loadApisIntoLibrary();\n setIsApisInitialized(true);\n }, []);\n\n useTrackRouteChange();\n useInterceptNavigation();\n\n useEffect(() => {\n runApiInitialization();\n }, [runApiInitialization]);\n\n useEffect(() => {\n const mergedTheme: UserDefinedTheme = merge(BASE_THEME_V5, settings?.theme);\n const generatedTheme = generateTheme(mergedTheme, settings?.themeOverrides);\n const userAccessibleTheme = generatedTheme as UserAccessibleTheme;\n setUserAccessibleTheme(userAccessibleTheme);\n }, [settings?.theme, settings?.themeOverrides]);\n\n useEffect(() => {\n const resolvePromiseListener: IframeEventHandler<\"resolve-promise\"> = (\n event,\n ) => {\n resolveById(event.data.callbackId, event.data.payload);\n };\n\n const rejectPromiseListener: IframeEventHandler<\"reject-promise\"> = (\n event,\n ) => {\n rejectById(event.data.callbackId, event.data.payload);\n };\n\n // These handlers need to be here instead of on the iframe wrappers because\n // we need the promise resolution on the API set before we render the iframe wrapper\n iframeMessageHandler.addEventListener(\n \"resolve-promise\",\n resolvePromiseListener,\n );\n iframeMessageHandler.addEventListener(\n \"reject-promise\",\n rejectPromiseListener,\n );\n return () => {\n iframeMessageHandler.removeEventListener(\n \"resolve-promise\",\n resolvePromiseListener,\n );\n iframeMessageHandler.removeEventListener(\n \"reject-promise\",\n rejectPromiseListener,\n );\n };\n }, []);\n\n useEffect(() => {\n initializeStyles(name);\n }, [name]);\n\n if (!isApisInitialized) {\n return <FullPageSpinner />;\n }\n\n return (\n <div\n style={{\n \"--primary-color\": settings?.theme?.primaryColor ?? \"#08a4ff\",\n \"--border-radius\": settings?.theme?.borderRadius\n ? `${settings.theme.borderRadius.value}${settings.theme.borderRadius.mode}`\n : \"4px\",\n height: \"100svh\",\n width: \"100%\",\n }}\n id=\"sb-provider-root\"\n >\n <ErrorBoundary theme={userAccessibleTheme}>\n <div\n id={CANVAS_ROOT_ID}\n style={{\n height: \"100%\",\n width: \"100%\",\n // let the page to handle the scrolling, avoiding double scrollbars\n overflow: \"hidden\",\n position: \"relative\",\n }}\n >\n <ThemeProvider theme={userAccessibleTheme}>\n <GlobalScope>\n {isEmbedded ? (\n <EmbedWrapper>{children}</EmbedWrapper>\n ) : (\n <Auth0Wrapper>{children}</Auth0Wrapper>\n )}\n </GlobalScope>\n </ThemeProvider>\n <DevTools />\n </div>\n </ErrorBoundary>\n <div id={PORTAL_ROOT_ID} data-superblocks={PORTAL_ROOT_ID} />\n <div\n id={POPOVER_ROOT_ID}\n data-superblocks={POPOVER_ROOT_ID}\n style={{\n position: \"absolute\",\n zIndex: 5,\n }}\n />\n </div>\n );\n};\n\nexport default SbProvider;\n","import copy from \"copy-to-clipboard\";\nimport downloadjs from \"downloadjs\";\nimport _ from \"lodash\";\nimport { addNewPromise } from \"../internal-details/lib/resolve-id-singleton.js\";\nimport {\n navigation,\n NavigationEvent,\n} from \"../internal-details/utils/navigation.js\";\n\nexport enum Types {\n STRING = \"STRING\",\n NUMBER = \"NUMBER\",\n BOOLEAN = \"BOOLEAN\",\n OBJECT = \"OBJECT\",\n MAP = \"MAP\",\n SET = \"SET\",\n ARRAY = \"ARRAY\",\n FUNCTION = \"FUNCTION\",\n UNDEFINED = \"UNDEFINED\",\n NULL = \"NULL\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const getType = (value: unknown) => {\n if (_.isString(value)) return Types.STRING;\n if (_.isNumber(value)) return Types.NUMBER;\n if (_.isBoolean(value)) return Types.BOOLEAN;\n if (value && value instanceof Map) return Types.MAP;\n if (value && value instanceof Set) return Types.SET;\n if (Array.isArray(value)) return Types.ARRAY;\n if (_.isFunction(value)) return Types.FUNCTION;\n if (_.isObject(value)) return Types.OBJECT;\n if (_.isUndefined(value)) return Types.UNDEFINED;\n if (_.isNull(value)) return Types.NULL;\n return Types.UNKNOWN;\n};\n\nexport function copyToClipboard(\n text: string,\n options?: { debug?: boolean; format?: string },\n) {\n try {\n copy(text, options);\n } catch (error) {\n console.error(\"Failed to copy to clipboard:\", error);\n }\n}\n\nexport function navigateTo(\n urlOrRoute: string,\n queryParams: Record<string, any> = {},\n target?: string,\n) {\n try {\n let finalUrl: string;\n\n if (\n urlOrRoute.startsWith(\"http://\") ||\n urlOrRoute.startsWith(\"https://\") ||\n urlOrRoute.startsWith(\"//\")\n ) {\n finalUrl = urlOrRoute;\n } else {\n finalUrl = urlOrRoute.startsWith(\"/\") ? urlOrRoute : `/${urlOrRoute}`;\n }\n\n if (Object.keys(queryParams).length > 0) {\n const url = new URL(finalUrl, window.location.origin);\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n });\n finalUrl = url.toString();\n }\n\n switch (target) {\n case \"_blank\":\n case \"blank\": {\n window.open(finalUrl, \"_blank\", \"noopener,noreferrer\");\n break;\n }\n case \"_parent\": {\n window.parent.location.href = finalUrl;\n break;\n }\n case \"_top\": {\n if (window.top) {\n window.top.location.href = finalUrl;\n }\n break;\n }\n case \"_self\":\n case undefined:\n default: {\n navigation.dispatchEvent(\n new NavigationEvent({\n isSameDocument: true,\n userInitiated: true,\n targetUrl: finalUrl,\n }),\n );\n }\n }\n\n return true;\n } catch (error) {\n console.error(\"Failed to navigate:\", error);\n return false;\n }\n}\n\nexport function setQueryParams(\n queryParams: Record<string, any> = {},\n preserveExistingQueryParams: boolean = true,\n) {\n try {\n const url = new URL(window.location.href);\n\n if (!preserveExistingQueryParams) {\n url.search = \"\";\n }\n\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === null || value === undefined || value === \"\") {\n url.searchParams.delete(key);\n } else {\n url.searchParams.set(key, String(value));\n }\n });\n\n window.history.replaceState(\n window.history.state,\n document.title,\n url.toString(),\n );\n\n return true;\n } catch (error) {\n console.error(\"Failed to set query parameters:\", error);\n return false;\n }\n}\n\nexport function download(data: any, fileName?: string, fileType?: string) {\n try {\n const dataType = getType(data);\n if (dataType === Types.ARRAY || dataType === Types.OBJECT) {\n const jsonString = JSON.stringify(data, null, 2);\n downloadjs(jsonString, fileName, fileType);\n } else {\n downloadjs(data, fileName, fileType);\n }\n } catch (err) {\n console.error(\"Failed to download:\", err);\n }\n}\n\nexport async function logoutIntegrations() {\n // TODO: https://linear.app/superblocks/issue/FE-2049/clean-up-event-handlers-between-edit-and-deployed\n // TODO: enable button loading state when logging out. Currently, this is not awaited in runJs.\n const waitForLogoutPromise = new Promise((resolve) => {\n const callbackId = addNewPromise(resolve);\n window.parent.postMessage(\n {\n type: \"logout-integration\",\n payload: {\n callbackId,\n },\n },\n \"*\",\n );\n });\n const logoutResult: any = await waitForLogoutPromise;\n\n if (logoutResult?.errors && logoutResult.errors.length > 0) {\n console.error(\"Logout returned with errors\", logoutResult.errors);\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { POPOVER_ROOT_ID } from \"../constants.js\";\n\nexport const usePopoverRootElement = () => {\n const elementRef = useRef<HTMLElement | null>(null);\n useEffect(() => {\n elementRef.current =\n document.getElementById(POPOVER_ROOT_ID) ?? document.body;\n }, []);\n return elementRef;\n};\n","import rootStore from \"../../../internal-details/lib/root-store.js\";\nimport { registerScope } from \"../../../internal-details/scope/scope.js\";\nimport type { ScopeInstance } from \"../../state/types.js\";\n\nexport function registerPage<T>(\n Component: React.FC<T>,\n scope: ScopeInstance<any>,\n) {\n return registerScope(Component, scope, {\n onScopeLoaded: (scopeId) => {\n const hasScopeChanged = rootStore.currentPageScopeId !== scopeId;\n rootStore.currentPageScopeId = scopeId;\n\n if (hasScopeChanged) {\n rootStore.firePageLoadedCallbacks(scopeId);\n }\n },\n });\n}\n","import { registerScope } from \"../../../internal-details/scope/scope.js\";\nimport type { ScopeInstance } from \"../../state/types.js\";\nimport type React from \"react\";\n\nexport function registerApp<T, Bindables extends Record<string, any>>(\n Component: React.FC<T>,\n scope: ScopeInstance<Bindables>,\n) {\n return registerScope(Component, scope);\n}\n","import {\n sbEntitySymbol,\n SbEntityType,\n} from \"@superblocksteam/library-shared/types\";\nimport type {\n SbEntity,\n SbEvent as TSbEvent,\n} from \"@superblocksteam/library-shared/types\";\n\nexport function isSbEntity(entity: any): entity is SbEntity {\n return entity && entity[sbEntitySymbol];\n}\n\nexport function SbEvent({\n payload,\n}: {\n payload: string;\n}): Omit<TSbEvent, \"name\" | \"id\"> {\n return { [sbEntitySymbol]: true, type: SbEntityType.EVENT, payload };\n}\n","import { useCallback } from \"react\";\nimport { useActions } from \"../../internal-details/actions-context.jsx\";\n\nexport function useUpdateProperties() {\n const actions = useActions();\n\n return useCallback(\n (props: Record<string, any>) => {\n actions?.update((entity) => {\n Object.entries(props).forEach(([key, value]) => {\n if (key in entity) {\n entity[key] = value;\n }\n });\n });\n },\n [actions],\n );\n}\n","import { useTheme as useThemeInternal } from \"../../internal-details/theme-context.jsx\";\n\nexport const useTheme = useThemeInternal;\n","import { observer } from \"mobx-react-lite\";\nimport ErrorBoundary from \"../component-base/error-boundary.jsx\";\nimport type { ReactNode } from \"react\";\n\nconst ObservableComputedComponent = observer(function ComputedComponent(\n props: any,\n) {\n const node: ReactNode = props.fn();\n return node;\n});\n\nexport function MakeComputedComponent(fn: any) {\n return (\n <ErrorBoundary>\n <ObservableComputedComponent fn={fn} />\n </ErrorBoundary>\n );\n}\n","import { computed as mobxComputed } from \"mobx\";\nimport { MakeComputedComponent } from \"./observable-computed.jsx\";\nimport type { ComputedProperty } from \"@superblocksteam/library-shared\";\n\nexport function computed<T = any>(\n fn: (...args: any[]) => T,\n): ComputedProperty<T> {\n const computedValue = mobxComputed(() => {\n try {\n return fn;\n } catch (error) {\n console.error(\"Error evaluating computed property:\", error);\n return undefined;\n }\n });\n\n return {\n __isComputedProperty: true,\n value(...args: any[]) {\n const fn = computedValue.get();\n return fn?.call(this, ...args);\n },\n [Symbol.iterator]: function* () {\n const fn = computedValue.get();\n yield MakeComputedComponent(() => {\n return fn?.call(this);\n });\n },\n map<U>(\n mapFn: (\n value: T extends Iterable<infer V> ? V : never,\n index: number,\n ) => U,\n ) {\n const fn = computedValue.get();\n return computed(() => {\n const value = fn?.call(this);\n if (\n value == null ||\n typeof value !== \"object\" ||\n typeof (value as any).map !== \"function\"\n ) {\n throw new Error(\"Value is not iterable\");\n }\n return (value as any).map(mapFn);\n });\n },\n };\n}\n","import { useEffect } from \"react\";\nimport { useRouteError } from \"react-router\";\nimport {\n ErrorIconContainer,\n ErrorTitle,\n ErrorMessage,\n ErrorStack,\n ErrorDetails,\n StyledClarkIcon,\n ErrorContainer,\n ErrorContent,\n ErrorSummary,\n SecondaryButton,\n ActionsContainer,\n} from \"./common.js\";\nimport { FixWithClarkButton } from \"./fix-with-clark-button.jsx\";\n\nexport function RouteLoadError() {\n const error = useRouteError() as Error;\n\n // we do this dynamically because this component will probably be loaded\n // before the app has even bootstrapped, because we have an error during route loading\n // (i.e. syntax error, missing import, etc.)\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n\n return () => {\n document.head.removeChild(link);\n };\n }, []);\n\n console.error(\"Route load error\", error);\n\n return (\n <ErrorContainer>\n <ErrorContent>\n <ErrorIconContainer>\n <StyledClarkIcon />\n </ErrorIconContainer>\n\n <ErrorTitle>Something went wrong</ErrorTitle>\n <ErrorMessage>{error?.message || \"Unknown error\"}</ErrorMessage>\n\n <ActionsContainer>\n <FixWithClarkButton error={error} />\n <SecondaryButton\n onClick={() => {\n window.location.reload();\n }}\n >\n Refresh page\n </SecondaryButton>\n </ActionsContainer>\n\n {error && (\n <ErrorDetails>\n <ErrorSummary>Full details</ErrorSummary>\n <ErrorStack>{error.stack}</ErrorStack>\n </ErrorDetails>\n )}\n </ErrorContent>\n </ErrorContainer>\n );\n}\n","/**\n * A hook to enable editing dialogs.\n *\n * Dialog: A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.\n * E.g: Modal, Slideout, etc\n *\n * The hook expects an `isOpen` property on the component, but can be customized by passing a `isOpenPropertyName`.\n */\n\nimport { set } from \"lodash\";\nimport { useEffect, useRef } from \"react\";\nimport { getEditStore } from \"../../../edit-mode/get-edit-store.js\";\nimport {\n doesInteractionLayerContainInstance,\n isPage,\n} from \"../../../edit-mode/interaction-utils.js\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.jsx\";\nimport { useActions } from \"../internal-index.js\";\nimport useEditor from \"./use-editor.js\";\n\n/**\n * Hook that makes dialogs interact with the editor.\n * - enable/disable the dialog's interaction layer depending on the open state.\n * - select the dialog when it is open or any of the nested components are selected through the navigation side bar.\n *\n * Note: This hook only works in editor mode and has no effect in deployed apps.\n *\n * @example\n * useDialogEditing({\n * isOpen,\n * });\n */\nexport function useDialogEditing(props: {\n isOpen: boolean;\n isOpenPropertyName?: string;\n}) {\n const { instanceId } = useComponentInfo();\n const { isOpen } = props;\n const { features, isEditing } = useEditor();\n const { update } = useActions();\n\n const isOpenPropertyName = props.isOpenPropertyName ?? \"isOpen\";\n\n const prevIsOpenRef = useRef<boolean | undefined>(undefined);\n\n const selectedInstanceId = features.selectWidget.value;\n\n // Manage selection\n useEffect(() => {\n if (isEditing && instanceId) {\n if (isOpen) {\n if (\n !selectedInstanceId ||\n (selectedInstanceId !== instanceId &&\n !doesInteractionLayerContainInstance(\n instanceId,\n selectedInstanceId,\n ))\n ) {\n /**\n * If the dialog is open and the dialog or its children are not selected, then select it.\n * This happens when an event handler changes the open state of the dialog.\n * */\n features.selectWidget.set(instanceId);\n }\n\n // set the active root id to the instanceId\n getEditStore().interactionLayerManager.setActiveRootInstanceId(\n instanceId,\n );\n } else {\n // When closed, clear the active root id\n getEditStore().interactionLayerManager.setActiveRootInstanceId(\n undefined,\n );\n\n // If the dialog was previously selected, then deselect it\n if (selectedInstanceId === instanceId) {\n features.selectWidget.set(null);\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Manage open state\n useEffect(() => {\n if (isEditing && instanceId) {\n // if both isOpen and selectedSourceId are changed at the same time, something like clicking on button open/close dialog happens, we do not need to update isOpen status again\n if (\n prevIsOpenRef.current !== isOpen &&\n //this case is for opening modal first time by selecting the modal\n !(prevIsOpenRef.current === undefined && isOpen === false)\n ) {\n return;\n }\n\n if (isOpen) {\n // if the dialog is open and a component outside this dialog is selected, then close this component\n if (\n selectedInstanceId &&\n selectedInstanceId !== instanceId &&\n !doesInteractionLayerContainInstance(\n instanceId,\n selectedInstanceId,\n true,\n ) &&\n // NOTE: There is a weird radix bug where the dialog overlay is capturing selection events on some compoennts\n // like Select and sending it to the Page. This check prevents the dialog/sheet from closing, but the select isn't properly selectable inside of the modal/dialog\n !isPage(selectedInstanceId)\n ) {\n update((entity) => {\n set(entity, isOpenPropertyName, false);\n });\n }\n } else {\n // if the component is not open and the component or its children is selected, then open it\n if (\n selectedInstanceId === instanceId ||\n (selectedInstanceId &&\n doesInteractionLayerContainInstance(instanceId, selectedInstanceId))\n ) {\n update((entity) => {\n set(entity, isOpenPropertyName, true);\n });\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedInstanceId]);\n\n useEffect(() => {\n if (\n // this is initial state\n prevIsOpenRef.current === undefined &&\n isOpen === false\n ) {\n return;\n }\n\n prevIsOpenRef.current = isOpen;\n }, [isOpen]);\n}\n","export enum API_STATUS_CODES {\n REQUEST_UNAUTHORIZED = 401,\n RESOURCE_FORBIDDEN = 403,\n RESOURCE_NOT_FOUND = 404,\n TIMEOUT = 408,\n RESOURCE_CONFLICT = 409,\n SERVER_ERROR = 502,\n SERVER_UNAVAILABLE = 503,\n BAD_REQUEST = 400,\n}\n","<svg width=\"167\" height=\"168\" viewBox=\"0 0 167 168\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_1_117)\">\n<g clip-path=\"url(#clip0_1_117)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_1_117)\">\n<g clip-path=\"url(#clip1_1_117)\">\n<rect x=\"32\" y=\"36\" width=\"256\" height=\"140\" rx=\"6\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(32 36)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"39\" cy=\"42\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"46\" y=\"41\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<rect x=\"44\" y=\"60\" width=\"104\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"44\" y=\"104\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"44\" y=\"148\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"100\" y=\"104\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n<rect x=\"100\" y=\"148\" width=\"48\" height=\"36\" rx=\"4\" fill=\"#F3F4F6\"/>\n</g>\n</g>\n</g>\n</g>\n<g filter=\"url(#filter2_d_1_117)\">\n<rect x=\"108\" y=\"108\" width=\"56\" height=\"56\" rx=\"28\" fill=\"white\" shape-rendering=\"crispEdges\"/>\n<circle cx=\"136\" cy=\"136\" r=\"23.5\" fill=\"#F9FAFB\" stroke=\"#C6CAD2\" stroke-dasharray=\"4 4\"/>\n<path opacity=\"0.2\" d=\"M143.5 132.25H128.5C128.086 132.25 127.75 132.586 127.75 133V143.5C127.75 143.914 128.086 144.25 128.5 144.25H143.5C143.914 144.25 144.25 143.914 144.25 143.5V133C144.25 132.586 143.914 132.25 143.5 132.25Z\" fill=\"#6C7689\"/>\n<path d=\"M143.5 132.25H128.5C128.086 132.25 127.75 132.586 127.75 133V143.5C127.75 143.914 128.086 144.25 128.5 144.25H143.5C143.914 144.25 144.25 143.914 144.25 143.5V133C144.25 132.586 143.914 132.25 143.5 132.25Z\" stroke=\"#6C7689\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M132.625 132.25V128.875C132.625 127.98 132.981 127.121 133.614 126.489C134.246 125.856 135.105 125.5 136 125.5C136.895 125.5 137.754 125.856 138.386 126.489C139.019 127.121 139.375 127.98 139.375 128.875V132.25\" stroke=\"#6C7689\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n<path d=\"M136 139.375C136.621 139.375 137.125 138.871 137.125 138.25C137.125 137.629 136.621 137.125 136 137.125C135.379 137.125 134.875 137.629 134.875 138.25C134.875 138.871 135.379 139.375 136 139.375Z\" fill=\"#6C7689\"/>\n</g>\n<defs>\n<filter id=\"filter0_i_1_117\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_1_117\"/>\n</filter>\n<filter id=\"filter1_dd_1_117\" x=\"29\" y=\"34\" width=\"262\" height=\"146\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"1\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1_117\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_1_117\" result=\"effect2_dropShadow_1_117\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_1_117\" result=\"shape\"/>\n</filter>\n<filter id=\"filter2_d_1_117\" x=\"105\" y=\"106\" width=\"62\" height=\"62\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.16 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1_117\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1_117\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_1_117\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_1_117\">\n<rect x=\"32\" y=\"36\" width=\"256\" height=\"140\" rx=\"6\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_4124_102997)\">\n<g clip-path=\"url(#clip0_4124_102997)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_4124_102997)\">\n<g clip-path=\"url(#clip1_4124_102997)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(16 48)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"23\" cy=\"54\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"30\" y=\"53\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<g clip-path=\"url(#clip2_4124_102997)\">\n<rect width=\"132\" height=\"132\" transform=\"translate(16 60)\" fill=\"white\"/>\n<rect opacity=\"0.16\" x=\"40\" y=\"160\" width=\"16\" height=\"2\" rx=\"1\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"120\" y=\"158\" width=\"6\" height=\"6\" rx=\"1.5\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"24\" y=\"157\" width=\"8\" height=\"8\" rx=\"4\" fill=\"#454D5F\"/>\n</g>\n<path d=\"M68.8367 113.863V117.613H48.3289L48.1727 114.781L60.4383 95.5625H64.2078L60.1258 102.555L53.075 113.863H68.8367ZM65.282 95.5625V124H60.575V95.5625H65.282ZM91.3164 107.398V112.047C91.3164 114.273 91.0951 116.174 90.6523 117.75C90.2227 119.312 89.5977 120.582 88.7773 121.559C87.957 122.535 86.974 123.251 85.8281 123.707C84.6953 124.163 83.4258 124.391 82.0195 124.391C80.8997 124.391 79.8581 124.247 78.8945 123.961C77.944 123.674 77.0846 123.225 76.3164 122.613C75.5482 122.001 74.8906 121.214 74.3438 120.25C73.8099 119.273 73.3932 118.108 73.0938 116.754C72.8073 115.4 72.6641 113.831 72.6641 112.047V107.398C72.6641 105.159 72.8854 103.271 73.3281 101.734C73.7708 100.185 74.4023 98.9284 75.2227 97.9648C76.043 96.9883 77.0195 96.2786 78.1523 95.8359C79.2982 95.3932 80.5742 95.1719 81.9805 95.1719C83.1133 95.1719 84.1549 95.3151 85.1055 95.6016C86.069 95.875 86.9284 96.3112 87.6836 96.9102C88.4518 97.5091 89.1029 98.2904 89.6367 99.2539C90.1836 100.204 90.6003 101.357 90.8867 102.711C91.1732 104.052 91.3164 105.615 91.3164 107.398ZM86.6094 112.711V106.695C86.6094 105.562 86.5443 104.566 86.4141 103.707C86.2839 102.835 86.0885 102.099 85.8281 101.5C85.5807 100.888 85.2682 100.393 84.8906 100.016C84.513 99.625 84.0833 99.3451 83.6016 99.1758C83.1198 98.9935 82.5794 98.9023 81.9805 98.9023C81.2513 98.9023 80.6003 99.0456 80.0273 99.332C79.4544 99.6055 78.9727 100.048 78.582 100.66C78.1914 101.272 77.8919 102.079 77.6836 103.082C77.4883 104.072 77.3906 105.276 77.3906 106.695V112.711C77.3906 113.857 77.4557 114.866 77.5859 115.738C77.7161 116.611 77.9115 117.359 78.1719 117.984C78.4323 118.596 78.7448 119.104 79.1094 119.508C79.487 119.898 79.9167 120.185 80.3984 120.367C80.8932 120.549 81.4336 120.641 82.0195 120.641C82.7617 120.641 83.4193 120.497 83.9922 120.211C84.5651 119.924 85.0469 119.469 85.4375 118.844C85.8281 118.206 86.1211 117.379 86.3164 116.363C86.5117 115.348 86.6094 114.13 86.6094 112.711ZM115.905 113.863V117.613H95.3977L95.2414 114.781L107.507 95.5625H111.277L107.195 102.555L100.144 113.863H115.905ZM112.351 95.5625V124H107.644V95.5625H112.351Z\" fill=\"#C6CAD2\"/>\n</g>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_4124_102997\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_4124_102997\"/>\n</filter>\n<filter id=\"filter1_dd_4124_102997\" x=\"13\" y=\"46\" width=\"138\" height=\"130\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4124_102997\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_4124_102997\" result=\"effect2_dropShadow_4124_102997\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_4124_102997\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_4124_102997\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_4124_102997\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip2_4124_102997\">\n<rect width=\"132\" height=\"132\" fill=\"white\" transform=\"translate(16 60)\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_4124_103042)\">\n<g clip-path=\"url(#clip0_4124_103042)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_4124_103042)\">\n<g clip-path=\"url(#clip1_4124_103042)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n<rect width=\"132\" height=\"12\" transform=\"translate(16 48)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"23\" cy=\"54\" r=\"3\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"30\" y=\"53\" width=\"10\" height=\"2\" rx=\"1\" fill=\"white\"/>\n<g clip-path=\"url(#clip2_4124_103042)\">\n<rect width=\"132\" height=\"132\" transform=\"translate(16 60)\" fill=\"white\"/>\n<rect opacity=\"0.16\" x=\"40\" y=\"160\" width=\"16\" height=\"2\" rx=\"1\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"120\" y=\"158\" width=\"6\" height=\"6\" rx=\"1.5\" fill=\"#454D5F\"/>\n<rect opacity=\"0.24\" x=\"24\" y=\"157\" width=\"8\" height=\"8\" rx=\"4\" fill=\"#454D5F\"/>\n<path d=\"M54.1883 110.777L50.4383 109.859L51.9813 95.5625H67.3133V99.5469H55.8875L55.1063 106.52C55.549 106.259 56.1609 106.005 56.9422 105.758C57.7234 105.497 58.6154 105.367 59.618 105.367C60.9591 105.367 62.157 105.589 63.2117 106.031C64.2794 106.461 65.1844 107.092 65.9266 107.926C66.6688 108.746 67.2352 109.749 67.6258 110.934C68.0164 112.105 68.2117 113.427 68.2117 114.898C68.2117 116.214 68.0164 117.444 67.6258 118.59C67.2482 119.736 66.6753 120.745 65.907 121.617C65.1388 122.49 64.1688 123.173 62.9969 123.668C61.838 124.15 60.4643 124.391 58.8758 124.391C57.6909 124.391 56.5516 124.221 55.4578 123.883C54.3771 123.531 53.407 123.017 52.5477 122.34C51.6883 121.65 50.9982 120.803 50.4773 119.801C49.9565 118.785 49.657 117.62 49.5789 116.305H54.1883C54.3055 117.229 54.5594 118.017 54.95 118.668C55.3536 119.306 55.8875 119.794 56.5516 120.133C57.2156 120.471 57.9839 120.641 58.8563 120.641C59.6505 120.641 60.3341 120.504 60.907 120.23C61.4799 119.944 61.9552 119.54 62.3328 119.02C62.7234 118.486 63.0099 117.861 63.1922 117.145C63.3875 116.428 63.4852 115.634 63.4852 114.762C63.4852 113.928 63.3745 113.167 63.1531 112.477C62.9448 111.786 62.6258 111.188 62.1961 110.68C61.7794 110.172 61.2521 109.781 60.6141 109.508C59.976 109.221 59.2404 109.078 58.407 109.078C57.2872 109.078 56.4279 109.241 55.8289 109.566C55.243 109.892 54.6961 110.296 54.1883 110.777ZM91.3164 107.398V112.047C91.3164 114.273 91.0951 116.174 90.6523 117.75C90.2227 119.312 89.5977 120.582 88.7773 121.559C87.957 122.535 86.974 123.251 85.8281 123.707C84.6953 124.163 83.4258 124.391 82.0195 124.391C80.8997 124.391 79.8581 124.247 78.8945 123.961C77.944 123.674 77.0846 123.225 76.3164 122.613C75.5482 122.001 74.8906 121.214 74.3438 120.25C73.8099 119.273 73.3932 118.108 73.0938 116.754C72.8073 115.4 72.6641 113.831 72.6641 112.047V107.398C72.6641 105.159 72.8854 103.271 73.3281 101.734C73.7708 100.185 74.4023 98.9284 75.2227 97.9648C76.043 96.9883 77.0195 96.2786 78.1523 95.8359C79.2982 95.3932 80.5742 95.1719 81.9805 95.1719C83.1133 95.1719 84.1549 95.3151 85.1055 95.6016C86.069 95.875 86.9284 96.3112 87.6836 96.9102C88.4518 97.5091 89.1029 98.2904 89.6367 99.2539C90.1836 100.204 90.6003 101.357 90.8867 102.711C91.1732 104.052 91.3164 105.615 91.3164 107.398ZM86.6094 112.711V106.695C86.6094 105.562 86.5443 104.566 86.4141 103.707C86.2839 102.835 86.0885 102.099 85.8281 101.5C85.5807 100.888 85.2682 100.393 84.8906 100.016C84.513 99.625 84.0833 99.3451 83.6016 99.1758C83.1198 98.9935 82.5794 98.9023 81.9805 98.9023C81.2513 98.9023 80.6003 99.0456 80.0273 99.332C79.4544 99.6055 78.9727 100.048 78.582 100.66C78.1914 101.272 77.8919 102.079 77.6836 103.082C77.4883 104.072 77.3906 105.276 77.3906 106.695V112.711C77.3906 113.857 77.4557 114.866 77.5859 115.738C77.7161 116.611 77.9115 117.359 78.1719 117.984C78.4323 118.596 78.7448 119.104 79.1094 119.508C79.487 119.898 79.9167 120.185 80.3984 120.367C80.8932 120.549 81.4336 120.641 82.0195 120.641C82.7617 120.641 83.4193 120.497 83.9922 120.211C84.5651 119.924 85.0469 119.469 85.4375 118.844C85.8281 118.206 86.1211 117.379 86.3164 116.363C86.5117 115.348 86.6094 114.13 86.6094 112.711ZM114.851 107.398V112.047C114.851 114.273 114.629 116.174 114.187 117.75C113.757 119.312 113.132 120.582 112.312 121.559C111.491 122.535 110.508 123.251 109.362 123.707C108.23 124.163 106.96 124.391 105.554 124.391C104.434 124.391 103.392 124.247 102.429 123.961C101.478 123.674 100.619 123.225 99.8508 122.613C99.0826 122.001 98.425 121.214 97.8781 120.25C97.3443 119.273 96.9276 118.108 96.6281 116.754C96.3417 115.4 96.1984 113.831 96.1984 112.047V107.398C96.1984 105.159 96.4198 103.271 96.8625 101.734C97.3052 100.185 97.9367 98.9284 98.757 97.9648C99.5773 96.9883 100.554 96.2786 101.687 95.8359C102.833 95.3932 104.109 95.1719 105.515 95.1719C106.648 95.1719 107.689 95.3151 108.64 95.6016C109.603 95.875 110.463 96.3112 111.218 96.9102C111.986 97.5091 112.637 98.2904 113.171 99.2539C113.718 100.204 114.135 101.357 114.421 102.711C114.708 104.052 114.851 105.615 114.851 107.398ZM110.144 112.711V106.695C110.144 105.562 110.079 104.566 109.948 103.707C109.818 102.835 109.623 102.099 109.362 101.5C109.115 100.888 108.803 100.393 108.425 100.016C108.047 99.625 107.618 99.3451 107.136 99.1758C106.654 98.9935 106.114 98.9023 105.515 98.9023C104.786 98.9023 104.135 99.0456 103.562 99.332C102.989 99.6055 102.507 100.048 102.116 100.66C101.726 101.272 101.426 102.079 101.218 103.082C101.023 104.072 100.925 105.276 100.925 106.695V112.711C100.925 113.857 100.99 114.866 101.12 115.738C101.251 116.611 101.446 117.359 101.706 117.984C101.967 118.596 102.279 119.104 102.644 119.508C103.021 119.898 103.451 120.185 103.933 120.367C104.428 120.549 104.968 120.641 105.554 120.641C106.296 120.641 106.954 120.497 107.527 120.211C108.099 119.924 108.581 119.469 108.972 118.844C109.362 118.206 109.655 117.379 109.851 116.363C110.046 115.348 110.144 114.13 110.144 112.711Z\" fill=\"#C6CAD2\"/>\n</g>\n</g>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_4124_103042\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_4124_103042\"/>\n</filter>\n<filter id=\"filter1_dd_4124_103042\" x=\"13\" y=\"46\" width=\"138\" height=\"130\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4124_103042\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_4124_103042\" result=\"effect2_dropShadow_4124_103042\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_4124_103042\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_4124_103042\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip1_4124_103042\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"124\" rx=\"4\" fill=\"white\"/>\n</clipPath>\n<clipPath id=\"clip2_4124_103042\">\n<rect width=\"132\" height=\"132\" fill=\"white\" transform=\"translate(16 60)\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_7107_90986)\">\n<g clip-path=\"url(#clip0_7107_90986)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_7107_90986)\">\n<rect x=\"38.588\" y=\"31.1113\" width=\"256\" height=\"140\" rx=\"6\" transform=\"rotate(5 38.588 31.1113)\" fill=\"white\" shape-rendering=\"crispEdges\"/>\n<rect x=\"49.6952\" y=\"53.4668\" width=\"104\" height=\"36\" rx=\"4\" transform=\"rotate(8 49.6952 53.4668)\" fill=\"#F3F4F6\"/>\n<rect width=\"230\" height=\"12\" transform=\"translate(-1.77661 60.6738) rotate(-10)\" fill=\"#454D5F\"/>\n<circle opacity=\"0.24\" cx=\"6.15896\" cy=\"65.3671\" r=\"3\" transform=\"rotate(-10 6.15896 65.3671)\" fill=\"white\"/>\n<rect opacity=\"0.24\" x=\"12.8789\" y=\"63.166\" width=\"10\" height=\"2\" rx=\"1\" transform=\"rotate(-10 12.8789 63.166)\" fill=\"white\"/>\n<rect x=\"43.9305\" y=\"100.689\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(3 43.9305 100.689)\" fill=\"#F3F4F6\"/>\n<rect x=\"41.8835\" y=\"146.205\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(9 41.8835 146.205)\" fill=\"#F3F4F6\"/>\n<rect x=\"101.884\" y=\"106.895\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(10 101.884 106.895)\" fill=\"#F3F4F6\"/>\n<rect x=\"96.3936\" y=\"150.604\" width=\"48\" height=\"36\" rx=\"4\" transform=\"rotate(5 96.3936 150.604)\" fill=\"#F3F4F6\"/>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_7107_90986\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_7107_90986\"/>\n</filter>\n<filter id=\"filter1_dd_7107_90986\" x=\"-4.77661\" y=\"18.7344\" width=\"301.391\" height=\"178.156\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"1\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_7107_90986\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0775545 0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_7107_90986\" result=\"effect2_dropShadow_7107_90986\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_7107_90986\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_7107_90986\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","<svg width=\"164\" height=\"164\" viewBox=\"0 0 164 164\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g filter=\"url(#filter0_i_7083_91308)\">\n<g clip-path=\"url(#clip0_7083_91308)\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"#F9FAFB\"/>\n<g filter=\"url(#filter1_dd_7083_91308)\">\n<rect x=\"16\" y=\"48\" width=\"132\" height=\"128\" rx=\"4\" fill=\"white\"/>\n<circle cx=\"82\" cy=\"72\" r=\"12\" fill=\"#E8EAED\"/>\n<rect x=\"67\" y=\"92\" width=\"30\" height=\"6\" rx=\"3\" fill=\"#E8EAED\"/>\n<rect x=\"31\" y=\"114.002\" width=\"102\" height=\"16\" rx=\"4\" fill=\"#E8EAED\"/>\n<rect x=\"31\" y=\"142.002\" width=\"102\" height=\"16\" rx=\"4\" fill=\"#E8EAED\"/>\n</g>\n</g>\n</g>\n<defs>\n<filter id=\"filter0_i_7083_91308\" x=\"0\" y=\"-1\" width=\"164\" height=\"165\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"-1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.1056 0 0 0 0 0.11904 0 0 0 0 0.1344 0 0 0 0.2 0\"/>\n<feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_7083_91308\"/>\n</filter>\n<filter id=\"filter1_dd_7083_91308\" x=\"13\" y=\"46\" width=\"138\" height=\"134\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset/>\n<feGaussianBlur stdDeviation=\"0.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.12 0\"/>\n<feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_7083_91308\"/>\n<feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n<feOffset dy=\"1\"/>\n<feGaussianBlur stdDeviation=\"1.5\"/>\n<feComposite in2=\"hardAlpha\" operator=\"out\"/>\n<feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0335371 0 0 0 0 0.206463 0 0 0 0 0.183406 0 0 0 0.04 0\"/>\n<feBlend mode=\"normal\" in2=\"effect1_dropShadow_7083_91308\" result=\"effect2_dropShadow_7083_91308\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_7083_91308\" result=\"shape\"/>\n</filter>\n<clipPath id=\"clip0_7083_91308\">\n<rect width=\"164\" height=\"164\" rx=\"82\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport ForbiddenErrorImage from \"../assets/images/errors/403-image.svg\";\nimport AppNotFoundImage from \"../assets/images/errors/404-image.svg\";\nimport ServerError500Image from \"../assets/images/errors/500-image.svg\";\nimport GeneralErrorImage from \"../assets/images/errors/general-error.svg\";\nimport LoginErrorImage from \"../assets/images/errors/login-error.svg\";\nimport { colors } from \"../styling/colors.js\";\nimport { API_STATUS_CODES } from \"./constants.js\";\n\nconst HOME_URL = \"/home\";\n\nconst VerticalWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n`;\n\ninterface Props {\n title: string;\n errorMessage?: string | React.ReactNode;\n buttonText?: string;\n handleButtonClick?: () => void;\n errorCode?: API_STATUS_CODES | \"LOGIN_FAILURE\";\n buttonPath?: string;\n image?: string; // when not set, the image will be based on the errorCode\n secondaryButtonText?: string;\n secondaryButtonAction?: () => void;\n hideActions?: boolean;\n mainButtonType?: \"primary\" | \"ghost\";\n // showActionsOnEmbedRoute?: boolean; // by default, actions are hidden on embed pages\n}\n\n// Most of the errors have this styling anyway\nconst ErrorWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: calc(100vh);\n text-align: center;\n .bold-text {\n font-weight: 500;\n font-size: 24px;\n }\n .page-unavailable-img {\n width: 35%;\n }\n .button-position {\n margin: auto;\n }\n`;\n\nconst TextWrapper = styled.div`\n margin-top: 30px;\n margin-bottom: 30px;\n max-width: 500px;\n`;\n\nconst Title = styled.h3`\n font-size: 1.25rem;\n font-weight: 500;\n margin-bottom: 0.5rem;\n`;\n\nconst ErrorMessage = styled.p`\n color: ${colors.GREY_500};\n`;\n\nconst Button = styled.button`\n border: 1px solid ${colors.GREY_100};\n color: ${colors.GREY_600};\n border-radius: 6px;\n padding: 2px 6px;\n font-size: 1rem;\n font-weight: 400;\n cursor: pointer;\n\n &:hover {\n background-color: ${colors.GREY_100};\n }\n`;\n\nconst ErrorComponent = ({\n title,\n errorMessage,\n buttonText,\n handleButtonClick,\n errorCode,\n buttonPath,\n image: overrideImage,\n secondaryButtonAction,\n secondaryButtonText,\n hideActions,\n}: Props) => {\n let ImageComponent = overrideImage ?? GeneralErrorImage;\n if (!overrideImage) {\n switch (errorCode) {\n case API_STATUS_CODES.RESOURCE_NOT_FOUND:\n ImageComponent = AppNotFoundImage;\n break;\n case API_STATUS_CODES.SERVER_ERROR:\n ImageComponent = ServerError500Image;\n break;\n case API_STATUS_CODES.RESOURCE_FORBIDDEN:\n ImageComponent = ForbiddenErrorImage;\n break;\n case API_STATUS_CODES.TIMEOUT:\n ImageComponent = GeneralErrorImage;\n break;\n case \"LOGIN_FAILURE\":\n ImageComponent = LoginErrorImage;\n break;\n default:\n ImageComponent = GeneralErrorImage; //we should have covered all the cases and Koala should not show, keeping it here since we do not have a default one\n }\n }\n const showActions = !hideActions;\n\n return (\n <ErrorWrapper data-test=\"app-error-container\" className=\"error-wrapper\">\n <VerticalWrapper>\n <ImageComponent />\n <TextWrapper>\n <Title>{title}</Title>\n {errorMessage && (\n <ErrorMessage data-test=\"error-page-subtext\">\n {errorMessage}\n </ErrorMessage>\n )}\n </TextWrapper>\n {showActions && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"12px\" }}>\n {secondaryButtonText && secondaryButtonAction && (\n <Button type=\"button\" onClick={secondaryButtonAction}>\n {secondaryButtonText}\n </Button>\n )}\n <Button\n type={\"button\"}\n onClick={() =>\n handleButtonClick\n ? handleButtonClick()\n : (window.location.pathname = buttonPath ?? HOME_URL)\n }\n data-test=\"error-component-button\"\n >\n {buttonText ? buttonText : \"Return Home\"}\n </Button>\n </div>\n )}\n </VerticalWrapper>\n </ErrorWrapper>\n );\n};\n\nexport default ErrorComponent;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { API_STATUS_CODES } from \"./constants.js\";\nimport ErrorComponent from \"./error-component.jsx\";\n\nconst Wrapper = styled.div`\n text-align: center;\n .bold-text {\n font-weight: 500;\n font-size: 24px;\n }\n .page-unavailable-img {\n width: 35%;\n }\n .button-position {\n margin: auto;\n }\n height: 100%;\n`;\n\nconst PageNotFound = ({\n title = \"Content not found\",\n errorMessage = \"We couldn’t find the page you were looking for. Make sure that you have the right URL. \",\n buttonPath,\n buttonText,\n onButtonClick,\n hideActions,\n}: {\n title?: string;\n errorMessage?: string | React.ReactElement;\n buttonPath?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n hideActions?: boolean;\n}) => {\n return (\n <Wrapper>\n <ErrorComponent\n errorCode={API_STATUS_CODES.RESOURCE_NOT_FOUND}\n title={title}\n errorMessage={errorMessage}\n hideActions={hideActions}\n buttonPath={buttonPath}\n buttonText={buttonText}\n mainButtonType={\"ghost\"}\n handleButtonClick={onButtonClick}\n />\n </Wrapper>\n );\n};\n\nexport default PageNotFound;\n","import { useMemo } from \"react\";\nimport { createAnchorNameStyle } from \"../../../edit-mode/edit-wrapper.js\";\nimport { InteractionLayerProvider } from \"../../../edit-mode/interaction-layer/interaction-context.jsx\";\nimport InteractionLayer from \"../../../edit-mode/interaction-layer/interaction-layer.jsx\";\nimport { useComponentInfo } from \"../../internal-details/component-info-context.js\";\nimport { getEditWrapperIdWithType } from \"../../utils/widget-wrapper-naming.js\";\nimport { UnstyledInternalContainer } from \"../components/container/index.jsx\";\nimport useEditor from \"../hooks/use-editor.js\";\nimport type { ContainerLayout } from \"./constants.js\";\nimport type { LegacyRef } from \"react\";\n\nconst EXPANDED: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n};\n\nfunction DroppableContainer({\n name,\n componentType,\n isOpen,\n children,\n layout,\n className,\n dropTargetRef,\n}: {\n name: string;\n componentType: string;\n isOpen: boolean;\n children: React.ReactNode;\n layout: ContainerLayout;\n className: string;\n dropTargetRef?: React.Ref<HTMLElement> | LegacyRef<HTMLElement>;\n}) {\n const { instanceId, sourceId } = useComponentInfo();\n const { isEditing } = useEditor();\n\n const anchorNameStyle = useMemo(() => {\n if (isEditing && isOpen) {\n return createAnchorNameStyle({\n instanceId,\n });\n }\n\n return {};\n }, [isEditing, isOpen, instanceId]);\n\n const internalContainer = useMemo(\n () => (\n <UnstyledInternalContainer\n layout={layout as any}\n isVisible={true}\n data-sb-id={sourceId}\n data-sb-instance-id={instanceId}\n style={{ ...EXPANDED, ...anchorNameStyle }}\n className={className}\n >\n {children}\n </UnstyledInternalContainer>\n ),\n [sourceId, instanceId, children, anchorNameStyle, layout, className],\n );\n\n if (!isEditing) {\n return <div style={EXPANDED}>{internalContainer}</div>;\n }\n\n return (\n <div\n ref={dropTargetRef as any}\n id={getEditWrapperIdWithType(instanceId, componentType)}\n style={EXPANDED}\n >\n <InteractionLayerProvider instanceId={instanceId}>\n {internalContainer}\n </InteractionLayerProvider>\n {isOpen && (\n <InteractionLayer\n rootType={componentType}\n rootInstanceId={instanceId}\n rootName={name}\n />\n )}\n </div>\n );\n}\n\nexport default DroppableContainer;\n","import \"../edit-mode/edit-style.css\";\n\n// CRITICAL: Early console patching before any other JS imports\nimport LibraryEarlyConsoleBuffer from \"./tracing/early-console-buffer.js\";\nLibraryEarlyConsoleBuffer.getInstance().patchEarly();\n\n// eslint-disable-next-line import/order\nimport {\n type CreateChild,\n TriggerStepType,\n} from \"@superblocksteam/library-shared/types\";\nexport { type CreateChild, TriggerStepType };\n\n// User-facing components\nexport {\n InternalContainer,\n UnstyledInternalContainer,\n} from \"./user-facing/components/container/index.jsx\";\nexport { Page } from \"./user-facing/components/page/index.jsx\";\nexport { App } from \"./user-facing/components/app/index.jsx\";\nexport {\n registerComponent,\n type CustomComponentProps,\n type CustomComponentPropertiesDefinition,\n} from \"./user-facing/components/custom/register-custom-component.jsx\";\nexport type { UnknownOption } from \"./user-facing/components/types.ts\";\n\nexport {\n StateVar,\n StateVarPersistence,\n} from \"./user-facing/entities/variable/index.js\";\nexport { Timer } from \"./user-facing/entities/timer/index.js\";\nexport { SbApi } from \"./user-facing/entities/api/index.js\";\n\n// User-facing types\nexport { default as MakeEditableWithSuperblocks } from \"./user-facing/sb-provider.jsx\";\nexport { default as SbProvider } from \"./user-facing/sb-provider.jsx\";\nexport { EventFlow } from \"./user-facing/event-flow.js\";\nexport {\n copyToClipboard,\n navigateTo,\n setQueryParams,\n download,\n logoutIntegrations,\n} from \"./user-facing/global-functions.js\";\n\nexport { loading as loadingProp } from \"./user-facing/properties-panel/mixins/loading.js\";\nexport {\n size as sizeProp,\n widthWithoutFit as widthWithoutFitProp,\n} from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { margin as marginProp } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { visible as visibleProp } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { containerLayout as containerLayoutProps } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { shouldScrollContents as shouldScrollContentsProps } from \"./user-facing/properties-panel/mixins/layout-section.js\";\nexport { default as useEditor } from \"./user-facing/hooks/use-editor.js\";\nexport { usePopoverRootElement } from \"./user-facing/hooks/use-popover-roots.js\";\n\nexport { registerScope } from \"./internal-details/scope/scope.jsx\";\nexport { registerPage } from \"./user-facing/components/page/register-page.js\";\nexport { registerApp } from \"./user-facing/components/app/register-app.js\";\nexport { createScope } from \"./user-facing/state/create-scope.js\";\nexport { type BindingIdentifier } from \"@superblocksteam/library-shared/types\";\nexport { Global, Theme, Embed, Env } from \"./internal-details/scope/global.js\";\nexport type { AppTheme } from \"./internal-details/scope/global.js\";\n\nexport { SbEvent } from \"./internal-details/entities.js\";\nexport { useUpdateProperties } from \"./user-facing/hooks/use-update-properties.js\";\nexport { useTheme } from \"./user-facing/hooks/use-theme.jsx\";\n\nexport {\n Prop,\n Section as PropertyPanelSection,\n PropsPanelCategory,\n} from \"./user-facing/properties-panel/props-builder.js\";\n\nexport { computed } from \"./user-facing/state/computed.js\";\nexport type { ElementPassthroughProps } from \"./user-facing/component-base/use-passthrough-props.js\";\n\nexport {\n Dim,\n type DimModes,\n SB,\n Property,\n NO_CONTENT_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\nexport type { EditorConfig } from \"@superblocksteam/library-shared\";\nexport type {\n EditorTemplate,\n CreationContext,\n} from \"./internal-details/sb-wrapper.jsx\";\n\nexport type {\n FromChildToParentMessageTypes,\n FromChildToParentMessageTypesMap,\n FromParentToChildMessageTypes,\n FromParentToChildMessageTypesMap,\n} from \"./internal-details/lib/types.js\";\n\n// we need Outlet and Link types to be user-facing because we import it in code-demo-app/App.tsx directly\nexport { Outlet, Link, generatePath } from \"react-router\";\n\n// These exports are injected from our Vite plugin and will be\n// available at runtime but hidden from TypeScript auto-completion\n\n/** @internal */\nexport { RouteLoadError } from \"./internal-details/internal-components/route-load-error.jsx\";\n\n/** @internal */\nexport { createRoot } from \"react-dom/client\";\n\n/** @internal */\nexport * from \"react-router\";\n\nexport { useDialogEditing } from \"./user-facing/hooks/use-dialog-editing.js\";\nexport { default as InteractionLayer } from \"../edit-mode/interaction-layer/interaction-layer.jsx\";\n/** @internal */\nexport { default as PageNotFound } from \"./user-facing/error-pages/page-not-found.jsx\";\n\nexport { default as DroppableContainer } from \"./user-facing/component-base/droppable-container.jsx\";\n\nexport {\n /** @deprecated should not be used externally **/\n INSTANCE_ID_ATTRIBUTE,\n} from \"@superblocksteam/library-shared\";\n\nexport { PORTAL_ROOT_ID } from \"./user-facing/constants.js\";\n\n/** @internal */\nexport { editorBridge } from \"../edit-mode/superblocks-editor-bridge.js\";\n\n/** @internal */\nexport {\n BuildErrorModal,\n type BuildError,\n type BuildErrorModalProps,\n} from \"../edit-mode/build-error-notification.js\";\n\nexport {\n FileManager,\n getFileWithUploadId,\n} from \"./internal-details/lib/evaluator/file-utils.js\";\nexport type { FileMetadataPrivate } from \"./internal-details/lib/evaluator/file-utils.js\";\n"],"mappings":"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"}
|