@reacteditor/core 0.0.16 → 0.0.18

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.
Files changed (34) hide show
  1. package/dist/{Editor-4LPVLYSU.css → Editor-IRCQF4VT.css} +10 -16
  2. package/dist/{Editor-J7XDD77B.mjs → Editor-ULH2S4LO.mjs} +7 -7
  3. package/dist/{Render-STFB5CNO.mjs → Render-IDDFFANP.mjs} +1 -1
  4. package/dist/{chunk-4L7H4JV4.mjs → chunk-AD67LVXW.mjs} +2 -2
  5. package/dist/{chunk-RGC274VM.mjs → chunk-DGIVBKSJ.mjs} +1 -1
  6. package/dist/{chunk-Y2EFNT5P.mjs → chunk-DQU3HIP4.mjs} +16 -6
  7. package/dist/{chunk-RQZQMS6E.mjs → chunk-HR67L662.mjs} +1 -1
  8. package/dist/{chunk-TG2KTWSB.mjs → chunk-IOAYKTDH.mjs} +1 -1
  9. package/dist/{chunk-JHURG5NN.mjs → chunk-LFJGTSUB.mjs} +14 -2
  10. package/dist/{chunk-5QKQ3LQJ.mjs → chunk-NABX5FH7.mjs} +4 -4
  11. package/dist/{chunk-Q667J2EG.mjs → chunk-UQHR5LFK.mjs} +130 -29
  12. package/dist/{chunk-3NSI5XES.mjs → chunk-WUEYD7ZN.mjs} +60 -47
  13. package/dist/{full-7ABPY2WA.css → full-B5V3G4IY.css} +10 -16
  14. package/dist/{full-T5SGODJ2.mjs → full-LIVYWOAF.mjs} +6 -6
  15. package/dist/{index-BZRpxcwy.d.mts → index-CUe2XTb6.d.mts} +28 -1
  16. package/dist/{index-B_21fGrq.d.ts → index-CYzc1n29.d.ts} +28 -1
  17. package/dist/index.css +10 -16
  18. package/dist/index.d.mts +35 -20
  19. package/dist/index.d.ts +35 -20
  20. package/dist/index.js +194 -59
  21. package/dist/index.mjs +9 -9
  22. package/dist/internal.d.mts +1 -1
  23. package/dist/internal.d.ts +1 -1
  24. package/dist/{loaded-ZQCRSG65.mjs → loaded-FZVSXAM7.mjs} +3 -3
  25. package/dist/{loaded-DUBT6SP5.mjs → loaded-MSWM6QEM.mjs} +3 -3
  26. package/dist/{loaded-6YKSFCCD.mjs → loaded-PYHJ6TB5.mjs} +3 -3
  27. package/dist/no-external.css +10 -16
  28. package/dist/no-external.d.mts +2 -2
  29. package/dist/no-external.d.ts +2 -2
  30. package/dist/no-external.js +194 -59
  31. package/dist/no-external.mjs +9 -9
  32. package/dist/rsc.js +16 -6
  33. package/dist/rsc.mjs +2 -2
  34. package/package.json +1 -1
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  useHeadingOptions
3
- } from "./chunk-TG2KTWSB.mjs";
3
+ } from "./chunk-IOAYKTDH.mjs";
4
4
  import {
5
5
  Heading,
6
6
  SelectControl,
7
7
  useControlContext
8
- } from "./chunk-JHURG5NN.mjs";
8
+ } from "./chunk-LFJGTSUB.mjs";
9
9
  import "./chunk-M4JDRFYB.mjs";
10
10
  import "./chunk-FTVOCMGV.mjs";
11
- import "./chunk-Y2EFNT5P.mjs";
11
+ import "./chunk-DQU3HIP4.mjs";
12
12
  import "./chunk-JIXMPJZA.mjs";
13
13
  import {
14
14
  init_react_import
@@ -704,25 +704,19 @@ textarea._Input-input_zwh6e_27 {
704
704
  }
705
705
 
706
706
  /* css-module:/Users/rami/Documents/apps/react-editor/packages/core/components/Loader/styles.module.css/#css-module-data */
707
- @keyframes _loader-animation_nacdm_1 {
708
- 0% {
709
- transform: rotate(0deg) scale(1);
707
+ @keyframes _loader-spin_6933g_1 {
708
+ from {
709
+ transform: rotate(0deg);
710
710
  }
711
- 50% {
712
- transform: rotate(180deg) scale(0.8);
713
- }
714
- 100% {
715
- transform: rotate(360deg) scale(1);
711
+ to {
712
+ transform: rotate(360deg);
716
713
  }
717
714
  }
718
- ._Loader_nacdm_13 {
719
- background: transparent;
720
- border-radius: 100%;
721
- border: 2px solid currentColor;
722
- border-bottom-color: transparent;
723
- display: inline-block;
724
- animation: _loader-animation_nacdm_1 1s 0s infinite linear;
725
- animation-fill-mode: both;
715
+ ._Loader_6933g_10 {
716
+ display: inline-flex;
717
+ align-items: center;
718
+ justify-content: center;
719
+ animation: _loader-spin_6933g_1 1s linear infinite;
726
720
  }
727
721
 
728
722
  /* css-module:/Users/rami/Documents/apps/react-editor/packages/core/components/DragIcon/styles.module.css/#css-module-data */
@@ -1,6 +1,7 @@
1
1
  export { u as Adaptor, A as AppState, v as ArrayField, w as ArrayState, x as AsFieldProps, B as BaseData, y as BaseField, z as CacheOpts, G as ColorField, g as ComponentConfig, J as ComponentConfigExtensions, K as ComponentConfigParams, b as ComponentData, L as ComponentDataMap, N as ComponentDataOptionalId, Q as ComponentMetadata, C as Config, S as ConfigParams, j as Content, T as CustomField, X as CustomFieldRender, D as Data, l as DefaultComponentProps, k as DefaultComponents, m as DefaultRootFieldProps, Y as DefaultRootProps, Z as DefaultRootRenderProps, _ as Direction, $ as DragAxis, E as EditorAction, q as EditorChromeConfig, a0 as EditorComponent, a1 as EditorContext, a2 as EditorMetadata, a3 as ExternalField, a4 as ExternalFieldWithAdaptor, a5 as ExtractConfigParams, a6 as ExtractField, o as Field, a7 as FieldMetadata, p as FieldProps, a8 as FieldRenderFunctions, a9 as FieldTransformFn, aa as FieldTransformFnParams, h as FieldTransforms, F as Fields, H as History, I as IframeConfig, r as InitialHistory, ab as ItemWithId, ac as MappedItem, M as Metadata, ad as NumberField, ae as ObjectField, O as OnAction, af as OverrideKey, e as Overrides, a as Permissions, d as Plugin, ag as RadioField, c as ResolveDataTrigger, ah as RichText, i as RichtextField, ai as RootConfig, n as RootData, R as RootDataWithProps, aj as RootDataWithoutProps, ak as SelectField, al as Slot, am as SlotComponent, an as SlotField, ao as TextField, ap as TextareaField, f as UiState, U as UserGenerics, aq as Viewport, V as Viewports, ar as WithChildren, as as WithEditorProps, W as WithId, at as WithSlotProps, au as overrideKeys } from './actions-BxLinRKD.mjs';
2
- export { Action, ActionBar, App, AppContextValue, AppEditorProps, AppMatched, AppProps, AppProvider, AppProviderProps, AppRenderProps, AppRouterVariant, AutoField, Button, ComponentList, Drawer, Editor, EditorApi, EditorCommands, FieldLabel, GlobalsMap, Group, IconButton, InsertComponentArgs, Label, MoveDestination, PageMetadata, Parent, Render, RichTextMenu, Route, RouteKey, Separator, UseEditorData, appConfigContext, blocksPlugin, createUseEditor, fieldsPlugin, legacySideBarPlugin, outlinePlugin, pageMetadata, registerOverlayPortal, renderContext, setDeep, useApp, useEditor, useGetEditor, usePropsContext, useRouteParams, useStableValue } from './index.mjs';
2
+ export { Action, ActionBar, App, AppContextValue, AppEditorProps, AppProps, AppProvider, AppProviderProps, AppRenderProps, AppRoute, AppRouterVariant, AutoField, Button, ComponentList, Drawer, Editor, EditorApi, EditorCommands, FieldLabel, GlobalsMap, Group, IconButton, InsertComponentArgs, Label, MoveDestination, PageMetadata, Parent, Render, RichTextMenu, Route, RouteKey, Separator, UseEditorData, appConfigContext, blocksPlugin, createUseEditor, fieldsPlugin, legacySideBarPlugin, outlinePlugin, pageMetadata, registerOverlayPortal, renderContext, setDeep, useApp, useEditor, useGetEditor, usePropsContext, useRouteParams, useStableValue } from './index.mjs';
3
3
  export { G as GetRoutePropsOptions, g as getRouteProps, m as migrate, r as resolveAllData, a as resolveRouteFromString, t as transformProps, w as walkTree } from './walk-tree-BvYigWFL.mjs';
4
+ export { E as EditorRoute, O as OnPublish } from './index-CUe2XTb6.mjs';
4
5
  import 'react';
5
6
  import '@tiptap/react';
6
7
  import '@tiptap/extension-blockquote';
@@ -18,4 +19,3 @@ import '@tiptap/extension-strike';
18
19
  import '@tiptap/extension-text-align';
19
20
  import '@tiptap/extension-underline';
20
21
  import 'react/jsx-runtime';
21
- import './index-BZRpxcwy.mjs';
@@ -1,6 +1,7 @@
1
1
  export { u as Adaptor, A as AppState, v as ArrayField, w as ArrayState, x as AsFieldProps, B as BaseData, y as BaseField, z as CacheOpts, G as ColorField, g as ComponentConfig, J as ComponentConfigExtensions, K as ComponentConfigParams, b as ComponentData, L as ComponentDataMap, N as ComponentDataOptionalId, Q as ComponentMetadata, C as Config, S as ConfigParams, j as Content, T as CustomField, X as CustomFieldRender, D as Data, l as DefaultComponentProps, k as DefaultComponents, m as DefaultRootFieldProps, Y as DefaultRootProps, Z as DefaultRootRenderProps, _ as Direction, $ as DragAxis, E as EditorAction, q as EditorChromeConfig, a0 as EditorComponent, a1 as EditorContext, a2 as EditorMetadata, a3 as ExternalField, a4 as ExternalFieldWithAdaptor, a5 as ExtractConfigParams, a6 as ExtractField, o as Field, a7 as FieldMetadata, p as FieldProps, a8 as FieldRenderFunctions, a9 as FieldTransformFn, aa as FieldTransformFnParams, h as FieldTransforms, F as Fields, H as History, I as IframeConfig, r as InitialHistory, ab as ItemWithId, ac as MappedItem, M as Metadata, ad as NumberField, ae as ObjectField, O as OnAction, af as OverrideKey, e as Overrides, a as Permissions, d as Plugin, ag as RadioField, c as ResolveDataTrigger, ah as RichText, i as RichtextField, ai as RootConfig, n as RootData, R as RootDataWithProps, aj as RootDataWithoutProps, ak as SelectField, al as Slot, am as SlotComponent, an as SlotField, ao as TextField, ap as TextareaField, f as UiState, U as UserGenerics, aq as Viewport, V as Viewports, ar as WithChildren, as as WithEditorProps, W as WithId, at as WithSlotProps, au as overrideKeys } from './actions-BxLinRKD.js';
2
- export { Action, ActionBar, App, AppContextValue, AppEditorProps, AppMatched, AppProps, AppProvider, AppProviderProps, AppRenderProps, AppRouterVariant, AutoField, Button, ComponentList, Drawer, Editor, EditorApi, EditorCommands, FieldLabel, GlobalsMap, Group, IconButton, InsertComponentArgs, Label, MoveDestination, PageMetadata, Parent, Render, RichTextMenu, Route, RouteKey, Separator, UseEditorData, appConfigContext, blocksPlugin, createUseEditor, fieldsPlugin, legacySideBarPlugin, outlinePlugin, pageMetadata, registerOverlayPortal, renderContext, setDeep, useApp, useEditor, useGetEditor, usePropsContext, useRouteParams, useStableValue } from './index.js';
2
+ export { Action, ActionBar, App, AppContextValue, AppEditorProps, AppProps, AppProvider, AppProviderProps, AppRenderProps, AppRoute, AppRouterVariant, AutoField, Button, ComponentList, Drawer, Editor, EditorApi, EditorCommands, FieldLabel, GlobalsMap, Group, IconButton, InsertComponentArgs, Label, MoveDestination, PageMetadata, Parent, Render, RichTextMenu, Route, RouteKey, Separator, UseEditorData, appConfigContext, blocksPlugin, createUseEditor, fieldsPlugin, legacySideBarPlugin, outlinePlugin, pageMetadata, registerOverlayPortal, renderContext, setDeep, useApp, useEditor, useGetEditor, usePropsContext, useRouteParams, useStableValue } from './index.js';
3
3
  export { G as GetRoutePropsOptions, g as getRouteProps, m as migrate, r as resolveAllData, a as resolveRouteFromString, t as transformProps, w as walkTree } from './walk-tree-Clklc1Ql.js';
4
+ export { E as EditorRoute, O as OnPublish } from './index-CYzc1n29.js';
4
5
  import 'react';
5
6
  import '@tiptap/react';
6
7
  import '@tiptap/extension-blockquote';
@@ -18,4 +19,3 @@ import '@tiptap/extension-strike';
18
19
  import '@tiptap/extension-text-align';
19
20
  import '@tiptap/extension-underline';
20
21
  import 'react/jsx-runtime';
21
- import './index-B_21fGrq.js';
@@ -160,19 +160,29 @@ var init_get_class_name_factory = __esm({
160
160
  "use strict";
161
161
  init_react_import();
162
162
  import_classnames = __toESM(require_classnames());
163
- getClassNameFactory = (rootClass, styles2, config = { baseClass: "" }) => (options = {}) => {
163
+ getClassNameFactory = (rootClass, styles2, config = { baseClass: "" }) => (options = {}, modifiers) => {
164
164
  if (typeof options === "string") {
165
165
  const descendant = options;
166
- const style = styles2[`${rootClass}-${descendant}`];
166
+ const baseKey = `${rootClass}-${descendant}`;
167
+ const style = styles2[baseKey];
168
+ if (modifiers) {
169
+ const prefixedModifiers = {};
170
+ for (let modifier in modifiers) {
171
+ prefixedModifiers[styles2[`${baseKey}--${modifier}`]] = modifiers[modifier];
172
+ }
173
+ return config.baseClass + (0, import_classnames.default)(__spreadValues({
174
+ [style]: !!style
175
+ }, prefixedModifiers));
176
+ }
167
177
  if (style) {
168
- return config.baseClass + styles2[`${rootClass}-${descendant}`] || "";
178
+ return config.baseClass + style;
169
179
  }
170
180
  return "";
171
181
  } else if (typeof options === "object") {
172
- const modifiers = options;
182
+ const modifiers2 = options;
173
183
  const prefixedModifiers = {};
174
- for (let modifier in modifiers) {
175
- prefixedModifiers[styles2[`${rootClass}--${modifier}`]] = modifiers[modifier];
184
+ for (let modifier in modifiers2) {
185
+ prefixedModifiers[styles2[`${rootClass}--${modifier}`]] = modifiers2[modifier];
176
186
  }
177
187
  const c = styles2[rootClass];
178
188
  return config.baseClass + (0, import_classnames.default)(__spreadValues({
@@ -3245,7 +3255,19 @@ var init_store = __esm({
3245
3255
  metadata: {},
3246
3256
  fieldTransforms: {},
3247
3257
  scrollToComponent: () => {
3248
- }
3258
+ },
3259
+ route: null,
3260
+ isPublishing: false,
3261
+ publish: () => __async(null, null, function* () {
3262
+ const { onPublish, state, route } = get();
3263
+ if (!onPublish) return;
3264
+ set({ isPublishing: true });
3265
+ try {
3266
+ yield onPublish({ data: state.data, route });
3267
+ } finally {
3268
+ set({ isPublishing: false });
3269
+ }
3270
+ })
3249
3271
  }, initialAppStore), {
3250
3272
  fields: createFieldsSlice(set, get),
3251
3273
  history: createHistorySlice(set, get),
@@ -3590,12 +3612,12 @@ var init_styles_module2 = __esm({
3590
3612
  "use strict";
3591
3613
  init_react_import();
3592
3614
  init_css_module_data3();
3593
- styles_module_default4 = { "Loader": "_Loader_nacdm_13", "loader-animation": "_loader-animation_nacdm_1" };
3615
+ styles_module_default4 = { "Loader": "_Loader_6933g_10", "loader-spin": "_loader-spin_6933g_1" };
3594
3616
  }
3595
3617
  });
3596
3618
 
3597
3619
  // components/Loader/index.tsx
3598
- var import_jsx_runtime3, getClassName2, Loader;
3620
+ var import_jsx_runtime3, getClassName2, LoaderIcon, Loader;
3599
3621
  var init_Loader = __esm({
3600
3622
  "components/Loader/index.tsx"() {
3601
3623
  "use strict";
@@ -3604,25 +3626,125 @@ var init_Loader = __esm({
3604
3626
  init_styles_module2();
3605
3627
  import_jsx_runtime3 = require("react/jsx-runtime");
3606
3628
  getClassName2 = get_class_name_factory_default("Loader", styles_module_default4);
3629
+ LoaderIcon = ({ size = 16 }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
3630
+ "svg",
3631
+ {
3632
+ height: size,
3633
+ strokeLinejoin: "round",
3634
+ style: { color: "currentcolor" },
3635
+ viewBox: "0 0 16 16",
3636
+ width: size,
3637
+ "aria-hidden": "true",
3638
+ children: [
3639
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("g", { clipPath: "url(#editor-loader-clip)", children: [
3640
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M8 0V4", stroke: "currentColor", strokeWidth: "1.5" }),
3641
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3642
+ "path",
3643
+ {
3644
+ d: "M8 16V12",
3645
+ opacity: "0.5",
3646
+ stroke: "currentColor",
3647
+ strokeWidth: "1.5"
3648
+ }
3649
+ ),
3650
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3651
+ "path",
3652
+ {
3653
+ d: "M3.29773 1.52783L5.64887 4.7639",
3654
+ opacity: "0.9",
3655
+ stroke: "currentColor",
3656
+ strokeWidth: "1.5"
3657
+ }
3658
+ ),
3659
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3660
+ "path",
3661
+ {
3662
+ d: "M12.7023 1.52783L10.3511 4.7639",
3663
+ opacity: "0.1",
3664
+ stroke: "currentColor",
3665
+ strokeWidth: "1.5"
3666
+ }
3667
+ ),
3668
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3669
+ "path",
3670
+ {
3671
+ d: "M12.7023 14.472L10.3511 11.236",
3672
+ opacity: "0.4",
3673
+ stroke: "currentColor",
3674
+ strokeWidth: "1.5"
3675
+ }
3676
+ ),
3677
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3678
+ "path",
3679
+ {
3680
+ d: "M3.29773 14.472L5.64887 11.236",
3681
+ opacity: "0.6",
3682
+ stroke: "currentColor",
3683
+ strokeWidth: "1.5"
3684
+ }
3685
+ ),
3686
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3687
+ "path",
3688
+ {
3689
+ d: "M15.6085 5.52783L11.8043 6.7639",
3690
+ opacity: "0.2",
3691
+ stroke: "currentColor",
3692
+ strokeWidth: "1.5"
3693
+ }
3694
+ ),
3695
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3696
+ "path",
3697
+ {
3698
+ d: "M0.391602 10.472L4.19583 9.23598",
3699
+ opacity: "0.7",
3700
+ stroke: "currentColor",
3701
+ strokeWidth: "1.5"
3702
+ }
3703
+ ),
3704
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3705
+ "path",
3706
+ {
3707
+ d: "M15.6085 10.4722L11.8043 9.2361",
3708
+ opacity: "0.3",
3709
+ stroke: "currentColor",
3710
+ strokeWidth: "1.5"
3711
+ }
3712
+ ),
3713
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3714
+ "path",
3715
+ {
3716
+ d: "M0.391602 5.52783L4.19583 6.7639",
3717
+ opacity: "0.8",
3718
+ stroke: "currentColor",
3719
+ strokeWidth: "1.5"
3720
+ }
3721
+ )
3722
+ ] }),
3723
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("clipPath", { id: "editor-loader-clip", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { fill: "white", height: "16", width: "16" }) }) })
3724
+ ]
3725
+ }
3726
+ );
3607
3727
  Loader = (_a) => {
3608
3728
  var _b = _a, {
3609
3729
  color,
3610
- size = 16
3730
+ size = 16,
3731
+ className,
3732
+ style
3611
3733
  } = _b, props = __objRest(_b, [
3612
3734
  "color",
3613
- "size"
3735
+ "size",
3736
+ "className",
3737
+ "style"
3614
3738
  ]);
3615
3739
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3616
- "span",
3617
- __spreadValues({
3618
- className: getClassName2(),
3619
- style: {
3620
- width: size,
3621
- height: size,
3622
- color
3623
- },
3740
+ "div",
3741
+ __spreadProps(__spreadValues({
3742
+ className: [getClassName2(), className].filter(Boolean).join(" "),
3743
+ style: __spreadValues({ color }, style),
3624
3744
  "aria-label": "loading"
3625
- }, props)
3745
+ }, props), {
3746
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(LoaderIcon, { size })
3747
+ })
3626
3748
  );
3627
3749
  };
3628
3750
  }
@@ -6946,9 +7068,8 @@ var Button = (_a) => {
6946
7068
  href
6947
7069
  }, dataAttrs), {
6948
7070
  children: [
6949
- icon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: getClassName10("icon"), children: icon }),
6950
- children,
6951
- loading && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: getClassName10("spinner"), children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Loader, { size: 14 }) })
7071
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: getClassName10("spinner"), children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Loader, { size: 14 }) }) : icon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: getClassName10("icon"), children: icon }),
7072
+ children
6952
7073
  ]
6953
7074
  })
6954
7075
  );
@@ -12797,6 +12918,9 @@ var createEditorCommands = (appStore) => {
12797
12918
  ui: { itemSelector: { index: sel.index, zone: sel.zone } }
12798
12919
  });
12799
12920
  };
12921
+ const publish = () => {
12922
+ void getState().publish();
12923
+ };
12800
12924
  return {
12801
12925
  insertComponent: insertComponent2,
12802
12926
  removeComponent,
@@ -12806,7 +12930,8 @@ var createEditorCommands = (appStore) => {
12806
12930
  updateProps,
12807
12931
  updateRoot,
12808
12932
  selectComponent,
12809
- scrollToComponent
12933
+ scrollToComponent,
12934
+ publish
12810
12935
  };
12811
12936
  };
12812
12937
 
@@ -12825,6 +12950,8 @@ var generateUseEditor = (store, getState, commands) => {
12825
12950
  const storeData = __spreadProps(__spreadValues({}, commands), {
12826
12951
  appState: makeStatePublic(store.state),
12827
12952
  config: store.config,
12953
+ route: store.route,
12954
+ isPublishing: store.isPublishing,
12828
12955
  dispatch: store.dispatch,
12829
12956
  getPermissions: store.permissions.getPermissions,
12830
12957
  refreshPermissions: store.permissions.refreshPermissions,
@@ -12859,7 +12986,9 @@ var convertToPickedStore = (store) => {
12859
12986
  dispatch: store.dispatch,
12860
12987
  permissions: store.permissions,
12861
12988
  history: store.history,
12862
- selectedItem: store.selectedItem
12989
+ selectedItem: store.selectedItem,
12990
+ route: store.route,
12991
+ isPublishing: store.isPublishing
12863
12992
  };
12864
12993
  };
12865
12994
  var useRegisterUseEditorStore = (appStore) => {
@@ -13301,18 +13430,19 @@ var DEVICE_VIEWPORTS = {
13301
13430
  mobile: { width: 360, height: "auto", icon: "Smartphone", label: "Mobile" }
13302
13431
  };
13303
13432
  var UrlBar = () => {
13304
- const { routes, currentRoute, onRouteChange } = usePropsContext();
13433
+ const { routes, route, onRouteChange } = usePropsContext();
13305
13434
  const chrome = useChromeConfig();
13306
- const showRoutePicker = !!routes && currentRoute !== void 0 && !!onRouteChange;
13307
- const [inputValue, setInputValue] = (0, import_react87.useState)(currentRoute != null ? currentRoute : "");
13308
- const lastSyncedPath = (0, import_react87.useRef)(currentRoute);
13309
- if (lastSyncedPath.current !== currentRoute) {
13310
- lastSyncedPath.current = currentRoute;
13311
- setInputValue(currentRoute != null ? currentRoute : "");
13435
+ const currentKey = route == null ? void 0 : route.key;
13436
+ const showRoutePicker = !!routes && currentKey !== void 0 && !!onRouteChange;
13437
+ const [inputValue, setInputValue] = (0, import_react87.useState)(currentKey != null ? currentKey : "");
13438
+ const lastSyncedPath = (0, import_react87.useRef)(currentKey);
13439
+ if (lastSyncedPath.current !== currentKey) {
13440
+ lastSyncedPath.current = currentKey;
13441
+ setInputValue(currentKey != null ? currentKey : "");
13312
13442
  }
13313
13443
  const submit = (raw) => {
13314
13444
  const next = normalizeRoute(raw);
13315
- if (!next || next === currentRoute) return;
13445
+ if (!next || next === currentKey) return;
13316
13446
  void (onRouteChange == null ? void 0 : onRouteChange(next));
13317
13447
  };
13318
13448
  if (!chrome.showUrlBar) return null;
@@ -13321,7 +13451,7 @@ var UrlBar = () => {
13321
13451
  Combobox,
13322
13452
  {
13323
13453
  items: routes,
13324
- value: currentRoute,
13454
+ value: currentKey,
13325
13455
  onValueChange: (next) => {
13326
13456
  if (typeof next === "string") submit(next);
13327
13457
  },
@@ -14155,12 +14285,12 @@ var TopHeader = ({
14155
14285
  pluginItems
14156
14286
  }) => {
14157
14287
  const appStore = useAppStoreApi();
14158
- const { onPublish, currentRoute } = usePropsContext();
14159
14288
  const chrome = useChromeConfig();
14160
14289
  const back = useAppStore((s) => s.history.back);
14161
14290
  const forward = useAppStore((s) => s.history.forward);
14162
14291
  const hasFuture = useAppStore((s) => s.history.hasFuture());
14163
14292
  const hasPast = useAppStore((s) => s.history.hasPast());
14293
+ const isPublishing = useAppStore((s) => s.isPublishing);
14164
14294
  const CustomHeaderActions = useAppStore(
14165
14295
  (s) => s.overrides.headerActions || DefaultOverride
14166
14296
  );
@@ -14212,11 +14342,8 @@ var TopHeader = ({
14212
14342
  /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(CustomHeaderActions, { children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
14213
14343
  Button,
14214
14344
  {
14215
- onClick: () => {
14216
- const data = appStore.getState().state.data;
14217
- onPublish && onPublish(data, currentRoute);
14218
- },
14219
- children: "Publish"
14345
+ onClick: () => appStore.getState().publish(),
14346
+ children: isPublishing ? "Publishing\u2026" : "Publish"
14220
14347
  }
14221
14348
  ) })
14222
14349
  ] })
@@ -14638,6 +14765,7 @@ function EditorProvider({ children }) {
14638
14765
  data: initialData,
14639
14766
  ui: initialUi,
14640
14767
  onChange,
14768
+ onPublish,
14641
14769
  permissions = {},
14642
14770
  plugins,
14643
14771
  overrides,
@@ -14648,7 +14776,8 @@ function EditorProvider({ children }) {
14648
14776
  onAction,
14649
14777
  fieldTransforms,
14650
14778
  fullScreenCanvas,
14651
- _experimentalVirtualization
14779
+ _experimentalVirtualization,
14780
+ route
14652
14781
  } = usePropsContext();
14653
14782
  const iframe = (0, import_react95.useMemo)(
14654
14783
  () => __spreadValues({
@@ -14758,7 +14887,9 @@ function EditorProvider({ children }) {
14758
14887
  _experimentalVirtualization: !!_experimentalVirtualization,
14759
14888
  onAction,
14760
14889
  metadata,
14761
- fieldTransforms: loadedFieldTransforms
14890
+ fieldTransforms: loadedFieldTransforms,
14891
+ route: route != null ? route : null,
14892
+ onPublish
14762
14893
  };
14763
14894
  },
14764
14895
  [
@@ -14773,7 +14904,9 @@ function EditorProvider({ children }) {
14773
14904
  _experimentalVirtualization,
14774
14905
  onAction,
14775
14906
  metadata,
14776
- loadedFieldTransforms
14907
+ loadedFieldTransforms,
14908
+ route,
14909
+ onPublish
14777
14910
  ]
14778
14911
  );
14779
14912
  const [appStore] = (0, import_react95.useState)(
@@ -14866,34 +14999,31 @@ var useApp = () => {
14866
14999
  const rrNavigate = (0, import_react_router.useNavigate)();
14867
15000
  const currentPath = location.pathname || "/";
14868
15001
  const isEditing = cfg.editorPath !== null && (currentPath === cfg.editorPath || currentPath.startsWith(`${cfg.editorPath}/`));
14869
- const matchRoute = isEditing ? stripPrefix(currentPath, cfg.editorPath) : currentPath;
14870
- const matched = (0, import_react97.useMemo)(() => {
15002
+ const pagePath = isEditing ? stripPrefix(currentPath, cfg.editorPath) : currentPath;
15003
+ const route = (0, import_react97.useMemo)(() => {
14871
15004
  const routeKeys = Object.keys(cfg.pages);
14872
15005
  if (routeKeys.length === 0) return null;
14873
15006
  const matches = (0, import_react_router.matchRoutes)(
14874
15007
  routeKeys.map((path) => ({ path })),
14875
- matchRoute
15008
+ pagePath
14876
15009
  );
14877
15010
  if (!matches || matches.length === 0) return null;
14878
15011
  const last = matches[matches.length - 1];
14879
- const key = last.route.path;
14880
15012
  return {
14881
- route: key,
14882
- params: last.params,
14883
- data: cfg.pages[key]
15013
+ key: last.route.path,
15014
+ path: pagePath,
15015
+ params: last.params
14884
15016
  };
14885
- }, [cfg.pages, matchRoute]);
15017
+ }, [cfg.pages, pagePath]);
14886
15018
  const routes = (0, import_react97.useMemo)(() => Object.keys(cfg.pages), [cfg.pages]);
14887
- const navigate = (route) => {
14888
- const target = isEditing && cfg.editorPath ? `${cfg.editorPath}${route === "/" ? "" : route}` || "/" : route;
14889
- rrNavigate(target || "/");
15019
+ const navigate = (target) => {
15020
+ const next = isEditing && cfg.editorPath ? `${cfg.editorPath}${target === "/" ? "" : target}` || "/" : target;
15021
+ rrNavigate(next || "/");
14890
15022
  };
14891
15023
  return __spreadProps(__spreadValues({}, cfg), {
14892
15024
  routes,
14893
- currentPath,
14894
15025
  isEditing,
14895
- matchRoute,
14896
- matched,
15026
+ route,
14897
15027
  navigate
14898
15028
  });
14899
15029
  };
@@ -14977,9 +15107,14 @@ function EditorForKey({
14977
15107
  editorProps,
14978
15108
  children
14979
15109
  }) {
14980
- const { config, pages, routes, navigate } = useApp();
15110
+ const { config, pages, routes, navigate, route } = useApp();
14981
15111
  const data = pages[routeKey];
14982
15112
  if (!data) return null;
15113
+ const editorRoute = {
15114
+ key: routeKey,
15115
+ path: (route == null ? void 0 : route.key) === routeKey ? route.path : routeKey,
15116
+ params: (route == null ? void 0 : route.key) === routeKey ? route.params : {}
15117
+ };
14983
15118
  return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
14984
15119
  Editor4,
14985
15120
  {
@@ -15006,7 +15141,7 @@ function EditorForKey({
15006
15141
  disableZoomControls: editorProps.disableZoomControls,
15007
15142
  _experimentalVirtualization: editorProps._experimentalVirtualization,
15008
15143
  routes,
15009
- currentRoute: routeKey,
15144
+ route: editorRoute,
15010
15145
  onRouteChange: (next) => navigate(next),
15011
15146
  children
15012
15147
  },
@@ -25,8 +25,8 @@ import {
25
25
  usePropsContext,
26
26
  useRouteParams,
27
27
  useStableValue
28
- } from "./chunk-3NSI5XES.mjs";
29
- import "./chunk-5QKQ3LQJ.mjs";
28
+ } from "./chunk-WUEYD7ZN.mjs";
29
+ import "./chunk-NABX5FH7.mjs";
30
30
  import {
31
31
  Action,
32
32
  ActionBar,
@@ -35,22 +35,22 @@ import {
35
35
  Label,
36
36
  RichTextMenu,
37
37
  Separator
38
- } from "./chunk-Q667J2EG.mjs";
39
- import "./chunk-RQZQMS6E.mjs";
38
+ } from "./chunk-UQHR5LFK.mjs";
39
+ import "./chunk-HR67L662.mjs";
40
40
  import {
41
41
  getRouteProps,
42
42
  migrate,
43
43
  resolveAllData,
44
44
  resolveRouteFromString,
45
45
  transformProps
46
- } from "./chunk-4L7H4JV4.mjs";
46
+ } from "./chunk-AD67LVXW.mjs";
47
47
  import "./chunk-6QJ2HF4O.mjs";
48
- import "./chunk-RGC274VM.mjs";
49
- import "./chunk-TG2KTWSB.mjs";
50
- import "./chunk-JHURG5NN.mjs";
48
+ import "./chunk-DGIVBKSJ.mjs";
49
+ import "./chunk-IOAYKTDH.mjs";
50
+ import "./chunk-LFJGTSUB.mjs";
51
51
  import "./chunk-M4JDRFYB.mjs";
52
52
  import "./chunk-FTVOCMGV.mjs";
53
- import "./chunk-Y2EFNT5P.mjs";
53
+ import "./chunk-DQU3HIP4.mjs";
54
54
  import {
55
55
  walkTree
56
56
  } from "./chunk-JIXMPJZA.mjs";
package/dist/rsc.js CHANGED
@@ -160,19 +160,29 @@ var init_get_class_name_factory = __esm({
160
160
  "use strict";
161
161
  init_react_import();
162
162
  import_classnames = __toESM(require_classnames());
163
- getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (options = {}) => {
163
+ getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (options = {}, modifiers) => {
164
164
  if (typeof options === "string") {
165
165
  const descendant = options;
166
- const style = styles[`${rootClass}-${descendant}`];
166
+ const baseKey = `${rootClass}-${descendant}`;
167
+ const style = styles[baseKey];
168
+ if (modifiers) {
169
+ const prefixedModifiers = {};
170
+ for (let modifier in modifiers) {
171
+ prefixedModifiers[styles[`${baseKey}--${modifier}`]] = modifiers[modifier];
172
+ }
173
+ return config.baseClass + (0, import_classnames.default)(__spreadValues({
174
+ [style]: !!style
175
+ }, prefixedModifiers));
176
+ }
167
177
  if (style) {
168
- return config.baseClass + styles[`${rootClass}-${descendant}`] || "";
178
+ return config.baseClass + style;
169
179
  }
170
180
  return "";
171
181
  } else if (typeof options === "object") {
172
- const modifiers = options;
182
+ const modifiers2 = options;
173
183
  const prefixedModifiers = {};
174
- for (let modifier in modifiers) {
175
- prefixedModifiers[styles[`${rootClass}--${modifier}`]] = modifiers[modifier];
184
+ for (let modifier in modifiers2) {
185
+ prefixedModifiers[styles[`${rootClass}--${modifier}`]] = modifiers2[modifier];
176
186
  }
177
187
  const c = styles[rootClass];
178
188
  return config.baseClass + (0, import_classnames.default)(__spreadValues({
package/dist/rsc.mjs CHANGED
@@ -7,10 +7,10 @@ import {
7
7
  transformProps,
8
8
  useRichtextProps,
9
9
  useSlots
10
- } from "./chunk-4L7H4JV4.mjs";
10
+ } from "./chunk-AD67LVXW.mjs";
11
11
  import "./chunk-6QJ2HF4O.mjs";
12
12
  import "./chunk-FTVOCMGV.mjs";
13
- import "./chunk-Y2EFNT5P.mjs";
13
+ import "./chunk-DQU3HIP4.mjs";
14
14
  import {
15
15
  rootAreaId,
16
16
  rootDroppableId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reacteditor/core",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "The open-source visual editor for React",
5
5
  "author": "Rami Bitar <rami@frontend.co>",
6
6
  "repository": "reacteditor/editor",