@makeswift/runtime 0.28.10-canary.11 → 0.28.10-canary.12
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/cjs/api/graphql-api-client.js +1 -1
- package/dist/cjs/api/rest-api-client.js +1 -1
- package/dist/cjs/api-handler/handlers/manifest.js +1 -1
- package/dist/cjs/controls/rich-text-v2/rich-text-v2.js +23 -12
- package/dist/cjs/controls/rich-text-v2/rich-text-v2.js.map +1 -1
- package/dist/cjs/controls/serialization/base/visitor.js +5 -3
- package/dist/cjs/controls/serialization/base/visitor.js.map +1 -1
- package/dist/cjs/controls/visitors/merge-translations-visitor.js +1 -1
- package/dist/cjs/controls/visitors/merge-translations-visitor.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.js +13 -4
- package/dist/cjs/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/EditableTextV2/index.js +1 -7
- package/dist/cjs/runtimes/react/controls/rich-text-v2/EditableTextV2/index.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.js +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/render-rich-text-v2.js +6 -2
- package/dist/cjs/runtimes/react/controls/rich-text-v2/render-rich-text-v2.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2-value.js +2 -2
- package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2-value.js.map +1 -1
- package/dist/esm/api/graphql-api-client.js +1 -1
- package/dist/esm/api/rest-api-client.js +1 -1
- package/dist/esm/api-handler/handlers/manifest.js +1 -1
- package/dist/esm/controls/rich-text-v2/rich-text-v2.js +23 -12
- package/dist/esm/controls/rich-text-v2/rich-text-v2.js.map +1 -1
- package/dist/esm/controls/serialization/base/visitor.js +5 -3
- package/dist/esm/controls/serialization/base/visitor.js.map +1 -1
- package/dist/esm/controls/visitors/merge-translations-visitor.js +1 -1
- package/dist/esm/controls/visitors/merge-translations-visitor.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.js +16 -4
- package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/index.js +2 -3
- package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/index.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.js +2 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/render-rich-text-v2.js +6 -2
- package/dist/esm/runtimes/react/controls/rich-text-v2/render-rich-text-v2.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2-value.js +2 -2
- package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2-value.js.map +1 -1
- package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts +160 -23
- package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
- package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -1
- package/dist/types/{controls/__tests__/slot.test.d.ts → runtimes/react/controls/__tests__/react-node-controls.test.d.ts} +1 -1
- package/dist/types/runtimes/react/controls/__tests__/react-node-controls.test.d.ts.map +1 -0
- package/dist/types/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts +4 -4
- package/dist/types/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/rich-text-v2/EditableTextV2/index.d.ts +2 -3
- package/dist/types/runtimes/react/controls/rich-text-v2/EditableTextV2/index.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/rich-text-v2/render-rich-text-v2.d.ts +5 -1
- package/dist/types/runtimes/react/controls/rich-text-v2/render-rich-text-v2.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/rich-text-v2/rich-text-v2-value.d.ts +4 -4
- package/dist/types/runtimes/react/controls/rich-text-v2/rich-text-v2-value.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/types/controls/__tests__/slot.test.d.ts.map +0 -1
|
@@ -27,7 +27,7 @@ class MakeswiftGraphQLApiClient {
|
|
|
27
27
|
graphqlClient;
|
|
28
28
|
constructor({ endpoint }) {
|
|
29
29
|
this.graphqlClient = new import_client.GraphQLClient(endpoint, {
|
|
30
|
-
"makeswift-runtime-version": "0.28.10-canary.
|
|
30
|
+
"makeswift-runtime-version": "0.28.10-canary.12"
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
async getUnversionedResources({
|
|
@@ -198,7 +198,7 @@ class MakeswiftRestAPIClient {
|
|
|
198
198
|
const requestHeaders = new Headers({
|
|
199
199
|
"x-api-key": this.apiKey,
|
|
200
200
|
"makeswift-site-api-key": this.apiKey,
|
|
201
|
-
"makeswift-runtime-version": "0.28.10-canary.
|
|
201
|
+
"makeswift-runtime-version": "0.28.10-canary.12"
|
|
202
202
|
});
|
|
203
203
|
if (siteVersion?.token) {
|
|
204
204
|
requestUrl.searchParams.set("version", siteVersion.version);
|
|
@@ -28,7 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
|
|
|
28
28
|
return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
|
|
29
29
|
}
|
|
30
30
|
return import_request_response.ApiResponse.json({
|
|
31
|
-
version: "0.28.10-canary.
|
|
31
|
+
version: "0.28.10-canary.12",
|
|
32
32
|
interactionMode: true,
|
|
33
33
|
clientSideNavigation: false,
|
|
34
34
|
elementFromPoint: false,
|
|
@@ -48,12 +48,13 @@ var import_plugin = require("./plugin");
|
|
|
48
48
|
var import_control = require("./control");
|
|
49
49
|
var import_get_translations = require("./translations/get-translations");
|
|
50
50
|
class Definition extends import_controls.RichTextDefinition {
|
|
51
|
+
plugins;
|
|
51
52
|
constructor({ mode, defaultValue }, plugins) {
|
|
52
53
|
super({
|
|
53
54
|
mode,
|
|
54
|
-
defaultValue: defaultValue ?? (mode === Definition.Mode.Inline ? "Edit this text" : Definition.generateParagraph())
|
|
55
|
-
plugins: plugins ?? (mode === Definition.Mode.Inline ? [(0, import_InlineModePlugin.InlineModePlugin)()] : [(0, import_BlockPlugin.BlockPlugin)(), (0, import_TypographyPlugin.TypographyPlugin)(), (0, import_TextAlignPlugin.TextAlignPlugin)(), (0, import_InlinePlugin.InlinePlugin)(), (0, import_LinkPlugin.LinkPlugin)()])
|
|
55
|
+
defaultValue: defaultValue ?? (mode === Definition.Mode.Inline ? "Edit this text" : Definition.generateParagraph())
|
|
56
56
|
});
|
|
57
|
+
this.plugins = plugins ?? (mode === Definition.Mode.Inline ? [(0, import_InlineModePlugin.InlineModePlugin)()] : [(0, import_BlockPlugin.BlockPlugin)(), (0, import_TypographyPlugin.TypographyPlugin)(), (0, import_TextAlignPlugin.TextAlignPlugin)(), (0, import_InlinePlugin.InlinePlugin)(), (0, import_LinkPlugin.LinkPlugin)()]);
|
|
57
58
|
}
|
|
58
59
|
static generateParagraph() {
|
|
59
60
|
return (0, import_corporate_ipsum.default)(3);
|
|
@@ -62,13 +63,13 @@ class Definition extends import_controls.RichTextDefinition {
|
|
|
62
63
|
if (data.type !== Definition.type) {
|
|
63
64
|
throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`);
|
|
64
65
|
}
|
|
65
|
-
const { config } = Definition.fullSchema({
|
|
66
|
+
const { config, plugins } = Definition.fullSchema({
|
|
66
67
|
pluginDef: import_controls.SerializationSchema.deserializedRecord
|
|
67
68
|
}).definition.parse(data);
|
|
68
|
-
const { plugins, ...userConfig } = config;
|
|
69
|
+
const { plugins: configPlugins, ...userConfig } = config;
|
|
69
70
|
return new RichTextV2Definition(
|
|
70
71
|
userConfig,
|
|
71
|
-
plugins.map(
|
|
72
|
+
(plugins ?? configPlugins ?? []).map(
|
|
72
73
|
({ control }) => control ? { control: { definition: deserializeCallback(control?.definition) } } : {}
|
|
73
74
|
)
|
|
74
75
|
);
|
|
@@ -80,21 +81,31 @@ class Definition extends import_controls.RichTextDefinition {
|
|
|
80
81
|
definition: pluginDef
|
|
81
82
|
}).optional()
|
|
82
83
|
});
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
plugins
|
|
84
|
+
const plugins = import_zod.z.array(plugin);
|
|
85
|
+
const config = Definition.configSchema().extend({
|
|
86
|
+
// plugins have been moved from config to the definition itself; keeping
|
|
87
|
+
// the field here as optional so we can deserialize definitions coming from
|
|
88
|
+
// older runtimes
|
|
89
|
+
plugins: plugins.optional()
|
|
86
90
|
});
|
|
87
91
|
return {
|
|
88
92
|
...baseSchema,
|
|
89
93
|
config,
|
|
90
94
|
definition: import_zod.z.object({
|
|
91
95
|
type: baseSchema.type,
|
|
96
|
+
// marked as optional for backward compatibility with older runtimes
|
|
97
|
+
plugins: plugins.optional(),
|
|
92
98
|
config
|
|
93
99
|
})
|
|
94
100
|
};
|
|
95
101
|
}
|
|
102
|
+
static configSchema() {
|
|
103
|
+
return super.schema.userConfig.extend({
|
|
104
|
+
defaultValue: import_zod.z.string()
|
|
105
|
+
});
|
|
106
|
+
}
|
|
96
107
|
get configSchema() {
|
|
97
|
-
return Definition.
|
|
108
|
+
return Definition.configSchema();
|
|
98
109
|
}
|
|
99
110
|
createInstance(args) {
|
|
100
111
|
return new import_control.RichTextV2Control(this, args);
|
|
@@ -102,7 +113,7 @@ class Definition extends import_controls.RichTextDefinition {
|
|
|
102
113
|
resolveValue(data, _resolver, _stylesheet, control) {
|
|
103
114
|
const stableValue = (0, import_controls.StableValue)({
|
|
104
115
|
name: Definition.type,
|
|
105
|
-
read: () => (0, import_rich_text_v2.renderRichTextV2)(data, this.config, control ?? null)
|
|
116
|
+
read: () => (0, import_rich_text_v2.renderRichTextV2)({ data, config: this.config, control: control ?? null })
|
|
106
117
|
});
|
|
107
118
|
return {
|
|
108
119
|
...stableValue,
|
|
@@ -113,10 +124,10 @@ class Definition extends import_controls.RichTextDefinition {
|
|
|
113
124
|
getTranslatableData(data) {
|
|
114
125
|
if (data == null)
|
|
115
126
|
return null;
|
|
116
|
-
return (0, import_get_translations.getTranslatableData)(Definition.dataToNodes(data), this.
|
|
127
|
+
return (0, import_get_translations.getTranslatableData)(Definition.dataToNodes(data), this.plugins);
|
|
117
128
|
}
|
|
118
129
|
get pluginControls() {
|
|
119
|
-
return this.
|
|
130
|
+
return this.plugins.map((plugin) => plugin.control).filter(import_controls.isNotNil);
|
|
120
131
|
}
|
|
121
132
|
pluginControlAt(index) {
|
|
122
133
|
return this.pluginControls[index];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n StableValue,\n type Data,\n type Resolvable,\n type ControlInstanceArgs,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport { getTranslatableData } from './translations/get-translations'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n StableValue,\n type Data,\n type Resolvable,\n type ControlInstanceArgs,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport { getTranslatableData } from './translations/get-translations'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n}\n\nclass Definition extends BaseRichTextDefinition<ReactNode, Config, InstanceType> {\n readonly plugins: RichTextV2Plugin[]\n\n constructor({ mode, defaultValue }: UserConfig, plugins?: RichTextV2Plugin[]) {\n super({\n mode,\n defaultValue:\n defaultValue ??\n (mode === Definition.Mode.Inline ? 'Edit this text' : Definition.generateParagraph()),\n })\n\n // The built-in plugin set is currently determined entirely by `mode` and\n // has remained stable across runtime versions, so it does not need to be\n // stored in the internal config. When that changes, we should:\n // - introduce a plugin registry\n // - have the config carry the IDs of selected plugins\n // - use the current inline and block plugin sets as defaults when\n // deserializing a legacy config that does not include plugin IDs\n this.plugins =\n plugins ??\n (mode === Definition.Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()])\n }\n\n static generateParagraph(): string {\n return ipsum(3)\n }\n\n static deserialize(\n data: DeserializedRecord,\n deserializeCallback: (r: DeserializedRecord) => ControlDefinition,\n ): RichTextV2Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`)\n }\n\n const { config, plugins } = Definition.fullSchema({\n pluginDef: SerializationSchema.deserializedRecord,\n }).definition.parse(data)\n\n const { plugins: configPlugins, ...userConfig } = config\n\n return new RichTextV2Definition(\n userConfig,\n (plugins ?? configPlugins ?? []).map(({ control }) =>\n control ? { control: { definition: deserializeCallback(control?.definition) } } : {},\n ),\n )\n }\n\n static fullSchema<S extends SchemaTypeAny>({ pluginDef }: { pluginDef: S }) {\n const baseSchema = super.schema\n const plugin = z.object({\n control: z\n .object({\n definition: pluginDef,\n })\n .optional(),\n })\n\n const plugins = z.array(plugin)\n\n const config = Definition.configSchema().extend({\n // plugins have been moved from config to the definition itself; keeping\n // the field here as optional so we can deserialize definitions coming from\n // older runtimes\n plugins: plugins.optional(),\n })\n\n return {\n ...baseSchema,\n config,\n definition: z.object({\n type: baseSchema.type,\n // marked as optional for backward compatibility with older runtimes\n plugins: plugins.optional(),\n config,\n }),\n }\n }\n\n static configSchema() {\n return super.schema.userConfig.extend({\n defaultValue: z.string(),\n })\n }\n\n get configSchema(): SchemaType<Config> {\n return Definition.configSchema()\n }\n\n createInstance(args: ControlInstanceArgs) {\n return new RichTextV2Control(this, args)\n }\n\n resolveValue(\n data: DataType | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: InstanceType,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichTextV2({ data, config: this.config, control: control ?? null }),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n getTranslatableData(data: DataType | undefined): Data {\n if (data == null) return null\n return getTranslatableData(Definition.dataToNodes(data), this.plugins)\n }\n\n get pluginControls(): RichTextPluginControl[] {\n return this.plugins.map(plugin => plugin.control).filter(isNotNil)\n }\n\n pluginControlAt(index: number): RichTextPluginControl | undefined {\n return this.pluginControls[index]\n }\n\n toText(data: DataType | undefined): string {\n if (data == null) return ''\n return toText(Definition.dataToNodes(data), this.config.mode ?? Definition.Mode.Block)\n }\n}\n\nexport class RichTextV2Definition extends Definition {}\n\nexport function RichText(config?: UserConfig): RichTextV2Definition {\n return new RichTextV2Definition(config ?? {})\n}\n\nRichText.Mode = Definition.Mode\nRichText.isV1Data = Definition.isV1Data\nRichText.dataToNodes = Definition.dataToNodes\nRichText.Plugin = Plugin\n\nexport { RichTextMode as RichTextV2Mode, type DataV2Type as RichTextDataV2, RichTextV2Control }\n"],"mappings":"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","names":["BaseRichTextDefinition","ipsum"]}
|
|
@@ -32,8 +32,7 @@ class BaseControlSerializationVisitor extends import_controls.ControlSerializati
|
|
|
32
32
|
super([serializeDefinitionPlugin, ...plugins]);
|
|
33
33
|
}
|
|
34
34
|
visitRichTextV2(def) {
|
|
35
|
-
const
|
|
36
|
-
const pluginDefs = plugins.map(
|
|
35
|
+
const pluginDefs = def.plugins.map(
|
|
37
36
|
({ control }) => control ? {
|
|
38
37
|
control: {
|
|
39
38
|
definition: control.definition,
|
|
@@ -46,7 +45,10 @@ class BaseControlSerializationVisitor extends import_controls.ControlSerializati
|
|
|
46
45
|
} : {}
|
|
47
46
|
);
|
|
48
47
|
const serialized = (0, import_controls.serializeObject)(
|
|
49
|
-
|
|
48
|
+
// Continue serializing plugins as part of the config for the time being
|
|
49
|
+
// for builder compatibility; the current runtime accept plugins either in
|
|
50
|
+
// the config or at the definition level -- see `RichTextV2Definition.fullSchema`
|
|
51
|
+
{ config: { ...def.config, plugins: pluginDefs } },
|
|
50
52
|
this.serializationPlugins
|
|
51
53
|
);
|
|
52
54
|
return { ...serialized, type: import_rich_text_v2.RichTextV2Definition.type };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/controls/serialization/base/visitor.ts"],"sourcesContent":["import {\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nexport class BaseControlSerializationVisitor extends ControlSerializationVisitor {\n constructor(plugins: SerializationPlugin<any>[]) {\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeDefinitionPlugin, ...plugins])\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/base/visitor.ts"],"sourcesContent":["import {\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nexport class BaseControlSerializationVisitor extends ControlSerializationVisitor {\n constructor(plugins: SerializationPlugin<any>[]) {\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeDefinitionPlugin, ...plugins])\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n // serialize only the plugin control definition, if any\n const pluginDefs = def.plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n const serialized = serializeObject(\n // Continue serializing plugins as part of the config for the time being\n // for builder compatibility; the current runtime accept plugins either in\n // the config or at the definition level -- see `RichTextV2Definition.fullSchema`\n { config: { ...def.config, plugins: pluginDefs } },\n this.serializationPlugins,\n ) as SerializedRecord\n\n return { ...serialized, type: RichTextV2Definition.type }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMO;AAEP,0BAAqC;AAE9B,MAAM,wCAAwC,4CAA4B;AAAA,EAC/E,YAAY,SAAqC;AAC/C,UAAM,4BAAoE;AAAA,MACxE,OAAO,CAAC,QAAiB,eAAe;AAAA,MACxC,WAAW,CAAC,QAA2B,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,CAAC,2BAA2B,GAAG,OAAO,CAAC;AAAA,EAC/C;AAAA,EAEA,gBAAgB,KAA6C;AAE3D,UAAM,aAAa,IAAI,QAAQ;AAAA,MAAI,CAAC,EAAE,QAAQ,MAC5C,UACI;AAAA,QACE,SAAS;AAAA,UACP,YAAY,QAAQ;AAAA;AAAA;AAAA,UAGpB,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM;AAAA,UAAC;AAAA,QACnB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAEA,UAAM,iBAAa;AAAA;AAAA;AAAA;AAAA,MAIjB,EAAE,QAAQ,EAAE,GAAG,IAAI,QAAQ,SAAS,WAAW,EAAE;AAAA,MACjD,KAAK;AAAA,IACP;AAEA,WAAO,EAAE,GAAG,YAAY,MAAM,yCAAqB,KAAK;AAAA,EAC1D;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/controls/visitors/merge-translations-visitor.ts"],"sourcesContent":["import { Data, DataType, MergeTranslationsVisitor } from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../rich-text-v2'\nimport { RichTextTranslationDto } from '../rich-text-v2/translations/translations-core'\nimport { mergeTranslatedNodes } from '../rich-text-v2/translations/merge-translations'\n\nexport class ReactMergeTranslationsVisitor extends MergeTranslationsVisitor {\n visitRichTextV2(\n def: RichTextV2Definition,\n data: DataType<RichTextV2Definition> | undefined,\n translatedData: Data,\n ): Data {\n if (data == null || translatedData == null) return data\n\n const { descendants, ...rest } = RichTextV2Definition.normalizeData(data)\n\n return {\n ...rest,\n descendants: mergeTranslatedNodes(\n descendants,\n translatedData as RichTextTranslationDto,\n def.
|
|
1
|
+
{"version":3,"sources":["../../../../src/controls/visitors/merge-translations-visitor.ts"],"sourcesContent":["import { Data, DataType, MergeTranslationsVisitor } from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../rich-text-v2'\nimport { RichTextTranslationDto } from '../rich-text-v2/translations/translations-core'\nimport { mergeTranslatedNodes } from '../rich-text-v2/translations/merge-translations'\n\nexport class ReactMergeTranslationsVisitor extends MergeTranslationsVisitor {\n visitRichTextV2(\n def: RichTextV2Definition,\n data: DataType<RichTextV2Definition> | undefined,\n translatedData: Data,\n ): Data {\n if (data == null || translatedData == null) return data\n\n const { descendants, ...rest } = RichTextV2Definition.normalizeData(data)\n\n return {\n ...rest,\n descendants: mergeTranslatedNodes(\n descendants,\n translatedData as RichTextTranslationDto,\n def.plugins,\n ),\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyD;AAEzD,0BAAqC;AAErC,gCAAqC;AAE9B,MAAM,sCAAsC,yCAAyB;AAAA,EAC1E,gBACE,KACA,MACA,gBACM;AACN,QAAI,QAAQ,QAAQ,kBAAkB;AAAM,aAAO;AAEnD,UAAM,EAAE,aAAa,GAAG,KAAK,IAAI,yCAAqB,cAAc,IAAI;AAExE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,iBAAa;AAAA,QACX;AAAA,QACA;AAAA,QACA,IAAI;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -29,7 +29,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
30
|
var editable_text_v2_exports = {};
|
|
31
31
|
__export(editable_text_v2_exports, {
|
|
32
|
-
|
|
32
|
+
EditableTextV2Value: () => EditableTextV2Value
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(editable_text_v2_exports);
|
|
35
35
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -39,17 +39,26 @@ var import_is_hotkey = __toESM(require("is-hotkey"));
|
|
|
39
39
|
var import_slate_react = require("slate-react");
|
|
40
40
|
var import_rich_text_v2 = require("../../../../../controls/rich-text-v2");
|
|
41
41
|
var import_use_builder_edit_mode = require("../../../hooks/use-builder-edit-mode");
|
|
42
|
+
var import_use_control_instance = require("../../../hooks/use-control-instance");
|
|
42
43
|
var import_use_slate_reset = require("../../use-slate-reset");
|
|
43
44
|
var import_builder_edit_mode = require("../../../../../state/modules/builder-edit-mode");
|
|
44
45
|
var import_poll_box_model = require("../../../poll-box-model");
|
|
45
46
|
var import_slate2 = require("../../../../../slate");
|
|
47
|
+
var import_node_value = require("../../node-value");
|
|
46
48
|
var import_useSyncDOMSelection = require("./useSyncDOMSelection");
|
|
47
49
|
var import_render_element = require("./render-element");
|
|
48
50
|
var import_render_leaf = require("./render-leaf");
|
|
49
51
|
var import_useRemoteChanges = require("./useRemoteChanges");
|
|
50
52
|
var import_usePresetValue = require("./usePresetValue");
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
const EditableTextV2Value = (0, import_react.memo)(function EditableTextV2Value2({
|
|
54
|
+
instanceKey,
|
|
55
|
+
...props
|
|
56
|
+
}) {
|
|
57
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_node_value.NodeValue, { instanceKey, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EditableTextV2, { instanceKey, ...props }) });
|
|
58
|
+
});
|
|
59
|
+
function EditableTextV2({ text, config, instanceKey }) {
|
|
60
|
+
const plugins = (0, import_react.useMemo)(() => new import_rich_text_v2.RichTextV2Definition(config).plugins, [config]);
|
|
61
|
+
const control = (0, import_use_control_instance.useControlInstance)(instanceKey, import_rich_text_v2.RichTextV2Control);
|
|
53
62
|
const [editor] = (0, import_react.useState)(
|
|
54
63
|
() => plugins.reduceRight(
|
|
55
64
|
(editor2, plugin) => plugin?.withPlugin?.(editor2) ?? editor2,
|
|
@@ -166,6 +175,6 @@ function EditableTextV2({ text, config, control }) {
|
|
|
166
175
|
}
|
|
167
176
|
// Annotate the CommonJS export names for ESM import in node:
|
|
168
177
|
0 && (module.exports = {
|
|
169
|
-
|
|
178
|
+
EditableTextV2Value
|
|
170
179
|
});
|
|
171
180
|
//# sourceMappingURL=editable-text-v2.js.map
|
package/dist/cjs/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.tsx"],"sourcesContent":["'use client'\n\nimport {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport {\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n Slate,\n Editable,\n} from 'slate-react'\n\nimport { type ConfigType } from '@makeswift/controls'\n\nimport {\n RichTextV2Definition,\n RichText,\n RichTextV2Control,\n type RichTextDataV2,\n} from '../../../../../controls/rich-text-v2'\n\nimport { useBuilderEditMode } from '../../../hooks/use-builder-edit-mode'\nimport { useSlateReset } from '../../use-slate-reset'\nimport { BuilderEditMode } from '../../../../../state/modules/builder-edit-mode'\nimport { pollBoxModel } from '../../../poll-box-model'\nimport { withBuilder, withLocalChanges } from '../../../../../slate'\n\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\nimport { useSyncRemoteChanges } from './useRemoteChanges'\nimport { defaultValue, usePresetValue } from './usePresetValue'\n\ntype Props = {\n text?: RichTextDataV2\n config: ConfigType<RichTextV2Definition>\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.tsx"],"sourcesContent":["'use client'\n\nimport {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport {\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n Slate,\n Editable,\n} from 'slate-react'\n\nimport { type ControlInstanceKey, type ConfigType } from '@makeswift/controls'\n\nimport {\n RichTextV2Definition,\n RichText,\n RichTextV2Control,\n type RichTextDataV2,\n} from '../../../../../controls/rich-text-v2'\n\nimport { useBuilderEditMode } from '../../../hooks/use-builder-edit-mode'\nimport { useControlInstance } from '../../../hooks/use-control-instance'\nimport { useSlateReset } from '../../use-slate-reset'\nimport { BuilderEditMode } from '../../../../../state/modules/builder-edit-mode'\nimport { pollBoxModel } from '../../../poll-box-model'\nimport { withBuilder, withLocalChanges } from '../../../../../slate'\nimport { NodeValue } from '../../node-value'\n\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\nimport { useSyncRemoteChanges } from './useRemoteChanges'\nimport { defaultValue, usePresetValue } from './usePresetValue'\n\ntype Props = {\n text?: RichTextDataV2\n config: ConfigType<RichTextV2Definition>\n instanceKey: ControlInstanceKey | undefined\n}\n\nexport const EditableTextV2Value = memo(function EditableTextV2Value({\n instanceKey,\n ...props\n}: Props): ReactNode {\n return (\n <NodeValue instanceKey={instanceKey}>\n <EditableTextV2 instanceKey={instanceKey} {...props} />\n </NodeValue>\n )\n})\n\nfunction EditableTextV2({ text, config, instanceKey }: Props) {\n const plugins = useMemo(() => new RichTextV2Definition(config).plugins, [config])\n const control = useControlInstance(instanceKey, RichTextV2Control)\n\n const [editor] = useState(() =>\n plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n withLocalChanges(withBuilder(withReact(createEditor()))),\n ),\n )\n\n useEffect(() => {\n if (control == null) return\n\n const element = ReactEditor.toDOMNode(editor, editor)\n return pollBoxModel({\n element,\n onBoxModelChange: boxModel => control.changeBoxModel(boxModel),\n })\n }, [editor, control])\n\n // ------ Preserving selection ------\n\n const isPreservingFocus = useRef(false)\n useSyncDOMSelection(editor, isPreservingFocus)\n const editMode = useBuilderEditMode()\n\n useEffect(() => {\n /**\n * This is required because clicking on the overlay has `relatedTarget` null just like the sidebar, but\n * - in the case of the overlay we switch to BUILD mode\n * - in the case of the sidebar we preserve the selection\n */\n if (editMode !== BuilderEditMode.CONTENT) {\n isPreservingFocus.current = false\n ReactEditor.deselect(editor)\n }\n }, [editMode, editor])\n\n // ------ Syncing remote changes ------\n\n useSyncRemoteChanges(editor, text)\n\n // ------ Default value ------\n\n const presetValue = usePresetValue(config)\n\n const initialValue = useMemo(\n () => (text && RichText.dataToNodes(text)) ?? presetValue,\n [text, presetValue],\n )\n\n useEffect(() => {\n control?.setEditor(editor)\n control?.setDefaultValue(defaultValue)\n }, [control, editor])\n\n /**\n * When initialValue is set to the default value we need to trigger an local change so that the sidebar updates and so the data is saved\n */\n useEffect(() => {\n if (initialValue === presetValue) {\n control?.onLocalUserChange()\n }\n }, [control, initialValue, presetValue])\n\n // ------ Rendering ------\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return <RichTextV2Element {...props} plugins={plugins} />\n },\n [plugins],\n )\n\n const renderLeaf = useCallback(\n (props: RenderLeafProps) => {\n return <RichTextV2Leaf {...props} plugins={plugins} />\n },\n [plugins],\n )\n\n // ------ Event handlers ------\n\n const handleFocus = useCallback(() => {\n isPreservingFocus.current = true\n control?.select()\n }, [control])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return control?.redo()\n if (isHotkey('mod+z', e)) return control?.undo()\n if (isHotkey('escape')(e)) {\n isPreservingFocus.current = false\n ReactEditor.blur(editor)\n control?.switchToBuildMode()\n }\n\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n }\n\n plugins.forEach(plugin => plugin?.onKeyDown?.(e, editor))\n },\n [control, plugins, editor, editMode],\n )\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n e.preventDefault()\n }\n },\n [editMode],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n e.preventDefault()\n }\n },\n [editMode],\n )\n\n const handleBlur = useCallback((e: FocusEvent) => {\n // outside of iframe (overlay, sidebar, etc)\n if (e.relatedTarget == null) return\n // another text\n if (e.relatedTarget?.getAttribute('contenteditable') === 'true')\n isPreservingFocus.current = false\n }, [])\n\n const slateReset = useSlateReset()\n\n return (\n <Slate editor={editor} value={initialValue}>\n <Editable\n className={slateReset}\n renderLeaf={renderLeaf}\n renderElement={renderElement}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onClick={handleClick}\n onBlur={handleBlur}\n readOnly={editMode !== BuilderEditMode.CONTENT}\n placeholder=\"Write some text...\"\n />\n </Slate>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DM;AA1DN,mBAWO;AACP,mBAA6B;AAC7B,uBAAqB;AACrB,yBAOO;AAIP,0BAKO;AAEP,mCAAmC;AACnC,kCAAmC;AACnC,6BAA8B;AAC9B,+BAAgC;AAChC,4BAA6B;AAC7B,IAAAA,gBAA8C;AAC9C,wBAA0B;AAE1B,iCAAoC;AACpC,4BAAkC;AAClC,yBAA+B;AAC/B,8BAAqC;AACrC,4BAA6C;AAQtC,MAAM,0BAAsB,mBAAK,SAASC,qBAAoB;AAAA,EACnE;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,SACE,4CAAC,+BAAU,aACT,sDAAC,kBAAe,aAA2B,GAAG,OAAO,GACvD;AAEJ,CAAC;AAED,SAAS,eAAe,EAAE,MAAM,QAAQ,YAAY,GAAU;AAC5D,QAAM,cAAU,sBAAQ,MAAM,IAAI,yCAAqB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;AAChF,QAAM,cAAU,gDAAmB,aAAa,qCAAiB;AAEjE,QAAM,CAAC,MAAM,QAAI;AAAA,IAAS,MACxB,QAAQ;AAAA,MACN,CAACC,SAAQ,WAAW,QAAQ,aAAaA,OAAM,KAAKA;AAAA,UACpD,oCAAiB,+BAAY,kCAAU,2BAAa,CAAC,CAAC,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,8BAAU,MAAM;AACd,QAAI,WAAW;AAAM;AAErB,UAAM,UAAU,+BAAY,UAAU,QAAQ,MAAM;AACpD,eAAO,oCAAa;AAAA,MAClB;AAAA,MACA,kBAAkB,cAAY,QAAQ,eAAe,QAAQ;AAAA,IAC/D,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,OAAO,CAAC;AAIpB,QAAM,wBAAoB,qBAAO,KAAK;AACtC,sDAAoB,QAAQ,iBAAiB;AAC7C,QAAM,eAAW,iDAAmB;AAEpC,8BAAU,MAAM;AAMd,QAAI,aAAa,yCAAgB,SAAS;AACxC,wBAAkB,UAAU;AAC5B,qCAAY,SAAS,MAAM;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,CAAC;AAIrB,oDAAqB,QAAQ,IAAI;AAIjC,QAAM,kBAAc,sCAAe,MAAM;AAEzC,QAAM,mBAAe;AAAA,IACnB,OAAO,QAAQ,6BAAS,YAAY,IAAI,MAAM;AAAA,IAC9C,CAAC,MAAM,WAAW;AAAA,EACpB;AAEA,8BAAU,MAAM;AACd,aAAS,UAAU,MAAM;AACzB,aAAS,gBAAgB,kCAAY;AAAA,EACvC,GAAG,CAAC,SAAS,MAAM,CAAC;AAKpB,8BAAU,MAAM;AACd,QAAI,iBAAiB,aAAa;AAChC,eAAS,kBAAkB;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,SAAS,cAAc,WAAW,CAAC;AAIvC,QAAM,oBAAgB;AAAA,IACpB,CAAC,UAA8B;AAC7B,aAAO,4CAAC,2CAAmB,GAAG,OAAO,SAAkB;AAAA,IACzD;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,iBAAa;AAAA,IACjB,CAAC,UAA2B;AAC1B,aAAO,4CAAC,qCAAgB,GAAG,OAAO,SAAkB;AAAA,IACtD;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAIA,QAAM,kBAAc,0BAAY,MAAM;AACpC,sBAAkB,UAAU;AAC5B,aAAS,OAAO;AAAA,EAClB,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,oBAAgB;AAAA,IACpB,CAAC,MAAqB;AACpB,cAAI,iBAAAC,SAAS,eAAe,CAAC;AAAG,eAAO,SAAS,KAAK;AACrD,cAAI,iBAAAA,SAAS,SAAS,CAAC;AAAG,eAAO,SAAS,KAAK;AAC/C,cAAI,iBAAAA,SAAS,QAAQ,EAAE,CAAC,GAAG;AACzB,0BAAkB,UAAU;AAC5B,uCAAY,KAAK,MAAM;AACvB,iBAAS,kBAAkB;AAAA,MAC7B;AAEA,UAAI,aAAa,yCAAgB,SAAS;AACxC,UAAE,gBAAgB;AAAA,MACpB;AAEA,cAAQ,QAAQ,YAAU,QAAQ,YAAY,GAAG,MAAM,CAAC;AAAA,IAC1D;AAAA,IACA,CAAC,SAAS,SAAS,QAAQ,QAAQ;AAAA,EACrC;AAEA,QAAM,kBAAc;AAAA,IAClB,CAAC,MAAqB;AACpB,UAAI,aAAa,yCAAgB,SAAS;AACxC,UAAE,gBAAgB;AAClB,UAAE,eAAe;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,kBAAc;AAAA,IAClB,CAAC,MAAkB;AACjB,UAAI,aAAa,yCAAgB,SAAS;AACxC,UAAE,gBAAgB;AAClB,UAAE,eAAe;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,iBAAa,0BAAY,CAAC,MAAkB;AAEhD,QAAI,EAAE,iBAAiB;AAAM;AAE7B,QAAI,EAAE,eAAe,aAAa,iBAAiB,MAAM;AACvD,wBAAkB,UAAU;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAa,sCAAc;AAEjC,SACE,4CAAC,4BAAM,QAAgB,OAAO,cAC5B;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,aAAa,yCAAgB;AAAA,MACvC,aAAY;AAAA;AAAA,EACd,GACF;AAEJ;","names":["import_slate","EditableTextV2Value","editor","isHotkey"]}
|
|
@@ -15,18 +15,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
15
|
}
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
19
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
19
|
var EditableTextV2_exports = {};
|
|
21
20
|
__export(EditableTextV2_exports, {
|
|
22
21
|
default: () => EditableTextV2_default
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(EditableTextV2_exports);
|
|
25
|
-
__reExport(EditableTextV2_exports, require("./editable-text-v2"), module.exports);
|
|
26
24
|
var import_editable_text_v2 = require("./editable-text-v2");
|
|
27
|
-
var EditableTextV2_default = import_editable_text_v2.
|
|
28
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
29
|
-
0 && (module.exports = {
|
|
30
|
-
...require("./editable-text-v2")
|
|
31
|
-
});
|
|
25
|
+
var EditableTextV2_default = import_editable_text_v2.EditableTextV2Value;
|
|
32
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/index.tsx"],"sourcesContent":["import { EditableTextV2Value } from './editable-text-v2'\nexport default EditableTextV2Value\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAoC;AACpC,IAAO,yBAAQ;","names":[]}
|
|
@@ -30,7 +30,7 @@ var import_utils = require("../../../../slate/utils");
|
|
|
30
30
|
var import_control = require("../control");
|
|
31
31
|
const ReadOnlyTextV2 = (0, import_react.forwardRef)(function ReadOnlyText({ text, config }, ref) {
|
|
32
32
|
const descendants = (0, import_react.useMemo)(() => text?.descendants ?? [], [text?.descendants]);
|
|
33
|
-
const plugins = (0, import_react.useMemo)(() => config
|
|
33
|
+
const plugins = (0, import_react.useMemo)(() => config ? new import_rich_text_v2.RichTextV2Definition(config).plugins : [], [config]);
|
|
34
34
|
const descendantsAsString = (0, import_utils.toText)(descendants, config?.mode ?? import_rich_text_v2.RichText.Mode.Block);
|
|
35
35
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
36
36
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.tsx"],"sourcesContent":["import { type ReactNode, type ForwardedRef, forwardRef, useMemo } from 'react'\nimport { type Descendant, type Element, type Text } from 'slate'\nimport { type RenderElementProps, type RenderLeafProps } from 'slate-react'\n\nimport { type ConfigType } from '@makeswift/controls'\n\nimport {\n type RichTextDataV2,\n RichTextV2Definition,\n RichText,\n} from '../../../../controls/rich-text-v2'\nimport { useStyle } from '../../use-style'\nimport { toText } from '../../../../slate/utils'\nimport { RichTextV2Plugin } from '../../../../controls/rich-text-v2/plugin'\n\nimport { ControlValue } from '../control'\n\ntype Props = {\n text: RichTextDataV2 | undefined\n config: ConfigType<RichTextV2Definition> | undefined\n}\n\nconst ReadOnlyTextV2 = forwardRef(function ReadOnlyText(\n { text, config }: Props,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const descendants = useMemo(() => text?.descendants ?? [], [text?.descendants])\n const plugins = useMemo(() => config
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.tsx"],"sourcesContent":["import { type ReactNode, type ForwardedRef, forwardRef, useMemo } from 'react'\nimport { type Descendant, type Element, type Text } from 'slate'\nimport { type RenderElementProps, type RenderLeafProps } from 'slate-react'\n\nimport { type ConfigType } from '@makeswift/controls'\n\nimport {\n type RichTextDataV2,\n RichTextV2Definition,\n RichText,\n} from '../../../../controls/rich-text-v2'\nimport { useStyle } from '../../use-style'\nimport { toText } from '../../../../slate/utils'\nimport { RichTextV2Plugin } from '../../../../controls/rich-text-v2/plugin'\n\nimport { ControlValue } from '../control'\n\ntype Props = {\n text: RichTextDataV2 | undefined\n config: ConfigType<RichTextV2Definition> | undefined\n}\n\nconst ReadOnlyTextV2 = forwardRef(function ReadOnlyText(\n { text, config }: Props,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const descendants = useMemo(() => text?.descendants ?? [], [text?.descendants])\n const plugins = useMemo(() => (config ? new RichTextV2Definition(config).plugins : []), [config])\n const descendantsAsString = toText(descendants, config?.mode ?? RichText.Mode.Block)\n\n return (\n <div\n ref={ref}\n style={{\n /**\n * These are the default styles that Slate uses for its editable div.\n * https://github.com/ianstormtaylor/slate/blob/4bd15ed3950e3a0871f5d0ecb391bb637c05e59d/packages/slate-react/src/components/editable.tsx\n * Search for `disableDefaultStyles`\n */\n position: 'relative',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n }}\n >\n {descendantsAsString === '' ? (\n <Placeholder />\n ) : (\n <Descendants plugins={plugins} descendants={descendants} />\n )}\n </div>\n )\n})\n\nexport default ReadOnlyTextV2\n\nfunction Placeholder({ text = 'Write some text...' }: { text?: string }) {\n return (\n <span\n className={useStyle({\n display: 'inline-block',\n width: 0,\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: 0.333,\n verticalAlign: 'text-top',\n })}\n >\n {text}\n </span>\n )\n}\n\ntype LeafProps = {\n leaf: Text\n plugins: RichTextV2Plugin[]\n}\n\nexport function LeafComponent({ plugins, ...props }: LeafProps) {\n function initialRenderLeaf({ leaf }: RenderLeafProps): ReactNode {\n return <span className={leaf.className}>{leaf.text === '' ? '\\uFEFF' : leaf.text}</span>\n }\n\n const renderLeaf = plugins.reduce(\n (renderFn, plugin) =>\n function RenderLeafPlugin(props: RenderLeafProps) {\n const { control, renderLeaf } = plugin\n\n if (control?.definition == null || renderLeaf == null) return renderFn(props)\n\n if (control.getLeafValue == null) return renderLeaf(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getLeafValue(props.leaf)}>\n {value => renderLeaf(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderLeaf,\n )\n\n return renderLeaf({ attributes: {} as any, leaf: props.leaf, children: null, text: props.leaf })\n}\n\ntype ElementProps = {\n descendant: Element\n plugins: RichTextV2Plugin[]\n}\n\nfunction ElementComponent({ plugins, ...props }: ElementProps) {\n function initialRenderElement(props: RenderElementProps): ReactNode {\n return <Descendants descendants={props.element.children} plugins={plugins} />\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) =>\n function RenderElementPlugin(props: RenderElementProps) {\n const { control, renderElement } = plugin\n\n if (control?.definition == null || renderElement == null) return renderFn(props)\n\n if (control.getElementValue == null) return renderElement(renderFn, undefined)(props)\n\n return (\n <ControlValue\n definition={control.definition}\n data={control.getElementValue(props.element)}\n >\n {value => renderElement(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderElement,\n )\n\n return renderElement({ attributes: {} as any, children: null, element: props.descendant })\n}\n\n// reimplemented from slate source for code splitting\nfunction isText(node: Descendant): node is Text {\n if (typeof node === 'object' && 'text' in node) return true\n\n return false\n}\n\nfunction Descendants({\n descendants,\n plugins,\n}: {\n plugins: RichTextV2Plugin[]\n descendants: Descendant[]\n}) {\n return (\n <>\n {descendants.map((descendant, index) => {\n if (isText(descendant)) {\n return <LeafComponent key={index} plugins={plugins} leaf={descendant} />\n }\n\n return <ElementComponent key={index} descendant={descendant} plugins={plugins} />\n })}\n </>\n )\n}\n"],"mappings":"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","names":["props","renderLeaf","renderElement"]}
|
|
@@ -36,8 +36,12 @@ var import_react = require("react");
|
|
|
36
36
|
var import_rich_text_v2 = require("../../../../controls/rich-text-v2");
|
|
37
37
|
var import_rich_text_v2_value = require("./rich-text-v2-value");
|
|
38
38
|
const ReadOnlyTextV1 = (0, import_react.lazy)(() => Promise.resolve().then(() => __toESM(require("../rich-text/ReadOnlyText"))));
|
|
39
|
-
function renderRichTextV2(
|
|
40
|
-
|
|
39
|
+
function renderRichTextV2({
|
|
40
|
+
data,
|
|
41
|
+
config,
|
|
42
|
+
control
|
|
43
|
+
}) {
|
|
44
|
+
return import_rich_text_v2.RichTextV2Definition.isV1Data(data) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReadOnlyTextV1, { text: data }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_rich_text_v2_value.RichTextV2Value, { data, config, instanceKey: control?.instanceKey });
|
|
41
45
|
}
|
|
42
46
|
// Annotate the CommonJS export names for ESM import in node:
|
|
43
47
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/render-rich-text-v2.tsx"],"sourcesContent":["import { type ReactNode, lazy } from 'react'\n\nimport { type DataType, type ConfigType } from '@makeswift/controls'\n\nimport { RichTextV2Control, RichTextV2Definition } from '../../../../controls/rich-text-v2'\n\nimport { RichTextV2Value } from './rich-text-v2-value'\n\nconst ReadOnlyTextV1 = lazy(() => import('../rich-text/ReadOnlyText'))\n\nexport function renderRichTextV2(\n data: DataType<RichTextV2Definition> | undefined
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/render-rich-text-v2.tsx"],"sourcesContent":["import { type ReactNode, lazy } from 'react'\n\nimport { type DataType, type ConfigType } from '@makeswift/controls'\n\nimport { RichTextV2Control, RichTextV2Definition } from '../../../../controls/rich-text-v2'\n\nimport { RichTextV2Value } from './rich-text-v2-value'\n\nconst ReadOnlyTextV1 = lazy(() => import('../rich-text/ReadOnlyText'))\n\nexport function renderRichTextV2({\n data,\n config,\n control,\n}: {\n data: DataType<RichTextV2Definition> | undefined\n config: ConfigType<RichTextV2Definition>\n control: RichTextV2Control | null\n}): ReactNode {\n // See `renderSlot` comments\n return RichTextV2Definition.isV1Data(data) ? (\n <ReadOnlyTextV1 text={data} />\n ) : (\n <RichTextV2Value data={data} config={config} instanceKey={control?.instanceKey} />\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBI;AArBJ,mBAAqC;AAIrC,0BAAwD;AAExD,gCAAgC;AAEhC,MAAM,qBAAiB,mBAAK,MAAM,6CAAO,2BAA2B,GAAC;AAE9D,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AAEZ,SAAO,yCAAqB,SAAS,IAAI,IACvC,4CAAC,kBAAe,MAAM,MAAM,IAE5B,4CAAC,6CAAgB,MAAY,QAAgB,aAAa,SAAS,aAAa;AAEpF;","names":[]}
|
|
@@ -40,9 +40,9 @@ const ReadOnlyText = (0, import_react.lazy)(() => Promise.resolve().then(() => _
|
|
|
40
40
|
function RichTextV2Value({
|
|
41
41
|
data,
|
|
42
42
|
config,
|
|
43
|
-
|
|
43
|
+
instanceKey
|
|
44
44
|
}) {
|
|
45
|
-
return (0, import_use_is_read_only.useIsReadOnly)() ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReadOnlyText, { text: data, config }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EditableText, { text: data, config,
|
|
45
|
+
return (0, import_use_is_read_only.useIsReadOnly)() ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReadOnlyText, { text: data, config }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EditableText, { text: data, config, instanceKey });
|
|
46
46
|
}
|
|
47
47
|
// Annotate the CommonJS export names for ESM import in node:
|
|
48
48
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/rich-text-v2-value.tsx"],"sourcesContent":["'use client'\n\nimport { lazy } from 'react'\n\nimport { type ConfigType } from '@makeswift/controls'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text-v2/rich-text-v2-value.tsx"],"sourcesContent":["'use client'\n\nimport { lazy } from 'react'\n\nimport { type ControlInstanceKey, type ConfigType } from '@makeswift/controls'\n\nimport { type RichTextDataV2, RichTextV2Definition } from '../../../../controls/rich-text-v2'\n\nimport { useIsReadOnly } from '../../hooks/use-is-read-only'\n\nconst EditableText = lazy(() => import('./EditableTextV2'))\nconst ReadOnlyText = lazy(() => import('./ReadOnlyTextV2'))\n\nexport function RichTextV2Value({\n data,\n config,\n instanceKey,\n}: {\n data: RichTextDataV2 | undefined\n config: ConfigType<RichTextV2Definition>\n instanceKey: ControlInstanceKey | undefined\n}) {\n return useIsReadOnly() ? (\n <ReadOnlyText text={data} config={config} />\n ) : (\n <EditableText text={data} config={config} instanceKey={instanceKey} />\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBI;AArBJ,mBAAqB;AAMrB,8BAA8B;AAE9B,MAAM,mBAAe,mBAAK,MAAM,6CAAO,kBAAkB,GAAC;AAC1D,MAAM,mBAAe,mBAAK,MAAM,6CAAO,kBAAkB,GAAC;AAEnD,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,aAAO,uCAAc,IACnB,4CAAC,gBAAa,MAAM,MAAM,QAAgB,IAE1C,4CAAC,gBAAa,MAAM,MAAM,QAAgB,aAA0B;AAExE;","names":[]}
|
|
@@ -4,7 +4,7 @@ class MakeswiftGraphQLApiClient {
|
|
|
4
4
|
graphqlClient;
|
|
5
5
|
constructor({ endpoint }) {
|
|
6
6
|
this.graphqlClient = new GraphQLClient(endpoint, {
|
|
7
|
-
"makeswift-runtime-version": "0.28.10-canary.
|
|
7
|
+
"makeswift-runtime-version": "0.28.10-canary.12"
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
10
|
async getUnversionedResources({
|
|
@@ -163,7 +163,7 @@ class MakeswiftRestAPIClient {
|
|
|
163
163
|
const requestHeaders = new Headers({
|
|
164
164
|
"x-api-key": this.apiKey,
|
|
165
165
|
"makeswift-site-api-key": this.apiKey,
|
|
166
|
-
"makeswift-runtime-version": "0.28.10-canary.
|
|
166
|
+
"makeswift-runtime-version": "0.28.10-canary.12"
|
|
167
167
|
});
|
|
168
168
|
if (siteVersion?.token) {
|
|
169
169
|
requestUrl.searchParams.set("version", siteVersion.version);
|
|
@@ -8,7 +8,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
|
|
|
8
8
|
return ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
|
|
9
9
|
}
|
|
10
10
|
return ApiResponse.json({
|
|
11
|
-
version: "0.28.10-canary.
|
|
11
|
+
version: "0.28.10-canary.12",
|
|
12
12
|
interactionMode: true,
|
|
13
13
|
clientSideNavigation: false,
|
|
14
14
|
elementFromPoint: false,
|
|
@@ -18,12 +18,13 @@ import { Plugin } from "./plugin";
|
|
|
18
18
|
import { RichTextV2Control } from "./control";
|
|
19
19
|
import { getTranslatableData } from "./translations/get-translations";
|
|
20
20
|
class Definition extends BaseRichTextDefinition {
|
|
21
|
+
plugins;
|
|
21
22
|
constructor({ mode, defaultValue }, plugins) {
|
|
22
23
|
super({
|
|
23
24
|
mode,
|
|
24
|
-
defaultValue: defaultValue ?? (mode === Definition.Mode.Inline ? "Edit this text" : Definition.generateParagraph())
|
|
25
|
-
plugins: plugins ?? (mode === Definition.Mode.Inline ? [InlineModePlugin()] : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()])
|
|
25
|
+
defaultValue: defaultValue ?? (mode === Definition.Mode.Inline ? "Edit this text" : Definition.generateParagraph())
|
|
26
26
|
});
|
|
27
|
+
this.plugins = plugins ?? (mode === Definition.Mode.Inline ? [InlineModePlugin()] : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]);
|
|
27
28
|
}
|
|
28
29
|
static generateParagraph() {
|
|
29
30
|
return ipsum(3);
|
|
@@ -32,13 +33,13 @@ class Definition extends BaseRichTextDefinition {
|
|
|
32
33
|
if (data.type !== Definition.type) {
|
|
33
34
|
throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`);
|
|
34
35
|
}
|
|
35
|
-
const { config } = Definition.fullSchema({
|
|
36
|
+
const { config, plugins } = Definition.fullSchema({
|
|
36
37
|
pluginDef: SerializationSchema.deserializedRecord
|
|
37
38
|
}).definition.parse(data);
|
|
38
|
-
const { plugins, ...userConfig } = config;
|
|
39
|
+
const { plugins: configPlugins, ...userConfig } = config;
|
|
39
40
|
return new RichTextV2Definition(
|
|
40
41
|
userConfig,
|
|
41
|
-
plugins.map(
|
|
42
|
+
(plugins ?? configPlugins ?? []).map(
|
|
42
43
|
({ control }) => control ? { control: { definition: deserializeCallback(control?.definition) } } : {}
|
|
43
44
|
)
|
|
44
45
|
);
|
|
@@ -50,21 +51,31 @@ class Definition extends BaseRichTextDefinition {
|
|
|
50
51
|
definition: pluginDef
|
|
51
52
|
}).optional()
|
|
52
53
|
});
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
plugins
|
|
54
|
+
const plugins = z.array(plugin);
|
|
55
|
+
const config = Definition.configSchema().extend({
|
|
56
|
+
// plugins have been moved from config to the definition itself; keeping
|
|
57
|
+
// the field here as optional so we can deserialize definitions coming from
|
|
58
|
+
// older runtimes
|
|
59
|
+
plugins: plugins.optional()
|
|
56
60
|
});
|
|
57
61
|
return {
|
|
58
62
|
...baseSchema,
|
|
59
63
|
config,
|
|
60
64
|
definition: z.object({
|
|
61
65
|
type: baseSchema.type,
|
|
66
|
+
// marked as optional for backward compatibility with older runtimes
|
|
67
|
+
plugins: plugins.optional(),
|
|
62
68
|
config
|
|
63
69
|
})
|
|
64
70
|
};
|
|
65
71
|
}
|
|
72
|
+
static configSchema() {
|
|
73
|
+
return super.schema.userConfig.extend({
|
|
74
|
+
defaultValue: z.string()
|
|
75
|
+
});
|
|
76
|
+
}
|
|
66
77
|
get configSchema() {
|
|
67
|
-
return Definition.
|
|
78
|
+
return Definition.configSchema();
|
|
68
79
|
}
|
|
69
80
|
createInstance(args) {
|
|
70
81
|
return new RichTextV2Control(this, args);
|
|
@@ -72,7 +83,7 @@ class Definition extends BaseRichTextDefinition {
|
|
|
72
83
|
resolveValue(data, _resolver, _stylesheet, control) {
|
|
73
84
|
const stableValue = StableValue({
|
|
74
85
|
name: Definition.type,
|
|
75
|
-
read: () => renderRichTextV2(data, this.config, control ?? null)
|
|
86
|
+
read: () => renderRichTextV2({ data, config: this.config, control: control ?? null })
|
|
76
87
|
});
|
|
77
88
|
return {
|
|
78
89
|
...stableValue,
|
|
@@ -83,10 +94,10 @@ class Definition extends BaseRichTextDefinition {
|
|
|
83
94
|
getTranslatableData(data) {
|
|
84
95
|
if (data == null)
|
|
85
96
|
return null;
|
|
86
|
-
return getTranslatableData(Definition.dataToNodes(data), this.
|
|
97
|
+
return getTranslatableData(Definition.dataToNodes(data), this.plugins);
|
|
87
98
|
}
|
|
88
99
|
get pluginControls() {
|
|
89
|
-
return this.
|
|
100
|
+
return this.plugins.map((plugin) => plugin.control).filter(isNotNil);
|
|
90
101
|
}
|
|
91
102
|
pluginControlAt(index) {
|
|
92
103
|
return this.pluginControls[index];
|