@haklex/rich-editor 0.2.0 → 0.3.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.
Files changed (40) hide show
  1. package/dist/{SubmitShortcutPlugin-D-7XrQfm.js → SubmitShortcutPlugin-DhyVFzoj.js} +3 -3
  2. package/dist/components/decorators/PollEditDecorator.d.ts +13 -0
  3. package/dist/components/decorators/PollEditDecorator.d.ts.map +1 -0
  4. package/dist/components/renderers/PollRenderer.d.ts +3 -0
  5. package/dist/components/renderers/PollRenderer.d.ts.map +1 -0
  6. package/dist/{config-CNiK9v2M.js → config-B5BuLljq.js} +390 -3
  7. package/dist/config-edit.d.ts.map +1 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/context/PollDataContext.d.ts +11 -0
  10. package/dist/context/PollDataContext.d.ts.map +1 -0
  11. package/dist/{PresentDialogContext-DKNicgia.js → extractPolls-DO31LNrp.js} +43 -1
  12. package/dist/index.d.ts +5 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.mjs +5 -5
  15. package/dist/{node-registry-DOYK_WIp.js → node-registry-Dz5OTkh4.js} +281 -4
  16. package/dist/nodes/PollEditNode.d.ts +14 -0
  17. package/dist/nodes/PollEditNode.d.ts.map +1 -0
  18. package/dist/nodes/PollNode.d.ts +52 -0
  19. package/dist/nodes/PollNode.d.ts.map +1 -0
  20. package/dist/nodes-entry.d.ts +3 -0
  21. package/dist/nodes-entry.d.ts.map +1 -1
  22. package/dist/nodes-entry.mjs +3 -3
  23. package/dist/plugins-entry.mjs +1 -1
  24. package/dist/rich-editor.css +1 -1
  25. package/dist/static-entry.d.ts +5 -0
  26. package/dist/static-entry.d.ts.map +1 -1
  27. package/dist/static-entry.mjs +3 -3
  28. package/dist/styles/index.d.ts +2 -0
  29. package/dist/styles/index.d.ts.map +1 -1
  30. package/dist/styles/poll-edit.css.d.ts +35 -0
  31. package/dist/styles/poll-edit.css.d.ts.map +1 -0
  32. package/dist/styles/poll.css.d.ts +43 -0
  33. package/dist/styles/poll.css.d.ts.map +1 -0
  34. package/dist/types/poll.d.ts +36 -0
  35. package/dist/types/poll.d.ts.map +1 -0
  36. package/dist/types/renderer-config.d.ts +3 -0
  37. package/dist/types/renderer-config.d.ts.map +1 -1
  38. package/dist/utils/extractPolls.d.ts +4 -0
  39. package/dist/utils/extractPolls.d.ts.map +1 -0
  40. package/package.json +4 -4
@@ -1,8 +1,8 @@
1
- import { c as setCodeBlockCursorIntent, o as $createCodeBlockEditNode, s as $createBannerEditNode, t as getResolvedEditNodes } from "./node-registry-DOYK_WIp.js";
1
+ import { d as setCodeBlockCursorIntent, l as $createCodeBlockEditNode, t as getResolvedEditNodes, u as $createBannerEditNode } from "./node-registry-Dz5OTkh4.js";
2
2
  import { A as AlertQuoteNode, E as FootnoteNode, M as extractTextContent, T as $createFootnoteNode, _ as KaTeXInlineNode, b as KaTeXBlockNode, c as SpoilerNode, f as $createMentionNode, h as $createKaTeXInlineNode, m as MentionNode, o as $createSpoilerNode, v as $createKaTeXBlockNode, w as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, x as $createImageNode } from "./theme-B5B2EOWM.js";
3
3
  import { a as FootnoteDefinitionsProvider, n as computeImageMeta } from "./KaTeXRenderer-CQQT3BMw.js";
4
4
  import "./katex.css-CIOEOXyd.js";
5
- import { S as CommentNode, _ as $createDetailsNode, a as $createRubyNode, b as $createCommentPlaceholderNode, f as $isGridContainerNode, g as FootnoteSectionNode, h as $isFootnoteSectionNode, j as BannerNode, m as $createFootnoteSectionNode, s as RubyNode, v as DetailsNode, w as CodeBlockNode, y as $createCommentNode } from "./config-CNiK9v2M.js";
5
+ import { A as $createCommentPlaceholderNode, D as $createDetailsNode, E as FootnoteSectionNode, M as CommentNode, O as DetailsNode, P as CodeBlockNode, S as $isGridContainerNode, T as $isFootnoteSectionNode, V as BannerNode, a as $createRubyNode, k as $createCommentNode, s as RubyNode, w as $createFootnoteSectionNode } from "./config-B5BuLljq.js";
6
6
  import { t as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-C55sxsR3.js";
7
7
  import { n as getHostname, r as probeFavicon, t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-B-1wmGzd.js";
8
8
  import { CheckListPlugin } from "@lexical/react/LexicalCheckListPlugin";
@@ -21,8 +21,8 @@ import { $convertFromMarkdownString, CHECK_LIST, CODE, QUOTE, TRANSFORMERS } fro
21
21
  import { $createTableCellNode, $createTableNode, $createTableRowNode, TableCellHeaderStates } from "@lexical/table";
22
22
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
23
23
  import { Check, Info, Link2, Upload } from "lucide-react";
24
- import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
25
24
  import { nanoid } from "nanoid";
25
+ import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
26
26
  import { ActionBar, ActionButton, Dialog, DialogPopup, DialogTitle, SegmentedControl } from "@haklex/rich-editor-ui";
27
27
  //#region src/plugins/AutoLinkPlugin.tsx
28
28
  var DEFAULT_MATCHERS = [createLinkMatcherWithRegExp(/https?:\/\/(?:www\.)?[\w#%+.:=@~-]{1,256}\.[A-Za-z]{2}[\w#%&()+./:=?@~-]*/), createLinkMatcherWithRegExp(/(?:[\w%+.-]+@[\d.a-z-]+\.[a-z]{2,})/i, (text) => `mailto:${text}`)];
@@ -0,0 +1,13 @@
1
+ import { PollMode, PollOption, PollShowResults } from '../../types/poll';
2
+ interface PollEditDecoratorProps {
3
+ closeAt?: string;
4
+ mode: PollMode;
5
+ nodeKey: string;
6
+ options: PollOption[];
7
+ pollId: string;
8
+ question: string;
9
+ showResults?: PollShowResults;
10
+ }
11
+ export declare function PollEditDecorator({ closeAt, mode, nodeKey, options, pollId, question, showResults, }: PollEditDecoratorProps): import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=PollEditDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollEditDecorator.d.ts","sourceRoot":"","sources":["../../../src/components/decorators/PollEditDecorator.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAK9E,UAAU,sBAAsB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAUD,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,WAAW,GACZ,EAAE,sBAAsB,+BA8MxB"}
@@ -0,0 +1,3 @@
1
+ import { PollRendererProps } from '../../types/poll';
2
+ export declare function PollRenderer(props: PollRendererProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=PollRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/renderers/PollRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAgP1B,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAIpD"}
@@ -4,7 +4,7 @@ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.c
4
4
  import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
5
5
  import { t as LinkCardRenderer } from "./LinkCardRenderer-CigqFwCv.js";
6
6
  import { AutoLinkNode, LinkNode } from "@lexical/link";
7
- import { createContext, createElement, use, useCallback, useEffect, useRef, useState } from "react";
7
+ import { createContext, createElement, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
8
8
  import { HeadingNode, QuoteNode } from "@lexical/rich-text";
9
9
  import { $createTextNode, $insertNodes, DecoratorNode, ElementNode, TextNode } from "lexical";
10
10
  import { HorizontalRuleNode } from "@lexical/extension";
@@ -13,6 +13,7 @@ import { ListItemNode, ListNode } from "@lexical/list";
13
13
  import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
14
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
15
  import { ChevronRight, Code, Link, MessageSquareQuote, Video } from "lucide-react";
16
+ import { customAlphabet } from "nanoid";
16
17
  //#region src/components/renderers/BannerRenderer.tsx
17
18
  var BannerRenderer = ({ type }) => {
18
19
  return /* @__PURE__ */ jsx("span", { className: `rich-banner-icon rich-banner-icon-${type}` });
@@ -996,6 +997,391 @@ function $isLinkCardNode(node) {
996
997
  return node instanceof LinkCardNode;
997
998
  }
998
999
  //#endregion
1000
+ //#region src/context/PollDataContext.tsx
1001
+ var PollDataContext = createContext({
1002
+ adapter: null,
1003
+ initialStates: {}
1004
+ });
1005
+ function PollDataProvider({ adapter, initialStates, children }) {
1006
+ const value = useMemo(() => ({
1007
+ adapter,
1008
+ initialStates: initialStates ?? {}
1009
+ }), [adapter, initialStates]);
1010
+ return /* @__PURE__ */ jsx(PollDataContext.Provider, {
1011
+ value,
1012
+ children
1013
+ });
1014
+ }
1015
+ function usePollDataAdapter() {
1016
+ return use(PollDataContext).adapter;
1017
+ }
1018
+ function useInitialPollState(pollId) {
1019
+ return use(PollDataContext).initialStates[pollId];
1020
+ }
1021
+ //#endregion
1022
+ //#region src/styles/poll.css.ts
1023
+ var pollClasses = {
1024
+ container: "_1m5xzan0",
1025
+ meta: "_1m5xzan1",
1026
+ question: "_1m5xzan2",
1027
+ optionList: "_1m5xzan3",
1028
+ option: "_1m5xzan4",
1029
+ optionInteractive: "_1m5xzan5",
1030
+ optionSelected: "_1m5xzan6",
1031
+ optionDisabled: "_1m5xzan7",
1032
+ tint: "_1m5xzan8",
1033
+ tintActive: "_1m5xzan9",
1034
+ optionRow: "_1m5xzana",
1035
+ optionLabel: "_1m5xzanb",
1036
+ optionPct: "_1m5xzanc",
1037
+ optionPctActive: "_1m5xzand",
1038
+ hint: "_1m5xzane",
1039
+ submit: "_1m5xzanf",
1040
+ submitActive: "_1m5xzang",
1041
+ footer: "_1m5xzanh",
1042
+ errorMessage: "_1m5xzani",
1043
+ skeleton: "_1m5xzanj"
1044
+ };
1045
+ //#endregion
1046
+ //#region src/components/renderers/PollRenderer.tsx
1047
+ function shouldShowTallies(state, showResults) {
1048
+ if (showResults === "after-vote") return state.userVote !== void 0 || state.closed;
1049
+ if (showResults === "after-close") return state.closed;
1050
+ return true;
1051
+ }
1052
+ function classNames(...names) {
1053
+ return names.filter((n) => Boolean(n)).join(" ");
1054
+ }
1055
+ function PollStaticFallback({ question, options }) {
1056
+ return /* @__PURE__ */ jsxs("div", {
1057
+ className: pollClasses.container,
1058
+ children: [/* @__PURE__ */ jsx("p", {
1059
+ className: pollClasses.question,
1060
+ children: question
1061
+ }), /* @__PURE__ */ jsx("ul", {
1062
+ className: pollClasses.optionList,
1063
+ children: options.map((option) => /* @__PURE__ */ jsx("li", {
1064
+ className: pollClasses.option,
1065
+ children: /* @__PURE__ */ jsx("div", {
1066
+ className: pollClasses.optionRow,
1067
+ children: /* @__PURE__ */ jsx("span", {
1068
+ className: pollClasses.optionLabel,
1069
+ children: option.label
1070
+ })
1071
+ })
1072
+ }, option.id))
1073
+ })]
1074
+ });
1075
+ }
1076
+ function PollInteractive({ adapter, closeAt, mode, options, pollId, question, showResults }) {
1077
+ const initialState = useInitialPollState(pollId);
1078
+ const liveState = adapter.usePollState(pollId);
1079
+ const submit = adapter.useSubmit(pollId);
1080
+ const state = liveState ?? initialState ?? {
1081
+ tallies: {},
1082
+ totalVotes: 0,
1083
+ status: "loading",
1084
+ closed: false,
1085
+ canVote: false
1086
+ };
1087
+ const [pendingSelection, setPendingSelection] = useState([]);
1088
+ const [isSubmitting, setIsSubmitting] = useState(false);
1089
+ const showTallies = shouldShowTallies(state, showResults);
1090
+ const userVoted = state.userVote !== void 0;
1091
+ const isClosed = state.closed;
1092
+ const canInteract = !userVoted && !isClosed && state.canVote && state.status !== "loading";
1093
+ const tallyShare = useCallback((optionId) => {
1094
+ if (!showTallies || state.totalVotes <= 0) return 0;
1095
+ const tally = state.tallies[optionId] ?? 0;
1096
+ return Math.max(0, Math.min(1, tally / state.totalVotes));
1097
+ }, [
1098
+ showTallies,
1099
+ state.tallies,
1100
+ state.totalVotes
1101
+ ]);
1102
+ const handleSingleClick = useCallback(async (optionId) => {
1103
+ if (!canInteract || isSubmitting) return;
1104
+ setIsSubmitting(true);
1105
+ try {
1106
+ await submit([optionId]);
1107
+ } finally {
1108
+ setIsSubmitting(false);
1109
+ }
1110
+ }, [
1111
+ canInteract,
1112
+ isSubmitting,
1113
+ submit
1114
+ ]);
1115
+ const handleMultiToggle = useCallback((optionId) => {
1116
+ if (!canInteract || isSubmitting) return;
1117
+ setPendingSelection((prev) => prev.includes(optionId) ? prev.filter((id) => id !== optionId) : [...prev, optionId]);
1118
+ }, [canInteract, isSubmitting]);
1119
+ const handleMultiSubmit = useCallback(async () => {
1120
+ if (!canInteract || isSubmitting || pendingSelection.length === 0) return;
1121
+ setIsSubmitting(true);
1122
+ try {
1123
+ await submit([...pendingSelection]);
1124
+ } finally {
1125
+ setIsSubmitting(false);
1126
+ }
1127
+ }, [
1128
+ canInteract,
1129
+ isSubmitting,
1130
+ pendingSelection,
1131
+ submit
1132
+ ]);
1133
+ const metaLabel = useMemo(() => {
1134
+ const parts = [mode === "single" ? "Single choice" : "Multiple choice"];
1135
+ if (isClosed) parts.push("Voting closed");
1136
+ else if (userVoted) parts.push("Voted");
1137
+ return parts.join(" · ");
1138
+ }, [
1139
+ mode,
1140
+ isClosed,
1141
+ userVoted
1142
+ ]);
1143
+ if (state.status === "loading") return /* @__PURE__ */ jsxs("div", {
1144
+ className: pollClasses.container,
1145
+ children: [
1146
+ /* @__PURE__ */ jsx("p", {
1147
+ className: pollClasses.meta,
1148
+ children: metaLabel
1149
+ }),
1150
+ /* @__PURE__ */ jsx("p", {
1151
+ className: pollClasses.question,
1152
+ children: question
1153
+ }),
1154
+ /* @__PURE__ */ jsx("ul", {
1155
+ className: pollClasses.optionList,
1156
+ children: options.map((option) => /* @__PURE__ */ jsx("li", { className: pollClasses.skeleton }, option.id))
1157
+ })
1158
+ ]
1159
+ });
1160
+ return /* @__PURE__ */ jsxs("div", {
1161
+ className: pollClasses.container,
1162
+ children: [
1163
+ /* @__PURE__ */ jsx("p", {
1164
+ className: pollClasses.meta,
1165
+ children: metaLabel
1166
+ }),
1167
+ /* @__PURE__ */ jsx("p", {
1168
+ className: pollClasses.question,
1169
+ children: question
1170
+ }),
1171
+ /* @__PURE__ */ jsx("ul", {
1172
+ className: pollClasses.optionList,
1173
+ children: options.map((option) => {
1174
+ const isUserChoice = state.userVote?.includes(option.id) ?? false;
1175
+ const isPending = pendingSelection.includes(option.id);
1176
+ const tintWidth = (() => {
1177
+ if (canInteract && mode === "multiple" && isPending) return 1;
1178
+ return tallyShare(option.id);
1179
+ })();
1180
+ const tintShouldBeActive = isUserChoice || isPending;
1181
+ const labelHighlighted = isUserChoice || isPending;
1182
+ const handleClick = canInteract ? mode === "single" ? () => handleSingleClick(option.id) : () => handleMultiToggle(option.id) : void 0;
1183
+ return /* @__PURE__ */ jsxs("li", {
1184
+ className: classNames(pollClasses.option, canInteract ? pollClasses.optionInteractive : pollClasses.optionDisabled, labelHighlighted && pollClasses.optionSelected),
1185
+ onClick: handleClick,
1186
+ ...canInteract ? {
1187
+ role: "button",
1188
+ tabIndex: 0,
1189
+ onKeyDown: (event) => {
1190
+ if (event.key === "Enter" || event.key === " ") {
1191
+ event.preventDefault();
1192
+ handleClick?.();
1193
+ }
1194
+ }
1195
+ } : {},
1196
+ children: [/* @__PURE__ */ jsx("span", {
1197
+ "aria-hidden": true,
1198
+ style: { width: `${tintWidth * 100}%` },
1199
+ className: classNames(pollClasses.tint, tintShouldBeActive && pollClasses.tintActive)
1200
+ }), /* @__PURE__ */ jsxs("div", {
1201
+ className: pollClasses.optionRow,
1202
+ children: [/* @__PURE__ */ jsxs("span", {
1203
+ className: pollClasses.optionLabel,
1204
+ children: [labelHighlighted && "✓ ", option.label]
1205
+ }), showTallies && (userVoted || isClosed) ? /* @__PURE__ */ jsxs("span", {
1206
+ className: classNames(pollClasses.optionPct, labelHighlighted && pollClasses.optionPctActive),
1207
+ children: [Math.round(tallyShare(option.id) * 100), "%"]
1208
+ }) : canInteract && mode === "single" ? /* @__PURE__ */ jsx("span", {
1209
+ className: pollClasses.hint,
1210
+ children: "Click to vote"
1211
+ }) : null]
1212
+ })]
1213
+ }, option.id);
1214
+ })
1215
+ }),
1216
+ canInteract && mode === "multiple" && /* @__PURE__ */ jsx("button", {
1217
+ disabled: pendingSelection.length === 0 || isSubmitting,
1218
+ type: "button",
1219
+ className: classNames(pollClasses.submit, pendingSelection.length > 0 && !isSubmitting && pollClasses.submitActive),
1220
+ onClick: handleMultiSubmit,
1221
+ children: isSubmitting ? "Submitting…" : pendingSelection.length > 0 ? `Submit ${pendingSelection.length} ${pendingSelection.length === 1 ? "item" : "items"}` : "Submit (select at least one)"
1222
+ }),
1223
+ /* @__PURE__ */ jsxs("div", {
1224
+ className: pollClasses.footer,
1225
+ children: [(userVoted || isClosed) && state.totalVotes > 0 ? /* @__PURE__ */ jsxs("span", { children: [
1226
+ state.totalVotes.toLocaleString(),
1227
+ " ",
1228
+ state.totalVotes === 1 ? "vote" : "votes"
1229
+ ] }) : /* @__PURE__ */ jsx("span", {}), closeAt && !isClosed ? /* @__PURE__ */ jsxs("span", { children: ["Closes ", closeAt] }) : null]
1230
+ }),
1231
+ state.status === "error" && state.errorMessage ? /* @__PURE__ */ jsx("p", {
1232
+ className: pollClasses.errorMessage,
1233
+ children: state.errorMessage
1234
+ }) : !state.canVote && !userVoted && !isClosed && state.errorMessage ? /* @__PURE__ */ jsx("p", {
1235
+ className: pollClasses.errorMessage,
1236
+ children: state.errorMessage
1237
+ }) : null
1238
+ ]
1239
+ });
1240
+ }
1241
+ function PollRenderer(props) {
1242
+ const adapter = usePollDataAdapter();
1243
+ if (!adapter) return /* @__PURE__ */ jsx(PollStaticFallback, { ...props });
1244
+ return /* @__PURE__ */ jsx(PollInteractive, {
1245
+ adapter,
1246
+ ...props
1247
+ });
1248
+ }
1249
+ //#endregion
1250
+ //#region src/nodes/PollNode.ts
1251
+ var idAlphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
1252
+ var makePollIdSuffix = customAlphabet(idAlphabet, 10);
1253
+ var makeOptionIdSuffix = customAlphabet(idAlphabet, 6);
1254
+ function createPollId() {
1255
+ return `p_${makePollIdSuffix()}`;
1256
+ }
1257
+ function createOptionId() {
1258
+ return `o_${makeOptionIdSuffix()}`;
1259
+ }
1260
+ var PollNode = class PollNode extends DecoratorNode {
1261
+ static getType() {
1262
+ return "poll";
1263
+ }
1264
+ static clone(node) {
1265
+ return new PollNode({
1266
+ pollId: node.__pollId,
1267
+ question: node.__question,
1268
+ options: node.__options,
1269
+ mode: node.__mode,
1270
+ closeAt: node.__closeAt,
1271
+ showResults: node.__showResults
1272
+ }, node.__key);
1273
+ }
1274
+ constructor(payload = {}, key) {
1275
+ super(key);
1276
+ _defineProperty(this, "__pollId", void 0);
1277
+ _defineProperty(this, "__question", void 0);
1278
+ _defineProperty(this, "__options", void 0);
1279
+ _defineProperty(this, "__mode", void 0);
1280
+ _defineProperty(this, "__closeAt", void 0);
1281
+ _defineProperty(this, "__showResults", void 0);
1282
+ this.__pollId = payload.pollId ?? createPollId();
1283
+ this.__question = payload.question ?? "";
1284
+ this.__options = payload.options && payload.options.length > 0 ? payload.options : [{
1285
+ id: createOptionId(),
1286
+ label: ""
1287
+ }, {
1288
+ id: createOptionId(),
1289
+ label: ""
1290
+ }];
1291
+ this.__mode = payload.mode ?? "single";
1292
+ this.__closeAt = payload.closeAt;
1293
+ this.__showResults = payload.showResults;
1294
+ }
1295
+ createDOM(_config) {
1296
+ const div = document.createElement("div");
1297
+ div.className = "rich-poll-wrapper";
1298
+ return div;
1299
+ }
1300
+ updateDOM() {
1301
+ return false;
1302
+ }
1303
+ isInline() {
1304
+ return false;
1305
+ }
1306
+ getPollId() {
1307
+ return this.getLatest().__pollId;
1308
+ }
1309
+ getQuestion() {
1310
+ return this.getLatest().__question;
1311
+ }
1312
+ setQuestion(question) {
1313
+ const writable = this.getWritable();
1314
+ writable.__question = question;
1315
+ }
1316
+ getOptions() {
1317
+ return this.getLatest().__options;
1318
+ }
1319
+ setOptions(options) {
1320
+ const writable = this.getWritable();
1321
+ writable.__options = options;
1322
+ }
1323
+ getMode() {
1324
+ return this.getLatest().__mode;
1325
+ }
1326
+ setMode(mode) {
1327
+ const writable = this.getWritable();
1328
+ writable.__mode = mode;
1329
+ }
1330
+ getCloseAt() {
1331
+ return this.getLatest().__closeAt;
1332
+ }
1333
+ setCloseAt(closeAt) {
1334
+ const writable = this.getWritable();
1335
+ writable.__closeAt = closeAt;
1336
+ }
1337
+ getShowResults() {
1338
+ return this.getLatest().__showResults;
1339
+ }
1340
+ setShowResults(showResults) {
1341
+ const writable = this.getWritable();
1342
+ writable.__showResults = showResults;
1343
+ }
1344
+ static importJSON(serializedNode) {
1345
+ return new PollNode({
1346
+ pollId: serializedNode.pollId,
1347
+ question: serializedNode.question,
1348
+ options: serializedNode.options,
1349
+ mode: serializedNode.mode,
1350
+ closeAt: serializedNode.closeAt,
1351
+ showResults: serializedNode.showResults
1352
+ });
1353
+ }
1354
+ exportJSON() {
1355
+ return {
1356
+ ...super.exportJSON(),
1357
+ type: "poll",
1358
+ pollId: this.__pollId,
1359
+ question: this.__question,
1360
+ options: this.__options,
1361
+ mode: this.__mode,
1362
+ ...this.__closeAt ? { closeAt: this.__closeAt } : {},
1363
+ ...this.__showResults ? { showResults: this.__showResults } : {},
1364
+ version: 1
1365
+ };
1366
+ }
1367
+ decorate(_editor, _config) {
1368
+ return createRendererDecoration("Poll", PollRenderer, {
1369
+ pollId: this.__pollId,
1370
+ question: this.__question,
1371
+ options: this.__options,
1372
+ mode: this.__mode,
1373
+ closeAt: this.__closeAt,
1374
+ showResults: this.__showResults
1375
+ });
1376
+ }
1377
+ };
1378
+ function $createPollNode(payload) {
1379
+ return new PollNode(payload);
1380
+ }
1381
+ function $isPollNode(node) {
1382
+ return node instanceof PollNode;
1383
+ }
1384
+ //#endregion
999
1385
  //#region src/nodes/RubyNode.ts
1000
1386
  function readBaseTextFromRuby(element) {
1001
1387
  let base = "";
@@ -1239,8 +1625,9 @@ var customNodes = [
1239
1625
  BannerNode,
1240
1626
  MermaidNode,
1241
1627
  RubyNode,
1242
- TagNode
1628
+ TagNode,
1629
+ PollNode
1243
1630
  ];
1244
1631
  var allNodes = [...builtinNodes, ...customNodes];
1245
1632
  //#endregion
1246
- export { BANNER_TYPES as A, $isCodeBlockNode as C, useColorScheme as D, ColorSchemeProvider as E, normalizeBannerType as M, BannerRenderer as N, $isBannerNode as O, CommentNode as S, CodeBlockRenderer as T, $createDetailsNode as _, $createRubyNode as a, $createCommentPlaceholderNode as b, $createLinkCardNode as c, $createGridContainerNode as d, $isGridContainerNode as f, FootnoteSectionNode as g, $isFootnoteSectionNode as h, VideoNode as i, BannerNode as j, BANNER_LABELS as k, $isLinkCardNode as l, $createFootnoteSectionNode as m, builtinNodes as n, $isRubyNode as o, GridContainerNode as p, customNodes as r, RubyNode as s, allNodes as t, LinkCardNode as u, DetailsNode as v, CodeBlockNode as w, $isCommentNode as x, $createCommentNode as y };
1633
+ export { $createCommentPlaceholderNode as A, BANNER_TYPES as B, GridContainerNode as C, $createDetailsNode as D, FootnoteSectionNode as E, CodeBlockRenderer as F, normalizeBannerType as H, ColorSchemeProvider as I, useColorScheme as L, CommentNode as M, $isCodeBlockNode as N, DetailsNode as O, CodeBlockNode as P, $isBannerNode as R, $isGridContainerNode as S, $isFootnoteSectionNode as T, BannerRenderer as U, BannerNode as V, usePollDataAdapter as _, $createRubyNode as a, LinkCardNode as b, $createPollNode as c, createOptionId as d, createPollId as f, useInitialPollState as g, PollDataProvider as h, VideoNode as i, $isCommentNode as j, $createCommentNode as k, $isPollNode as l, pollClasses as m, builtinNodes as n, $isRubyNode as o, PollRenderer as p, customNodes as r, RubyNode as s, allNodes as t, PollNode as u, $createLinkCardNode as v, $createFootnoteSectionNode as w, $createGridContainerNode as x, $isLinkCardNode as y, BANNER_LABELS as z };
@@ -1 +1 @@
1
- {"version":3,"file":"config-edit.d.ts","sourceRoot":"","sources":["../src/config-edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBlD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAmBrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAyC,CAAC"}
1
+ {"version":3,"file":"config-edit.d.ts","sourceRoot":"","sources":["../src/config-edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAuBlD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAoBrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAyC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBlD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAYlD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAmBjD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAqC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBlD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAYlD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAoBjD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAqC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ import { PollDataAdapter, PollState } from '../types/poll';
3
+ export interface PollDataProviderProps {
4
+ adapter: PollDataAdapter;
5
+ children: ReactNode;
6
+ initialStates?: Record<string, PollState>;
7
+ }
8
+ export declare function PollDataProvider({ adapter, initialStates, children }: PollDataProviderProps): import("react").JSX.Element;
9
+ export declare function usePollDataAdapter(): PollDataAdapter | null;
10
+ export declare function useInitialPollState(pollId: string): PollState | undefined;
11
+ //# sourceMappingURL=PollDataContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollDataContext.d.ts","sourceRoot":"","sources":["../../src/context/PollDataContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAYhE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAM3F;AAED,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEzE"}
@@ -71,4 +71,46 @@ function usePresentDialog() {
71
71
  return use(PresentDialogContext);
72
72
  }
73
73
  //#endregion
74
- export { LinkFavicon as a, useExtraNodes as i, usePresentDialog as n, ExtraNodesProvider as r, PresentDialogProvider as t };
74
+ //#region src/utils/extractPolls.ts
75
+ function isPollNode(node) {
76
+ return node.type === "poll";
77
+ }
78
+ function coercePollMetadata(node) {
79
+ if (typeof node.pollId !== "string" || typeof node.question !== "string") return null;
80
+ if (!Array.isArray(node.options)) return null;
81
+ if (node.mode !== "single" && node.mode !== "multiple") return null;
82
+ const options = node.options.filter((option) => !!option && typeof option === "object" && typeof option.id === "string" && typeof option.label === "string").map((option) => ({
83
+ id: option.id,
84
+ label: option.label
85
+ }));
86
+ return {
87
+ pollId: node.pollId,
88
+ question: node.question,
89
+ options,
90
+ mode: node.mode,
91
+ ...typeof node.closeAt === "string" ? { closeAt: node.closeAt } : {},
92
+ ...node.showResults === "always" || node.showResults === "after-vote" || node.showResults === "after-close" ? { showResults: node.showResults } : {}
93
+ };
94
+ }
95
+ function walk(node, out) {
96
+ if (isPollNode(node)) {
97
+ const meta = coercePollMetadata(node);
98
+ if (meta) out.push(meta);
99
+ return;
100
+ }
101
+ const maybe = node;
102
+ if (Array.isArray(maybe.children)) for (const child of maybe.children) walk(child, out);
103
+ if (maybe.content && typeof maybe.content === "object") walkSerializedState(maybe.content, out);
104
+ }
105
+ function walkSerializedState(state, out) {
106
+ const root = state.root;
107
+ if (!root || !Array.isArray(root.children)) return;
108
+ for (const child of root.children) walk(child, out);
109
+ }
110
+ function extractPolls(state) {
111
+ const out = [];
112
+ walkSerializedState(state, out);
113
+ return out;
114
+ }
115
+ //#endregion
116
+ export { useExtraNodes as a, ExtraNodesProvider as i, PresentDialogProvider as n, LinkFavicon as o, usePresentDialog as r, extractPolls as t };
package/dist/index.d.ts CHANGED
@@ -12,6 +12,8 @@ export type { FootnoteDefinitionsContextValue } from './context/FootnoteDefiniti
12
12
  export { FootnoteDefinitionsProvider, useFootnoteContent, useFootnoteDefinitions, useFootnoteDisplayNumber, } from './context/FootnoteDefinitionsContext';
13
13
  export type { RenderEditorStateFn } from './context/NestedContentRendererContext';
14
14
  export { NestedContentRendererProvider, useNestedContentRenderer, useOptionalNestedContentRenderer, } from './context/NestedContentRendererContext';
15
+ export type { PollDataProviderProps } from './context/PollDataContext';
16
+ export { PollDataProvider, useInitialPollState, usePollDataAdapter, } from './context/PollDataContext';
15
17
  export type { PresentDialogFn, PresentDialogProps } from './context/PresentDialogContext';
16
18
  export { PresentDialogProvider, usePresentDialog } from './context/PresentDialogContext';
17
19
  export type { RendererMode } from './context/RendererConfigContext';
@@ -21,10 +23,12 @@ export { createTextSelectionStore, TextSelectionStoreProvider, useTextSelectionS
21
23
  export { blockIdState } from './plugins/BlockIdPlugin';
22
24
  export * from './styles';
23
25
  export type { RichEditorProps, RichEditorVariant } from './types';
26
+ export type { PollDataAdapter, PollMetadata, PollMode, PollOption, PollRendererProps, PollShowResults, PollState, } from './types/poll';
24
27
  export type { RendererConfig } from './types/renderer-config';
25
28
  export type { AnchorError, AnchorResult, BlockAnchor, CommentAnchor, RangeAnchor, } from './utils/comment-anchor';
26
29
  export { $getRootBlock, $getTextOffsetInBlock, $resolveSelectionPoint, buildBlockAnchor, buildRangeAnchor, } from './utils/comment-anchor';
30
+ export { extractPolls } from './utils/extractPolls';
27
31
  export type { DOMSelectionTarget, TextSelectionSnapshot } from './utils/text-selection';
28
- export { TEXT_SELECTION_HIGHLIGHT_NAME } from './utils/text-selection-constants';
29
32
  export { $captureTextSelection, $captureTextSelectionFromRangeSelection, $restoreTextSelection, createDOMRangeFromTextSelection, findDOMPointByTextOffset, getBlockElementById, getDOMRectFromTextSelection, getTextOffsetFromDOMPoint, } from './utils/text-selection';
33
+ export { TEXT_SELECTION_HIGHLIGHT_NAME } from './utils/text-selection-constants';
30
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAChF,YAAY,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACzF,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,uCAAuC,EACvC,qBAAqB,EACrB,+BAA+B,EAC/B,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAChF,YAAY,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACzF,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClE,YAAY,EACV,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EACL,qBAAqB,EACrB,uCAAuC,EACvC,qBAAqB,EACrB,+BAA+B,EAC/B,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,11 +1,11 @@
1
- import { A as ImageUploadProvider, C as useTextSelectionSnapshot, D as defaultImageUpload, E as ImageUploadPlugin, M as CorePlugins, O as BlockIdPlugin, S as createTextSelectionStore, T as LinkFaviconPlugin, _ as $getTextOffsetInBlock, a as AutoFocusPlugin, b as buildRangeAnchor, c as $captureTextSelectionFromRangeSelection, d as findDOMPointByTextOffset, f as getBlockElementById, g as $getRootBlock, h as TEXT_SELECTION_HIGHLIGHT_NAME, i as EditorRefPlugin, k as blockIdState, l as $restoreTextSelection, m as getTextOffsetFromDOMPoint, n as OnChangePlugin, o as TextSelectionPlugin, p as getDOMRectFromTextSelection, r as FootnotePlugin, s as $captureTextSelection, t as SubmitShortcutPlugin, u as createDOMRangeFromTextSelection, v as $resolveSelectionPoint, w as useTextSelectionStore, x as TextSelectionStoreProvider, y as buildBlockAnchor } from "./SubmitShortcutPlugin-D-7XrQfm.js";
2
- import { n as setResolvedEditNodes, r as allEditNodes } from "./node-registry-DOYK_WIp.js";
1
+ import { A as ImageUploadProvider, C as useTextSelectionSnapshot, D as defaultImageUpload, E as ImageUploadPlugin, M as CorePlugins, O as BlockIdPlugin, S as createTextSelectionStore, T as LinkFaviconPlugin, _ as $getTextOffsetInBlock, a as AutoFocusPlugin, b as buildRangeAnchor, c as $captureTextSelectionFromRangeSelection, d as findDOMPointByTextOffset, f as getBlockElementById, g as $getRootBlock, h as TEXT_SELECTION_HIGHLIGHT_NAME, i as EditorRefPlugin, k as blockIdState, l as $restoreTextSelection, m as getTextOffsetFromDOMPoint, n as OnChangePlugin, o as TextSelectionPlugin, p as getDOMRectFromTextSelection, r as FootnotePlugin, s as $captureTextSelection, t as SubmitShortcutPlugin, u as createDOMRangeFromTextSelection, v as $resolveSelectionPoint, w as useTextSelectionStore, x as TextSelectionStoreProvider, y as buildBlockAnchor } from "./SubmitShortcutPlugin-DhyVFzoj.js";
2
+ import { n as setResolvedEditNodes, r as allEditNodes, s as pollEditClasses } from "./node-registry-Dz5OTkh4.js";
3
3
  import { F as useNestedContentRenderer, I as useOptionalNestedContentRenderer, P as NestedContentRendererProvider, t as editorTheme } from "./theme-B5B2EOWM.js";
4
4
  import { a as FootnoteDefinitionsProvider, c as useFootnoteDisplayNumber, d as RendererConfigProvider, f as useRendererConfig, m as useVariant, o as useFootnoteContent, p as useRendererMode, s as useFootnoteDefinitions } from "./KaTeXRenderer-CQQT3BMw.js";
5
5
  import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, r as clsx, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
6
- import { D as useColorScheme, E as ColorSchemeProvider } from "./config-CNiK9v2M.js";
6
+ import { I as ColorSchemeProvider, L as useColorScheme, _ as usePollDataAdapter, g as useInitialPollState, h as PollDataProvider, m as pollClasses } from "./config-B5BuLljq.js";
7
7
  import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
8
- import { a as LinkFavicon, i as useExtraNodes, n as usePresentDialog, r as ExtraNodesProvider, t as PresentDialogProvider } from "./PresentDialogContext-DKNicgia.js";
8
+ import { a as useExtraNodes, i as ExtraNodesProvider, n as PresentDialogProvider, o as LinkFavicon, r as usePresentDialog, t as extractPolls } from "./extractPolls-DO31LNrp.js";
9
9
  import { a as KaTeXPlugin, c as AlertPlugin, n as MermaidPlugin, s as ImagePlugin } from "./MermaidPlugin-BrOr-wQi.js";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
11
  import { ContentEditable } from "@lexical/react/LexicalContentEditable";
@@ -130,4 +130,4 @@ function RichEditor({ extraNodes, imageUpload, children, ...shellProps }) {
130
130
  });
131
131
  }
132
132
  //#endregion
133
- export { $captureTextSelection, $captureTextSelectionFromRangeSelection, $getRootBlock, $getTextOffsetInBlock, $resolveSelectionPoint, $restoreTextSelection, ColorSchemeProvider, CorePlugins, ExtraNodesProvider, FootnoteDefinitionsProvider, LinkFavicon, NestedContentRendererProvider, PresentDialogProvider, RendererConfigProvider, RichEditor, RichEditorShell, TEXT_SELECTION_HIGHLIGHT_NAME, TextSelectionStoreProvider, articleTheme, articleVariant, blockIdState, buildBlockAnchor, buildRangeAnchor, commentTheme, commentVariant, createDOMRangeFromTextSelection, createTextSelectionStore, detailsClassNames, detailsStyles, editorTheme, findDOMPointByTextOffset, getBlockElementById, getDOMRectFromTextSelection, getTextOffsetFromDOMPoint, getVariantClass, gridClassNames, gridStyles, katexClassNames, katexStyles, noteTheme, noteVariant, richContent, semanticClassNames, sharedStyles, useColorScheme, useExtraNodes, useFootnoteContent, useFootnoteDefinitions, useFootnoteDisplayNumber, useNestedContentRenderer, useOptionalNestedContentRenderer, usePresentDialog, useRendererConfig, useRendererMode, useTextSelectionSnapshot, useTextSelectionStore, useVariant, vars };
133
+ export { $captureTextSelection, $captureTextSelectionFromRangeSelection, $getRootBlock, $getTextOffsetInBlock, $resolveSelectionPoint, $restoreTextSelection, ColorSchemeProvider, CorePlugins, ExtraNodesProvider, FootnoteDefinitionsProvider, LinkFavicon, NestedContentRendererProvider, PollDataProvider, PresentDialogProvider, RendererConfigProvider, RichEditor, RichEditorShell, TEXT_SELECTION_HIGHLIGHT_NAME, TextSelectionStoreProvider, articleTheme, articleVariant, blockIdState, buildBlockAnchor, buildRangeAnchor, commentTheme, commentVariant, createDOMRangeFromTextSelection, createTextSelectionStore, detailsClassNames, detailsStyles, editorTheme, extractPolls, findDOMPointByTextOffset, getBlockElementById, getDOMRectFromTextSelection, getTextOffsetFromDOMPoint, getVariantClass, gridClassNames, gridStyles, katexClassNames, katexStyles, noteTheme, noteVariant, pollClasses, pollEditClasses, richContent, semanticClassNames, sharedStyles, useColorScheme, useExtraNodes, useFootnoteContent, useFootnoteDefinitions, useFootnoteDisplayNumber, useInitialPollState, useNestedContentRenderer, useOptionalNestedContentRenderer, usePollDataAdapter, usePresentDialog, useRendererConfig, useRendererMode, useTextSelectionSnapshot, useTextSelectionStore, useVariant, vars };