@madebywild/sanity-richtext-field 1.0.0 → 2.0.0

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/README.md CHANGED
@@ -20,6 +20,7 @@ import {
20
20
  createAnnotations,
21
21
  createDecorators,
22
22
  createLists,
23
+ createSpans,
23
24
  createStyles,
24
25
  } from "@madebywild/sanity-richtext-field/parts";
25
26
  import { createBlock as quoteBlock } from "@madebywild/sanity-richtext-field/blocks/quote-block";
@@ -41,6 +42,7 @@ export default defineConfig({
41
42
  plugins: [
42
43
  wildSanityRichtextFieldPlugin({
43
44
  blocks: [createBlock(customBlock), quoteBlock()],
45
+ spans: [...createSpans() /* Add your own */],
44
46
  styles: [...createStyles() /* Add your own */],
45
47
  lists: [...createLists() /* Add your own */],
46
48
  decorators: [...createDecorators() /* Add your own */],
@@ -50,6 +52,29 @@ export default defineConfig({
50
52
  });
51
53
  ```
52
54
 
55
+ ```ts
56
+ // Override built-in annotation rendering (color/highlight)
57
+ wildSanityRichtextFieldPlugin({
58
+ annotations: [
59
+ ...createAnnotations({
60
+ textColor: {
61
+ renderValue: (value) => getColor(value)?.cssVar,
62
+ },
63
+ highlightColor: {
64
+ renderValue: (value) => getColor(value)?.cssVar,
65
+ },
66
+ }),
67
+ ],
68
+ spans: [
69
+ ...createSpans({
70
+ icon: {
71
+ renderValuePreview: (value) => <Icon name={value as IconName} />,
72
+ },
73
+ }),
74
+ ],
75
+ });
76
+ ```
77
+
53
78
  ## Use in Schema
54
79
 
55
80
  ```ts
@@ -1,4 +1,4 @@
1
- import * as sanity53 from "sanity";
1
+ import * as sanity69 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity53.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity53.PreviewConfig<{
19
+ } & Omit<sanity69.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity69.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity53.WidenValidation & sanity53.WidenInitialValue;
23
+ } & sanity69.WidenValidation & sanity69.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity45 from "sanity";
1
+ import * as sanity73 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity45.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity45.PreviewConfig<{
19
+ } & Omit<sanity73.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity73.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity45.WidenValidation & sanity45.WidenInitialValue;
23
+ } & sanity73.WidenValidation & sanity73.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity49 from "sanity";
1
+ import * as sanity60 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity49.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity49.PreviewConfig<{
19
+ } & Omit<sanity60.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity60.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity49.WidenValidation & sanity49.WidenInitialValue;
23
+ } & sanity60.WidenValidation & sanity60.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity49 from "sanity";
1
+ import * as sanity69 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity49.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity49.PreviewConfig<{
19
+ } & Omit<sanity69.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity69.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity49.WidenValidation & sanity49.WidenInitialValue;
23
+ } & sanity69.WidenValidation & sanity69.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity58 from "sanity";
1
+ import * as sanity73 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity58.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity58.PreviewConfig<{
19
+ } & Omit<sanity73.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity73.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity58.WidenValidation & sanity58.WidenInitialValue;
23
+ } & sanity73.WidenValidation & sanity73.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity58 from "sanity";
1
+ import * as sanity61 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  import { FieldOptions } from "@madebywild/sanity-media-field";
4
4
  type Options = Omit<Partial<ObjectDefinition>, "type"> & {
@@ -16,9 +16,9 @@ declare function createBlock({
16
16
  }?: Options): {
17
17
  type: "object";
18
18
  name?: string | undefined;
19
- } & Omit<sanity58.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
- preview?: sanity58.PreviewConfig<{
19
+ } & Omit<sanity61.ArrayOfEntry<ObjectDefinition>, "preview"> & {
20
+ preview?: sanity61.PreviewConfig<{
21
21
  [x: string]: string;
22
22
  }, Record<string, string>> | undefined;
23
- } & sanity58.WidenValidation & sanity58.WidenInitialValue;
23
+ } & sanity61.WidenValidation & sanity61.WidenInitialValue;
24
24
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity45 from "sanity";
1
+ import * as sanity64 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  type Options = Omit<Partial<ObjectDefinition>, "type">;
4
4
  /** @public */
@@ -9,9 +9,9 @@ declare function createBlock({
9
9
  }?: Options): {
10
10
  type: "object";
11
11
  name?: string | undefined;
12
- } & Omit<sanity45.ArrayOfEntry<ObjectDefinition>, "preview"> & {
13
- preview?: sanity45.PreviewConfig<{
12
+ } & Omit<sanity64.ArrayOfEntry<ObjectDefinition>, "preview"> & {
13
+ preview?: sanity64.PreviewConfig<{
14
14
  [x: string]: string;
15
15
  }, Record<string, string>> | undefined;
16
- } & sanity45.WidenValidation & sanity45.WidenInitialValue;
16
+ } & sanity64.WidenValidation & sanity64.WidenInitialValue;
17
17
  export { createBlock };
@@ -1,4 +1,4 @@
1
- import * as sanity53 from "sanity";
1
+ import * as sanity65 from "sanity";
2
2
  import { ObjectDefinition } from "sanity";
3
3
  type Options = Omit<Partial<ObjectDefinition>, "type">;
4
4
  /** @public */
@@ -9,9 +9,9 @@ declare function createBlock({
9
9
  }?: Options): {
10
10
  type: "object";
11
11
  name?: string | undefined;
12
- } & Omit<sanity53.ArrayOfEntry<ObjectDefinition>, "preview"> & {
13
- preview?: sanity53.PreviewConfig<{
12
+ } & Omit<sanity65.ArrayOfEntry<ObjectDefinition>, "preview"> & {
13
+ preview?: sanity65.PreviewConfig<{
14
14
  [x: string]: string;
15
15
  }, Record<string, string>> | undefined;
16
- } & sanity53.WidenValidation & sanity53.WidenInitialValue;
16
+ } & sanity65.WidenValidation & sanity65.WidenInitialValue;
17
17
  export { createBlock };
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import * as sanity57 from "sanity";
1
+ import * as sanity68 from "sanity";
2
2
  import { ArrayDefinition, ArrayOfType, ArrayOptions, BlockDecoratorDefinition, BlockListDefinition, BlockStyleDefinition } from "sanity";
3
3
  /** @public */
4
4
  declare const typeName: "wild.richtext";
@@ -86,5 +86,5 @@ declare module "sanity" {
86
86
  }
87
87
  }
88
88
  /** @public */
89
- declare const wildSanityRichtextFieldPlugin: sanity57.Plugin<PluginConfig>;
89
+ declare const wildSanityRichtextFieldPlugin: sanity68.Plugin<PluginConfig>;
90
90
  export { type FieldOptions, type PluginConfig, typeName, wildSanityRichtextFieldPlugin };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as sanity57 from "sanity";
1
+ import * as sanity60 from "sanity";
2
2
  import { ArrayDefinition, ArrayOfType, ArrayOptions, BlockDecoratorDefinition, BlockListDefinition, BlockStyleDefinition } from "sanity";
3
3
  /** @public */
4
4
  declare const typeName: "wild.richtext";
@@ -86,5 +86,5 @@ declare module "sanity" {
86
86
  }
87
87
  }
88
88
  /** @public */
89
- declare const wildSanityRichtextFieldPlugin: sanity57.Plugin<PluginConfig>;
89
+ declare const wildSanityRichtextFieldPlugin: sanity60.Plugin<PluginConfig>;
90
90
  export { type FieldOptions, type PluginConfig, typeName, wildSanityRichtextFieldPlugin };
package/dist/parts.cjs CHANGED
@@ -22,48 +22,61 @@ const ColorText = styledComponents.styled.span`
22
22
  background-color: inherit;
23
23
  border-bottom: unset;
24
24
  color: ${({
25
- color = "inherit"
26
- }) => color};
25
+ $color = "inherit"
26
+ }) => $color};
27
27
  }
28
- `, textColor = sanity.defineField({
29
- type: "object",
30
- name: `${types.typeName}.annotation.textColor`,
31
- title: "Text Color",
32
- icon: icons.ColorWheelIcon,
33
- fields: [sanity.defineField({
34
- name: "color",
35
- type: "wild.color"
36
- })],
37
- components: {
38
- annotation: (props) => {
39
- const color = props.value?.color?.value;
40
- return /* @__PURE__ */ jsxRuntime.jsx(ColorText, { color, children: props.renderDefault(props) });
28
+ `;
29
+ function defaultResolveColor(value) {
30
+ return value;
31
+ }
32
+ function createTextColorAnnotation(options) {
33
+ const renderValue = options?.renderValue ?? defaultResolveColor;
34
+ return sanity.defineField({
35
+ type: "object",
36
+ name: `${types.typeName}.annotation.textColor`,
37
+ title: "Text Color",
38
+ icon: icons.ColorWheelIcon,
39
+ fields: [sanity.defineField({
40
+ name: "color",
41
+ type: "wild.color"
42
+ })],
43
+ components: {
44
+ annotation: (props) => {
45
+ const value = renderValue(props.value?.color);
46
+ return /* @__PURE__ */ jsxRuntime.jsx(ColorText, { $color: value, children: props.renderDefault(props) });
47
+ }
41
48
  }
42
- }
43
- }), ColorBg = styledComponents.styled.span`
49
+ });
50
+ }
51
+ const ColorBg = styledComponents.styled.span`
44
52
  & > span {
45
53
  background-color: ${({
46
- color = "inherit"
47
- }) => color};
54
+ $color = "inherit"
55
+ }) => $color};
48
56
  border-bottom: unset;
49
57
  color: inherit;
50
58
  }
51
- `, highlightColor = sanity.defineField({
52
- type: "object",
53
- name: `${types.typeName}.annotation.highlightColor`,
54
- title: "Highlight Color",
55
- icon: icons.HighlightIcon,
56
- fields: [sanity.defineField({
57
- name: "color",
58
- type: "wild.color"
59
- })],
60
- components: {
61
- annotation: (props) => {
62
- const color = props.value?.color?.value;
63
- return /* @__PURE__ */ jsxRuntime.jsx(ColorBg, { color, children: props.renderDefault(props) });
59
+ `;
60
+ function createHighlightColorAnnotation(options) {
61
+ const renderValue = options?.renderValue ?? defaultResolveColor;
62
+ return sanity.defineField({
63
+ type: "object",
64
+ name: `${types.typeName}.annotation.highlightColor`,
65
+ title: "Highlight Color",
66
+ icon: icons.HighlightIcon,
67
+ fields: [sanity.defineField({
68
+ name: "color",
69
+ type: "wild.color"
70
+ })],
71
+ components: {
72
+ annotation: (props) => {
73
+ const value = renderValue(props.value?.color);
74
+ return /* @__PURE__ */ jsxRuntime.jsx(ColorBg, { $color: value, children: props.renderDefault(props) });
75
+ }
64
76
  }
65
- }
66
- }), link = sanity.defineField({
77
+ });
78
+ }
79
+ const link = sanity.defineField({
67
80
  type: "wild.link",
68
81
  name: `${types.typeName}.annotation.link`,
69
82
  title: "Link",
@@ -73,8 +86,8 @@ const ColorText = styledComponents.styled.span`
73
86
  collapsible: !1
74
87
  }
75
88
  });
76
- function createAnnotations() {
77
- return [link, textColor, highlightColor];
89
+ function createAnnotations(options) {
90
+ return [link, createTextColorAnnotation(options?.textColor), createHighlightColorAnnotation(options?.highlightColor)];
78
91
  }
79
92
  const strong = {
80
93
  title: "Strong",
@@ -122,34 +135,41 @@ const bullet = {
122
135
  function createLists() {
123
136
  return [bullet, number];
124
137
  }
125
- const icon = sanity.defineArrayMember({
126
- name: `${types.typeName}.span.icon`,
127
- type: "object",
128
- title: "Icon",
129
- description: "Insert an icon.",
130
- icon: () => /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "\u{1F9FF}" }),
131
- fields: [sanity.defineField({
132
- name: "icon",
133
- type: "wild.icon"
134
- })],
135
- components: {
136
- // This is the inline-preview in the PortableText editor.
137
- // It gets its props from the prepare function below.
138
- preview: (props) => React__namespace.isValidElement(props.media) ? props.media : props.fallbackTitle
139
- },
140
- preview: {
141
- select: {
142
- icon: "icon"
138
+ function defaultRenderIconPreview(value) {
139
+ return React__namespace.isValidElement(value) ? value : /* @__PURE__ */ jsxRuntime.jsx("span", { role: "img", className: "inline-block size-[1em] shrink-0 text-current", title: typeof value == "string" ? value : "Icon", children: "\u{1F9FF}" });
140
+ }
141
+ function createIconSpan(options) {
142
+ const renderValuePreview = options?.renderValuePreview;
143
+ return sanity.defineArrayMember({
144
+ name: `${types.typeName}.span.icon`,
145
+ type: "object",
146
+ title: "Icon",
147
+ description: "Insert an icon.",
148
+ icon: () => /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "\u{1F9FF}" }),
149
+ fields: [sanity.defineField({
150
+ name: "icon",
151
+ type: "wild.icon"
152
+ })],
153
+ components: {
154
+ // This is the inline-preview in the PortableText editor.
155
+ // It gets its props from the prepare function below.
156
+ preview: (props) => React__namespace.isValidElement(props.media) ? props.media : props.fallbackTitle
143
157
  },
144
- prepare({
145
- icon: icon2
146
- }) {
147
- return {
148
- media: /* @__PURE__ */ jsxRuntime.jsx("span", { role: "img", className: "inline-block size-[1em] shrink-0 text-current", title: icon2 ?? "Icon", children: "\u{1F9FF}" })
149
- };
158
+ preview: {
159
+ select: {
160
+ icon: "icon"
161
+ },
162
+ prepare({
163
+ icon
164
+ }) {
165
+ return {
166
+ media: renderValuePreview?.(icon) ?? defaultRenderIconPreview(icon)
167
+ };
168
+ }
150
169
  }
151
- }
152
- }), media = sanity.defineArrayMember({
170
+ });
171
+ }
172
+ const media = sanity.defineArrayMember({
153
173
  name: `${types.typeName}.span.media`,
154
174
  type: "object",
155
175
  title: "Inline Media",
@@ -176,8 +196,8 @@ const icon = sanity.defineArrayMember({
176
196
  }
177
197
  }
178
198
  });
179
- function createSpans() {
180
- return [icon, media];
199
+ function createSpans(options) {
200
+ return [createIconSpan(options?.icon), media];
181
201
  }
182
202
  const h2 = {
183
203
  title: "Heading 2",
@@ -215,6 +235,7 @@ function createStyles() {
215
235
  }
216
236
  exports.createAnnotations = createAnnotations;
217
237
  exports.createDecorators = createDecorators;
238
+ exports.createIconSpan = createIconSpan;
218
239
  exports.createLists = createLists;
219
240
  exports.createSpans = createSpans;
220
241
  exports.createStyles = createStyles;
@@ -1 +1 @@
1
- {"version":3,"file":"parts.cjs","sources":["../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/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"],"sourcesContent":["import { ColorWheelIcon, HighlightIcon } from \"@sanity/icons\";\nimport { 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: ColorWheelIcon,\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: HighlightIcon,\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\n/** @public */\nfunction createAnnotations() {\n return [link, textColor, highlightColor] as const;\n}\n\nexport { createAnnotations };\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\n/** @public */\nfunction createDecorators() {\n return [strong, em, code, sup] as const;\n}\n\nexport { createDecorators };\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\n/** @public */\nfunction createLists() {\n return [bullet, number] as const;\n}\n\nexport { createLists };\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 options: {\n inline: true,\n },\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 motion: <>🌀</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.kind as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n kind: \"media.kind\",\n },\n },\n});\n","import { icon } from \"./icon\";\nimport { media } from \"./media\";\n\n/** @public */\nfunction createSpans() {\n return [icon, media] as const;\n}\n\nexport { createSpans };\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\n/** @public */\nfunction createStyles() {\n return [h2, h3, h4] as const;\n}\n\nexport { createStyles };\n"],"names":["ColorText","styled","span","color","textColor","defineField","type","name","typeName","title","icon","ColorWheelIcon","fields","components","annotation","props","value","renderDefault","ColorBg","highlightColor","HighlightIcon","link","LinkIcon","options","collapsed","collapsible","createAnnotations","strong","BoldIcon","component","children","jsx","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","createDecorators","bullet","UlistIcon","number","OlistIcon","createLists","defineArrayMember","description","Fragment","preview","React","isValidElement","media","fallbackTitle","select","prepare","inline","video","image","motion","kind","createSpans","h2","fontSize","fontWeight","lineHeight","h3","h4","createStyles"],"mappings":"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"}
1
+ {"version":3,"file":"parts.cjs","sources":["../src/parts/annotations/color.tsx","../src/parts/annotations/link.tsx","../src/parts/annotations/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"],"sourcesContent":["import { ColorWheelIcon, HighlightIcon } from \"@sanity/icons\";\nimport { defineField } from \"sanity\";\nimport { styled } from \"styled-components\";\nimport { typeName } from \"../../types\";\n\ntype ColorAnnotationOptions = {\n renderValue?: (value: string | undefined) => string | undefined;\n};\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\nfunction defaultResolveColor(value: string | undefined) {\n return value;\n}\n\nfunction createTextColorAnnotation(options?: ColorAnnotationOptions) {\n const renderValue = options?.renderValue ?? defaultResolveColor;\n\n return defineField({\n type: \"object\",\n name: `${typeName}.annotation.textColor`,\n title: \"Text Color\",\n icon: ColorWheelIcon,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n const value = renderValue(props.value?.color);\n return <ColorText $color={value}>{props.renderDefault(props)}</ColorText>;\n },\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\nfunction createHighlightColorAnnotation(options?: ColorAnnotationOptions) {\n const renderValue = options?.renderValue ?? defaultResolveColor;\n\n return defineField({\n type: \"object\",\n name: `${typeName}.annotation.highlightColor`,\n title: \"Highlight Color\",\n icon: HighlightIcon,\n fields: [defineField({ name: \"color\", type: \"wild.color\" })],\n components: {\n annotation: (props) => {\n const value = renderValue(props.value?.color);\n return <ColorBg $color={value}>{props.renderDefault(props)}</ColorBg>;\n },\n },\n });\n}\n\nexport { createTextColorAnnotation, createHighlightColorAnnotation, type ColorAnnotationOptions };\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 { type ColorAnnotationOptions, createHighlightColorAnnotation, createTextColorAnnotation } from \"./color\";\nimport { link } from \"./link\";\n\n/** @public */\nfunction createAnnotations(options?: { textColor?: ColorAnnotationOptions; highlightColor?: ColorAnnotationOptions }) {\n return [link, createTextColorAnnotation(options?.textColor), createHighlightColorAnnotation(options?.highlightColor)] as const;\n}\n\nexport { createAnnotations };\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\n/** @public */\nfunction createDecorators() {\n return [strong, em, code, sup] as const;\n}\n\nexport { createDecorators };\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\n/** @public */\nfunction createLists() {\n return [bullet, number] as const;\n}\n\nexport { createLists };\n","import * as React from \"react\";\nimport { defineArrayMember, defineField } from \"sanity\";\nimport { typeName } from \"../../types\";\n\ntype IconSpanOptions = {\n renderValuePreview?: (value?: string) => React.ReactNode;\n};\n\nfunction defaultRenderIconPreview(value?: React.ReactNode) {\n if (React.isValidElement(value)) return value;\n return (\n <span role=\"img\" className=\"inline-block size-[1em] shrink-0 text-current\" title={typeof value === \"string\" ? value : \"Icon\"}>\n 🧿\n </span>\n );\n}\n\nfunction createIconSpan(options?: IconSpanOptions) {\n const renderValuePreview = options?.renderValuePreview;\n\n return 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: renderValuePreview?.(icon) ?? defaultRenderIconPreview(icon),\n };\n },\n },\n });\n}\n\nexport { createIconSpan, type IconSpanOptions };\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 options: {\n inline: true,\n },\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 motion: <>🌀</>,\n };\n\n // @ts-expect-error: It gets its props from the prepare function below.\n return icons[props.kind as keyof typeof icons] || <>🖼️</>;\n },\n },\n preview: {\n select: {\n kind: \"media.kind\",\n },\n },\n});\n","import { createIconSpan, type IconSpanOptions } from \"./icon\";\nimport { media } from \"./media\";\n\n/** @public */\nfunction createSpans(options?: { icon?: IconSpanOptions }) {\n return [createIconSpan(options?.icon), media] as const;\n}\n\nexport { createSpans };\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\n/** @public */\nfunction createStyles() {\n return [h2, h3, h4] as const;\n}\n\nexport { createStyles };\n"],"names":["ColorText","styled","span","$color","defaultResolveColor","value","createTextColorAnnotation","options","renderValue","defineField","type","name","typeName","title","icon","ColorWheelIcon","fields","components","annotation","props","color","renderDefault","ColorBg","createHighlightColorAnnotation","HighlightIcon","link","LinkIcon","collapsed","collapsible","createAnnotations","textColor","highlightColor","strong","BoldIcon","component","children","jsx","em","ItalicIcon","code","CodeIcon","sup","verticalAlign","createDecorators","bullet","UlistIcon","number","OlistIcon","createLists","defaultRenderIconPreview","React","isValidElement","createIconSpan","renderValuePreview","defineArrayMember","description","Fragment","preview","media","fallbackTitle","select","prepare","inline","video","image","motion","kind","createSpans","h2","fontSize","fontWeight","lineHeight","h3","h4","createStyles"],"mappings":"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"}