@haklex/rich-compose 0.32.0 → 0.34.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.
@@ -112,11 +112,15 @@ function renderBuiltinNode(node, key, children, headingSlugs, textContent) {
112
112
  })]
113
113
  }, key);
114
114
  }
115
- case "list": return /* @__PURE__ */ jsx(node.listType === "number" ? "ol" : "ul", {
116
- className: node.listType === "number" ? shared$1("listOl") : node.listType === "check" ? `${shared$1("checklist")} ${shared$1("listUl")}` : shared$1("listUl"),
117
- start: node.start !== 1 ? node.start : void 0,
118
- children
119
- }, key);
115
+ case "list": {
116
+ const Tag = node.listType === "number" ? "ol" : "ul";
117
+ const cls = node.listType === "number" ? shared$1("listOl") : node.listType === "check" ? `${shared$1("checklist")} ${shared$1("listUl")}` : shared$1("listUl");
118
+ return /* @__PURE__ */ jsx(Tag, {
119
+ className: cls,
120
+ start: node.start !== 1 ? node.start : void 0,
121
+ children
122
+ }, key);
123
+ }
120
124
  case "listitem": {
121
125
  const isChecklist = node.checked !== void 0;
122
126
  const hasNestedList = node.children?.some((c) => c.type === "list");
@@ -154,11 +158,15 @@ function renderBuiltinNode(node, key, children, headingSlugs, textContent) {
154
158
  })
155
159
  }, key);
156
160
  case "tablerow": return /* @__PURE__ */ jsx("tr", { children }, key);
157
- case "tablecell": return /* @__PURE__ */ jsx(node.headerState ? "th" : "td", {
158
- className: node.headerState ? tableHead : tableCell,
159
- colSpan: node.colSpan > 1 ? node.colSpan : void 0,
160
- children
161
- }, key);
161
+ case "tablecell": {
162
+ const CellTag = node.headerState ? "th" : "td";
163
+ const cls = node.headerState ? tableHead : tableCell;
164
+ return /* @__PURE__ */ jsx(CellTag, {
165
+ className: cls,
166
+ colSpan: node.colSpan > 1 ? node.colSpan : void 0,
167
+ children
168
+ }, key);
169
+ }
162
170
  case "details": {
163
171
  const summary = node.summary || "";
164
172
  return /* @__PURE__ */ jsxs("details", {
@@ -363,7 +371,8 @@ function renderEditorToReact(value, nodes, builtinNodeOverrides) {
363
371
  editorState.read(() => {
364
372
  const root = $getRoot();
365
373
  const headingSlugs = /* @__PURE__ */ new Map();
366
- content = /* @__PURE__ */ jsx(Fragment$1, { children: root.getChildren().map((child, i) => renderTree(child, editor, editorConfig, headingSlugs, `ssr-${i}`, rawRootChildren?.[i]?.$?.blockId, builtinNodeOverrides)) });
374
+ const children = root.getChildren().map((child, i) => renderTree(child, editor, editorConfig, headingSlugs, `ssr-${i}`, rawRootChildren?.[i]?.$?.blockId, builtinNodeOverrides));
375
+ content = /* @__PURE__ */ jsx(Fragment$1, { children });
367
376
  });
368
377
  const renderNestedContent = (state) => {
369
378
  const nestedEditor = createHeadlessEditor({
@@ -386,7 +395,8 @@ function renderEditorToReact(value, nodes, builtinNodeOverrides) {
386
395
  nestedState.read(() => {
387
396
  const root = $getRoot();
388
397
  const headingSlugs = /* @__PURE__ */ new Map();
389
- nested = /* @__PURE__ */ jsx(Fragment$1, { children: root.getChildren().map((child, i) => renderTree(child, nestedEditor, nestedEditorConfig, headingSlugs, `nested-${i}`, nestedRawChildren?.[i]?.$?.blockId, builtinNodeOverrides)) });
398
+ const ch = root.getChildren().map((child, i) => renderTree(child, nestedEditor, nestedEditorConfig, headingSlugs, `nested-${i}`, nestedRawChildren?.[i]?.$?.blockId, builtinNodeOverrides));
399
+ nested = /* @__PURE__ */ jsx(Fragment$1, { children: ch });
390
400
  });
391
401
  return nested;
392
402
  };
@@ -570,13 +580,14 @@ function composeRenderer(opts) {
570
580
  const builtinNodeOverrides = opts.builtinNodeOverrides;
571
581
  function ComposedRenderer(props) {
572
582
  const { theme, variant } = props;
583
+ const renderNested = useCallback((value, overrideVariant) => /* @__PURE__ */ jsx(ComposedRenderer, {
584
+ nested: true,
585
+ theme,
586
+ value,
587
+ variant: overrideVariant ?? variant
588
+ }), [theme, variant]);
573
589
  return /* @__PURE__ */ jsx(NestedContentRendererProvider, {
574
- value: useCallback((value, overrideVariant) => /* @__PURE__ */ jsx(ComposedRenderer, {
575
- nested: true,
576
- theme,
577
- value,
578
- variant: overrideVariant ?? variant
579
- }), [theme, variant]),
590
+ value: renderNested,
580
591
  children: /* @__PURE__ */ jsx(ComposedProviders, { children: /* @__PURE__ */ jsx(RichRenderer, {
581
592
  as: props.as,
582
593
  builtinNodeOverrides,
package/dist/core.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as RichRenderer, i as mergeModules, n as wrapLazy, r as dedupNodes, t as composeRenderer } from "./compose-CCyeRK8c.js";
1
+ import { a as RichRenderer, i as mergeModules, n as wrapLazy, r as dedupNodes, t as composeRenderer } from "./compose-BC3hv8cT.js";
2
2
  export { RichRenderer, composeRenderer, dedupNodes, mergeModules, wrapLazy };
package/dist/editor.d.ts CHANGED
@@ -15,7 +15,8 @@ import { mermaidEditModule } from './modules/mermaid/edit';
15
15
  import { nestedDocEditModule } from './modules/nested-doc/edit';
16
16
  import { pollEditModule } from './modules/poll/edit';
17
17
  import { rubyEditModule } from './modules/ruby/edit';
18
+ import { slashMenuEditModule } from './modules/slash-menu/edit';
18
19
  import { videoEditModule } from './modules/video/edit';
19
- export { alertEditModule, bannerEditModule, chatEditModule, codeBlockEditModule, codeSnippetEditModule, dynamicEditModule, embedEditModule, excalidrawEditModule, galleryEditModule, imageEditModule, katexEditModule, linkCardEditModule, mentionEditModule, mermaidEditModule, nestedDocEditModule, pollEditModule, rubyEditModule, videoEditModule, };
20
+ export { alertEditModule, bannerEditModule, chatEditModule, codeBlockEditModule, codeSnippetEditModule, dynamicEditModule, embedEditModule, excalidrawEditModule, galleryEditModule, imageEditModule, katexEditModule, linkCardEditModule, mentionEditModule, mermaidEditModule, nestedDocEditModule, pollEditModule, rubyEditModule, slashMenuEditModule, videoEditModule, };
20
21
  export declare const allEditorModules: import('./core').RichEditorModule[];
21
22
  //# sourceMappingURL=editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,eAAe,GAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,qCAmB5B,CAAC"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,qCAoB5B,CAAC"}
package/dist/editor.mjs CHANGED
@@ -15,6 +15,7 @@ import { mermaidEditModule } from "./modules/mermaid/edit.mjs";
15
15
  import { nestedDocEditModule } from "./modules/nested-doc/edit.mjs";
16
16
  import { pollEditModule } from "./modules/poll/edit.mjs";
17
17
  import { rubyEditModule } from "./modules/ruby/edit.mjs";
18
+ import { slashMenuEditModule } from "./modules/slash-menu/edit.mjs";
18
19
  import { videoEditModule } from "./modules/video/edit.mjs";
19
20
  //#region src/editor.ts
20
21
  var allEditorModules = [
@@ -35,7 +36,8 @@ var allEditorModules = [
35
36
  nestedDocEditModule,
36
37
  pollEditModule,
37
38
  rubyEditModule,
39
+ slashMenuEditModule,
38
40
  videoEditModule
39
41
  ];
40
42
  //#endregion
41
- export { alertEditModule, allEditorModules, bannerEditModule, chatEditModule, codeBlockEditModule, codeSnippetEditModule, dynamicEditModule, embedEditModule, excalidrawEditModule, galleryEditModule, imageEditModule, katexEditModule, linkCardEditModule, mentionEditModule, mermaidEditModule, nestedDocEditModule, pollEditModule, rubyEditModule, videoEditModule };
43
+ export { alertEditModule, allEditorModules, bannerEditModule, chatEditModule, codeBlockEditModule, codeSnippetEditModule, dynamicEditModule, embedEditModule, excalidrawEditModule, galleryEditModule, imageEditModule, katexEditModule, linkCardEditModule, mentionEditModule, mermaidEditModule, nestedDocEditModule, pollEditModule, rubyEditModule, slashMenuEditModule, videoEditModule };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as RichRenderer, i as mergeModules, n as wrapLazy, r as dedupNodes, t as composeRenderer } from "./compose-CCyeRK8c.js";
1
+ import { a as RichRenderer, i as mergeModules, n as wrapLazy, r as dedupNodes, t as composeRenderer } from "./compose-BC3hv8cT.js";
2
2
  import { t as defineConfigurableModule } from "./configurable-module-Bur4JaI3.js";
3
3
  import { Fragment, memo, useCallback, useMemo } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -60,13 +60,14 @@ function composeEditor(opts) {
60
60
  function ComposedEditor(props) {
61
61
  const { extraNodes: userExtraNodes, actions, children, theme, variant, ...rest } = props;
62
62
  const mergedExtraNodes = useMemo(() => userExtraNodes ? dedupNodes([...allNodes, ...userExtraNodes]) : allNodes, [userExtraNodes]);
63
+ const renderNested = useCallback((value, overrideVariant) => /* @__PURE__ */ jsx(NestedRenderer, {
64
+ nested: true,
65
+ theme,
66
+ value,
67
+ variant: overrideVariant ?? variant
68
+ }), [theme, variant]);
63
69
  return /* @__PURE__ */ jsx(NestedContentRendererProvider, {
64
- value: useCallback((value, overrideVariant) => /* @__PURE__ */ jsx(NestedRenderer, {
65
- nested: true,
66
- theme,
67
- value,
68
- variant: overrideVariant ?? variant
69
- }), [theme, variant]),
70
+ value: renderNested,
70
71
  children: /* @__PURE__ */ jsx(NestedEditorPluginsProvider, {
71
72
  plugins: nestedEditorPlugins,
72
73
  children: /* @__PURE__ */ jsx(ComposedProviders, { children: /* @__PURE__ */ jsx(ComposedEditorProviders, { children: /* @__PURE__ */ jsxs(RichEditor, {
@@ -605,6 +605,24 @@
605
605
  gap: 2px;
606
606
  }
607
607
  ._88dxwgk {
608
+ display: flex;
609
+ align-items: center;
610
+ gap: 16px;
611
+ padding: 8px 16px;
612
+ border-bottom: 1px solid var(--rc-border);
613
+ flex-shrink: 0;
614
+ }
615
+ ._88dxwgl {
616
+ display: flex;
617
+ align-items: center;
618
+ gap: 8px;
619
+ }
620
+ ._88dxwgm {
621
+ font-size: var(--rc-font-size-xs);
622
+ color: var(--rc-text-secondary);
623
+ flex-shrink: 0;
624
+ }
625
+ ._88dxwgn {
608
626
  margin-left: 8px;
609
627
  flex-shrink: 0;
610
628
  display: flex;
@@ -619,22 +637,22 @@
619
637
  cursor: pointer;
620
638
  transition: background 0.15s, color 0.15s;
621
639
  }
622
- ._88dxwgk:hover {
640
+ ._88dxwgn:hover {
623
641
  background: color-mix(in srgb, currentColor 8%, transparent);
624
642
  color: var(--rc-text);
625
643
  }
626
- ._88dxwgl {
644
+ ._88dxwgo {
627
645
  flex: 1;
628
646
  min-height: 0;
629
647
  overflow-y: auto;
630
648
  padding: 1rem;
631
649
  }
632
- ._88dxwgm {
650
+ ._88dxwgp {
633
651
  display: flex;
634
652
  flex-direction: column;
635
653
  gap: 0.75rem;
636
654
  }
637
- ._88dxwgn {
655
+ ._88dxwgq {
638
656
  display: flex;
639
657
  align-items: flex-start;
640
658
  gap: 0.75rem;
@@ -643,7 +661,7 @@
643
661
  border: 1px solid var(--rc-border);
644
662
  background: color-mix(in srgb, var(--rc-text) 2%, transparent);
645
663
  }
646
- ._88dxwgo {
664
+ ._88dxwgr {
647
665
  display: flex;
648
666
  align-items: center;
649
667
  justify-content: center;
@@ -656,14 +674,14 @@
656
674
  border-radius: 4px;
657
675
  transition: background 0.15s, color 0.15s;
658
676
  }
659
- ._88dxwgo:hover {
677
+ ._88dxwgr:hover {
660
678
  background: color-mix(in srgb, currentColor 8%, transparent);
661
679
  color: var(--rc-text);
662
680
  }
663
- ._88dxwgo:active {
681
+ ._88dxwgr:active {
664
682
  cursor: grabbing;
665
683
  }
666
- ._88dxwgp {
684
+ ._88dxwgs {
667
685
  width: 64px;
668
686
  height: 64px;
669
687
  border-radius: 4px;
@@ -674,22 +692,22 @@
674
692
  align-items: center;
675
693
  justify-content: center;
676
694
  }
677
- ._88dxwgp img {
695
+ ._88dxwgs img {
678
696
  width: 100%;
679
697
  height: 100%;
680
698
  object-fit: cover;
681
699
  }
682
- ._88dxwgq {
700
+ ._88dxwgt {
683
701
  color: color-mix(in srgb, var(--rc-text-secondary) 40%, transparent);
684
702
  }
685
- ._88dxwgr {
703
+ ._88dxwgu {
686
704
  flex: 1;
687
705
  display: flex;
688
706
  flex-direction: column;
689
707
  gap: 6px;
690
708
  min-width: 0;
691
709
  }
692
- ._88dxwgs {
710
+ ._88dxwgv {
693
711
  width: 100%;
694
712
  padding: 4px 8px;
695
713
  border-radius: 4px;
@@ -700,19 +718,22 @@
700
718
  outline: none;
701
719
  transition: border-color 0.15s;
702
720
  }
703
- ._88dxwgs:focus {
721
+ ._88dxwgv:focus {
704
722
  border-color: color-mix(in srgb, var(--rc-text) 30%, transparent);
705
723
  }
706
- ._88dxwgs::placeholder {
724
+ ._88dxwgv::placeholder {
707
725
  color: color-mix(in srgb, var(--rc-text-secondary) 50%, transparent);
708
726
  }
709
- ._88dxwgt {
727
+ ._88dxwgw {
728
+ width: 96px;
729
+ }
730
+ ._88dxwgx {
710
731
  display: flex;
711
732
  flex-direction: column;
712
733
  gap: 2px;
713
734
  flex-shrink: 0;
714
735
  }
715
- ._88dxwgu {
736
+ ._88dxwgy {
716
737
  display: inline-flex;
717
738
  align-items: center;
718
739
  justify-content: center;
@@ -725,11 +746,11 @@
725
746
  cursor: pointer;
726
747
  transition: background 0.15s, color 0.15s;
727
748
  }
728
- ._88dxwgu:hover {
749
+ ._88dxwgy:hover {
729
750
  background: color-mix(in srgb, var(--rc-alert-caution) 10%, transparent);
730
751
  color: var(--rc-alert-caution);
731
752
  }
732
- ._88dxwgv {
753
+ ._88dxwgz {
733
754
  display: flex;
734
755
  align-items: center;
735
756
  justify-content: center;
@@ -744,12 +765,12 @@
744
765
  cursor: pointer;
745
766
  transition: border-color 0.15s, color 0.15s, background 0.15s;
746
767
  }
747
- ._88dxwgv:hover {
768
+ ._88dxwgz:hover {
748
769
  border-color: color-mix(in srgb, var(--rc-text) 20%, transparent);
749
770
  color: var(--rc-text);
750
771
  background: color-mix(in srgb, var(--rc-text) 2%, transparent);
751
772
  }
752
- ._88dxwgw {
773
+ ._88dxwg10 {
753
774
  display: flex;
754
775
  align-items: center;
755
776
  justify-content: space-between;
@@ -759,16 +780,16 @@
759
780
  flex-shrink: 0;
760
781
  background-color: color-mix(in srgb, var(--rc-text) 1.5%, transparent);
761
782
  }
762
- ._88dxwgx {
783
+ ._88dxwg11 {
763
784
  font-size: var(--rc-font-size-xs);
764
785
  color: var(--rc-text-secondary);
765
786
  }
766
- ._88dxwgy {
787
+ ._88dxwg12 {
767
788
  display: flex;
768
789
  align-items: center;
769
790
  gap: 0.5rem;
770
791
  }
771
- ._88dxwgz {
792
+ ._88dxwg13 {
772
793
  padding: 0.25rem 0.75rem;
773
794
  border-radius: 0.375rem;
774
795
  font-size: var(--rc-font-size-xs);
@@ -777,23 +798,23 @@
777
798
  height: 28px;
778
799
  transition: background-color 0.15s, border-color 0.15s;
779
800
  }
780
- ._88dxwg10 {
801
+ ._88dxwg14 {
781
802
  background-color: transparent;
782
803
  color: var(--rc-text-secondary);
783
804
  border: 1px solid var(--rc-border);
784
805
  }
785
- ._88dxwg10:hover {
806
+ ._88dxwg14:hover {
786
807
  background-color: color-mix(in srgb, var(--rc-text) 4%, transparent);
787
808
  }
788
- ._88dxwg11 {
809
+ ._88dxwg15 {
789
810
  background-color: var(--rc-text);
790
811
  color: var(--rc-bg);
791
812
  border: 1px solid transparent;
792
813
  }
793
- ._88dxwg11:hover {
814
+ ._88dxwg15:hover {
794
815
  background-color: color-mix(in srgb, var(--rc-text) 85%, transparent);
795
816
  }
796
- ._88dxwg12 {
817
+ ._88dxwg16 {
797
818
  display: flex;
798
819
  flex-direction: column;
799
820
  align-items: center;