{
  "version": 3,
  "sources": ["../../src/document/utils/createAssetReferenceFromImageUpload.ts", "../../src/document/models/CanvasTree/traits/forms/utils.ts", "../../src/document/components/chrome/properties/rows/FillImagePatternPresetsRow/presetOptions.ts", "../../src/document/components/chrome/insertSidebar/dataSources/utils.tsx", "../../src/document/components/chrome/insertSidebar/dataSources/items/getStaticItem.ts", "../../src/document/components/chrome/insertSidebar/dataSources/items/mediaItems.ts", "../../src/document/components/chrome/insertSidebar/dataSources/items/interactiveItems.ts", "../../src/document/components/chrome/insertSidebar/dataSources/items/embed.ts"],
  "sourcesContent": ["import { type AssetSize, createAssetReferenceForImage } from \"@framerjs/assets\"\nimport type { TilingBackgroundPatternPresetName } from \"document/components/chrome/properties/rows/FillImagePatternPresetsRow/presetOptions.ts\"\nimport { imageSizeToNonZero } from \"web/lib/images/image.ts\"\nimport type { ImageUploadResultWithOptionalAssetSize } from \"web/pages/project/lib/UploadService.ts\"\n\nexport function createAssetReferenceForUploadImageResult(\n\timage: ImageUploadResultWithOptionalAssetSize,\n\tpreferredSize?: AssetSize,\n\tpresetName?: TilingBackgroundPatternPresetName,\n) {\n\tconst { nonZeroNaturalWidth, nonZeroNaturalHeight } = imageSizeToNonZero(image.imageSize)\n\treturn createAssetReferenceForImage({\n\t\tidentifier: image.filename,\n\t\tpreferredSize,\n\t\tintrinsicSize: {\n\t\t\twidth: nonZeroNaturalWidth,\n\t\t\theight: nonZeroNaturalHeight,\n\t\t},\n\t\toriginalFilename: image.originalFilename,\n\t\tpresetName,\n\t})\n}\n", "import type { WithBorder } from \"../WithBorder.ts\"\nimport type { WithInputFill } from \"../WithFill.ts\"\nimport type { WithPadding } from \"../WithPadding.ts\"\nimport type { WithRelativeRadius } from \"../WithRadius.ts\"\nimport type { WithRadiusPerCorner } from \"../WithRadiusPerCorner.ts\"\nimport { createCSSDimension } from \"../utils/CSSDimension.ts\"\nimport type { WithFormInputFocusedStyles } from \"./WithFormInputFocusedStyles.ts\"\nimport { formInputFocusedStylesCreateDefaults } from \"./WithFormInputFocusedStyles.ts\"\nimport type { WithFormInputIcon } from \"./WithFormInputIcon.ts\"\nimport { defaultAddedInputIconColor } from \"./WithFormInputIcon.ts\"\nimport type { WithFormInputFontStyles } from \"./WithFormInputTextStyles.ts\"\n\ntype FormBooleanInputStyleDefaults = Partial<WithRelativeRadius> &\n\tPartial<WithRadiusPerCorner> &\n\tPartial<WithInputFill> &\n\tPartial<WithBorder> &\n\tPartial<WithFormInputFocusedStyles>\n\ntype FormInputStyleDefaults = FormBooleanInputStyleDefaults & Partial<WithFormInputFontStyles> & Partial<WithPadding>\n\ntype FormSelectStyleDefaults = FormInputStyleDefaults & Partial<WithFormInputIcon>\n\nexport const formBooleanInputStyleCreateDefaults: FormBooleanInputStyleDefaults = {\n\tfillColor: \"rgba(187, 187, 187, 0.2)\",\n\tfillType: \"color\",\n\tfillEnabled: true,\n\tborderEnabled: true,\n\tborderPerSide: false,\n\tborderWidth: 1,\n\tborderColor: \"rgba(136, 136, 136, 0.2)\",\n\tborderStyle: \"solid\",\n\tradius: 4,\n\tradiusIsRelative: false,\n\tradiusPerCorner: false,\n\t...formInputFocusedStylesCreateDefaults,\n}\n\nexport const formInputStyleCreateDefaults: FormInputStyleDefaults = {\n\tpadding: 12,\n\tpaddingPerSide: false,\n\tradius: 10,\n\tfillColor: \"rgba(187, 187, 187, 0.15)\",\n\tfillType: \"color\",\n\tfillEnabled: true,\n\tborderEnabled: true,\n\tborderPerSide: false,\n\tborderWidth: 1,\n\tborderColor: \"rgba(136, 136, 136, 0.1)\",\n\tborderStyle: \"solid\",\n\tformInputFontFamily: \"Inter\",\n\tformInputFontWeight: 400,\n\tformInputFontSize: createCSSDimension(14, \"px\"),\n\tformInputFontColor: \"rgba(153, 153, 153, 1)\",\n\tformInputFontSelector: \"Inter\",\n\tformInputFontStyle: \"Regular\",\n\tformInputFontLetterSpacing: 0,\n\tformInputFontLetterSpacingUnit: \"em\",\n\tformInputFontLineHeight: 1.2,\n\tformInputFontLineHeightUnit: \"em\",\n\t...formInputFocusedStylesCreateDefaults,\n}\n\nexport const formSelectStyleCreateDefaults: FormSelectStyleDefaults = {\n\t...formInputStyleCreateDefaults,\n\tformInputIconColor: defaultAddedInputIconColor,\n}\n", "// Preset images - originals\n// Noise is the only preset that uses png because it can't easily be represented as an svg\nimport { parseAssetReference } from \"@framerjs/assets\"\n// Preview thumbs - dark and light\nimport CheckerPreviewDark from \"./images/checkerboard-preview-dark.png\"\nimport CheckerPreviewLight from \"./images/checkerboard-preview-light.png\"\nimport Checkerboard from \"./images/checkerboard.svg\"\nimport DiagonalPreviewDark from \"./images/diagonal-preview-dark.png\"\nimport DiagonalPreviewLight from \"./images/diagonal-preview-light.png\"\nimport Diagonal from \"./images/diagonal.svg\"\nimport GridPreviewDark from \"./images/grid-preview-dark.png\"\nimport GridPreviewLight from \"./images/grid-preview-light.png\"\nimport Grid from \"./images/grid.svg\"\nimport LinePreviewDark from \"./images/line-preview-dark.png\"\nimport LinePreviewLight from \"./images/line-preview-light.png\"\nimport Line from \"./images/line.svg\"\nimport NoisePreviewDark from \"./images/noise-preview-dark.png\"\nimport NoisePreviewLight from \"./images/noise-preview-light.png\"\nimport Noise from \"./images/noise.png\"\nimport PolkaPreviewDark from \"./images/polka-preview-dark.png\"\nimport PolkaPreviewLight from \"./images/polka-preview-light.png\"\nimport Polka from \"./images/polka.svg\"\nimport RhombusPreviewDark from \"./images/rhombus-preview-dark.png\"\nimport RhombusPreviewLight from \"./images/rhombus-preview-light.png\"\nimport Rhombus from \"./images/rhombus.svg\"\nimport WavePreviewDark from \"./images/wave-preview-dark.png\"\nimport WavePreviewLight from \"./images/wave-preview-light.png\"\nimport Wave from \"./images/wave.svg\"\n\n/** We construct a dummy \"shape\" interface here which doesn't strongly typed name (just uses a string)\n * so that we can avoid the problem of a circular reference occurring between TilingBackgroundPatternPresetName\n * and TilingBackgroundPatternPreset.\n */\ninterface TilingBackgroundPatternPresetShape {\n\tpreviewImageDark: string\n\tpreviewImageLight: string\n\toriginalImage: string\n\textension: \"png\" | \"svg\"\n\tname: string\n}\n\n// WARNING: If an option is removed, then the name of the preset *cannot* be reused\n// later on, as there will be assets in the wild that use the same preset name,\n// and therefore the wrong preset will be selected in the UI.\nexport const presetOptions = [\n\t{\n\t\tname: \"noise\",\n\t\toriginalImage: Noise,\n\t\tpreviewImageLight: NoisePreviewLight,\n\t\tpreviewImageDark: NoisePreviewDark,\n\t\textension: \"png\",\n\t},\n\t{\n\t\tname: \"checkerboard\",\n\t\toriginalImage: Checkerboard,\n\t\tpreviewImageLight: CheckerPreviewLight,\n\t\tpreviewImageDark: CheckerPreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"grid\",\n\t\toriginalImage: Grid,\n\t\tpreviewImageLight: GridPreviewLight,\n\t\tpreviewImageDark: GridPreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"line\",\n\t\toriginalImage: Line,\n\t\tpreviewImageLight: LinePreviewLight,\n\t\tpreviewImageDark: LinePreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"rhombus\",\n\t\toriginalImage: Rhombus,\n\t\tpreviewImageLight: RhombusPreviewLight,\n\t\tpreviewImageDark: RhombusPreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"wave\",\n\t\toriginalImage: Wave,\n\t\tpreviewImageLight: WavePreviewLight,\n\t\tpreviewImageDark: WavePreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"polka\",\n\t\toriginalImage: Polka,\n\t\tpreviewImageLight: PolkaPreviewLight,\n\t\tpreviewImageDark: PolkaPreviewDark,\n\t\textension: \"svg\",\n\t},\n\t{\n\t\tname: \"diagonal\",\n\t\toriginalImage: Diagonal,\n\t\tpreviewImageLight: DiagonalPreviewLight,\n\t\tpreviewImageDark: DiagonalPreviewDark,\n\t\textension: \"svg\",\n\t},\n] as const satisfies TilingBackgroundPatternPresetShape[]\n\nexport type TilingBackgroundPatternPreset = (typeof presetOptions)[number]\n\n/** TilingBackgroundPatternPresetName represents all of the valid pattern options available.\n *  We construct the type in this manner (referring to typeof presetOptions[number] over type Name = \"one\" | \"two\" | \"etc\")\n *  so that you can just add a new item to presetOptions and the presets type automatically updates to reflect the new option.\n *  Otherwise these two areas of the code could go out of sync.\n */\nexport type TilingBackgroundPatternPresetName = TilingBackgroundPatternPreset[\"name\"]\n\n/**\n * Attempts to resolve the preset name from a node's fillImage asset reference.\n * The asset reference contains a presetName parameter which helps link the uploaded\n * image to the preset it was created from.\n */\nexport function getFillImagePreset(assetIdentifier: string): TilingBackgroundPatternPreset | undefined {\n\tconst assetReference = parseAssetReference(assetIdentifier)\n\treturn presetOptions.find(preset => preset.name === assetReference?.presetName)\n}\n\n/**\n * Retrieves a pattern preset by its key.\n */\nexport function getTilingPresetByKey(\n\tkey: TilingBackgroundPatternPresetName,\n): TilingBackgroundPatternPreset | undefined {\n\treturn presetOptions.find(preset => preset.name === key)\n}\n", "import { isString } from \"@framerjs/fresco/src/components/utils/typeCheck\"\nimport type { ExternalModuleExportIdentifier } from \"@framerjs/shared\"\nimport { assert, asGlobalId, externalModuleIdentifier, unhandledError } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { experiments } from \"app/experiments.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport {\n\tCodeComponentNode,\n\tFrameNode,\n\tOvalShapeNode,\n\tPolygonShapeNode,\n\tRectangleShapeNode,\n\tRichTextNode,\n} from \"document/models/CanvasTree/index.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { FormBooleanInputNode } from \"document/models/CanvasTree/nodes/forms/FormBooleanInputNode.ts\"\nimport { FormPlainTextInputNode } from \"document/models/CanvasTree/nodes/forms/FormPlainTextInputNode.ts\"\nimport { FormSelectNode } from \"document/models/CanvasTree/nodes/forms/FormSelectNode.ts\"\nimport { isFrameNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { HTMLTag } from \"document/models/CanvasTree/traits/WithHTMLTag.ts\"\nimport { tickerEffectEnabledDefaults } from \"document/models/CanvasTree/traits/WithTickerEffect.ts\"\nimport {\n\tformCheckboxCheckedEffectDefaults,\n\tformCheckboxCheckedIconDefaults,\n\tformRadioCheckedEffectDefaults,\n} from \"document/models/CanvasTree/traits/forms/WithFormBooleanInputType.ts\"\nimport type { WithFormContainer } from \"document/models/CanvasTree/traits/forms/WithFormContainer.ts\"\nimport { defaultAddedInputIconColor } from \"document/models/CanvasTree/traits/forms/WithFormInputIcon.ts\"\nimport { defaultFormInputInvalidTextColor } from \"document/models/CanvasTree/traits/forms/WithFormInputInvalidStyles.ts\"\nimport { defaultFormInputPlaceholderColor } from \"document/models/CanvasTree/traits/forms/WithFormInputPlaceholder.ts\"\nimport { defaultFormSelectOption } from \"document/models/CanvasTree/traits/forms/WithFormSelect.ts\"\nimport type { InputType } from \"document/models/CanvasTree/traits/forms/WithTextInputType.ts\"\nimport { inputHasDefaultIcon } from \"document/models/CanvasTree/traits/forms/WithTextInputType.ts\"\nimport {\n\tformBooleanInputStyleCreateDefaults,\n\tformInputStyleCreateDefaults,\n\tformSelectStyleCreateDefaults,\n} from \"document/models/CanvasTree/traits/forms/utils.ts\"\nimport { HardCodedCodeIdentifier } from \"document/models/CanvasTree/traits/utils/hardCodedCodeComponentIdentifiers.ts\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport { getStackLayoutPreset } from \"document/utils/layoutHelpers.ts\"\nimport { environment } from \"environment/index.ts\"\nimport type { Size } from \"library/index.ts\"\nimport { DimensionType } from \"library/index.ts\"\nimport { getLookupQueryForModuleComponent, moduleComponents } from \"utils/moduleComponents.ts\"\nimport { fileFromURL } from \"web/lib/fileFromURL.ts\"\nimport { uploadService } from \"web/pages/project/lib/UploadService.ts\"\nimport type { TilingBackgroundPatternPresetName } from \"../../properties/rows/FillImagePatternPresetsRow/presetOptions.ts\"\nimport { getTilingPresetByKey } from \"../../properties/rows/FillImagePatternPresetsRow/presetOptions.ts\"\nimport type { ImageToUpload } from \"../types.ts\"\nimport { CanvasChildList } from \"document/models/CanvasTree/nodes/ChildList.ts\"\n\nexport function generateImage() {\n\treturn new FrameNode({\n\t\twidth: 400,\n\t\theight: 300,\n\t\tfillEnabled: true,\n\t\tfillType: \"image\",\n\t\tfillColor: \"#333\",\n\t})\n}\n\nexport function generatePrototypeComponent() {\n\treturn new CodeComponentNode({\n\t\twidth: 300,\n\t\theight: 500,\n\t\tcodeComponentIdentifier: HardCodedCodeIdentifier.prototype,\n\t\tslotsAreChildNodes: experiments.isOn(\"componentSlotsAreChildNodes\"),\n\t})\n}\n\n/** getImageDetailsForPreset retrieves the details of the preset image that will be uploaded when the user drops\n *  the frame onto the canvas. The upload behaviour takes place in CanvasDropzone onDrop.\n */\nexport function getImageDetailsForPreset(presetName: TilingBackgroundPatternPresetName): ImageToUpload | undefined {\n\tconst preset = getTilingPresetByKey(presetName)\n\n\tif (!preset) return\n\n\treturn {\n\t\timageUrl: preset.originalImage,\n\t\toriginalFilename: `${preset.name}.${preset.extension}`,\n\t\tpresetName: preset.name,\n\t}\n}\n\nexport const tilingBackgroundFrameWidth = 200\nexport const tilingBackgroundFrameHeight = 200\n\n/** generateTilingBackgroundFrame creates a placeholder frame with an image fill\n *  and tiling behaviour enabled. Due to the fact that the process of uploading\n *  the image preset would take too long and block the process of dragging / dropping\n *  we defer this until the draggable is dropped.\n *\n *  The uploadImage util below will be called by the CanvasDropzone when the inserted\n *  item is dropped onto the canvas target,\n *  and the fillImage property on the node will be updated with the asset reference\n *  of the uploaded image.\n */\nexport function generateTilingBackgroundFrame(): FrameNode {\n\treturn new FrameNode({\n\t\twidth: 200,\n\t\theight: 200,\n\t\tfillEnabled: true,\n\t})\n}\n\n/** uploadImage takes a url to an image and uploads the image to our assets service.\n *  We use this method in the onDrop method of the CanvasDropzone to upload an image as\n *  the fill image of a frame that was previously inserted from the insert menu.\n *  @param imageToUpload the details of the image that should be uploaded\n *  @returns ImageUploadResult\n */\nexport async function uploadImage(imageToUpload: ImageToUpload, node: FrameNode, engine: VekterEngine): Promise<void> {\n\t// Notify the chrome store that the upload has started\n\t// so that we display the 'uploading' overlay over the top\n\t// of the target frame on the canvas.\n\tengine.stores.chromeStore.notifyTilingImageUploadStarted(node.id)\n\n\tconst file = await fileFromURL(imageToUpload.imageUrl, imageToUpload.originalFilename)\n\tconst uploadResult = await uploadService.uploadImage(file, { silent: true })\n\tassert(uploadResult, \"Failed to upload the image\")\n\n\tconst reference = createAssetReferenceForUploadImageResult(uploadResult)\n\n\tengine.scheduler.processWhenReady(() => {\n\t\tif (!isFrameNode(node)) return\n\n\t\t// We need to check if the tree contains the node\n\t\t// as the node may have been removed via undo if the user\n\t\t// hits cmd + z after inserting the frame whilst the upload is still\n\t\t// in progress.\n\t\tconst latestNode = engine.tree.current(node)\n\n\t\tif (latestNode) {\n\t\t\tlatestNode.set({\n\t\t\t\tfillImage: reference,\n\t\t\t\t// No imageSizeToNonZero because guessing here isn't helpful\n\t\t\t\tfillImagePixelWidth: uploadResult.imageSize.naturalWidth,\n\t\t\t\tfillImagePixelHeight: uploadResult.imageSize.naturalHeight,\n\t\t\t\tfillImageResize: \"tile\",\n\t\t\t\tfillType: \"image\",\n\t\t\t})\n\t\t}\n\n\t\t// Notify the chrome store that the upload has finished\n\t\t// so that we no longer show the uploading overlay.\n\t\tengine.stores.chromeStore.notifyTilingImageUploadFinished(node.id)\n\n\t\tconst popoutNavigation = engine.floatingWindowPopoutNavigation\n\t\tif (popoutNavigation && !popoutNavigation.isPresenting(\"fill\")) {\n\t\t\tpopoutNavigation.presentPopout(\"fill\")\n\t\t}\n\t})\n}\n\n/** generateFitText generates a RichTextNode with fit text setup correctly.\n *  The node will be setup with:\n *  - a fit text viewbox that matches the font size\n *  - the text uses Inter Black\n */\nexport function generateFitText(): RichTextNode {\n\tconst fitTextNode = new RichTextNode({\n\t\t// Under the hood, rich text properties such as font-weight, font-family\n\t\t// are all stored as variables in the style attribute, so we just set them\n\t\t// directly here to avoid any unnecessary gymnastics.\n\t\thtml: '<p style=\"--framer-font-family: &quot;Inter-Black&quot;, &quot;Inter&quot;, sans-serif; --framer-font-weight: 900; --font-selector: SW50ZXItQmxhY2s=; --framer-font-size: 168.82357688367594px; --framer-letter-spacing: -0.07px;\">Fit</p>',\n\t\twidthType: DimensionType.FractionOfFreeSpace,\n\t\twidth: 1,\n\t\t// The textFitViewBoxSize is intrinsically tied to all of the styles in the style declaration above. So if you change the view box size,\n\t\t// then the font size will also need to change in order for text fitting to function\n\t\t// correctly. It's best to update the values in the property panel in the editor\n\t\t// and then transpose them to here.\n\t\t// We hardcode the values here rather calculating them programatically, which would require\n\t\t// rendering the node on the canvas first.\n\t\ttextFitViewBoxSize: {\n\t\t\twidth: 217.07,\n\t\t\theight: 203,\n\t\t},\n\t\theightType: DimensionType.Auto,\n\t\theight: 0,\n\t})\n\n\treturn fitTextNode\n}\n\n/**\n * Unlike most modules which are inserted via the insert sidebar, which are\n * independent items, some are components that are part of some nodes. That\n * means that the insert sidebar won't automagically preload and add the\n * external module node. To ensure the same UX, we need to do that manually\n * otherwise the component won't be unlinkable.\n */\nasync function getCodeComponentIdentifier(engine: VekterEngine, componentName: keyof typeof moduleComponents) {\n\tif (environment.isTest || engine.stores.chromeStore.userIsViewer) return undefined\n\tconst component = moduleComponents[componentName]\n\n\tconst { module } = await engine.stores.modulesStore.lookUpModule(getLookupQueryForModuleComponent(component))\n\tif (!module || !module.files.module) return undefined\n\tconst moduleIdentifier: ExternalModuleExportIdentifier = externalModuleIdentifier(\n\t\tasGlobalId(module.id),\n\t\tmodule.saveId,\n\t\tmodule.files.module,\n\t\t\"exportSpecifier\" in component && isString(component.exportSpecifier) ? component.exportSpecifier : \"default\",\n\t)\n\n\t// Preload the module, and add it to the external modules. It is especially\n\t// important to add it to the tree as this allows unlinking to work. We do\n\t// not need to await these promises, we just need these to be done in the\n\t// background.\n\tengine.stores.modulesStore.preloadExternalModules([moduleIdentifier]).catch(unhandledError)\n\tengine.stores.modulesStore\n\t\t.addExternalModulesToProject([moduleIdentifier], { onTreeUpdate: () => {} })\n\t\t.catch(unhandledError)\n\n\treturn moduleIdentifier.value\n}\n\nasync function getSubmitButtonIdentifier(engine: VekterEngine) {\n\treturn getCodeComponentIdentifier(engine, \"submitButton\")\n}\n\nexport async function getInfiniteScrollIdentifier(engine: VekterEngine) {\n\treturn getCodeComponentIdentifier(engine, \"infiniteScroll\")\n}\n\nexport async function getLoadMoreIdentifier(engine: VekterEngine) {\n\treturn getCodeComponentIdentifier(engine, \"loadMoreButton\")\n}\n\nexport async function getTabIdentifier(engine: VekterEngine) {\n\treturn getCodeComponentIdentifier(engine, \"tab\")\n}\n\n\nconst formLabelWrapperProps: Partial<FrameNode> = {\n\tlayout: \"stack\",\n\tgap: 10,\n\tstackDirection: \"vertical\",\n\tstackDistribution: \"start\",\n\tstackAlignment: \"start\",\n\theight: 40,\n\theightType: DimensionType.Auto,\n\twidth: 1,\n\twidthType: DimensionType.FractionOfFreeSpace,\n\tpadding: 0,\n\tpaddingPerSide: false,\n\tfillEnabled: false,\n\thtmlTag: HTMLTag.label,\n}\n\nexport function labelHTML(label: string, color = \"rgb(136, 136, 136)\") {\n\treturn `<p style=\"--framer-font-family: &quot;Inter&quot;, &quot;Inter Placeholder&quot;, sans-serif; --framer-font-weight: 500; --font-selector: SW50ZXItTWVkaXVt; --framer-text-color: ${color}; --framer-font-size: 12px;\">${label}</p>`\n}\n\nexport function createInputLabelBlock({\n\tlabel,\n\ttype,\n\tplaceholder,\n\tname,\n}: {\n\tlabel: string\n\ttype?: InputType\n\tplaceholder?: string\n\tname?: string\n}): FrameNode {\n\tconst hasDefaultIconColor = inputHasDefaultIcon(type)\n\treturn new FrameNode({\n\t\t...formLabelWrapperProps,\n\t\tchildren: new CanvasChildList([\n\t\t\tnew RichTextNode({\n\t\t\t\theightType: DimensionType.Auto,\n\t\t\t\twidthType: DimensionType.Auto,\n\t\t\t\thtml: labelHTML(label),\n\t\t\t}),\n\t\t\tnew FormPlainTextInputNode({\n\t\t\t\t...formInputStyleCreateDefaults,\n\t\t\t\tformInputPlaceholderColor: defaultFormInputPlaceholderColor,\n\t\t\t\theight: 40,\n\t\t\t\theightType: DimensionType.FixedNumber,\n\t\t\t\twidth: 1,\n\t\t\t\twidthType: DimensionType.FractionOfFreeSpace,\n\t\t\t\tformTextInputType: type,\n\t\t\t\tformInputPlaceholder: placeholder,\n\t\t\t\tformInputName: name,\n\t\t\t\t...(hasDefaultIconColor ? { formInputIconColor: defaultAddedInputIconColor } : {}),\n\t\t\t}),\n\t\t]),\n\t})\n}\n\nexport function createCheckboxLabelBlock() {\n\treturn new FrameNode({\n\t\t...formLabelWrapperProps,\n\t\tstackDirection: \"horizontal\",\n\t\tstackAlignment: \"center\",\n\t\tchildren: new CanvasChildList([\n\t\t\tnew FormBooleanInputNode({\n\t\t\t\theight: 16,\n\t\t\t\twidth: 16,\n\t\t\t\taspectRatio: 1,\n\t\t\t\theightType: DimensionType.FixedNumber,\n\t\t\t\twidthType: DimensionType.FixedNumber,\n\t\t\t\tformBooleanInputType: \"checkbox\",\n\t\t\t\tformInputName: \"Newsletter\",\n\t\t\t\tformBooleanInputValue: false,\n\t\t\t\t...formBooleanInputStyleCreateDefaults,\n\t\t\t\t...formCheckboxCheckedEffectDefaults,\n\t\t\t\t...formCheckboxCheckedIconDefaults,\n\t\t\t}),\n\t\t\tnew RichTextNode({\n\t\t\t\theightType: DimensionType.Auto,\n\t\t\t\twidthType: DimensionType.Auto,\n\t\t\t\tuserSelect: \"none\",\n\t\t\t\thtml: labelHTML(\"Subscribe to Newsletter\"),\n\t\t\t}),\n\t\t]),\n\t})\n}\n\nfunction createRadioLabelBlock(label: string, name: string, value: string, defaultChecked: boolean = false) {\n\treturn new FrameNode({\n\t\t...formLabelWrapperProps,\n\t\tstackDirection: \"horizontal\",\n\t\tstackAlignment: \"center\",\n\t\tchildren: new CanvasChildList([\n\t\t\tnew FormBooleanInputNode({\n\t\t\t\tformBooleanInputType: \"radio\",\n\t\t\t\theight: 16,\n\t\t\t\twidth: 16,\n\t\t\t\theightType: DimensionType.FixedNumber,\n\t\t\t\twidthType: DimensionType.FixedNumber,\n\t\t\t\taspectRatio: 1,\n\t\t\t\tformInputName: name,\n\t\t\t\tformInputValue: value,\n\t\t\t\tformBooleanInputValue: defaultChecked,\n\t\t\t\t...formBooleanInputStyleCreateDefaults,\n\t\t\t\tradius: 8,\n\t\t\t\t...formRadioCheckedEffectDefaults(),\n\t\t\t}),\n\t\t\tnew RichTextNode({\n\t\t\t\theightType: DimensionType.Auto,\n\t\t\t\twidthType: DimensionType.Auto,\n\t\t\t\tuserSelect: \"none\",\n\t\t\t\thtml: labelHTML(label),\n\t\t\t}),\n\t\t]),\n\t})\n}\n\nexport function createSelectLabelBlock(): FrameNode {\n\tconst defaultSelectOption = {\n\t\t...defaultFormSelectOption(),\n\t\tvalue: \"\",\n\t\ttitle: Dictionary.SelectEllipsis,\n\t\tdisabled: true,\n\t}\n\treturn new FrameNode({\n\t\t...formLabelWrapperProps,\n\t\tchildren: new CanvasChildList([\n\t\t\tnew RichTextNode({\n\t\t\t\theightType: DimensionType.Auto,\n\t\t\t\twidthType: DimensionType.Auto,\n\t\t\t\thtml: labelHTML(\"Location\"),\n\t\t\t}),\n\t\t\tnew FormSelectNode({\n\t\t\t\t...formSelectStyleCreateDefaults,\n\t\t\t\tformInputRequired: true,\n\t\t\t\tformInputName: \"Location\",\n\t\t\t\tformInputInvalidTextColor: defaultFormInputInvalidTextColor,\n\t\t\t\theight: 40,\n\t\t\t\theightType: DimensionType.FixedNumber,\n\t\t\t\twidth: 1,\n\t\t\t\twidthType: DimensionType.FractionOfFreeSpace,\n\t\t\t\tformSelectOptions: [\n\t\t\t\t\tdefaultSelectOption,\n\t\t\t\t\t{\n\t\t\t\t\t\t...defaultFormSelectOption(),\n\t\t\t\t\t\tvalue: \"amsterdam\",\n\t\t\t\t\t\ttitle: \"Amsterdam\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...defaultFormSelectOption(),\n\t\t\t\t\t\tvalue: \"barcelona\",\n\t\t\t\t\t\ttitle: \"Barcelona\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tformInputValue: defaultSelectOption.id,\n\t\t\t}),\n\t\t]),\n\t})\n}\n\nexport function createRadioGroup() {\n\treturn new FrameNode({\n\t\tlayout: \"stack\",\n\t\tgap: 10,\n\t\tname: \"Radio Group\",\n\t\tstackDirection: \"vertical\",\n\t\tstackDistribution: \"start\",\n\t\tstackAlignment: \"start\",\n\t\theightType: DimensionType.Auto,\n\t\twidthType: DimensionType.FractionOfFreeSpace,\n\t\twidth: 1,\n\t\tpadding: 0,\n\t\tpaddingPerSide: false,\n\t\tfillEnabled: false,\n\t\tchildren: new CanvasChildList([\n\t\t\tnew RichTextNode({\n\t\t\t\theightType: DimensionType.Auto,\n\t\t\t\twidthType: DimensionType.Auto,\n\t\t\t\thtml: `<p style=\"--framer-font-family: &quot;Inter&quot;, &quot;Inter Placeholder&quot;, sans-serif; --framer-font-weight: 500; --font-selector: SW50ZXItTWVkaXVt; --framer-text-color: rgb(136, 136, 136); --framer-font-size: 12px;\">Radio</p>`,\n\t\t\t}),\n\t\t\tcreateRadioLabelBlock(\"Option 1\", \"Radio\", \"Option 1\", true),\n\t\t\tcreateRadioLabelBlock(\"Option 2\", \"Radio\", \"Option 2\"),\n\t\t\tcreateRadioLabelBlock(\"Option 3\", \"Radio\", \"Option 3\"),\n\t\t]),\n\t})\n}\n\nexport const formIntrinsicSize: Size = {\n\twidth: 280,\n\t/**\n\t * Height is a magic number based on the height of all of the form inputs.\n\t * If adding more form inputs, or changing the padding/gap of the form, this\n\t * value will need to be updated.\n\t */\n\theight: 333,\n}\n\n/**\n * generateFormContainerNode generates a form builder with a stack layout and\n * some placeholder inputs and a submit button.\n *\n * If changing the size of the form, update the intrinsic size above.\n */\nexport async function generateFormContainerNode(engine: VekterEngine): Promise<FrameNode & WithFormContainer> {\n\tconst buttonId = randomID()\n\n\tconst form = new FrameNode({\n\t\tisFormContainer: true,\n\t\tformSubmitButtonId: buttonId,\n\t\tlayout: \"stack\",\n\t\tgap: 20,\n\t\twidth: formIntrinsicSize.width,\n\t\twidthType: DimensionType.FixedNumber,\n\t\theightType: DimensionType.Auto,\n\t\tstackDirection: \"vertical\",\n\t\tpaddingPerSide: false,\n\t\tpadding: 20,\n\t\tstackDistribution: \"start\",\n\t\toverflow: \"hidden\",\n\t\tstackAlignment: \"start\",\n\t\tfillEnabled: false,\n\t\tchildren: new CanvasChildList([\n\t\t\tcreateInputLabelBlock({\n\t\t\t\tlabel: \"Name\",\n\t\t\t\ttype: \"text\",\n\t\t\t\tplaceholder: \"Jane Smith\",\n\t\t\t\tname: \"Name\",\n\t\t\t}),\n\t\t\tcreateInputLabelBlock({\n\t\t\t\tlabel: \"Email\",\n\t\t\t\ttype: \"email\",\n\t\t\t\tplaceholder: \"jane@framer.com\",\n\t\t\t\tname: \"Email\",\n\t\t\t}),\n\t\t\tcreateSelectLabelBlock(),\n\t\t]),\n\t})\n\n\t// Get the submit button identifier without blocking the UI from updating on\n\t// drag.\n\tcreateAndInsertFormSubmitButton(engine, form, buttonId)\n\n\treturn form\n}\n\nexport function createAndInsertFormSubmitButton(\n\tengine: VekterEngine,\n\tform: CanvasNode & WithFormContainer,\n\tbuttonId: NodeID,\n) {\n\tgetSubmitButtonIdentifier(engine)\n\t\t.then(codeComponentIdentifier => {\n\t\t\tconst button = createFormSubmitButton(buttonId, codeComponentIdentifier)\n\n\t\t\t// If the promise resolves before the layer has been dropped on the canvas, we can just add the button to the form.\n\t\t\tif (!engine.tree.has(form.id)) {\n\t\t\t\tform.addChild(button)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// However if the layer has been dropped, then we need to wait for rendering to complete, and add it via the tree.\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\tengine.tree.insertNode(button, form.id)\n\t\t\t})\n\t\t})\n\t\t.catch(unhandledError)\n}\n\nfunction createFormSubmitButton(id: NodeID, codeComponentIdentifier: string | undefined) {\n\treturn new CodeComponentNode({\n\t\tid,\n\t\twidthType: DimensionType.FractionOfFreeSpace,\n\t\theightType: DimensionType.FixedNumber,\n\t\twidth: 1,\n\t\theight: 40,\n\t\tcodeComponentIdentifier,\n\t\t// Hardcode the form variants to values known from the source.\n\t\tformButtonSuccessVariant: \"kkGSMI0fp\",\n\t\tformButtonSuccessVariantEnabled: true,\n\t\tformButtonPendingVariant: \"zNkuqWxeD\",\n\t\tformButtonPendingVariantEnabled: true,\n\t\tslotsAreChildNodes: experiments.isOn(\"componentSlotsAreChildNodes\"),\n\t})\n}\n\nexport function generateTickerEffectNode(engine: VekterEngine): FrameNode {\n\tconst stackLayoutDefaults = getStackLayoutPreset(\"horizontal\", false, engine)\n\tconst ticker = new FrameNode({\n\t\twidth: 450,\n\t\theightType: DimensionType.Auto,\n\t\t...stackLayoutDefaults,\n\t\t...tickerEffectEnabledDefaults,\n\t\ttickerEffectVelocity: 50,\n\t\tfillEnabled: false,\n\t\toverflow: \"clip\",\n\t\tradius: 10,\n\t})\n\tconst shapeFill = \"rgba(136, 136, 136, 0.1)\"\n\tconst frameFill = \"rgba(187, 187, 187, 0.1)\"\n\tconst frameDefaults = {\n\t\twidth: 200,\n\t\theight: 200,\n\t\t...stackLayoutDefaults,\n\t\tstackDistribution: \"center\",\n\t\tfillColor: frameFill,\n\t\tfillEnabled: true,\n\t\tfillType: \"color\",\n\t\tradius: 10,\n\t} as const satisfies Partial<FrameNode>\n\n\t// Rectangle\n\tconst rectangleFrame = new FrameNode(frameDefaults)\n\trectangleFrame.addChild(\n\t\tnew RectangleShapeNode({\n\t\t\twidth: 80,\n\t\t\theight: 80,\n\t\t\tfillColor: shapeFill,\n\t\t\tradius: 8,\n\t\t}),\n\t)\n\n\t// Circle\n\tconst circleFrame = new FrameNode(frameDefaults)\n\tcircleFrame.addChild(\n\t\tnew OvalShapeNode({\n\t\t\twidth: 85,\n\t\t\theight: 85,\n\t\t\tfillColor: shapeFill,\n\t\t\tfillEnabled: true,\n\t\t\tfillType: \"color\",\n\t\t}),\n\t)\n\n\t// Triangle\n\tconst triangleFrame = new FrameNode(frameDefaults)\n\ttriangleFrame.addChild(\n\t\tnew PolygonShapeNode({\n\t\t\twidth: 113,\n\t\t\theight: 109,\n\t\t\tpolygonSides: 3,\n\t\t\tfillColor: shapeFill,\n\t\t\tfillEnabled: true,\n\t\t\tfillType: \"color\",\n\t\t\tradius: 3,\n\t\t\tcentered: true,\n\t\t}),\n\t)\n\n\tticker.addChild(rectangleFrame)\n\tticker.addChild(circleFrame)\n\tticker.addChild(triangleFrame)\n\treturn ticker\n}\n", "import { assert } from \"@framerjs/shared\"\n\ninterface StaticItem {\n\tkey: string\n}\n\nexport function getStaticItemByKey<T extends StaticItem>(items: readonly T[], key: T[\"key\"], groupName: string): T {\n\tconst item = items.find(i => i.key === key)\n\tassert(item, `Missing ${groupName} insert item with key \"${key}\".`)\n\treturn item\n}\n", "import { experiments } from \"app/experiments.ts\"\nimport { moduleComponents } from \"utils/moduleComponents.ts\"\nimport type { DataSourceItemGenerateNodes, DataSourceSection, IntegrationsDataSourceItem } from \"../../types.ts\"\nimport { getModuleIdentifierForItem } from \"../../types.ts\"\nimport agentAppleMusicImage from \"../images/agent/media/apple-music@2x.png\"\nimport agentDotLottieImage from \"../images/agent/media/dotlottie@2x.png\"\nimport agentGiphyImage from \"../images/agent/media/gif@2x.png\"\nimport agentImageImageLight from \"../images/agent/media/image-light@2x.png\"\nimport agentImageImage from \"../images/agent/media/image@2x.png\"\nimport agentMp3ImageLight from \"../images/agent/media/mp3-light@2x.png\"\nimport agentMp3Image from \"../images/agent/media/mp3@2x.png\"\nimport agentPodcastsImage from \"../images/agent/media/podcasts@2x.png\"\nimport agentSimplecastImage from \"../images/agent/media/simplecast@2x.png\"\nimport agentSoundcloudImage from \"../images/agent/media/soundcloud@2x.png\"\nimport agentSpotifyImage from \"../images/agent/media/spotify@2x.png\"\nimport agentVideoImageLight from \"../images/agent/media/video-light@2x.png\"\nimport agentVideoImage from \"../images/agent/media/video@2x.png\"\nimport appleMusicImage from \"../images/apple-music.png\"\nimport applePodcastsImage from \"../images/apple-podcasts.png\"\nimport dotLottieImage from \"../images/dotlottie.png\"\nimport giphyImage from \"../images/giphy.png\"\nimport imageImage from \"../images/image.png\"\nimport lottieImage from \"../images/lottie.png\"\nimport mp3Image from \"../images/mp3.png\"\nimport simplecastImage from \"../images/simplecast.png\"\nimport soundcloudImage from \"../images/soundcloud.png\"\nimport spotifyImage from \"../images/spotify.png\"\nimport videoImage from \"../images/video.png\"\nimport { generateImage } from \"../utils.tsx\"\nimport { getStaticItemByKey } from \"./getStaticItem.ts\"\nimport { vimeoItemModule } from \"./vimeoItem.ts\"\nimport { youtubeItemModule } from \"./youtubeItem.ts\"\n\nconst videoItemModule: IntegrationsDataSourceItem = {\n\tkey: \"video\",\n\ttitle: moduleComponents.video.title,\n\tkeywords: \"player mp4 film trailer\",\n\timage: videoImage,\n\tagentPreviewImage: agentVideoImage,\n\tagentPreviewImageLight: agentVideoImageLight,\n\tagentPreviewWidth: 60,\n\tagentPreviewHeight: 40,\n\ttint: \"#FF940D\",\n\tbackgroundLight: \"rgba(255, 150, 10, 0.15)\",\n\tbackgroundDark: \"rgba(255, 150, 10, 0.2)\",\n\tintrinsicWidth: 200,\n\tintrinsicHeight: 112,\n\tmoduleURL: moduleComponents.video.moduleURL,\n\tmoduleVersion: moduleComponents.video.moduleVersion,\n\texportSpecifier: moduleComponents.video.exportSpecifier,\n\tmoduleAvailableOnDevelopment: true,\n}\n\nexport function defaultGetVideoModuleIdentifier() {\n\tconst moduleIdentifier = getModuleIdentifierForItem(videoItemModule)\n\treturn moduleIdentifier\n}\n\ntype MediaItem = DataSourceItemGenerateNodes | IntegrationsDataSourceItem\n\nconst imageItems = [\n\t{\n\t\tkey: \"image\",\n\t\ttitle: \"Image\",\n\t\tkeywords: \"image png jpg jpeg webp photo\",\n\t\timage: imageImage,\n\t\tagentPreviewImage: agentImageImage,\n\t\tagentPreviewImageLight: agentImageImageLight,\n\t\tagentPreviewWidth: 60,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(0, 153, 255)\",\n\t\tbackgroundLight: \"rgba(0, 153, 255, 0.15)\",\n\t\tbackgroundDark: \"rgba(0, 153, 255, 0.2)\",\n\t\tintrinsicWidth: 400,\n\t\tintrinsicHeight: 300,\n\t\tfullWidth: false,\n\t\thideTitle: false,\n\t\tgenerateNodes: generateImage,\n\t},\n\t{\n\t\tkey: \"giphy\",\n\t\ttitle: \"GIF\",\n\t\tkeywords: \"gif giphy\",\n\t\timage: giphyImage,\n\t\tagentPreviewImage: agentGiphyImage,\n\t\tagentPreviewWidth: 30,\n\t\tagentPreviewHeight: 38,\n\t\ttint: \"rgb(153, 153, 153)\",\n\t\tbackgroundLight: \"rgba(0, 0, 0, 0.08)\",\n\t\tbackgroundDark: \"rgba(255, 255, 255, 0.1)\",\n\t\tintrinsicWidth: 400,\n\t\tintrinsicHeight: 300,\n\t\tmoduleURL: \"https://framer.com/m/framer/Gif.js\",\n\t\tmoduleVersion: \"1.3.0\",\n\t\texportSpecifier: \"Gif\",\n\t},\n] as const satisfies MediaItem[]\n\nconst videoItems: MediaItem[] = [videoItemModule, youtubeItemModule, vimeoItemModule]\n\nconst animationItems = [\n\t{\n\t\tkey: \"dotlottie\",\n\t\ttitle: \"Dot Lottie\",\n\t\tkeywords: \"animation lottie svg\",\n\t\timage: dotLottieImage,\n\t\tagentPreviewImage: agentDotLottieImage,\n\t\tagentPreviewWidth: 41,\n\t\tagentPreviewHeight: 41,\n\t\ttint: \"rgb(8, 221, 179)\",\n\t\tbackgroundLight: \"rgba(8, 221, 179, 0.15)\",\n\t\tbackgroundDark: \"rgba(8, 221, 179, 0.25)\",\n\t\tintrinsicWidth: 500,\n\t\tintrinsicHeight: 350,\n\t\tmoduleURL: \"https://framer.com/m/framer/DotLottie.js\",\n\t\tmoduleVersion: \"2.0.0\",\n\t\texportSpecifier: \"default\",\n\t},\n\t{\n\t\tkey: \"lottie\",\n\t\ttitle: \"Lottie\",\n\t\tkeywords: \"animation lottie svg\",\n\t\timage: lottieImage,\n\t\ttint: \"rgb(23, 200, 202)\",\n\t\tbackgroundLight: \"rgba(23, 200, 202, 0.15)\",\n\t\tbackgroundDark: \"rgba(23, 200, 202, 0.3)\",\n\t\tintrinsicWidth: 500,\n\t\tintrinsicHeight: 350,\n\t\tmoduleURL: \"https://framer.com/m/framer/Lottie.js\",\n\t\tmoduleVersion: \"1.7.0\",\n\t\texportSpecifier: \"Lottie\",\n\t},\n] as const satisfies IntegrationsDataSourceItem[]\n\nconst audioItems = [\n\t{\n\t\tkey: \"spotify\",\n\t\ttitle: \"Spotify\",\n\t\tkeywords: \"music songs artist player\",\n\t\timage: spotifyImage,\n\t\tagentPreviewImage: agentSpotifyImage,\n\t\tagentPreviewWidth: 40,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(25, 216, 92)\",\n\t\tbackgroundLight: \"rgba(25, 216, 92, 0.15)\",\n\t\tbackgroundDark: \"rgba(25, 216, 92, 0.3)\",\n\t\tintrinsicWidth: 280,\n\t\tintrinsicHeight: 350,\n\t\tmoduleURL: \"https://framer.com/m/framer/Spotify.js\",\n\t\tmoduleVersion: \"0.6.0\",\n\t\texportSpecifier: \"Spotify\",\n\t},\n\t{\n\t\t// https://beta.framer.com/projects/Apple-Podcasts--xVXl2p8UnwJkfQdZ2iYr-dqwmd?view=code%3AcodeFile%2Ft2Fn67f&node=oC2mMFqiY-page\n\t\tkey: \"apple podcasts\",\n\t\ttitle: \"Apple Podcasts\",\n\t\tagentTitle: \"Podcasts\",\n\t\tkeywords: \"music story radio\",\n\t\timage: applePodcastsImage,\n\t\tagentPreviewImage: agentPodcastsImage,\n\t\tagentPreviewWidth: 40,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(191, 62, 225)\",\n\t\tbackgroundLight: \"rgba(191, 62, 225, 0.15)\",\n\t\tbackgroundDark: \"rgba(191, 62, 225, 0.3)\",\n\t\tintrinsicWidth: 460,\n\t\tintrinsicHeight: 175,\n\t\tmoduleURL: \"https://framer.com/m/framer/apple-podcasts.js\",\n\t\tmoduleVersion: \"0.1.0\",\n\t},\n\t{\n\t\tkey: \"soundcloud\",\n\t\ttitle: \"SoundCloud\",\n\t\tkeywords: \"music songs artist player\",\n\t\timage: soundcloudImage,\n\t\tagentPreviewImage: agentSoundcloudImage,\n\t\tagentPreviewWidth: 60,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(255, 111, 15)\",\n\t\tbackgroundLight: \"rgba(255, 111, 15, 0.15)\",\n\t\tbackgroundDark: \"rgba(255, 111, 15, 0.3)\",\n\t\tintrinsicWidth: 500,\n\t\tintrinsicHeight: 300,\n\t\tmoduleURL: \"https://framer.com/m/framer/soundcloud.js#Soundcloud\",\n\t\tmoduleVersion: \"2.1.0\",\n\t\texportSpecifier: \"SoundCloud\",\n\t},\n\t{\n\t\t// https://beta.framer.com/projects/Apple-Music--4o2JyGyg0hy16YsCFjIV-7Pj5s\n\t\tkey: \"apple music\",\n\t\ttitle: \"Apple Music\",\n\t\tkeywords: \"music songs artist player\",\n\t\timage: appleMusicImage,\n\t\tagentPreviewImage: agentAppleMusicImage,\n\t\tagentPreviewWidth: 40,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(250, 38, 59)\",\n\t\tbackgroundLight: \"rgba(250, 36, 59, 0.15)\",\n\t\tbackgroundDark: \"rgba(250, 36, 59, 0.3)\",\n\t\tintrinsicWidth: 400,\n\t\tintrinsicHeight: 150,\n\t\tmoduleURL: \"https://framer.com/m/framer/apple-music.js\",\n\t\tmoduleVersion: \"0.2.0\",\n\t},\n\t{\n\t\t// https://beta.framer.com/projects/Simplecast--yybXj0sTgPwXZmD1iqpH-ANSFq?view=code%3AcodeFile%2FEqN2mbY&node=DLoA3P08v-page\n\t\tkey: \"simplecast\",\n\t\ttitle: \"Simplecast\",\n\t\tkeywords: \"podcast\",\n\t\timage: simplecastImage,\n\t\tagentPreviewImage: agentSimplecastImage,\n\t\tagentPreviewWidth: 40,\n\t\tagentPreviewHeight: 40,\n\t\ttint: \"rgb(153, 153, 153)\",\n\t\tbackgroundLight: \"rgba(0, 0, 0, 0.08)\",\n\t\tbackgroundDark: \"rgba(255, 255, 255, 0.1)\",\n\t\tintrinsicWidth: 400,\n\t\tintrinsicHeight: 200,\n\t\tmoduleURL: \"https://framer.com/m/framer/simplecast.js\",\n\t\tmoduleVersion: \"0.1.0\",\n\t},\n\t{\n\t\tkey: \"audio mp3\",\n\t\ttitle: \"MP3\",\n\t\tkeywords: \"music player\",\n\t\timage: mp3Image,\n\t\tagentPreviewImage: agentMp3Image,\n\t\tagentPreviewImageLight: agentMp3ImageLight,\n\t\tagentPreviewWidth: 72,\n\t\tagentPreviewHeight: 30,\n\t\ttint: \"rgb(153, 153, 153)\",\n\t\tbackgroundLight: \"rgba(0, 0, 0, 0.08)\",\n\t\tbackgroundDark: \"rgba(255, 255, 255, 0.1)\",\n\t\tintrinsicWidth: 240,\n\t\tintrinsicHeight: 50,\n\t\tmoduleURL: \"https://framer.com/m/framer/Audio.js\",\n\t\tmoduleVersion: \"1.10.1\",\n\t\texportSpecifier: \"Audio\",\n\t},\n] as const satisfies IntegrationsDataSourceItem[]\n\nfunction getAgentMediaItems(): MediaItem[] {\n\treturn [\n\t\tgetStaticItemByKey(imageItems, \"image\", \"image\"),\n\t\tvideoItemModule,\n\t\tyoutubeItemModule,\n\t\tgetStaticItemByKey(audioItems, \"audio mp3\", \"audio\"),\n\t\tgetStaticItemByKey(imageItems, \"giphy\", \"image\"),\n\t\tvimeoItemModule,\n\t\tgetStaticItemByKey(animationItems, \"dotlottie\", \"animation\"),\n\t\tgetStaticItemByKey(audioItems, \"spotify\", \"audio\"),\n\t\tgetStaticItemByKey(audioItems, \"apple music\", \"audio\"),\n\t\tgetStaticItemByKey(audioItems, \"soundcloud\", \"audio\"),\n\t\tgetStaticItemByKey(audioItems, \"apple podcasts\", \"audio\"),\n\t\tgetStaticItemByKey(audioItems, \"simplecast\", \"audio\"),\n\t]\n}\n\nexport function getMediaItems(agentExperimentEnabled = experiments.isOn(\"agent\")): DataSourceSection<MediaItem>[] {\n\treturn agentExperimentEnabled\n\t\t? [{ sectionTitle: undefined, items: getAgentMediaItems() }]\n\t\t: [\n\t\t\t{ sectionTitle: \"Image\", items: imageItems },\n\t\t\t{ sectionTitle: \"Video\", items: videoItems },\n\t\t\t{ sectionTitle: \"Animation\", items: animationItems },\n\t\t\t{ sectionTitle: \"Audio\", items: audioItems },\n\t\t]\n}\n", "import { hostInfo } from \"@framerjs/shared\"\nimport { moduleComponents } from \"utils/moduleComponents.ts\"\nimport type { DataSourceItem } from \"../../types.ts\"\nimport agentCarouselImageLight from \"../images/agent/interactive/carousel-light@2x.png\"\nimport agentCarouselImage from \"../images/agent/interactive/carousel@2x.png\"\nimport agentCookieBannerImageLight from \"../images/agent/interactive/cookie-banner-light@2x.png\"\nimport agentCookieBannerImage from \"../images/agent/interactive/cookie-banner@2x.png\"\nimport agentLocaleImageLight from \"../images/agent/interactive/locale-light@2x.png\"\nimport agentLocaleImage from \"../images/agent/interactive/locale@2x.png\"\nimport agentSearchImageLight from \"../images/agent/interactive/search-light@2x.png\"\nimport agentSearchImage from \"../images/agent/interactive/search@2x.png\"\nimport agentSlideshowImageLight from \"../images/agent/interactive/slideshow-light@2x.png\"\nimport agentSlideshowImage from \"../images/agent/interactive/slideshow@2x.png\"\nimport agentTickerImageLight from \"../images/agent/interactive/ticker-light@2x.png\"\nimport agentTickerImage from \"../images/agent/interactive/ticker@2x.png\"\nimport CarouselImage from \"../images/carousel.png\"\nimport CookieImage from \"../images/cookie-banner.png\"\nimport localeSelectorImage from \"../images/locale-selector.png\"\nimport searchImage from \"../images/search.png\"\nimport slideshowImage from \"../images/slideshow.png\"\nimport tickerImage from \"../images/ticker.png\"\nimport { generateTickerEffectNode } from \"../utils.tsx\"\n\nconst localeSelectorComponent: DataSourceItem = {\n\t// https://framer.com/projects/Locale-Selector--24lF8g09rvUdA558IqVI-fE159\n\tkey: \"locale-selector\",\n\ttitle: moduleComponents.localeSelector.title,\n\tkeywords: \"language locale localization translation picker selector\",\n\timage: localeSelectorImage,\n\tagentPreviewImage: agentLocaleImage,\n\tagentPreviewImageLight: agentLocaleImageLight,\n\tagentPreviewWidth: 62,\n\tagentPreviewHeight: 24,\n\ttint: \"#44DDDD\",\n\tbackgroundLight: \"rgba(68, 221, 221, 0.15)\",\n\tbackgroundDark: \"rgba(68, 221, 221, 0.2)\",\n\tintrinsicWidth: 120,\n\tintrinsicHeight: 34,\n\tfullWidth: true,\n\tmoduleURL: moduleComponents.localeSelector.moduleURL,\n\tmoduleVersion: moduleComponents.localeSelector.moduleVersion,\n\tmoduleAvailableOnDevelopment: true,\n}\n\n// This is the moduleId for the published `Search` component in production and\n// development. It is used in the treeIndex to store whether the search\n// component is in use in the project and show corresponding upsells. If the\n// searchComponent changes to a different module in the future, update this\n// moduleId to the new modules.\nexport const searchComponentModuleId = hostInfo.isDevelopment ? \"An0UANtQVLDyjlmK1idl\" : \"6wAE2eMb2Tl3zrU7u4UL\"\nconst searchComponent: DataSourceItem = {\n\t// https://framer.com/projects/Site-Search--qikTnr1J32LPKuIq4Wsv-4vfZK\n\tkey: \"search\",\n\ttitle: moduleComponents.search.title,\n\tkeywords: \"search searchbar\",\n\timage: searchImage,\n\tagentPreviewImage: agentSearchImage,\n\tagentPreviewImageLight: agentSearchImageLight,\n\tagentPreviewWidth: 62,\n\tagentPreviewHeight: 24,\n\ttint: \"#00CCFF\",\n\tbackgroundLight: \"rgba(0, 204, 255, 0.15)\",\n\tbackgroundDark: \"rgba(0, 204, 255, 0.2)\",\n\tintrinsicWidth: 40,\n\tintrinsicHeight: 40,\n\tfullWidth: true,\n\tmoduleURL: moduleComponents.search.moduleURL,\n\tmoduleVersion: moduleComponents.search.moduleVersion,\n\tmoduleAvailableOnDevelopment: true,\n\tcursor: \"pointer\",\n}\n\nconst cookieBannerComponent: DataSourceItem = {\n\tkey: \"cookie-banner\",\n\ttitle: \"Cookie Banner\",\n\tkeywords: \"cookie cookies banner gdpr\",\n\timage: CookieImage,\n\tagentPreviewImage: agentCookieBannerImage,\n\tagentPreviewImageLight: agentCookieBannerImageLight,\n\tagentPreviewWidth: 62,\n\tagentPreviewHeight: 42,\n\ttint: \"#0099FF\",\n\tbackgroundLight: \"rgba(0, 153, 255, 0.15)\",\n\tbackgroundDark: \"rgba(0, 153, 255, 0.3)\",\n\tintrinsicWidth: 400,\n\tintrinsicHeight: 200,\n\tfullWidth: true,\n\tmoduleURL: \"https://framer.com/m/framer/Cookies.js\",\n\tmoduleVersion: \"1.12.0\",\n}\n\nconst tickerComponent: DataSourceItem = {\n\tkey: \"ticker-effect\",\n\ttitle: \"Ticker\",\n\tkeywords: \"loop infinite animation marquee\",\n\timage: tickerImage,\n\tagentPreviewImage: agentTickerImage,\n\tagentPreviewImageLight: agentTickerImageLight,\n\tagentPreviewWidth: 115,\n\tagentPreviewHeight: 40,\n\ttint: \"#8866FF\",\n\tbackgroundLight: \"rgba(136, 102, 255, 0.1)\",\n\tbackgroundDark: \"rgba(136, 102, 255, 0.2)\",\n\tintrinsicWidth: 450,\n\tintrinsicHeight: 200,\n\thideTitle: false,\n\tfullWidth: true,\n\tgenerateNodes: generateTickerEffectNode,\n}\n\nconst slideshowComponent: DataSourceItem = {\n\tkey: \"slideshow\",\n\ttitle: \"Slideshow\",\n\tkeywords: \"autoplay infinite slideshow\",\n\timage: slideshowImage,\n\tagentPreviewImage: agentSlideshowImage,\n\tagentPreviewImageLight: agentSlideshowImageLight,\n\tagentPreviewWidth: 90,\n\tagentPreviewHeight: 40,\n\ttint: \"#FF8800\",\n\tbackgroundLight: \"rgba(255, 136, 0, 0.1)\",\n\tbackgroundDark: \"rgba(255, 136, 0, 0.2)\",\n\tintrinsicWidth: 400,\n\tintrinsicHeight: 200,\n\tfullWidth: true,\n\tmoduleURL: \"https://framer.com/m/framer/Slideshow.js\",\n\tmoduleVersion: \"2.0.0\",\n}\n\nconst carouselComponent: DataSourceItem = {\n\tkey: \"carousel\",\n\ttitle: \"Carousel\",\n\tkeywords: \"slides swipe\",\n\timage: CarouselImage,\n\tagentPreviewImage: agentCarouselImage,\n\tagentPreviewImageLight: agentCarouselImageLight,\n\tagentPreviewWidth: 90,\n\tagentPreviewHeight: 40,\n\ttint: \"#FFBB00\",\n\tbackgroundLight: \"rgba(255, 187, 0, 0.1)\",\n\tbackgroundDark: \"rgba(255, 187, 0, 0.2)\",\n\tintrinsicWidth: 400,\n\tintrinsicHeight: 200,\n\tfullWidth: true,\n\tmoduleURL: \"https://framer.com/m/framer/Carousel.js\",\n\tmoduleVersion: \"1.23.3\",\n}\n\nexport function getInteractiveItems(agentExperimentEnabled: boolean): DataSourceItem[] {\n\treturn agentExperimentEnabled\n\t\t? [\n\t\t\ttickerComponent,\n\t\t\tcarouselComponent,\n\t\t\tslideshowComponent,\n\t\t\tcookieBannerComponent,\n\t\t\tsearchComponent,\n\t\t\tlocaleSelectorComponent,\n\t\t]\n\t\t: [\n\t\t\tlocaleSelectorComponent,\n\t\t\tsearchComponent,\n\t\t\tcookieBannerComponent,\n\t\t\ttickerComponent,\n\t\t\tslideshowComponent,\n\t\t\tcarouselComponent,\n\t\t]\n}\n", "import type { IntegrationsDataSourceItem } from \"../../types.ts\"\nimport agentEmbedImageLight from \"../images/agent/utility/embed-light@2x.png\"\nimport agentEmbedImage from \"../images/agent/utility/embed@2x.png\"\nimport embedImage from \"../images/embed.png\"\n\nexport const embed: IntegrationsDataSourceItem = {\n\tkey: \"embed\",\n\ttitle: \"Embed\",\n\tkeywords: \"iframe\",\n\timage: embedImage,\n\tagentPreviewImage: agentEmbedImage,\n\tagentPreviewImageLight: agentEmbedImageLight,\n\tagentPreviewWidth: 42,\n\tagentPreviewHeight: 42,\n\ttint: \"rgb(58, 170, 255)\",\n\tbackgroundLight: \"rgba(58, 170, 255, 0.15)\",\n\tbackgroundDark: \"rgba(58, 170, 255, 0.25)\",\n\tintrinsicWidth: 600,\n\tintrinsicHeight: 400,\n\tmoduleURL: \"https://framer.com/m/framer/Embed.js\",\n\tmoduleVersion: \"2.3.3\",\n}\n"],
  "mappings": "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",
  "names": []
}
