@madebywild/sanity-richtext-field 0.1.35 → 0.1.38

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/index.cjs CHANGED
@@ -243,13 +243,12 @@ const typeName = "wild.richtext", ColorText = styledComponents.styled.span`
243
243
  description: "Embed block video or image content.",
244
244
  icon: () => /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "\u{1F5BC}\uFE0F" }),
245
245
  fields: [sanity.defineField({
246
- title: "Wrap",
247
- name: "wrapping",
248
- type: "wild.wrapping"
249
- }), sanity.defineField({
250
246
  name: "appMedia",
251
247
  type: "wild.media",
252
248
  options: {
249
+ collapsed: !1,
250
+ collapsible: !1,
251
+ inline: !0,
253
252
  extensions: ["customOptions", "customRatio", "caption"]
254
253
  }
255
254
  })],
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/presets.tsx","../src/input.tsx","../src/types.tsx","../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/index.tsx","../src/parts/blocks/media-block.tsx","../src/parts/blocks/index.tsx","../src/parts/decorators/index.tsx","../src/parts/lists/index.tsx","../src/parts/spans/icon.tsx","../src/parts/spans/media.tsx","../src/parts/spans/index.tsx","../src/parts/styles/index.tsx","../src/parts/index.tsx","../src/index.tsx"],"sourcesContent":["import type { Presets } from \"./types\";\n\n// Presets are predefined configurations for the rich text field.\n// They allow users to quickly set up the field with common settings.\n// Users can still override these presets with custom options.\nexport const presets = {\n basic: {\n size: \"sm\",\n initiallyActive: true,\n allowedParts: [\"wild.richtext.decorator.em\", \"wild.richtext.decorator.strong\", \"wild.richtext.annotation.link\"],\n } as const,\n full: {\n size: \"lg\",\n initiallyActive: false,\n // Empty blacklist means \"enable all\".\n disallowedParts: [],\n } as const,\n} as const satisfies Presets;\n","import * as React from \"react\";\nimport type {\n ArrayOfObjectsInputProps,\n ArraySchemaType,\n BlockMarksDefinition,\n ObjectField,\n ObjectSchemaType,\n SchemaType,\n} from \"sanity\";\nimport { merge } from \"ts-deepmerge\";\nimport type { Part } from \"./parts\";\nimport { presets } from \"./presets\";\nimport type { FieldOptions, RichtextConfig, Size } from \"./types\";\n\nfunction handleListKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.options?.list;\n if (!list) return entry;\n const filteredList = list.filter((s) => findNeedle((s as { value: string }).value));\n return { ...entry, type: { ...entry.type, options: { ...entry.type.options, list: filteredList } } };\n}\n\nfunction handleOfKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.of;\n if (!list) return entry;\n const filteredOf = list.filter((a: { name: string }) => findNeedle(a.name));\n return { ...entry, type: { ...entry.type, of: filteredOf } };\n}\n\nconst sizeToHeightMap = {\n sm: \"10rem\",\n lg: \"50vh\",\n} as const satisfies Record<Size, string>;\n\nfunction RichtextInput({\n richtextConfig,\n ...props\n}: ArrayOfObjectsInputProps & {\n richtextConfig: RichtextConfig;\n}) {\n const schemaOptions = props.schemaType.options as FieldOptions | undefined;\n const presetOptions = schemaOptions?.preset ? presets[schemaOptions.preset] : {};\n\n const options = React.useMemo(() => {\n // The preset option is only used to fetch the preset options.\n // We can exclude it from the main options.\n const { preset: _, ...mainOptions } = schemaOptions ?? {};\n return merge(presetOptions, mainOptions);\n }, [schemaOptions, presetOptions]);\n\n const initiallyActive = options?.initiallyActive ?? false;\n\n // Height can either be a predefined size or a custom string value.\n // In the case of a custom string value, we use it as is.\n const height =\n options?.size && options.size in sizeToHeightMap\n ? sizeToHeightMap[options.size as keyof typeof sizeToHeightMap]\n : options?.size;\n\n const allowedParts = options?.allowedParts;\n const disallowedParts = options?.disallowedParts;\n if (allowedParts && disallowedParts) {\n console.warn(\n \"Wild Sanity Rich Text Field: Both `allowedParts` and `disallowedParts` are set. `allowedParts` will take precedence.\"\n );\n }\n\n const filterPartsBy = React.useCallback(\n <P extends unknown[]>(parts: P | undefined, findNeedle: (s: P[number]) => string | undefined) => {\n const filtered = parts?.filter((b) => {\n const needle = findNeedle(b) as Part | undefined;\n // This is undefined behavior. To not break user expectations, we keep the item.\n if (!needle) return true;\n if (allowedParts) return allowedParts.includes(needle);\n if (disallowedParts) return !disallowedParts.includes(needle);\n // By default the rich text field is a minimal as possible.\n return false;\n });\n\n return filtered as P;\n },\n [allowedParts, disallowedParts]\n );\n\n const enabledParts = React.useMemo(() => {\n const blocks = filterPartsBy(richtextConfig.blocks, (s) => s.name);\n const spans = filterPartsBy(richtextConfig.spans, (s) => s.name);\n const lists = filterPartsBy(richtextConfig.lists, (s) => s.value);\n const annotations = filterPartsBy(richtextConfig.annotations, (s) => s.name);\n const decorators = filterPartsBy(richtextConfig.decorators, (s) => s.value);\n const styles = filterPartsBy(richtextConfig.styles, (s) => s.value);\n\n // Always include the \"Normal\" style. It acts as a way for the users to reset the style.\n const normalizedStyles = [{ value: \"normal\", title: \"Normal\" }, ...styles];\n\n return { blocks, spans, lists, annotations, decorators, styles: normalizedStyles };\n }, [filterPartsBy]);\n\n const reshapeSchemaTypes = React.useCallback(\n (schema: ObjectSchemaType) => {\n // We only reshape the built-in block type children.\n if (schema.name !== \"block\") return schema;\n\n return {\n ...schema,\n fields: schema.fields?.map((f) => {\n const field = f as ObjectField<ArraySchemaType>;\n\n switch (field.name) {\n // Headings, Normal, Quote, etc.\n case \"style\":\n return handleListKind(field, (_) => enabledParts.styles.some((b) => b.value === _));\n // Ul, Ol, etc.\n case \"listItem\":\n return handleListKind(field, (_) => enabledParts.lists.some((b) => b.value === _));\n // Links, Colors, etc.\n case \"markDefs\":\n return handleOfKind(field, (_) => enabledParts.annotations.some((b) => b.name === _));\n // Text content.\n case \"children\": {\n // Always enable span type for text content.\n const spans = [...enabledParts.spans, { name: \"span\" }];\n const filtered = handleOfKind(field, (_) => spans.some((b) => b.name === _));\n\n return {\n ...filtered,\n type: {\n ...filtered.type,\n // Inline markers within the text content.\n of: filtered.type.of?.map((t: SchemaType) => {\n // Span is a reserved name in Sanity for text spans.\n // If the type is not a span, it means its a custom object type, so we return it as is.\n if (t.name !== \"span\") return t;\n\n const span = t as Partial<BlockMarksDefinition>;\n const annotations = span.annotations?.filter((a) => enabledParts.annotations.some((b) => b.name === a.name));\n const decorators = span.decorators?.filter((d) => enabledParts.decorators.some((b) => b.value === d.value));\n return { ...t, annotations, decorators };\n }),\n },\n };\n }\n default:\n return field;\n }\n }),\n };\n },\n [enabledParts]\n );\n\n const patchedSchemaType = React.useMemo(() => {\n const of = props.schemaType?.of;\n if (!Array.isArray(of)) return props.schemaType;\n\n // Just in case the reshaping fails, we return the original schema type.\n try {\n const filtered = of.filter((s) => {\n // A valid portabletext field must always contain the built-in block type.\n // Any other item is a custom block and must be explicitly enabled.\n return s.name === \"block\" || enabledParts.blocks.some((b) => b.name === s.name);\n });\n\n return {\n ...props.schemaType,\n of: filtered.map((s) => reshapeSchemaTypes(s as ObjectSchemaType)),\n };\n } catch (e) {\n console.error(\"Wild Sanity Rich Text Field: Error while reshaping schema types.\", e);\n return props.schemaType;\n }\n }, [props.schemaType, enabledParts.blocks, reshapeSchemaTypes]);\n\n const enabledPartsCount = React.useMemo(() => {\n return Object.values(enabledParts).reduce((acc, curr) => acc + curr.length, 0);\n }, [enabledParts]);\n\n return (\n <>\n <style>{`\n [data-wild-richtext-field] [data-testid=\"pt-editor\"][data-fullscreen=\"false\"] {\n height: var(--pt-editor-height, initial);\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before,\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n font-size: 1.0em;\n display: inline-block;\n padding-top: 2px;\n color: inherit;\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before {\n content: \"•\";\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n content: counter(list-level-1) \". \";\n }\n `}</style>\n <div data-wild-richtext-field style={{ \"--pt-editor-height\": height ?? sizeToHeightMap.sm } as React.CSSProperties}>\n {props.renderDefault({\n ...props,\n initialActive: initiallyActive,\n displayInlineChanges: false,\n // If the only enabled part is a style part, its the default \"Normal\" style. No need to show the toolbar.\n hideToolbar: enabledPartsCount === 0 || (enabledPartsCount === 1 && enabledParts.styles.length === 1),\n // @ts-expect-error: schemaType.of is too narrow. The runtime type is valid.\n schemaType: patchedSchemaType,\n })}\n </div>\n </>\n );\n}\n\nexport { RichtextInput };\n","import type {\n ArrayDefinition,\n ArrayOfType,\n ArrayOptions,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockStyleDefinition,\n} from \"sanity\";\nimport type { Part } from \"./parts\";\n\n/** @public */\nexport const typeName = \"wild.richtext\" as const;\n\nexport type RichtextConfig = {\n /**\n * Custom block types to include in the richtext field.\n */\n blocks?: ArrayOfType<\"object\">[];\n /**\n * Custom inline object types to include in the richtext field.\n */\n spans?: ArrayOfType<\"object\">[];\n /**\n * Custom styles to include in the richtext field.\n */\n styles?: BlockStyleDefinition[];\n /**\n * Custom lists to include in the richtext field.\n */\n lists?: BlockListDefinition[];\n /**\n * Custom annotations to include in the richtext field.\n */\n annotations?: ArrayOfType<\"object\">[];\n /**\n * Custom decorators to include in the richtext field.\n */\n decorators?: BlockDecoratorDefinition[];\n};\n\n/** @public */\nexport type PluginConfig = RichtextConfig & {\n /**\n * Whether spell checking should be enabled in the richtext editor.\n */\n spellCheck?: boolean;\n};\n\n// Presets are collections of commonly used field options.\n// They allow to quickly set up the richtext field with a predefined set of options.\n// Users can still override individual options when using a preset.\ntype Preset = Omit<FieldOptions, keyof ArrayOptions | \"preset\">;\nexport type Presets = Record<\"basic\" | \"full\", Preset>;\n\nexport type Size = \"sm\" | \"lg\";\n\n// The user can provide custom parts as strings, so we need to allow for that.\n// But we also want to provide type safety for the known parts.\ntype MaybePart = Part | (string & {});\ntype MaybeSize = Size | (string & {});\n\n/** @public */\nexport type FieldOptions = ArrayOptions & {\n /**\n * Size of the editor field.\n * This will affect the height of the editor in the Sanity studio.\n */\n size?: MaybeSize;\n /**\n * Preset configuration for the richtext field.\n * Presets are predefined sets of options that can be applied to the field.\n */\n preset?: keyof Presets;\n /**\n * Whether the portable text component is active immediately on page load.\n */\n initiallyActive?: boolean;\n /**\n * Blacklist parts by their name.\n */\n allowedParts?: MaybePart[];\n /**\n * Whitelist parts by their name.\n */\n disallowedParts?: MaybePart[];\n};\n\n// Add the custom field definition to Sanity's intrinsic definitions\n// so that type checking works correctly when using this field type.\ndeclare module \"sanity\" {\n export interface IntrinsicDefinitions {\n [typeName]: Omit<ArrayDefinition, \"type\" | \"of\" | \"options\"> & {\n type: typeof typeName;\n options?: FieldOptions;\n };\n }\n}\n","import { defineField } from \"sanity\";\nimport { styled } from \"styled-components\";\nimport { typeName } from \"../../types\";\n\nconst ColorText = styled.span<{ color?: string }>`\n & > span {\n background-color: inherit;\n border-bottom: unset;\n color: ${({ color = \"inherit\" }) => color};\n }\n`;\n\nexport const textColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.textColor`,\n title: \"Text Color\",\n icon: () => <>🖋</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorText color={color}>{props.renderDefault(props)}</ColorText>;\n },\n },\n});\n\nconst ColorBg = styled.span<{ color?: string }>`\n & > span {\n background-color: ${({ color = \"inherit\" }) => color};\n border-bottom: unset;\n color: inherit;\n }\n`;\n\nexport const highlightColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.highlightColor`,\n title: \"Highlight Color\",\n icon: () => <>🖍</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorBg color={color}>{props.renderDefault(props)}</ColorBg>;\n },\n },\n});\n","import { LinkIcon } from \"@sanity/icons\";\nimport { defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const link = defineField({\n type: \"wild.link\",\n name: `${typeName}.annotation.link`,\n title: \"Link\",\n icon: LinkIcon,\n options: {\n collapsed: false,\n collapsible: false,\n },\n});\n","import { highlightColor, textColor } from \"./color\";\nimport { link } from \"./link\";\n\nexport const annotations = {\n link,\n textColor,\n highlightColor,\n} as const;\n","import { prepareMediaPreview, selectMediaPreview } from \"@madebywild/sanity-media-field\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.block.media`,\n type: \"object\",\n title: \"Media Block\",\n description: \"Embed block video or image content.\",\n icon: () => <>🖼️</>,\n fields: [\n defineField({\n title: \"Wrap\",\n name: \"wrapping\",\n type: \"wild.wrapping\",\n }),\n defineField({\n name: \"appMedia\",\n type: \"wild.media\",\n options: {\n extensions: [\"customOptions\", \"customRatio\", \"caption\"],\n },\n }),\n ],\n preview: {\n select: selectMediaPreview(\"appMedia\"),\n prepare: (props) => prepareMediaPreview(props),\n },\n});\n","import { media } from \"./media-block\";\n\nexport const blocks = {\n media,\n} as const;\n","import { BoldIcon, CodeIcon, ItalicIcon } from \"@sanity/icons\";\nimport type { BlockDecoratorDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst strong = {\n title: \"Strong\",\n value: `${typeName}.decorator.strong`,\n icon: BoldIcon,\n component: ({ children }) => <strong>{children}</strong>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst em = {\n title: \"Emphasis\",\n value: `${typeName}.decorator.em`,\n icon: ItalicIcon,\n component: ({ children }) => <em>{children}</em>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst code = {\n title: \"Code\",\n value: `${typeName}.decorator.code`,\n icon: CodeIcon,\n component: ({ children }) => <code>{children}</code>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst sup = {\n title: \"Sup\",\n value: `${typeName}.decorator.sup`,\n icon: () => <sup>[1]</sup>,\n component: ({ children }) => <sup style={{ verticalAlign: \"super\" }}>{children}</sup>,\n} as const satisfies BlockDecoratorDefinition;\n\nexport const decorators = {\n strong,\n em,\n code,\n sup,\n} as const;\n","import { OlistIcon, UlistIcon } from \"@sanity/icons\";\nimport type { BlockListDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst bullet = {\n title: \"Bullet\",\n value: `${typeName}.list.bullet`,\n icon: UlistIcon,\n} as const satisfies BlockListDefinition;\n\nconst number = {\n title: \"Number\",\n value: `${typeName}.list.number`,\n icon: OlistIcon,\n} as const satisfies BlockListDefinition;\n\nexport const lists = {\n bullet,\n number,\n} as const;\n","import * as React from \"react\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const icon = defineArrayMember({\n name: `${typeName}.span.icon`,\n type: \"object\",\n title: \"Icon\",\n description: \"Insert an icon.\",\n icon: () => <>🧿</>,\n fields: [defineField({ name: \"icon\", type: \"wild.icon\" })],\n components: {\n // This is the inline-preview in the PortableText editor.\n // It gets its props from the prepare function below.\n preview: (props) => {\n return React.isValidElement(props.media) ? props.media : props.fallbackTitle;\n },\n },\n preview: {\n select: {\n icon: \"icon\",\n },\n prepare({ icon }) {\n return {\n media: (\n <span role=\"img\" className=\"inline-block size-[1em] shrink-0 text-current\" title={icon ?? \"Icon\"}>\n 🧿\n </span>\n ),\n };\n },\n },\n});\n","import { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.span.media`,\n type: \"object\",\n title: \"Inline Media\",\n description: \"Embed inline video or image content.\",\n icon: () => <>🫧</>,\n fields: [\n defineField({\n name: \"media\",\n type: \"wild.media\",\n }),\n ],\n components: {\n // This is the inline-preview in the PortableText editor.\n preview: (props) => {\n const icons = {\n video: <>🎥</>,\n image: <>🖼️</>,\n lottie: <>🌀</>,\n rive: <>🍭</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.type as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n type: \"media.type\",\n },\n },\n});\n","import { icon } from \"./icon\";\nimport { media } from \"./media\";\n\nexport const spans = {\n icon,\n media,\n} as const;\n","import type { BlockStyleDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst h2 = {\n title: \"Heading 2\",\n value: `${typeName}.style.h2`,\n component: ({ children }) => (\n <h2\n style={{\n fontSize: \"2.0625rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(41 / 33)\",\n }}\n >\n {children}\n </h2>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h3 = {\n title: \"Heading 3\",\n value: `${typeName}.style.h3`,\n component: ({ children }) => (\n <h3\n style={{\n fontSize: \"1.6875rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(35 / 27)\",\n }}\n >\n {children}\n </h3>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h4 = {\n title: \"Heading 4\",\n value: `${typeName}.style.h4`,\n component: ({ children }) => (\n <h4\n style={{\n fontSize: \"1.3125rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(29 / 21)\",\n }}\n >\n {children}\n </h4>\n ),\n} as const satisfies BlockStyleDefinition;\n\nexport const styles = {\n h2,\n h3,\n h4,\n} as const;\n","import { annotations } from \"./annotations\";\nimport { blocks } from \"./blocks\";\nimport { decorators } from \"./decorators\";\nimport { lists } from \"./lists\";\nimport { spans } from \"./spans\";\nimport { styles } from \"./styles\";\n\nconst parts = {\n annotations,\n blocks,\n decorators,\n lists,\n spans,\n styles,\n} as const;\n\ntype Parts = typeof parts;\ntype Part =\n | Parts[\"annotations\"][keyof Parts[\"annotations\"]][\"name\"]\n | Parts[\"blocks\"][keyof Parts[\"blocks\"]][\"name\"]\n | Parts[\"decorators\"][keyof Parts[\"decorators\"]][\"value\"]\n | Parts[\"lists\"][keyof Parts[\"lists\"]][\"value\"]\n | Parts[\"spans\"][keyof Parts[\"spans\"]][\"name\"]\n | Parts[\"styles\"][keyof Parts[\"styles\"]][\"value\"];\n\nexport { parts, type Part };\n","import type { ArrayOfObjectsInputProps } from \"sanity\";\nimport { defineArrayMember, definePlugin, defineType } from \"sanity\";\nimport { RichtextInput } from \"./input\";\nimport { parts } from \"./parts\";\nimport { type FieldOptions, type PluginConfig, typeName } from \"./types\";\n\n/** @public */\nconst wildSanityRichtextFieldPlugin = definePlugin<PluginConfig>((config) => {\n const userSpans = config?.spans ?? [];\n const userLists = config?.lists ?? [];\n const userBlocks = config?.blocks ?? [];\n const userStyles = config?.styles ?? [];\n const userDecorators = config?.decorators ?? [];\n const userAnnotations = config?.annotations ?? [];\n\n const richtextConfig = {\n blocks: [...userBlocks, ...Object.values(parts.blocks)],\n spans: [...userSpans, ...Object.values(parts.spans)],\n lists: [...userLists, ...Object.values(parts.lists)],\n styles: [...userStyles, ...Object.values(parts.styles)],\n decorators: [...userDecorators, ...Object.values(parts.decorators)],\n annotations: [...userAnnotations, ...Object.values(parts.annotations)],\n };\n\n return {\n name: \"@madebywild/sanity-richtext-field\",\n schema: {\n types: [\n defineType({\n name: typeName,\n type: \"array\",\n title: \"Rich Text\",\n description: \"Rich text content with formatting options.\",\n icon: () => <>⌨️</>,\n components: {\n input: (props: ArrayOfObjectsInputProps) => <RichtextInput richtextConfig={richtextConfig} {...props} />,\n },\n of: [\n ...richtextConfig.blocks,\n defineArrayMember({\n type: \"block\",\n options: {\n spellCheck: config?.spellCheck ?? true,\n unstable_whitespaceOnPasteMode: \"normalize\",\n },\n of: richtextConfig.spans,\n styles: richtextConfig.styles,\n lists: richtextConfig.lists,\n marks: {\n annotations: richtextConfig.annotations,\n decorators: richtextConfig.decorators,\n },\n }),\n ],\n }),\n ],\n },\n };\n});\n\nexport { wildSanityRichtextFieldPlugin, typeName, type PluginConfig, type FieldOptions };\n"],"names":["presets","basic","size","initiallyActive","allowedParts","full","disallowedParts","handleListKind","entry","findNeedle","list","type","options","filteredList","filter","s","value","handleOfKind","of","filteredOf","a","name","sizeToHeightMap","sm","lg","RichtextInput","richtextConfig","props","schemaOptions","schemaType","presetOptions","preset","React","useMemo","_","mainOptions","merge","height","console","warn","filterPartsBy","useCallback","parts","b","needle","includes","enabledParts","blocks","spans","lists","annotations","decorators","styles","normalizedStyles","title","reshapeSchemaTypes","schema","fields","map","f","field","some","filtered","t","span","d","patchedSchemaType","Array","isArray","e","error","enabledPartsCount","Object","values","reduce","acc","curr","length","jsxs","Fragment","jsx","renderDefault","initialActive","displayInlineChanges","hideToolbar","typeName","ColorText","styled","color","textColor","defineField","icon","components","annotation","ColorBg","highlightColor","link","LinkIcon","collapsed","collapsible","media","defineArrayMember","description","extensions","preview","select","selectMediaPreview","prepare","prepareMediaPreview","strong","BoldIcon","component","children","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","bullet","UlistIcon","number","OlistIcon","isValidElement","fallbackTitle","video","image","lottie","rive","h2","fontSize","fontWeight","lineHeight","h3","h4","wildSanityRichtextFieldPlugin","definePlugin","config","userSpans","userLists","userBlocks","userStyles","userDecorators","userAnnotations","types","defineType","input","spellCheck","unstable_whitespaceOnPasteMode","marks"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/presets.tsx","../src/input.tsx","../src/types.tsx","../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/index.tsx","../src/parts/blocks/media-block.tsx","../src/parts/blocks/index.tsx","../src/parts/decorators/index.tsx","../src/parts/lists/index.tsx","../src/parts/spans/icon.tsx","../src/parts/spans/media.tsx","../src/parts/spans/index.tsx","../src/parts/styles/index.tsx","../src/parts/index.tsx","../src/index.tsx"],"sourcesContent":["import type { Presets } from \"./types\";\n\n// Presets are predefined configurations for the rich text field.\n// They allow users to quickly set up the field with common settings.\n// Users can still override these presets with custom options.\nexport const presets = {\n basic: {\n size: \"sm\",\n initiallyActive: true,\n allowedParts: [\"wild.richtext.decorator.em\", \"wild.richtext.decorator.strong\", \"wild.richtext.annotation.link\"],\n } as const,\n full: {\n size: \"lg\",\n initiallyActive: false,\n // Empty blacklist means \"enable all\".\n disallowedParts: [],\n } as const,\n} as const satisfies Presets;\n","import * as React from \"react\";\nimport type {\n ArrayOfObjectsInputProps,\n ArraySchemaType,\n BlockMarksDefinition,\n ObjectField,\n ObjectSchemaType,\n SchemaType,\n} from \"sanity\";\nimport { merge } from \"ts-deepmerge\";\nimport type { Part } from \"./parts\";\nimport { presets } from \"./presets\";\nimport type { FieldOptions, RichtextConfig, Size } from \"./types\";\n\nfunction handleListKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.options?.list;\n if (!list) return entry;\n const filteredList = list.filter((s) => findNeedle((s as { value: string }).value));\n return { ...entry, type: { ...entry.type, options: { ...entry.type.options, list: filteredList } } };\n}\n\nfunction handleOfKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.of;\n if (!list) return entry;\n const filteredOf = list.filter((a: { name: string }) => findNeedle(a.name));\n return { ...entry, type: { ...entry.type, of: filteredOf } };\n}\n\nconst sizeToHeightMap = {\n sm: \"10rem\",\n lg: \"50vh\",\n} as const satisfies Record<Size, string>;\n\nfunction RichtextInput({\n richtextConfig,\n ...props\n}: ArrayOfObjectsInputProps & {\n richtextConfig: RichtextConfig;\n}) {\n const schemaOptions = props.schemaType.options as FieldOptions | undefined;\n const presetOptions = schemaOptions?.preset ? presets[schemaOptions.preset] : {};\n\n const options = React.useMemo(() => {\n // The preset option is only used to fetch the preset options.\n // We can exclude it from the main options.\n const { preset: _, ...mainOptions } = schemaOptions ?? {};\n return merge(presetOptions, mainOptions);\n }, [schemaOptions, presetOptions]);\n\n const initiallyActive = options?.initiallyActive ?? false;\n\n // Height can either be a predefined size or a custom string value.\n // In the case of a custom string value, we use it as is.\n const height =\n options?.size && options.size in sizeToHeightMap\n ? sizeToHeightMap[options.size as keyof typeof sizeToHeightMap]\n : options?.size;\n\n const allowedParts = options?.allowedParts;\n const disallowedParts = options?.disallowedParts;\n if (allowedParts && disallowedParts) {\n console.warn(\n \"Wild Sanity Rich Text Field: Both `allowedParts` and `disallowedParts` are set. `allowedParts` will take precedence.\"\n );\n }\n\n const filterPartsBy = React.useCallback(\n <P extends unknown[]>(parts: P | undefined, findNeedle: (s: P[number]) => string | undefined) => {\n const filtered = parts?.filter((b) => {\n const needle = findNeedle(b) as Part | undefined;\n // This is undefined behavior. To not break user expectations, we keep the item.\n if (!needle) return true;\n if (allowedParts) return allowedParts.includes(needle);\n if (disallowedParts) return !disallowedParts.includes(needle);\n // By default the rich text field is a minimal as possible.\n return false;\n });\n\n return filtered as P;\n },\n [allowedParts, disallowedParts]\n );\n\n const enabledParts = React.useMemo(() => {\n const blocks = filterPartsBy(richtextConfig.blocks, (s) => s.name);\n const spans = filterPartsBy(richtextConfig.spans, (s) => s.name);\n const lists = filterPartsBy(richtextConfig.lists, (s) => s.value);\n const annotations = filterPartsBy(richtextConfig.annotations, (s) => s.name);\n const decorators = filterPartsBy(richtextConfig.decorators, (s) => s.value);\n const styles = filterPartsBy(richtextConfig.styles, (s) => s.value);\n\n // Always include the \"Normal\" style. It acts as a way for the users to reset the style.\n const normalizedStyles = [{ value: \"normal\", title: \"Normal\" }, ...styles];\n\n return { blocks, spans, lists, annotations, decorators, styles: normalizedStyles };\n }, [filterPartsBy]);\n\n const reshapeSchemaTypes = React.useCallback(\n (schema: ObjectSchemaType) => {\n // We only reshape the built-in block type children.\n if (schema.name !== \"block\") return schema;\n\n return {\n ...schema,\n fields: schema.fields?.map((f) => {\n const field = f as ObjectField<ArraySchemaType>;\n\n switch (field.name) {\n // Headings, Normal, Quote, etc.\n case \"style\":\n return handleListKind(field, (_) => enabledParts.styles.some((b) => b.value === _));\n // Ul, Ol, etc.\n case \"listItem\":\n return handleListKind(field, (_) => enabledParts.lists.some((b) => b.value === _));\n // Links, Colors, etc.\n case \"markDefs\":\n return handleOfKind(field, (_) => enabledParts.annotations.some((b) => b.name === _));\n // Text content.\n case \"children\": {\n // Always enable span type for text content.\n const spans = [...enabledParts.spans, { name: \"span\" }];\n const filtered = handleOfKind(field, (_) => spans.some((b) => b.name === _));\n\n return {\n ...filtered,\n type: {\n ...filtered.type,\n // Inline markers within the text content.\n of: filtered.type.of?.map((t: SchemaType) => {\n // Span is a reserved name in Sanity for text spans.\n // If the type is not a span, it means its a custom object type, so we return it as is.\n if (t.name !== \"span\") return t;\n\n const span = t as Partial<BlockMarksDefinition>;\n const annotations = span.annotations?.filter((a) => enabledParts.annotations.some((b) => b.name === a.name));\n const decorators = span.decorators?.filter((d) => enabledParts.decorators.some((b) => b.value === d.value));\n return { ...t, annotations, decorators };\n }),\n },\n };\n }\n default:\n return field;\n }\n }),\n };\n },\n [enabledParts]\n );\n\n const patchedSchemaType = React.useMemo(() => {\n const of = props.schemaType?.of;\n if (!Array.isArray(of)) return props.schemaType;\n\n // Just in case the reshaping fails, we return the original schema type.\n try {\n const filtered = of.filter((s) => {\n // A valid portabletext field must always contain the built-in block type.\n // Any other item is a custom block and must be explicitly enabled.\n return s.name === \"block\" || enabledParts.blocks.some((b) => b.name === s.name);\n });\n\n return {\n ...props.schemaType,\n of: filtered.map((s) => reshapeSchemaTypes(s as ObjectSchemaType)),\n };\n } catch (e) {\n console.error(\"Wild Sanity Rich Text Field: Error while reshaping schema types.\", e);\n return props.schemaType;\n }\n }, [props.schemaType, enabledParts.blocks, reshapeSchemaTypes]);\n\n const enabledPartsCount = React.useMemo(() => {\n return Object.values(enabledParts).reduce((acc, curr) => acc + curr.length, 0);\n }, [enabledParts]);\n\n return (\n <>\n <style>{`\n [data-wild-richtext-field] [data-testid=\"pt-editor\"][data-fullscreen=\"false\"] {\n height: var(--pt-editor-height, initial);\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before,\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n font-size: 1.0em;\n display: inline-block;\n padding-top: 2px;\n color: inherit;\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before {\n content: \"•\";\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n content: counter(list-level-1) \". \";\n }\n `}</style>\n <div data-wild-richtext-field style={{ \"--pt-editor-height\": height ?? sizeToHeightMap.sm } as React.CSSProperties}>\n {props.renderDefault({\n ...props,\n initialActive: initiallyActive,\n displayInlineChanges: false,\n // If the only enabled part is a style part, its the default \"Normal\" style. No need to show the toolbar.\n hideToolbar: enabledPartsCount === 0 || (enabledPartsCount === 1 && enabledParts.styles.length === 1),\n // @ts-expect-error: schemaType.of is too narrow. The runtime type is valid.\n schemaType: patchedSchemaType,\n })}\n </div>\n </>\n );\n}\n\nexport { RichtextInput };\n","import type {\n ArrayDefinition,\n ArrayOfType,\n ArrayOptions,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockStyleDefinition,\n} from \"sanity\";\nimport type { Part } from \"./parts\";\n\n/** @public */\nexport const typeName = \"wild.richtext\" as const;\n\nexport type RichtextConfig = {\n /**\n * Custom block types to include in the richtext field.\n */\n blocks?: ArrayOfType<\"object\">[];\n /**\n * Custom inline object types to include in the richtext field.\n */\n spans?: ArrayOfType<\"object\">[];\n /**\n * Custom styles to include in the richtext field.\n */\n styles?: BlockStyleDefinition[];\n /**\n * Custom lists to include in the richtext field.\n */\n lists?: BlockListDefinition[];\n /**\n * Custom annotations to include in the richtext field.\n */\n annotations?: ArrayOfType<\"object\">[];\n /**\n * Custom decorators to include in the richtext field.\n */\n decorators?: BlockDecoratorDefinition[];\n};\n\n/** @public */\nexport type PluginConfig = RichtextConfig & {\n /**\n * Whether spell checking should be enabled in the richtext editor.\n */\n spellCheck?: boolean;\n};\n\n// Presets are collections of commonly used field options.\n// They allow to quickly set up the richtext field with a predefined set of options.\n// Users can still override individual options when using a preset.\ntype Preset = Omit<FieldOptions, keyof ArrayOptions | \"preset\">;\nexport type Presets = Record<\"basic\" | \"full\", Preset>;\n\nexport type Size = \"sm\" | \"lg\";\n\n// The user can provide custom parts as strings, so we need to allow for that.\n// But we also want to provide type safety for the known parts.\ntype MaybePart = Part | (string & {});\ntype MaybeSize = Size | (string & {});\n\n/** @public */\nexport type FieldOptions = ArrayOptions & {\n /**\n * Size of the editor field.\n * This will affect the height of the editor in the Sanity studio.\n */\n size?: MaybeSize;\n /**\n * Preset configuration for the richtext field.\n * Presets are predefined sets of options that can be applied to the field.\n */\n preset?: keyof Presets;\n /**\n * Whether the portable text component is active immediately on page load.\n */\n initiallyActive?: boolean;\n /**\n * Blacklist parts by their name.\n */\n allowedParts?: MaybePart[];\n /**\n * Whitelist parts by their name.\n */\n disallowedParts?: MaybePart[];\n};\n\n// Add the custom field definition to Sanity's intrinsic definitions\n// so that type checking works correctly when using this field type.\ndeclare module \"sanity\" {\n export interface IntrinsicDefinitions {\n [typeName]: Omit<ArrayDefinition, \"type\" | \"of\" | \"options\"> & {\n type: typeof typeName;\n options?: FieldOptions;\n };\n }\n}\n","import { defineField } from \"sanity\";\nimport { styled } from \"styled-components\";\nimport { typeName } from \"../../types\";\n\nconst ColorText = styled.span<{ color?: string }>`\n & > span {\n background-color: inherit;\n border-bottom: unset;\n color: ${({ color = \"inherit\" }) => color};\n }\n`;\n\nexport const textColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.textColor`,\n title: \"Text Color\",\n icon: () => <>🖋</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorText color={color}>{props.renderDefault(props)}</ColorText>;\n },\n },\n});\n\nconst ColorBg = styled.span<{ color?: string }>`\n & > span {\n background-color: ${({ color = \"inherit\" }) => color};\n border-bottom: unset;\n color: inherit;\n }\n`;\n\nexport const highlightColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.highlightColor`,\n title: \"Highlight Color\",\n icon: () => <>🖍</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorBg color={color}>{props.renderDefault(props)}</ColorBg>;\n },\n },\n});\n","import { LinkIcon } from \"@sanity/icons\";\nimport { defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const link = defineField({\n type: \"wild.link\",\n name: `${typeName}.annotation.link`,\n title: \"Link\",\n icon: LinkIcon,\n options: {\n collapsed: false,\n collapsible: false,\n },\n});\n","import { highlightColor, textColor } from \"./color\";\nimport { link } from \"./link\";\n\nexport const annotations = {\n link,\n textColor,\n highlightColor,\n} as const;\n","import { prepareMediaPreview, selectMediaPreview } from \"@madebywild/sanity-media-field\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.block.media`,\n type: \"object\",\n title: \"Media Block\",\n description: \"Embed block video or image content.\",\n icon: () => <>🖼️</>,\n fields: [\n defineField({\n name: \"appMedia\",\n type: \"wild.media\",\n options: {\n collapsed: false,\n collapsible: false,\n inline: true,\n extensions: [\"customOptions\", \"customRatio\", \"caption\"],\n },\n }),\n ],\n preview: {\n select: selectMediaPreview(\"appMedia\"),\n prepare: (props) => prepareMediaPreview(props),\n },\n});\n","import { media } from \"./media-block\";\n\nexport const blocks = {\n media,\n} as const;\n","import { BoldIcon, CodeIcon, ItalicIcon } from \"@sanity/icons\";\nimport type { BlockDecoratorDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst strong = {\n title: \"Strong\",\n value: `${typeName}.decorator.strong`,\n icon: BoldIcon,\n component: ({ children }) => <strong>{children}</strong>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst em = {\n title: \"Emphasis\",\n value: `${typeName}.decorator.em`,\n icon: ItalicIcon,\n component: ({ children }) => <em>{children}</em>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst code = {\n title: \"Code\",\n value: `${typeName}.decorator.code`,\n icon: CodeIcon,\n component: ({ children }) => <code>{children}</code>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst sup = {\n title: \"Sup\",\n value: `${typeName}.decorator.sup`,\n icon: () => <sup>[1]</sup>,\n component: ({ children }) => <sup style={{ verticalAlign: \"super\" }}>{children}</sup>,\n} as const satisfies BlockDecoratorDefinition;\n\nexport const decorators = {\n strong,\n em,\n code,\n sup,\n} as const;\n","import { OlistIcon, UlistIcon } from \"@sanity/icons\";\nimport type { BlockListDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst bullet = {\n title: \"Bullet\",\n value: `${typeName}.list.bullet`,\n icon: UlistIcon,\n} as const satisfies BlockListDefinition;\n\nconst number = {\n title: \"Number\",\n value: `${typeName}.list.number`,\n icon: OlistIcon,\n} as const satisfies BlockListDefinition;\n\nexport const lists = {\n bullet,\n number,\n} as const;\n","import * as React from \"react\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const icon = defineArrayMember({\n name: `${typeName}.span.icon`,\n type: \"object\",\n title: \"Icon\",\n description: \"Insert an icon.\",\n icon: () => <>🧿</>,\n fields: [defineField({ name: \"icon\", type: \"wild.icon\" })],\n components: {\n // This is the inline-preview in the PortableText editor.\n // It gets its props from the prepare function below.\n preview: (props) => {\n return React.isValidElement(props.media) ? props.media : props.fallbackTitle;\n },\n },\n preview: {\n select: {\n icon: \"icon\",\n },\n prepare({ icon }) {\n return {\n media: (\n <span role=\"img\" className=\"inline-block size-[1em] shrink-0 text-current\" title={icon ?? \"Icon\"}>\n 🧿\n </span>\n ),\n };\n },\n },\n});\n","import { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.span.media`,\n type: \"object\",\n title: \"Inline Media\",\n description: \"Embed inline video or image content.\",\n icon: () => <>🫧</>,\n fields: [\n defineField({\n name: \"media\",\n type: \"wild.media\",\n }),\n ],\n components: {\n // This is the inline-preview in the PortableText editor.\n preview: (props) => {\n const icons = {\n video: <>🎥</>,\n image: <>🖼️</>,\n lottie: <>🌀</>,\n rive: <>🍭</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.type as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n type: \"media.type\",\n },\n },\n});\n","import { icon } from \"./icon\";\nimport { media } from \"./media\";\n\nexport const spans = {\n icon,\n media,\n} as const;\n","import type { BlockStyleDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst h2 = {\n title: \"Heading 2\",\n value: `${typeName}.style.h2`,\n component: ({ children }) => (\n <h2\n style={{\n fontSize: \"2.0625rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(41 / 33)\",\n }}\n >\n {children}\n </h2>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h3 = {\n title: \"Heading 3\",\n value: `${typeName}.style.h3`,\n component: ({ children }) => (\n <h3\n style={{\n fontSize: \"1.6875rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(35 / 27)\",\n }}\n >\n {children}\n </h3>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h4 = {\n title: \"Heading 4\",\n value: `${typeName}.style.h4`,\n component: ({ children }) => (\n <h4\n style={{\n fontSize: \"1.3125rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(29 / 21)\",\n }}\n >\n {children}\n </h4>\n ),\n} as const satisfies BlockStyleDefinition;\n\nexport const styles = {\n h2,\n h3,\n h4,\n} as const;\n","import { annotations } from \"./annotations\";\nimport { blocks } from \"./blocks\";\nimport { decorators } from \"./decorators\";\nimport { lists } from \"./lists\";\nimport { spans } from \"./spans\";\nimport { styles } from \"./styles\";\n\nconst parts = {\n annotations,\n blocks,\n decorators,\n lists,\n spans,\n styles,\n} as const;\n\ntype Parts = typeof parts;\ntype Part =\n | Parts[\"annotations\"][keyof Parts[\"annotations\"]][\"name\"]\n | Parts[\"blocks\"][keyof Parts[\"blocks\"]][\"name\"]\n | Parts[\"decorators\"][keyof Parts[\"decorators\"]][\"value\"]\n | Parts[\"lists\"][keyof Parts[\"lists\"]][\"value\"]\n | Parts[\"spans\"][keyof Parts[\"spans\"]][\"name\"]\n | Parts[\"styles\"][keyof Parts[\"styles\"]][\"value\"];\n\nexport { parts, type Part };\n","import type { ArrayOfObjectsInputProps } from \"sanity\";\nimport { defineArrayMember, definePlugin, defineType } from \"sanity\";\nimport { RichtextInput } from \"./input\";\nimport { parts } from \"./parts\";\nimport { type FieldOptions, type PluginConfig, typeName } from \"./types\";\n\n/** @public */\nconst wildSanityRichtextFieldPlugin = definePlugin<PluginConfig>((config) => {\n const userSpans = config?.spans ?? [];\n const userLists = config?.lists ?? [];\n const userBlocks = config?.blocks ?? [];\n const userStyles = config?.styles ?? [];\n const userDecorators = config?.decorators ?? [];\n const userAnnotations = config?.annotations ?? [];\n\n const richtextConfig = {\n blocks: [...userBlocks, ...Object.values(parts.blocks)],\n spans: [...userSpans, ...Object.values(parts.spans)],\n lists: [...userLists, ...Object.values(parts.lists)],\n styles: [...userStyles, ...Object.values(parts.styles)],\n decorators: [...userDecorators, ...Object.values(parts.decorators)],\n annotations: [...userAnnotations, ...Object.values(parts.annotations)],\n };\n\n return {\n name: \"@madebywild/sanity-richtext-field\",\n schema: {\n types: [\n defineType({\n name: typeName,\n type: \"array\",\n title: \"Rich Text\",\n description: \"Rich text content with formatting options.\",\n icon: () => <>⌨️</>,\n components: {\n input: (props: ArrayOfObjectsInputProps) => <RichtextInput richtextConfig={richtextConfig} {...props} />,\n },\n of: [\n ...richtextConfig.blocks,\n defineArrayMember({\n type: \"block\",\n options: {\n spellCheck: config?.spellCheck ?? true,\n unstable_whitespaceOnPasteMode: \"normalize\",\n },\n of: richtextConfig.spans,\n styles: richtextConfig.styles,\n lists: richtextConfig.lists,\n marks: {\n annotations: richtextConfig.annotations,\n decorators: richtextConfig.decorators,\n },\n }),\n ],\n }),\n ],\n },\n };\n});\n\nexport { wildSanityRichtextFieldPlugin, typeName, type PluginConfig, type FieldOptions };\n"],"names":["presets","basic","size","initiallyActive","allowedParts","full","disallowedParts","handleListKind","entry","findNeedle","list","type","options","filteredList","filter","s","value","handleOfKind","of","filteredOf","a","name","sizeToHeightMap","sm","lg","RichtextInput","richtextConfig","props","schemaOptions","schemaType","presetOptions","preset","React","useMemo","_","mainOptions","merge","height","console","warn","filterPartsBy","useCallback","parts","b","needle","includes","enabledParts","blocks","spans","lists","annotations","decorators","styles","normalizedStyles","title","reshapeSchemaTypes","schema","fields","map","f","field","some","filtered","t","span","d","patchedSchemaType","Array","isArray","e","error","enabledPartsCount","Object","values","reduce","acc","curr","length","jsxs","Fragment","jsx","renderDefault","initialActive","displayInlineChanges","hideToolbar","typeName","ColorText","styled","color","textColor","defineField","icon","components","annotation","ColorBg","highlightColor","link","LinkIcon","collapsed","collapsible","media","defineArrayMember","description","inline","extensions","preview","select","selectMediaPreview","prepare","prepareMediaPreview","strong","BoldIcon","component","children","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","bullet","UlistIcon","number","OlistIcon","isValidElement","fallbackTitle","video","image","lottie","rive","h2","fontSize","fontWeight","lineHeight","h3","h4","wildSanityRichtextFieldPlugin","definePlugin","config","userSpans","userLists","userBlocks","userStyles","userDecorators","userAnnotations","types","defineType","input","spellCheck","unstable_whitespaceOnPasteMode","marks"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -231,13 +231,12 @@ const typeName = "wild.richtext", ColorText = styled.span`
231
231
  description: "Embed block video or image content.",
232
232
  icon: () => /* @__PURE__ */ jsx(Fragment, { children: "\u{1F5BC}\uFE0F" }),
233
233
  fields: [defineField({
234
- title: "Wrap",
235
- name: "wrapping",
236
- type: "wild.wrapping"
237
- }), defineField({
238
234
  name: "appMedia",
239
235
  type: "wild.media",
240
236
  options: {
237
+ collapsed: !1,
238
+ collapsible: !1,
239
+ inline: !0,
241
240
  extensions: ["customOptions", "customRatio", "caption"]
242
241
  }
243
242
  })],
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/presets.tsx","../src/input.tsx","../src/types.tsx","../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/index.tsx","../src/parts/blocks/media-block.tsx","../src/parts/blocks/index.tsx","../src/parts/decorators/index.tsx","../src/parts/lists/index.tsx","../src/parts/spans/icon.tsx","../src/parts/spans/media.tsx","../src/parts/spans/index.tsx","../src/parts/styles/index.tsx","../src/parts/index.tsx","../src/index.tsx"],"sourcesContent":["import type { Presets } from \"./types\";\n\n// Presets are predefined configurations for the rich text field.\n// They allow users to quickly set up the field with common settings.\n// Users can still override these presets with custom options.\nexport const presets = {\n basic: {\n size: \"sm\",\n initiallyActive: true,\n allowedParts: [\"wild.richtext.decorator.em\", \"wild.richtext.decorator.strong\", \"wild.richtext.annotation.link\"],\n } as const,\n full: {\n size: \"lg\",\n initiallyActive: false,\n // Empty blacklist means \"enable all\".\n disallowedParts: [],\n } as const,\n} as const satisfies Presets;\n","import * as React from \"react\";\nimport type {\n ArrayOfObjectsInputProps,\n ArraySchemaType,\n BlockMarksDefinition,\n ObjectField,\n ObjectSchemaType,\n SchemaType,\n} from \"sanity\";\nimport { merge } from \"ts-deepmerge\";\nimport type { Part } from \"./parts\";\nimport { presets } from \"./presets\";\nimport type { FieldOptions, RichtextConfig, Size } from \"./types\";\n\nfunction handleListKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.options?.list;\n if (!list) return entry;\n const filteredList = list.filter((s) => findNeedle((s as { value: string }).value));\n return { ...entry, type: { ...entry.type, options: { ...entry.type.options, list: filteredList } } };\n}\n\nfunction handleOfKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.of;\n if (!list) return entry;\n const filteredOf = list.filter((a: { name: string }) => findNeedle(a.name));\n return { ...entry, type: { ...entry.type, of: filteredOf } };\n}\n\nconst sizeToHeightMap = {\n sm: \"10rem\",\n lg: \"50vh\",\n} as const satisfies Record<Size, string>;\n\nfunction RichtextInput({\n richtextConfig,\n ...props\n}: ArrayOfObjectsInputProps & {\n richtextConfig: RichtextConfig;\n}) {\n const schemaOptions = props.schemaType.options as FieldOptions | undefined;\n const presetOptions = schemaOptions?.preset ? presets[schemaOptions.preset] : {};\n\n const options = React.useMemo(() => {\n // The preset option is only used to fetch the preset options.\n // We can exclude it from the main options.\n const { preset: _, ...mainOptions } = schemaOptions ?? {};\n return merge(presetOptions, mainOptions);\n }, [schemaOptions, presetOptions]);\n\n const initiallyActive = options?.initiallyActive ?? false;\n\n // Height can either be a predefined size or a custom string value.\n // In the case of a custom string value, we use it as is.\n const height =\n options?.size && options.size in sizeToHeightMap\n ? sizeToHeightMap[options.size as keyof typeof sizeToHeightMap]\n : options?.size;\n\n const allowedParts = options?.allowedParts;\n const disallowedParts = options?.disallowedParts;\n if (allowedParts && disallowedParts) {\n console.warn(\n \"Wild Sanity Rich Text Field: Both `allowedParts` and `disallowedParts` are set. `allowedParts` will take precedence.\"\n );\n }\n\n const filterPartsBy = React.useCallback(\n <P extends unknown[]>(parts: P | undefined, findNeedle: (s: P[number]) => string | undefined) => {\n const filtered = parts?.filter((b) => {\n const needle = findNeedle(b) as Part | undefined;\n // This is undefined behavior. To not break user expectations, we keep the item.\n if (!needle) return true;\n if (allowedParts) return allowedParts.includes(needle);\n if (disallowedParts) return !disallowedParts.includes(needle);\n // By default the rich text field is a minimal as possible.\n return false;\n });\n\n return filtered as P;\n },\n [allowedParts, disallowedParts]\n );\n\n const enabledParts = React.useMemo(() => {\n const blocks = filterPartsBy(richtextConfig.blocks, (s) => s.name);\n const spans = filterPartsBy(richtextConfig.spans, (s) => s.name);\n const lists = filterPartsBy(richtextConfig.lists, (s) => s.value);\n const annotations = filterPartsBy(richtextConfig.annotations, (s) => s.name);\n const decorators = filterPartsBy(richtextConfig.decorators, (s) => s.value);\n const styles = filterPartsBy(richtextConfig.styles, (s) => s.value);\n\n // Always include the \"Normal\" style. It acts as a way for the users to reset the style.\n const normalizedStyles = [{ value: \"normal\", title: \"Normal\" }, ...styles];\n\n return { blocks, spans, lists, annotations, decorators, styles: normalizedStyles };\n }, [filterPartsBy]);\n\n const reshapeSchemaTypes = React.useCallback(\n (schema: ObjectSchemaType) => {\n // We only reshape the built-in block type children.\n if (schema.name !== \"block\") return schema;\n\n return {\n ...schema,\n fields: schema.fields?.map((f) => {\n const field = f as ObjectField<ArraySchemaType>;\n\n switch (field.name) {\n // Headings, Normal, Quote, etc.\n case \"style\":\n return handleListKind(field, (_) => enabledParts.styles.some((b) => b.value === _));\n // Ul, Ol, etc.\n case \"listItem\":\n return handleListKind(field, (_) => enabledParts.lists.some((b) => b.value === _));\n // Links, Colors, etc.\n case \"markDefs\":\n return handleOfKind(field, (_) => enabledParts.annotations.some((b) => b.name === _));\n // Text content.\n case \"children\": {\n // Always enable span type for text content.\n const spans = [...enabledParts.spans, { name: \"span\" }];\n const filtered = handleOfKind(field, (_) => spans.some((b) => b.name === _));\n\n return {\n ...filtered,\n type: {\n ...filtered.type,\n // Inline markers within the text content.\n of: filtered.type.of?.map((t: SchemaType) => {\n // Span is a reserved name in Sanity for text spans.\n // If the type is not a span, it means its a custom object type, so we return it as is.\n if (t.name !== \"span\") return t;\n\n const span = t as Partial<BlockMarksDefinition>;\n const annotations = span.annotations?.filter((a) => enabledParts.annotations.some((b) => b.name === a.name));\n const decorators = span.decorators?.filter((d) => enabledParts.decorators.some((b) => b.value === d.value));\n return { ...t, annotations, decorators };\n }),\n },\n };\n }\n default:\n return field;\n }\n }),\n };\n },\n [enabledParts]\n );\n\n const patchedSchemaType = React.useMemo(() => {\n const of = props.schemaType?.of;\n if (!Array.isArray(of)) return props.schemaType;\n\n // Just in case the reshaping fails, we return the original schema type.\n try {\n const filtered = of.filter((s) => {\n // A valid portabletext field must always contain the built-in block type.\n // Any other item is a custom block and must be explicitly enabled.\n return s.name === \"block\" || enabledParts.blocks.some((b) => b.name === s.name);\n });\n\n return {\n ...props.schemaType,\n of: filtered.map((s) => reshapeSchemaTypes(s as ObjectSchemaType)),\n };\n } catch (e) {\n console.error(\"Wild Sanity Rich Text Field: Error while reshaping schema types.\", e);\n return props.schemaType;\n }\n }, [props.schemaType, enabledParts.blocks, reshapeSchemaTypes]);\n\n const enabledPartsCount = React.useMemo(() => {\n return Object.values(enabledParts).reduce((acc, curr) => acc + curr.length, 0);\n }, [enabledParts]);\n\n return (\n <>\n <style>{`\n [data-wild-richtext-field] [data-testid=\"pt-editor\"][data-fullscreen=\"false\"] {\n height: var(--pt-editor-height, initial);\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before,\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n font-size: 1.0em;\n display: inline-block;\n padding-top: 2px;\n color: inherit;\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before {\n content: \"•\";\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n content: counter(list-level-1) \". \";\n }\n `}</style>\n <div data-wild-richtext-field style={{ \"--pt-editor-height\": height ?? sizeToHeightMap.sm } as React.CSSProperties}>\n {props.renderDefault({\n ...props,\n initialActive: initiallyActive,\n displayInlineChanges: false,\n // If the only enabled part is a style part, its the default \"Normal\" style. No need to show the toolbar.\n hideToolbar: enabledPartsCount === 0 || (enabledPartsCount === 1 && enabledParts.styles.length === 1),\n // @ts-expect-error: schemaType.of is too narrow. The runtime type is valid.\n schemaType: patchedSchemaType,\n })}\n </div>\n </>\n );\n}\n\nexport { RichtextInput };\n","import type {\n ArrayDefinition,\n ArrayOfType,\n ArrayOptions,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockStyleDefinition,\n} from \"sanity\";\nimport type { Part } from \"./parts\";\n\n/** @public */\nexport const typeName = \"wild.richtext\" as const;\n\nexport type RichtextConfig = {\n /**\n * Custom block types to include in the richtext field.\n */\n blocks?: ArrayOfType<\"object\">[];\n /**\n * Custom inline object types to include in the richtext field.\n */\n spans?: ArrayOfType<\"object\">[];\n /**\n * Custom styles to include in the richtext field.\n */\n styles?: BlockStyleDefinition[];\n /**\n * Custom lists to include in the richtext field.\n */\n lists?: BlockListDefinition[];\n /**\n * Custom annotations to include in the richtext field.\n */\n annotations?: ArrayOfType<\"object\">[];\n /**\n * Custom decorators to include in the richtext field.\n */\n decorators?: BlockDecoratorDefinition[];\n};\n\n/** @public */\nexport type PluginConfig = RichtextConfig & {\n /**\n * Whether spell checking should be enabled in the richtext editor.\n */\n spellCheck?: boolean;\n};\n\n// Presets are collections of commonly used field options.\n// They allow to quickly set up the richtext field with a predefined set of options.\n// Users can still override individual options when using a preset.\ntype Preset = Omit<FieldOptions, keyof ArrayOptions | \"preset\">;\nexport type Presets = Record<\"basic\" | \"full\", Preset>;\n\nexport type Size = \"sm\" | \"lg\";\n\n// The user can provide custom parts as strings, so we need to allow for that.\n// But we also want to provide type safety for the known parts.\ntype MaybePart = Part | (string & {});\ntype MaybeSize = Size | (string & {});\n\n/** @public */\nexport type FieldOptions = ArrayOptions & {\n /**\n * Size of the editor field.\n * This will affect the height of the editor in the Sanity studio.\n */\n size?: MaybeSize;\n /**\n * Preset configuration for the richtext field.\n * Presets are predefined sets of options that can be applied to the field.\n */\n preset?: keyof Presets;\n /**\n * Whether the portable text component is active immediately on page load.\n */\n initiallyActive?: boolean;\n /**\n * Blacklist parts by their name.\n */\n allowedParts?: MaybePart[];\n /**\n * Whitelist parts by their name.\n */\n disallowedParts?: MaybePart[];\n};\n\n// Add the custom field definition to Sanity's intrinsic definitions\n// so that type checking works correctly when using this field type.\ndeclare module \"sanity\" {\n export interface IntrinsicDefinitions {\n [typeName]: Omit<ArrayDefinition, \"type\" | \"of\" | \"options\"> & {\n type: typeof typeName;\n options?: FieldOptions;\n };\n }\n}\n","import { defineField } from \"sanity\";\nimport { styled } from \"styled-components\";\nimport { typeName } from \"../../types\";\n\nconst ColorText = styled.span<{ color?: string }>`\n & > span {\n background-color: inherit;\n border-bottom: unset;\n color: ${({ color = \"inherit\" }) => color};\n }\n`;\n\nexport const textColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.textColor`,\n title: \"Text Color\",\n icon: () => <>🖋</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorText color={color}>{props.renderDefault(props)}</ColorText>;\n },\n },\n});\n\nconst ColorBg = styled.span<{ color?: string }>`\n & > span {\n background-color: ${({ color = \"inherit\" }) => color};\n border-bottom: unset;\n color: inherit;\n }\n`;\n\nexport const highlightColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.highlightColor`,\n title: \"Highlight Color\",\n icon: () => <>🖍</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorBg color={color}>{props.renderDefault(props)}</ColorBg>;\n },\n },\n});\n","import { LinkIcon } from \"@sanity/icons\";\nimport { defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const link = defineField({\n type: \"wild.link\",\n name: `${typeName}.annotation.link`,\n title: \"Link\",\n icon: LinkIcon,\n options: {\n collapsed: false,\n collapsible: false,\n },\n});\n","import { highlightColor, textColor } from \"./color\";\nimport { link } from \"./link\";\n\nexport const annotations = {\n link,\n textColor,\n highlightColor,\n} as const;\n","import { prepareMediaPreview, selectMediaPreview } from \"@madebywild/sanity-media-field\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.block.media`,\n type: \"object\",\n title: \"Media Block\",\n description: \"Embed block video or image content.\",\n icon: () => <>🖼️</>,\n fields: [\n defineField({\n title: \"Wrap\",\n name: \"wrapping\",\n type: \"wild.wrapping\",\n }),\n defineField({\n name: \"appMedia\",\n type: \"wild.media\",\n options: {\n extensions: [\"customOptions\", \"customRatio\", \"caption\"],\n },\n }),\n ],\n preview: {\n select: selectMediaPreview(\"appMedia\"),\n prepare: (props) => prepareMediaPreview(props),\n },\n});\n","import { media } from \"./media-block\";\n\nexport const blocks = {\n media,\n} as const;\n","import { BoldIcon, CodeIcon, ItalicIcon } from \"@sanity/icons\";\nimport type { BlockDecoratorDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst strong = {\n title: \"Strong\",\n value: `${typeName}.decorator.strong`,\n icon: BoldIcon,\n component: ({ children }) => <strong>{children}</strong>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst em = {\n title: \"Emphasis\",\n value: `${typeName}.decorator.em`,\n icon: ItalicIcon,\n component: ({ children }) => <em>{children}</em>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst code = {\n title: \"Code\",\n value: `${typeName}.decorator.code`,\n icon: CodeIcon,\n component: ({ children }) => <code>{children}</code>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst sup = {\n title: \"Sup\",\n value: `${typeName}.decorator.sup`,\n icon: () => <sup>[1]</sup>,\n component: ({ children }) => <sup style={{ verticalAlign: \"super\" }}>{children}</sup>,\n} as const satisfies BlockDecoratorDefinition;\n\nexport const decorators = {\n strong,\n em,\n code,\n sup,\n} as const;\n","import { OlistIcon, UlistIcon } from \"@sanity/icons\";\nimport type { BlockListDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst bullet = {\n title: \"Bullet\",\n value: `${typeName}.list.bullet`,\n icon: UlistIcon,\n} as const satisfies BlockListDefinition;\n\nconst number = {\n title: \"Number\",\n value: `${typeName}.list.number`,\n icon: OlistIcon,\n} as const satisfies BlockListDefinition;\n\nexport const lists = {\n bullet,\n number,\n} as const;\n","import * as React from \"react\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const icon = defineArrayMember({\n name: `${typeName}.span.icon`,\n type: \"object\",\n title: \"Icon\",\n description: \"Insert an icon.\",\n icon: () => <>🧿</>,\n fields: [defineField({ name: \"icon\", type: \"wild.icon\" })],\n components: {\n // This is the inline-preview in the PortableText editor.\n // It gets its props from the prepare function below.\n preview: (props) => {\n return React.isValidElement(props.media) ? props.media : props.fallbackTitle;\n },\n },\n preview: {\n select: {\n icon: \"icon\",\n },\n prepare({ icon }) {\n return {\n media: (\n <span role=\"img\" className=\"inline-block size-[1em] shrink-0 text-current\" title={icon ?? \"Icon\"}>\n 🧿\n </span>\n ),\n };\n },\n },\n});\n","import { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.span.media`,\n type: \"object\",\n title: \"Inline Media\",\n description: \"Embed inline video or image content.\",\n icon: () => <>🫧</>,\n fields: [\n defineField({\n name: \"media\",\n type: \"wild.media\",\n }),\n ],\n components: {\n // This is the inline-preview in the PortableText editor.\n preview: (props) => {\n const icons = {\n video: <>🎥</>,\n image: <>🖼️</>,\n lottie: <>🌀</>,\n rive: <>🍭</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.type as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n type: \"media.type\",\n },\n },\n});\n","import { icon } from \"./icon\";\nimport { media } from \"./media\";\n\nexport const spans = {\n icon,\n media,\n} as const;\n","import type { BlockStyleDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst h2 = {\n title: \"Heading 2\",\n value: `${typeName}.style.h2`,\n component: ({ children }) => (\n <h2\n style={{\n fontSize: \"2.0625rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(41 / 33)\",\n }}\n >\n {children}\n </h2>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h3 = {\n title: \"Heading 3\",\n value: `${typeName}.style.h3`,\n component: ({ children }) => (\n <h3\n style={{\n fontSize: \"1.6875rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(35 / 27)\",\n }}\n >\n {children}\n </h3>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h4 = {\n title: \"Heading 4\",\n value: `${typeName}.style.h4`,\n component: ({ children }) => (\n <h4\n style={{\n fontSize: \"1.3125rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(29 / 21)\",\n }}\n >\n {children}\n </h4>\n ),\n} as const satisfies BlockStyleDefinition;\n\nexport const styles = {\n h2,\n h3,\n h4,\n} as const;\n","import { annotations } from \"./annotations\";\nimport { blocks } from \"./blocks\";\nimport { decorators } from \"./decorators\";\nimport { lists } from \"./lists\";\nimport { spans } from \"./spans\";\nimport { styles } from \"./styles\";\n\nconst parts = {\n annotations,\n blocks,\n decorators,\n lists,\n spans,\n styles,\n} as const;\n\ntype Parts = typeof parts;\ntype Part =\n | Parts[\"annotations\"][keyof Parts[\"annotations\"]][\"name\"]\n | Parts[\"blocks\"][keyof Parts[\"blocks\"]][\"name\"]\n | Parts[\"decorators\"][keyof Parts[\"decorators\"]][\"value\"]\n | Parts[\"lists\"][keyof Parts[\"lists\"]][\"value\"]\n | Parts[\"spans\"][keyof Parts[\"spans\"]][\"name\"]\n | Parts[\"styles\"][keyof Parts[\"styles\"]][\"value\"];\n\nexport { parts, type Part };\n","import type { ArrayOfObjectsInputProps } from \"sanity\";\nimport { defineArrayMember, definePlugin, defineType } from \"sanity\";\nimport { RichtextInput } from \"./input\";\nimport { parts } from \"./parts\";\nimport { type FieldOptions, type PluginConfig, typeName } from \"./types\";\n\n/** @public */\nconst wildSanityRichtextFieldPlugin = definePlugin<PluginConfig>((config) => {\n const userSpans = config?.spans ?? [];\n const userLists = config?.lists ?? [];\n const userBlocks = config?.blocks ?? [];\n const userStyles = config?.styles ?? [];\n const userDecorators = config?.decorators ?? [];\n const userAnnotations = config?.annotations ?? [];\n\n const richtextConfig = {\n blocks: [...userBlocks, ...Object.values(parts.blocks)],\n spans: [...userSpans, ...Object.values(parts.spans)],\n lists: [...userLists, ...Object.values(parts.lists)],\n styles: [...userStyles, ...Object.values(parts.styles)],\n decorators: [...userDecorators, ...Object.values(parts.decorators)],\n annotations: [...userAnnotations, ...Object.values(parts.annotations)],\n };\n\n return {\n name: \"@madebywild/sanity-richtext-field\",\n schema: {\n types: [\n defineType({\n name: typeName,\n type: \"array\",\n title: \"Rich Text\",\n description: \"Rich text content with formatting options.\",\n icon: () => <>⌨️</>,\n components: {\n input: (props: ArrayOfObjectsInputProps) => <RichtextInput richtextConfig={richtextConfig} {...props} />,\n },\n of: [\n ...richtextConfig.blocks,\n defineArrayMember({\n type: \"block\",\n options: {\n spellCheck: config?.spellCheck ?? true,\n unstable_whitespaceOnPasteMode: \"normalize\",\n },\n of: richtextConfig.spans,\n styles: richtextConfig.styles,\n lists: richtextConfig.lists,\n marks: {\n annotations: richtextConfig.annotations,\n decorators: richtextConfig.decorators,\n },\n }),\n ],\n }),\n ],\n },\n };\n});\n\nexport { wildSanityRichtextFieldPlugin, typeName, type PluginConfig, type FieldOptions };\n"],"names":["presets","basic","size","initiallyActive","allowedParts","full","disallowedParts","handleListKind","entry","findNeedle","list","type","options","filteredList","filter","s","value","handleOfKind","of","filteredOf","a","name","sizeToHeightMap","sm","lg","RichtextInput","richtextConfig","props","schemaOptions","schemaType","presetOptions","preset","React","useMemo","_","mainOptions","merge","height","console","warn","filterPartsBy","useCallback","parts","b","needle","includes","enabledParts","blocks","spans","lists","annotations","decorators","styles","normalizedStyles","title","reshapeSchemaTypes","schema","fields","map","f","field","some","filtered","t","span","d","patchedSchemaType","Array","isArray","e","error","enabledPartsCount","Object","values","reduce","acc","curr","length","renderDefault","initialActive","displayInlineChanges","hideToolbar","typeName","ColorText","styled","color","textColor","defineField","icon","components","annotation","ColorBg","highlightColor","link","LinkIcon","collapsed","collapsible","media","defineArrayMember","description","extensions","preview","select","selectMediaPreview","prepare","prepareMediaPreview","strong","BoldIcon","component","children","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","bullet","UlistIcon","number","OlistIcon","isValidElement","fallbackTitle","video","image","lottie","rive","h2","fontSize","fontWeight","lineHeight","h3","h4","wildSanityRichtextFieldPlugin","definePlugin","config","userSpans","userLists","userBlocks","userStyles","userDecorators","userAnnotations","types","defineType","input","spellCheck","unstable_whitespaceOnPasteMode","marks"],"mappings":";;;;;;;AAKO,MAAMA,UAAU;AAAA,EACrBC,OAAO;AAAA,IACLC,MAAM;AAAA,IACNC,iBAAiB;AAAA,IACjBC,cAAc,CAAC,8BAA8B,kCAAkC,+BAA+B;AAAA,EAAA;AAAA,EAEhHC,MAAM;AAAA,IACJH,MAAM;AAAA,IACNC,iBAAiB;AAAA;AAAA,IAEjBG,iBAAiB,CAAA;AAAA,EAAA;AAErB;ACHA,SAASC,eAAuDC,OAAUC,YAAyC;AACjH,QAAMC,OAAOF,MAAMG,MAAMC,SAASF;AAClC,MAAI,CAACA,KAAM,QAAOF;AAClB,QAAMK,eAAeH,KAAKI,OAAQC,OAAMN,WAAYM,EAAwBC,KAAK,CAAC;AAClF,SAAO;AAAA,IAAE,GAAGR;AAAAA,IAAOG,MAAM;AAAA,MAAE,GAAGH,MAAMG;AAAAA,MAAMC,SAAS;AAAA,QAAE,GAAGJ,MAAMG,KAAKC;AAAAA,QAASF,MAAMG;AAAAA,MAAAA;AAAAA,IAAa;AAAA,EAAE;AACnG;AAEA,SAASI,aAAqDT,OAAUC,YAAyC;AAC/G,QAAMC,OAAOF,MAAMG,MAAMO;AACzB,MAAI,CAACR,KAAM,QAAOF;AAClB,QAAMW,aAAaT,KAAKI,OAAQM,OAAwBX,WAAWW,EAAEC,IAAI,CAAC;AAC1E,SAAO;AAAA,IAAE,GAAGb;AAAAA,IAAOG,MAAM;AAAA,MAAE,GAAGH,MAAMG;AAAAA,MAAMO,IAAIC;AAAAA,IAAAA;AAAAA,EAAW;AAC3D;AAEA,MAAMG,kBAAkB;AAAA,EACtBC,IAAI;AAAA,EACJC,IAAI;AACN;AAEA,SAASC,cAAc;AAAA,EACrBC;AAAAA,EACA,GAAGC;AAGL,GAAG;AACD,QAAMC,gBAAgBD,MAAME,WAAWjB,SACjCkB,gBAAgBF,eAAeG,SAAS/B,QAAQ4B,cAAcG,MAAM,IAAI,CAAA,GAExEnB,UAAUoB,MAAMC,QAAQ,MAAM;AAGlC,UAAM;AAAA,MAAEF,QAAQG;AAAAA,MAAG,GAAGC;AAAAA,IAAAA,IAAgBP,iBAAiB,CAAA;AACvD,WAAOQ,MAAMN,eAAeK,WAAW;AAAA,EACzC,GAAG,CAACP,eAAeE,aAAa,CAAC,GAE3B3B,kBAAkBS,SAAST,mBAAmB,IAI9CkC,SACJzB,SAASV,QAAQU,QAAQV,QAAQoB,kBAC7BA,gBAAgBV,QAAQV,IAAI,IAC5BU,SAASV,MAETE,eAAeQ,SAASR,cACxBE,kBAAkBM,SAASN;AAC7BF,kBAAgBE,mBAClBgC,QAAQC,KACN,sHACF;AAGF,QAAMC,gBAAgBR,MAAMS,YAC1B,CAAsBC,QAAsBjC,eACzBiC,QAAO5B,OAAQ6B,CAAAA,MAAM;AACpC,UAAMC,SAASnC,WAAWkC,CAAC;AAE3B,WAAKC,SACDxC,eAAqBA,aAAayC,SAASD,MAAM,IACjDtC,kBAAwB,CAACA,gBAAgBuC,SAASD,MAAM,IAErD,KAJa;AAAA,EAKtB,CAAC,GAIH,CAACxC,cAAcE,eAAe,CAChC,GAEMwC,eAAed,MAAMC,QAAQ,MAAM;AACvC,UAAMc,UAASP,cAAcd,eAAeqB,QAAShC,OAAMA,EAAEM,IAAI,GAC3D2B,SAAQR,cAAcd,eAAesB,OAAQjC,CAAAA,QAAMA,IAAEM,IAAI,GACzD4B,SAAQT,cAAcd,eAAeuB,OAAQlC,CAAAA,QAAMA,IAAEC,KAAK,GAC1DkC,eAAcV,cAAcd,eAAewB,aAAcnC,CAAAA,QAAMA,IAAEM,IAAI,GACrE8B,cAAaX,cAAcd,eAAeyB,YAAapC,CAAAA,QAAMA,IAAEC,KAAK,GACpEoC,UAASZ,cAAcd,eAAe0B,QAASrC,SAAMA,IAAEC,KAAK,GAG5DqC,mBAAmB,CAAC;AAAA,MAAErC,OAAO;AAAA,MAAUsC,OAAO;AAAA,IAAA,GAAY,GAAGF,OAAM;AAEzE,WAAO;AAAA,MAAEL,QAAAA;AAAAA,MAAQC,OAAAA;AAAAA,MAAOC,OAAAA;AAAAA,MAAOC,aAAAA;AAAAA,MAAaC,YAAAA;AAAAA,MAAYC,QAAQC;AAAAA,IAAAA;AAAAA,EAClE,GAAG,CAACb,aAAa,CAAC,GAEZe,qBAAqBvB,MAAMS,YAC9Be,CAAAA,WAEKA,OAAOnC,SAAS,UAAgBmC,SAE7B;AAAA,IACL,GAAGA;AAAAA,IACHC,QAAQD,OAAOC,QAAQC,IAAKC,CAAAA,MAAM;AAChC,YAAMC,QAAQD;AAEd,cAAQC,MAAMvC,MAAAA;AAAAA;AAAAA,QAEZ,KAAK;AACH,iBAAOd,eAAeqD,OAAQ1B,CAAAA,QAAMY,aAAaM,OAAOS,KAAMlB,CAAAA,QAAMA,IAAE3B,UAAUkB,GAAC,CAAC;AAAA;AAAA,QAEpF,KAAK;AACH,iBAAO3B,eAAeqD,OAAQ1B,CAAAA,QAAMY,aAAaG,MAAMY,KAAMlB,CAAAA,QAAMA,IAAE3B,UAAUkB,GAAC,CAAC;AAAA;AAAA,QAEnF,KAAK;AACH,iBAAOjB,aAAa2C,OAAQ1B,CAAAA,QAAMY,aAAaI,YAAYW,KAAMlB,CAAAA,QAAMA,IAAEtB,SAASa,GAAC,CAAC;AAAA;AAAA,QAEtF,KAAK,YAAY;AAEf,gBAAMc,UAAQ,CAAC,GAAGF,aAAaE,OAAO;AAAA,YAAE3B,MAAM;AAAA,UAAA,CAAQ,GAChDyC,aAAW7C,aAAa2C,OAAQ1B,CAAAA,QAAMc,QAAMa,KAAMlB,CAAAA,QAAMA,IAAEtB,SAASa,GAAC,CAAC;AAE3E,iBAAO;AAAA,YACL,GAAG4B;AAAAA,YACHnD,MAAM;AAAA,cACJ,GAAGmD,WAASnD;AAAAA;AAAAA,cAEZO,IAAI4C,WAASnD,KAAKO,IAAIwC,IAAKK,CAAAA,MAAkB;AAG3C,oBAAIA,EAAE1C,SAAS,OAAQ,QAAO0C;AAE9B,sBAAMC,OAAOD,GACPb,gBAAcc,KAAKd,aAAapC,OAAQM,CAAAA,MAAM0B,aAAaI,YAAYW,KAAMlB,CAAAA,QAAMA,IAAEtB,SAASD,EAAEC,IAAI,CAAC,GACrG8B,eAAaa,KAAKb,YAAYrC,OAAQmD,CAAAA,MAAMnB,aAAaK,WAAWU,KAAMlB,CAAAA,QAAMA,IAAE3B,UAAUiD,EAAEjD,KAAK,CAAC;AAC1G,uBAAO;AAAA,kBAAE,GAAG+C;AAAAA,kBAAGb,aAAAA;AAAAA,kBAAaC,YAAAA;AAAAA,gBAAAA;AAAAA,cAC9B,CAAC;AAAA,YAAA;AAAA,UACH;AAAA,QAEJ;AAAA,QACA;AACE,iBAAOS;AAAAA,MAAAA;AAAAA,IAEb,CAAC;AAAA,EAAA,GAGL,CAACd,YAAY,CACf,GAEMoB,oBAAoBlC,MAAMC,QAAQ,MAAM;AAC5C,UAAMf,KAAKS,MAAME,YAAYX;AAC7B,QAAI,CAACiD,MAAMC,QAAQlD,EAAE,UAAUS,MAAME;AAGrC,QAAI;AACF,YAAMiC,aAAW5C,GAAGJ,OAAQC,CAAAA,QAGnBA,IAAEM,SAAS,WAAWyB,aAAaC,OAAOc,KAAMlB,CAAAA,QAAMA,IAAEtB,SAASN,IAAEM,IAAI,CAC/E;AAED,aAAO;AAAA,QACL,GAAGM,MAAME;AAAAA,QACTX,IAAI4C,WAASJ,IAAK3C,CAAAA,QAAMwC,mBAAmBxC,GAAqB,CAAC;AAAA,MAAA;AAAA,IAErE,SAASsD,GAAG;AACV/B,aAAAA,QAAQgC,MAAM,oEAAoED,CAAC,GAC5E1C,MAAME;AAAAA,IACf;AAAA,EACF,GAAG,CAACF,MAAME,YAAYiB,aAAaC,QAAQQ,kBAAkB,CAAC,GAExDgB,oBAAoBvC,MAAMC,QAAQ,MAC/BuC,OAAOC,OAAO3B,YAAY,EAAE4B,OAAO,CAACC,KAAKC,SAASD,MAAMC,KAAKC,QAAQ,CAAC,GAC5E,CAAC/B,YAAY,CAAC;AAEjB,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAoBN;AAAA,IACF,oBAAC,OAAA,EAAI,4BAAwB,IAAC,OAAO;AAAA,MAAE,sBAAsBT,UAAUf,gBAAgBC;AAAAA,IAAAA,GACpFI,gBAAMmD,cAAc;AAAA,MACnB,GAAGnD;AAAAA,MACHoD,eAAe5E;AAAAA,MACf6E,sBAAsB;AAAA;AAAA,MAEtBC,aAAaV,sBAAsB,KAAMA,sBAAsB,KAAKzB,aAAaM,OAAOyB,WAAW;AAAA;AAAA,MAEnGhD,YAAYqC;AAAAA,IAAAA,CACb,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;ACzMO,MAAMgB,WAAW,iBCPlBC,YAAYC,OAAOpB;AAAAA;AAAAA;AAAAA;AAAAA,aAIZ,CAAC;AAAA,EAAEqB,QAAQ;AAAU,MAAMA,KAAK;AAAA;AAAA,GAIhCC,YAAYC,YAAY;AAAA,EACnC5E,MAAM;AAAA,EACNU,MAAM,GAAG6D,QAAQ;AAAA,EACjB5B,OAAO;AAAA,EACPkC,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,YAAA,CAAE;AAAA,EAChB/B,QAAQ,CAAC8B,YAAY;AAAA,IAAElE,MAAM;AAAA,IAASV,MAAM;AAAA,EAAA,CAAc,CAAC;AAAA,EAC3D8E,YAAY;AAAA,IACVC,YAAa/D,CAAAA,UAAU;AAErB,YAAM0D,QAAQ1D,MAAMX,OAAOqE,OAAOrE;AAClC,iCAAQ,WAAA,EAAU,OAAeW,UAAAA,MAAMmD,cAAcnD,KAAK,GAAE;AAAA,IAC9D;AAAA,EAAA;AAEJ,CAAC,GAEKgE,UAAUP,OAAOpB;AAAAA;AAAAA,wBAEC,CAAC;AAAA,EAAEqB,QAAQ;AAAU,MAAMA,KAAK;AAAA;AAAA;AAAA;AAAA,GAM3CO,iBAAiBL,YAAY;AAAA,EACxC5E,MAAM;AAAA,EACNU,MAAM,GAAG6D,QAAQ;AAAA,EACjB5B,OAAO;AAAA,EACPkC,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,YAAA,CAAE;AAAA,EAChB/B,QAAQ,CAAC8B,YAAY;AAAA,IAAElE,MAAM;AAAA,IAASV,MAAM;AAAA,EAAA,CAAc,CAAC;AAAA,EAC3D8E,YAAY;AAAA,IACVC,YAAa/D,CAAAA,UAAU;AAErB,YAAM0D,QAAQ1D,MAAMX,OAAOqE,OAAOrE;AAClC,iCAAQ,SAAA,EAAQ,OAAeW,UAAAA,MAAMmD,cAAcnD,KAAK,GAAE;AAAA,IAC5D;AAAA,EAAA;AAEJ,CAAC,GC5CYkE,OAAON,YAAY;AAAA,EAC9B5E,MAAM;AAAA,EACNU,MAAM,GAAG6D,QAAQ;AAAA,EACjB5B,OAAO;AAAA,EACPkC,MAAMM;AAAAA,EACNlF,SAAS;AAAA,IACPmF,WAAW;AAAA,IACXC,aAAa;AAAA,EAAA;AAEjB,CAAC,GCVY9C,cAAc;AAAA,EACzB2C;AAAAA,EACAP;AAAAA,EACAM;AACF,GCHaK,UAAQC,kBAAkB;AAAA,EACrC7E,MAAM,GAAG6D,QAAQ;AAAA,EACjBvE,MAAM;AAAA,EACN2C,OAAO;AAAA,EACP6C,aAAa;AAAA,EACbX,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,kBAAA,CAAG;AAAA,EACjB/B,QAAQ,CACN8B,YAAY;AAAA,IACVjC,OAAO;AAAA,IACPjC,MAAM;AAAA,IACNV,MAAM;AAAA,EAAA,CACP,GACD4E,YAAY;AAAA,IACVlE,MAAM;AAAA,IACNV,MAAM;AAAA,IACNC,SAAS;AAAA,MACPwF,YAAY,CAAC,iBAAiB,eAAe,SAAS;AAAA,IAAA;AAAA,EACxD,CACD,CAAC;AAAA,EAEJC,SAAS;AAAA,IACPC,QAAQC,mBAAmB,UAAU;AAAA,IACrCC,SAAU7E,CAAAA,UAAU8E,oBAAoB9E,KAAK;AAAA,EAAA;AAEjD,CAAC,GC1BYoB,SAAS;AAAA,EAAA,OACpBkD;AACF,GCAMS,SAAS;AAAA,EACbpD,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAMmB;AAAAA,EACNC,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAe,oBAAC,UAAA,EAAQA,SAAAA,CAAS;AACjD,GAEMC,KAAK;AAAA,EACTxD,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAMuB;AAAAA,EACNH,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAe,oBAAC,MAAA,EAAIA,SAAAA,CAAS;AAC7C,GAEMG,OAAO;AAAA,EACX1D,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAMyB;AAAAA,EACNL,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAe,oBAAC,QAAA,EAAMA,SAAAA,CAAS;AAC/C,GAEMK,MAAM;AAAA,EACV5D,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAMA,MAAM,oBAAC,OAAA,EAAI,UAAA,MAAA,CAAG;AAAA,EACpBoB,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAe,oBAAC,OAAA,EAAI,OAAO;AAAA,IAAEM,eAAe;AAAA,EAAA,GAAYN,SAAAA,CAAS;AACjF,GAEa1D,aAAa;AAAA,EACxBuD;AAAAA,EACAI;AAAAA,EACAE;AAAAA,EACAE;AACF,GCjCME,SAAS;AAAA,EACb9D,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAM6B;AACR,GAEMC,SAAS;AAAA,EACbhE,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClBM,MAAM+B;AACR,GAEatE,QAAQ;AAAA,EACnBmE;AAAAA,EACAE;AACF,GCfa9B,OAAOU,kBAAkB;AAAA,EACpC7E,MAAM,GAAG6D,QAAQ;AAAA,EACjBvE,MAAM;AAAA,EACN2C,OAAO;AAAA,EACP6C,aAAa;AAAA,EACbX,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,YAAA,CAAE;AAAA,EAChB/B,QAAQ,CAAC8B,YAAY;AAAA,IAAElE,MAAM;AAAA,IAAQV,MAAM;AAAA,EAAA,CAAa,CAAC;AAAA,EACzD8E,YAAY;AAAA;AAAA;AAAA,IAGVY,SAAU1E,WACDK,MAAMwF,eAAe7F,MAAMsE,KAAK,IAAItE,MAAMsE,QAAQtE,MAAM8F;AAAAA,EAAAA;AAAAA,EAGnEpB,SAAS;AAAA,IACPC,QAAQ;AAAA,MACNd,MAAM;AAAA,IAAA;AAAA,IAERgB,QAAQ;AAAA,MAAEhB,MAAAA;AAAAA,IAAAA,GAAQ;AAChB,aAAO;AAAA,QACLS,OACE,oBAAC,QAAA,EAAK,MAAK,OAAM,WAAU,iDAAgD,OAAOT,SAAQ,QAAO,UAAA,YAAA,CAEjG;AAAA,MAAA;AAAA,IAGN;AAAA,EAAA;AAEJ,CAAC,GC7BYS,QAAQC,kBAAkB;AAAA,EACrC7E,MAAM,GAAG6D,QAAQ;AAAA,EACjBvE,MAAM;AAAA,EACN2C,OAAO;AAAA,EACP6C,aAAa;AAAA,EACbX,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,YAAA,CAAE;AAAA,EAChB/B,QAAQ,CACN8B,YAAY;AAAA,IACVlE,MAAM;AAAA,IACNV,MAAM;AAAA,EAAA,CACP,CAAC;AAAA,EAEJ8E,YAAY;AAAA;AAAA,IAEVY,SAAU1E,CAAAA,WACM;AAAA,MACZ+F,uCAAS,UAAA,YAAA,CAAE;AAAA,MACXC,uCAAS,UAAA,kBAAA,CAAG;AAAA,MACZC,wCAAU,UAAA,YAAA,CAAE;AAAA,MACZC,sCAAQ,UAAA,YAAA,CAAE;AAAA,IAAA,GAIClG,MAAMhB,IAAI,qCAA6B,UAAA,kBAAA,CAAG;AAAA,EAAA;AAAA,EAG3D0F,SAAS;AAAA,IACPC,QAAQ;AAAA,MACN3F,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,CAAC,GC/BYqC,QAAQ;AAAA,EACnBwC;AAAAA,EACAS;AACF,GCHM6B,KAAK;AAAA,EACTxE,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClB0B,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MACZ,oBAAC,MAAA,EACC,OAAO;AAAA,IACLkB,UAAU;AAAA,IACVC,YAAY;AAAA,IACZC,YAAY;AAAA,EAAA,GAGbpB,SAAAA,CACH;AAEJ,GAEMqB,KAAK;AAAA,EACT5E,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClB0B,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MACZ,oBAAC,MAAA,EACC,OAAO;AAAA,IACLkB,UAAU;AAAA,IACVC,YAAY;AAAA,IACZC,YAAY;AAAA,EAAA,GAGbpB,SAAAA,CACH;AAEJ,GAEMsB,KAAK;AAAA,EACT7E,OAAO;AAAA,EACPtC,OAAO,GAAGkE,QAAQ;AAAA,EAClB0B,WAAWA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MACZ,oBAAC,MAAA,EACC,OAAO;AAAA,IACLkB,UAAU;AAAA,IACVC,YAAY;AAAA,IACZC,YAAY;AAAA,EAAA,GAGbpB,SAAAA,CACH;AAEJ,GAEazD,SAAS;AAAA,EACpB0E;AAAAA,EACAI;AAAAA,EACAC;AACF,GChDMzF,QAAQ;AAAA,EACZQ;AAAAA,EACAH;AAAAA,EACAI;AAAAA,EACAF;AAAAA,EACAD;AAAAA,EACAI;AACF,GCPMgF,gCAAgCC,aAA4BC,CAAAA,WAAW;AAC3E,QAAMC,YAAYD,QAAQtF,SAAS,CAAA,GAC7BwF,YAAYF,QAAQrF,SAAS,CAAA,GAC7BwF,aAAaH,QAAQvF,UAAU,CAAA,GAC/B2F,aAAaJ,QAAQlF,UAAU,IAC/BuF,iBAAiBL,QAAQnF,cAAc,CAAA,GACvCyF,kBAAkBN,QAAQpF,eAAe,CAAA,GAEzCxB,iBAAiB;AAAA,IACrBqB,QAAQ,CAAC,GAAG0F,YAAY,GAAGjE,OAAOC,OAAO/B,MAAMK,MAAM,CAAC;AAAA,IACtDC,OAAO,CAAC,GAAGuF,WAAW,GAAG/D,OAAOC,OAAO/B,MAAMM,KAAK,CAAC;AAAA,IACnDC,OAAO,CAAC,GAAGuF,WAAW,GAAGhE,OAAOC,OAAO/B,MAAMO,KAAK,CAAC;AAAA,IACnDG,QAAQ,CAAC,GAAGsF,YAAY,GAAGlE,OAAOC,OAAO/B,MAAMU,MAAM,CAAC;AAAA,IACtDD,YAAY,CAAC,GAAGwF,gBAAgB,GAAGnE,OAAOC,OAAO/B,MAAMS,UAAU,CAAC;AAAA,IAClED,aAAa,CAAC,GAAG0F,iBAAiB,GAAGpE,OAAOC,OAAO/B,MAAMQ,WAAW,CAAC;AAAA,EAAA;AAGvE,SAAO;AAAA,IACL7B,MAAM;AAAA,IACNmC,QAAQ;AAAA,MACNqF,OAAO,CACLC,WAAW;AAAA,QACTzH,MAAM6D;AAAAA,QACNvE,MAAM;AAAA,QACN2C,OAAO;AAAA,QACP6C,aAAa;AAAA,QACbX,MAAMA,MAAM,oBAAA,UAAA,EAAE,UAAA,eAAA,CAAE;AAAA,QAChBC,YAAY;AAAA,UACVsD,OAAQpH,CAAAA,UAAoC,oBAAC,eAAA,EAAc,gBAAgC,GAAIA,MAAAA,CAAM;AAAA,QAAA;AAAA,QAEvGT,IAAI,CACF,GAAGQ,eAAeqB,QAClBmD,kBAAkB;AAAA,UAChBvF,MAAM;AAAA,UACNC,SAAS;AAAA,YACPoI,YAAYV,QAAQU,cAAc;AAAA,YAClCC,gCAAgC;AAAA,UAAA;AAAA,UAElC/H,IAAIQ,eAAesB;AAAAA,UACnBI,QAAQ1B,eAAe0B;AAAAA,UACvBH,OAAOvB,eAAeuB;AAAAA,UACtBiG,OAAO;AAAA,YACLhG,aAAaxB,eAAewB;AAAAA,YAC5BC,YAAYzB,eAAeyB;AAAAA,UAAAA;AAAAA,QAC7B,CACD,CAAC;AAAA,MAAA,CAEL,CAAC;AAAA,IAAA;AAAA,EAEN;AAEJ,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../src/presets.tsx","../src/input.tsx","../src/types.tsx","../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/index.tsx","../src/parts/blocks/media-block.tsx","../src/parts/blocks/index.tsx","../src/parts/decorators/index.tsx","../src/parts/lists/index.tsx","../src/parts/spans/icon.tsx","../src/parts/spans/media.tsx","../src/parts/spans/index.tsx","../src/parts/styles/index.tsx","../src/parts/index.tsx","../src/index.tsx"],"sourcesContent":["import type { Presets } from \"./types\";\n\n// Presets are predefined configurations for the rich text field.\n// They allow users to quickly set up the field with common settings.\n// Users can still override these presets with custom options.\nexport const presets = {\n basic: {\n size: \"sm\",\n initiallyActive: true,\n allowedParts: [\"wild.richtext.decorator.em\", \"wild.richtext.decorator.strong\", \"wild.richtext.annotation.link\"],\n } as const,\n full: {\n size: \"lg\",\n initiallyActive: false,\n // Empty blacklist means \"enable all\".\n disallowedParts: [],\n } as const,\n} as const satisfies Presets;\n","import * as React from \"react\";\nimport type {\n ArrayOfObjectsInputProps,\n ArraySchemaType,\n BlockMarksDefinition,\n ObjectField,\n ObjectSchemaType,\n SchemaType,\n} from \"sanity\";\nimport { merge } from \"ts-deepmerge\";\nimport type { Part } from \"./parts\";\nimport { presets } from \"./presets\";\nimport type { FieldOptions, RichtextConfig, Size } from \"./types\";\n\nfunction handleListKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.options?.list;\n if (!list) return entry;\n const filteredList = list.filter((s) => findNeedle((s as { value: string }).value));\n return { ...entry, type: { ...entry.type, options: { ...entry.type.options, list: filteredList } } };\n}\n\nfunction handleOfKind<E extends ObjectField<ArraySchemaType>>(entry: E, findNeedle: (needle: string) => boolean) {\n const list = entry.type?.of;\n if (!list) return entry;\n const filteredOf = list.filter((a: { name: string }) => findNeedle(a.name));\n return { ...entry, type: { ...entry.type, of: filteredOf } };\n}\n\nconst sizeToHeightMap = {\n sm: \"10rem\",\n lg: \"50vh\",\n} as const satisfies Record<Size, string>;\n\nfunction RichtextInput({\n richtextConfig,\n ...props\n}: ArrayOfObjectsInputProps & {\n richtextConfig: RichtextConfig;\n}) {\n const schemaOptions = props.schemaType.options as FieldOptions | undefined;\n const presetOptions = schemaOptions?.preset ? presets[schemaOptions.preset] : {};\n\n const options = React.useMemo(() => {\n // The preset option is only used to fetch the preset options.\n // We can exclude it from the main options.\n const { preset: _, ...mainOptions } = schemaOptions ?? {};\n return merge(presetOptions, mainOptions);\n }, [schemaOptions, presetOptions]);\n\n const initiallyActive = options?.initiallyActive ?? false;\n\n // Height can either be a predefined size or a custom string value.\n // In the case of a custom string value, we use it as is.\n const height =\n options?.size && options.size in sizeToHeightMap\n ? sizeToHeightMap[options.size as keyof typeof sizeToHeightMap]\n : options?.size;\n\n const allowedParts = options?.allowedParts;\n const disallowedParts = options?.disallowedParts;\n if (allowedParts && disallowedParts) {\n console.warn(\n \"Wild Sanity Rich Text Field: Both `allowedParts` and `disallowedParts` are set. `allowedParts` will take precedence.\"\n );\n }\n\n const filterPartsBy = React.useCallback(\n <P extends unknown[]>(parts: P | undefined, findNeedle: (s: P[number]) => string | undefined) => {\n const filtered = parts?.filter((b) => {\n const needle = findNeedle(b) as Part | undefined;\n // This is undefined behavior. To not break user expectations, we keep the item.\n if (!needle) return true;\n if (allowedParts) return allowedParts.includes(needle);\n if (disallowedParts) return !disallowedParts.includes(needle);\n // By default the rich text field is a minimal as possible.\n return false;\n });\n\n return filtered as P;\n },\n [allowedParts, disallowedParts]\n );\n\n const enabledParts = React.useMemo(() => {\n const blocks = filterPartsBy(richtextConfig.blocks, (s) => s.name);\n const spans = filterPartsBy(richtextConfig.spans, (s) => s.name);\n const lists = filterPartsBy(richtextConfig.lists, (s) => s.value);\n const annotations = filterPartsBy(richtextConfig.annotations, (s) => s.name);\n const decorators = filterPartsBy(richtextConfig.decorators, (s) => s.value);\n const styles = filterPartsBy(richtextConfig.styles, (s) => s.value);\n\n // Always include the \"Normal\" style. It acts as a way for the users to reset the style.\n const normalizedStyles = [{ value: \"normal\", title: \"Normal\" }, ...styles];\n\n return { blocks, spans, lists, annotations, decorators, styles: normalizedStyles };\n }, [filterPartsBy]);\n\n const reshapeSchemaTypes = React.useCallback(\n (schema: ObjectSchemaType) => {\n // We only reshape the built-in block type children.\n if (schema.name !== \"block\") return schema;\n\n return {\n ...schema,\n fields: schema.fields?.map((f) => {\n const field = f as ObjectField<ArraySchemaType>;\n\n switch (field.name) {\n // Headings, Normal, Quote, etc.\n case \"style\":\n return handleListKind(field, (_) => enabledParts.styles.some((b) => b.value === _));\n // Ul, Ol, etc.\n case \"listItem\":\n return handleListKind(field, (_) => enabledParts.lists.some((b) => b.value === _));\n // Links, Colors, etc.\n case \"markDefs\":\n return handleOfKind(field, (_) => enabledParts.annotations.some((b) => b.name === _));\n // Text content.\n case \"children\": {\n // Always enable span type for text content.\n const spans = [...enabledParts.spans, { name: \"span\" }];\n const filtered = handleOfKind(field, (_) => spans.some((b) => b.name === _));\n\n return {\n ...filtered,\n type: {\n ...filtered.type,\n // Inline markers within the text content.\n of: filtered.type.of?.map((t: SchemaType) => {\n // Span is a reserved name in Sanity for text spans.\n // If the type is not a span, it means its a custom object type, so we return it as is.\n if (t.name !== \"span\") return t;\n\n const span = t as Partial<BlockMarksDefinition>;\n const annotations = span.annotations?.filter((a) => enabledParts.annotations.some((b) => b.name === a.name));\n const decorators = span.decorators?.filter((d) => enabledParts.decorators.some((b) => b.value === d.value));\n return { ...t, annotations, decorators };\n }),\n },\n };\n }\n default:\n return field;\n }\n }),\n };\n },\n [enabledParts]\n );\n\n const patchedSchemaType = React.useMemo(() => {\n const of = props.schemaType?.of;\n if (!Array.isArray(of)) return props.schemaType;\n\n // Just in case the reshaping fails, we return the original schema type.\n try {\n const filtered = of.filter((s) => {\n // A valid portabletext field must always contain the built-in block type.\n // Any other item is a custom block and must be explicitly enabled.\n return s.name === \"block\" || enabledParts.blocks.some((b) => b.name === s.name);\n });\n\n return {\n ...props.schemaType,\n of: filtered.map((s) => reshapeSchemaTypes(s as ObjectSchemaType)),\n };\n } catch (e) {\n console.error(\"Wild Sanity Rich Text Field: Error while reshaping schema types.\", e);\n return props.schemaType;\n }\n }, [props.schemaType, enabledParts.blocks, reshapeSchemaTypes]);\n\n const enabledPartsCount = React.useMemo(() => {\n return Object.values(enabledParts).reduce((acc, curr) => acc + curr.length, 0);\n }, [enabledParts]);\n\n return (\n <>\n <style>{`\n [data-wild-richtext-field] [data-testid=\"pt-editor\"][data-fullscreen=\"false\"] {\n height: var(--pt-editor-height, initial);\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before,\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n font-size: 1.0em;\n display: inline-block;\n padding-top: 2px;\n color: inherit;\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.bullet\"] [data-list-prefix] > span::before {\n content: \"•\";\n }\n\n [data-wild-richtext-field] .pt-list-item [data-list-item=\"wild.richtext.list.number\"] [data-list-prefix] > span::before {\n content: counter(list-level-1) \". \";\n }\n `}</style>\n <div data-wild-richtext-field style={{ \"--pt-editor-height\": height ?? sizeToHeightMap.sm } as React.CSSProperties}>\n {props.renderDefault({\n ...props,\n initialActive: initiallyActive,\n displayInlineChanges: false,\n // If the only enabled part is a style part, its the default \"Normal\" style. No need to show the toolbar.\n hideToolbar: enabledPartsCount === 0 || (enabledPartsCount === 1 && enabledParts.styles.length === 1),\n // @ts-expect-error: schemaType.of is too narrow. The runtime type is valid.\n schemaType: patchedSchemaType,\n })}\n </div>\n </>\n );\n}\n\nexport { RichtextInput };\n","import type {\n ArrayDefinition,\n ArrayOfType,\n ArrayOptions,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockStyleDefinition,\n} from \"sanity\";\nimport type { Part } from \"./parts\";\n\n/** @public */\nexport const typeName = \"wild.richtext\" as const;\n\nexport type RichtextConfig = {\n /**\n * Custom block types to include in the richtext field.\n */\n blocks?: ArrayOfType<\"object\">[];\n /**\n * Custom inline object types to include in the richtext field.\n */\n spans?: ArrayOfType<\"object\">[];\n /**\n * Custom styles to include in the richtext field.\n */\n styles?: BlockStyleDefinition[];\n /**\n * Custom lists to include in the richtext field.\n */\n lists?: BlockListDefinition[];\n /**\n * Custom annotations to include in the richtext field.\n */\n annotations?: ArrayOfType<\"object\">[];\n /**\n * Custom decorators to include in the richtext field.\n */\n decorators?: BlockDecoratorDefinition[];\n};\n\n/** @public */\nexport type PluginConfig = RichtextConfig & {\n /**\n * Whether spell checking should be enabled in the richtext editor.\n */\n spellCheck?: boolean;\n};\n\n// Presets are collections of commonly used field options.\n// They allow to quickly set up the richtext field with a predefined set of options.\n// Users can still override individual options when using a preset.\ntype Preset = Omit<FieldOptions, keyof ArrayOptions | \"preset\">;\nexport type Presets = Record<\"basic\" | \"full\", Preset>;\n\nexport type Size = \"sm\" | \"lg\";\n\n// The user can provide custom parts as strings, so we need to allow for that.\n// But we also want to provide type safety for the known parts.\ntype MaybePart = Part | (string & {});\ntype MaybeSize = Size | (string & {});\n\n/** @public */\nexport type FieldOptions = ArrayOptions & {\n /**\n * Size of the editor field.\n * This will affect the height of the editor in the Sanity studio.\n */\n size?: MaybeSize;\n /**\n * Preset configuration for the richtext field.\n * Presets are predefined sets of options that can be applied to the field.\n */\n preset?: keyof Presets;\n /**\n * Whether the portable text component is active immediately on page load.\n */\n initiallyActive?: boolean;\n /**\n * Blacklist parts by their name.\n */\n allowedParts?: MaybePart[];\n /**\n * Whitelist parts by their name.\n */\n disallowedParts?: MaybePart[];\n};\n\n// Add the custom field definition to Sanity's intrinsic definitions\n// so that type checking works correctly when using this field type.\ndeclare module \"sanity\" {\n export interface IntrinsicDefinitions {\n [typeName]: Omit<ArrayDefinition, \"type\" | \"of\" | \"options\"> & {\n type: typeof typeName;\n options?: FieldOptions;\n };\n }\n}\n","import { defineField } from \"sanity\";\nimport { styled } from \"styled-components\";\nimport { typeName } from \"../../types\";\n\nconst ColorText = styled.span<{ color?: string }>`\n & > span {\n background-color: inherit;\n border-bottom: unset;\n color: ${({ color = \"inherit\" }) => color};\n }\n`;\n\nexport const textColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.textColor`,\n title: \"Text Color\",\n icon: () => <>🖋</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorText color={color}>{props.renderDefault(props)}</ColorText>;\n },\n },\n});\n\nconst ColorBg = styled.span<{ color?: string }>`\n & > span {\n background-color: ${({ color = \"inherit\" }) => color};\n border-bottom: unset;\n color: inherit;\n }\n`;\n\nexport const highlightColor = defineField({\n type: \"object\",\n name: `${typeName}.annotation.highlightColor`,\n title: \"Highlight Color\",\n icon: () => <>🖍</>,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n // @ts-expect-error: Sanity types are not aware of the color field structure.\n const color = props.value?.color?.value as string;\n return <ColorBg color={color}>{props.renderDefault(props)}</ColorBg>;\n },\n },\n});\n","import { LinkIcon } from \"@sanity/icons\";\nimport { defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const link = defineField({\n type: \"wild.link\",\n name: `${typeName}.annotation.link`,\n title: \"Link\",\n icon: LinkIcon,\n options: {\n collapsed: false,\n collapsible: false,\n },\n});\n","import { highlightColor, textColor } from \"./color\";\nimport { link } from \"./link\";\n\nexport const annotations = {\n link,\n textColor,\n highlightColor,\n} as const;\n","import { prepareMediaPreview, selectMediaPreview } from \"@madebywild/sanity-media-field\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.block.media`,\n type: \"object\",\n title: \"Media Block\",\n description: \"Embed block video or image content.\",\n icon: () => <>🖼️</>,\n fields: [\n defineField({\n name: \"appMedia\",\n type: \"wild.media\",\n options: {\n collapsed: false,\n collapsible: false,\n inline: true,\n extensions: [\"customOptions\", \"customRatio\", \"caption\"],\n },\n }),\n ],\n preview: {\n select: selectMediaPreview(\"appMedia\"),\n prepare: (props) => prepareMediaPreview(props),\n },\n});\n","import { media } from \"./media-block\";\n\nexport const blocks = {\n media,\n} as const;\n","import { BoldIcon, CodeIcon, ItalicIcon } from \"@sanity/icons\";\nimport type { BlockDecoratorDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst strong = {\n title: \"Strong\",\n value: `${typeName}.decorator.strong`,\n icon: BoldIcon,\n component: ({ children }) => <strong>{children}</strong>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst em = {\n title: \"Emphasis\",\n value: `${typeName}.decorator.em`,\n icon: ItalicIcon,\n component: ({ children }) => <em>{children}</em>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst code = {\n title: \"Code\",\n value: `${typeName}.decorator.code`,\n icon: CodeIcon,\n component: ({ children }) => <code>{children}</code>,\n} as const satisfies BlockDecoratorDefinition;\n\nconst sup = {\n title: \"Sup\",\n value: `${typeName}.decorator.sup`,\n icon: () => <sup>[1]</sup>,\n component: ({ children }) => <sup style={{ verticalAlign: \"super\" }}>{children}</sup>,\n} as const satisfies BlockDecoratorDefinition;\n\nexport const decorators = {\n strong,\n em,\n code,\n sup,\n} as const;\n","import { OlistIcon, UlistIcon } from \"@sanity/icons\";\nimport type { BlockListDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst bullet = {\n title: \"Bullet\",\n value: `${typeName}.list.bullet`,\n icon: UlistIcon,\n} as const satisfies BlockListDefinition;\n\nconst number = {\n title: \"Number\",\n value: `${typeName}.list.number`,\n icon: OlistIcon,\n} as const satisfies BlockListDefinition;\n\nexport const lists = {\n bullet,\n number,\n} as const;\n","import * as React from \"react\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const icon = defineArrayMember({\n name: `${typeName}.span.icon`,\n type: \"object\",\n title: \"Icon\",\n description: \"Insert an icon.\",\n icon: () => <>🧿</>,\n fields: [defineField({ name: \"icon\", type: \"wild.icon\" })],\n components: {\n // This is the inline-preview in the PortableText editor.\n // It gets its props from the prepare function below.\n preview: (props) => {\n return React.isValidElement(props.media) ? props.media : props.fallbackTitle;\n },\n },\n preview: {\n select: {\n icon: \"icon\",\n },\n prepare({ icon }) {\n return {\n media: (\n <span role=\"img\" className=\"inline-block size-[1em] shrink-0 text-current\" title={icon ?? \"Icon\"}>\n 🧿\n </span>\n ),\n };\n },\n },\n});\n","import { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nexport const media = defineArrayMember({\n name: `${typeName}.span.media`,\n type: \"object\",\n title: \"Inline Media\",\n description: \"Embed inline video or image content.\",\n icon: () => <>🫧</>,\n fields: [\n defineField({\n name: \"media\",\n type: \"wild.media\",\n }),\n ],\n components: {\n // This is the inline-preview in the PortableText editor.\n preview: (props) => {\n const icons = {\n video: <>🎥</>,\n image: <>🖼️</>,\n lottie: <>🌀</>,\n rive: <>🍭</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.type as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n type: \"media.type\",\n },\n },\n});\n","import { icon } from \"./icon\";\nimport { media } from \"./media\";\n\nexport const spans = {\n icon,\n media,\n} as const;\n","import type { BlockStyleDefinition } from \"sanity\";\nimport { typeName } from \"../../types\";\n\nconst h2 = {\n title: \"Heading 2\",\n value: `${typeName}.style.h2`,\n component: ({ children }) => (\n <h2\n style={{\n fontSize: \"2.0625rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(41 / 33)\",\n }}\n >\n {children}\n </h2>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h3 = {\n title: \"Heading 3\",\n value: `${typeName}.style.h3`,\n component: ({ children }) => (\n <h3\n style={{\n fontSize: \"1.6875rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(35 / 27)\",\n }}\n >\n {children}\n </h3>\n ),\n} as const satisfies BlockStyleDefinition;\n\nconst h4 = {\n title: \"Heading 4\",\n value: `${typeName}.style.h4`,\n component: ({ children }) => (\n <h4\n style={{\n fontSize: \"1.3125rem\",\n fontWeight: \"700\",\n lineHeight: \"calc(29 / 21)\",\n }}\n >\n {children}\n </h4>\n ),\n} as const satisfies BlockStyleDefinition;\n\nexport const styles = {\n h2,\n h3,\n h4,\n} as const;\n","import { annotations } from \"./annotations\";\nimport { blocks } from \"./blocks\";\nimport { decorators } from \"./decorators\";\nimport { lists } from \"./lists\";\nimport { spans } from \"./spans\";\nimport { styles } from \"./styles\";\n\nconst parts = {\n annotations,\n blocks,\n decorators,\n lists,\n spans,\n styles,\n} as const;\n\ntype Parts = typeof parts;\ntype Part =\n | Parts[\"annotations\"][keyof Parts[\"annotations\"]][\"name\"]\n | Parts[\"blocks\"][keyof Parts[\"blocks\"]][\"name\"]\n | Parts[\"decorators\"][keyof Parts[\"decorators\"]][\"value\"]\n | Parts[\"lists\"][keyof Parts[\"lists\"]][\"value\"]\n | Parts[\"spans\"][keyof Parts[\"spans\"]][\"name\"]\n | Parts[\"styles\"][keyof Parts[\"styles\"]][\"value\"];\n\nexport { parts, type Part };\n","import type { ArrayOfObjectsInputProps } from \"sanity\";\nimport { defineArrayMember, definePlugin, defineType } from \"sanity\";\nimport { RichtextInput } from \"./input\";\nimport { parts } from \"./parts\";\nimport { type FieldOptions, type PluginConfig, typeName } from \"./types\";\n\n/** @public */\nconst wildSanityRichtextFieldPlugin = definePlugin<PluginConfig>((config) => {\n const userSpans = config?.spans ?? [];\n const userLists = config?.lists ?? [];\n const userBlocks = config?.blocks ?? [];\n const userStyles = config?.styles ?? [];\n const userDecorators = config?.decorators ?? [];\n const userAnnotations = config?.annotations ?? [];\n\n const richtextConfig = {\n blocks: [...userBlocks, ...Object.values(parts.blocks)],\n spans: [...userSpans, ...Object.values(parts.spans)],\n lists: [...userLists, ...Object.values(parts.lists)],\n styles: [...userStyles, ...Object.values(parts.styles)],\n decorators: [...userDecorators, ...Object.values(parts.decorators)],\n annotations: [...userAnnotations, ...Object.values(parts.annotations)],\n };\n\n return {\n name: \"@madebywild/sanity-richtext-field\",\n schema: {\n types: [\n defineType({\n name: typeName,\n type: \"array\",\n title: \"Rich Text\",\n description: \"Rich text content with formatting options.\",\n icon: () => <>⌨️</>,\n components: {\n input: (props: ArrayOfObjectsInputProps) => <RichtextInput richtextConfig={richtextConfig} {...props} />,\n },\n of: [\n ...richtextConfig.blocks,\n defineArrayMember({\n type: \"block\",\n options: {\n spellCheck: config?.spellCheck ?? true,\n unstable_whitespaceOnPasteMode: \"normalize\",\n },\n of: richtextConfig.spans,\n styles: richtextConfig.styles,\n lists: richtextConfig.lists,\n marks: {\n annotations: richtextConfig.annotations,\n decorators: richtextConfig.decorators,\n },\n }),\n ],\n }),\n ],\n },\n };\n});\n\nexport { wildSanityRichtextFieldPlugin, typeName, type PluginConfig, type FieldOptions };\n"],"names":["presets","basic","size","initiallyActive","allowedParts","full","disallowedParts","handleListKind","entry","findNeedle","list","type","options","filteredList","filter","s","value","handleOfKind","of","filteredOf","a","name","sizeToHeightMap","sm","lg","RichtextInput","richtextConfig","props","schemaOptions","schemaType","presetOptions","preset","React","useMemo","_","mainOptions","merge","height","console","warn","filterPartsBy","useCallback","parts","b","needle","includes","enabledParts","blocks","spans","lists","annotations","decorators","styles","normalizedStyles","title","reshapeSchemaTypes","schema","fields","map","f","field","some","filtered","t","span","d","patchedSchemaType","Array","isArray","e","error","enabledPartsCount","Object","values","reduce","acc","curr","length","renderDefault","initialActive","displayInlineChanges","hideToolbar","typeName","ColorText","styled","color","textColor","defineField","icon","components","annotation","ColorBg","highlightColor","link","LinkIcon","collapsed","collapsible","media","defineArrayMember","description","inline","extensions","preview","select","selectMediaPreview","prepare","prepareMediaPreview","strong","BoldIcon","component","children","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","bullet","UlistIcon","number","OlistIcon","isValidElement","fallbackTitle","video","image","lottie","rive","h2","fontSize","fontWeight","lineHeight","h3","h4","wildSanityRichtextFieldPlugin","definePlugin","config","userSpans","userLists","userBlocks","userStyles","userDecorators","userAnnotations","types","defineType","input","spellCheck","unstable_whitespaceOnPasteMode","marks"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@madebywild/sanity-richtext-field",
3
- "version": "0.1.35",
3
+ "version": "0.1.38",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "license": "UNLICENSED",
@@ -18,11 +18,11 @@
18
18
  "src"
19
19
  ],
20
20
  "publishConfig": {
21
- "access": "restricted"
21
+ "access": "public"
22
22
  },
23
23
  "dependencies": {
24
24
  "ts-deepmerge": "^7.0.3",
25
- "@madebywild/sanity-media-field": "0.2.21"
25
+ "@madebywild/sanity-media-field": "0.2.24"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "@sanity/icons": "^3.7.4",
@@ -9,15 +9,13 @@ export const media = defineArrayMember({
9
9
  description: "Embed block video or image content.",
10
10
  icon: () => <>🖼️</>,
11
11
  fields: [
12
- defineField({
13
- title: "Wrap",
14
- name: "wrapping",
15
- type: "wild.wrapping",
16
- }),
17
12
  defineField({
18
13
  name: "appMedia",
19
14
  type: "wild.media",
20
15
  options: {
16
+ collapsed: false,
17
+ collapsible: false,
18
+ inline: true,
21
19
  extensions: ["customOptions", "customRatio", "caption"],
22
20
  },
23
21
  }),