@haklex/rich-ext-poll 0.5.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 (44) hide show
  1. package/README.md +69 -0
  2. package/dist/PollDataContext.d.ts +11 -0
  3. package/dist/PollDataContext.d.ts.map +1 -0
  4. package/dist/PollEditDecorator.d.ts +13 -0
  5. package/dist/PollEditDecorator.d.ts.map +1 -0
  6. package/dist/PollNode-Cd9E_bOt.js +186 -0
  7. package/dist/PollRenderer.d.ts +3 -0
  8. package/dist/PollRenderer.d.ts.map +1 -0
  9. package/dist/augment.d.ts +9 -0
  10. package/dist/augment.d.ts.map +1 -0
  11. package/dist/edit-CUuz0vB8.js +372 -0
  12. package/dist/edit.d.ts +6 -0
  13. package/dist/edit.d.ts.map +1 -0
  14. package/dist/edit.mjs +2 -0
  15. package/dist/extractPolls.d.ts +4 -0
  16. package/dist/extractPolls.d.ts.map +1 -0
  17. package/dist/index.d.ts +4 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.mjs +5 -0
  20. package/dist/node-D-hnG4zJ.js +47 -0
  21. package/dist/node.d.ts +8 -0
  22. package/dist/node.d.ts.map +1 -0
  23. package/dist/node.mjs +3 -0
  24. package/dist/nodes/PollEditNode.d.ts +14 -0
  25. package/dist/nodes/PollEditNode.d.ts.map +1 -0
  26. package/dist/nodes/PollNode.d.ts +52 -0
  27. package/dist/nodes/PollNode.d.ts.map +1 -0
  28. package/dist/poll-edit.css.d.ts +43 -0
  29. package/dist/poll-edit.css.d.ts.map +1 -0
  30. package/dist/poll.css.d.ts +43 -0
  31. package/dist/poll.css.d.ts.map +1 -0
  32. package/dist/renderer-CJEY_O80.js +257 -0
  33. package/dist/renderer.d.ts +8 -0
  34. package/dist/renderer.d.ts.map +1 -0
  35. package/dist/renderer.mjs +2 -0
  36. package/dist/rich-ext-poll.css +2 -0
  37. package/dist/slot.d.ts +8 -0
  38. package/dist/slot.d.ts.map +1 -0
  39. package/dist/static.d.ts +3 -0
  40. package/dist/static.d.ts.map +1 -0
  41. package/dist/static.mjs +4 -0
  42. package/dist/types.d.ts +36 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/package.json +72 -0
package/dist/edit.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import { a as pollEditClasses, i as PollEditDecorator, n as $createPollEditNode, r as PollEditNode, t as pollEditNodes } from "./edit-CUuz0vB8.js";
2
+ export { $createPollEditNode, PollEditDecorator, PollEditNode, pollEditClasses, pollEditNodes };
@@ -0,0 +1,4 @@
1
+ import { SerializedEditorState } from 'lexical';
2
+ import { PollMetadata } from './types';
3
+ export declare function extractPolls(state: SerializedEditorState): PollMetadata[];
4
+ //# sourceMappingURL=extractPolls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractPolls.d.ts","sourceRoot":"","sources":["../src/extractPolls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,SAAS,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoE5C,wBAAgB,YAAY,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,EAAE,CAIzE"}
@@ -0,0 +1,4 @@
1
+ export * from './edit';
2
+ export * from './node';
3
+ export * from './renderer';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
package/dist/index.mjs ADDED
@@ -0,0 +1,5 @@
1
+ import { a as pollEditClasses, i as PollEditDecorator, n as $createPollEditNode, r as PollEditNode, t as pollEditNodes } from "./edit-CUuz0vB8.js";
2
+ import { a as createPollId, i as createOptionId, n as $isPollNode, r as PollNode, s as POLL_NODE_KEY, t as $createPollNode } from "./PollNode-Cd9E_bOt.js";
3
+ import { n as extractPolls, t as pollNodes } from "./node-D-hnG4zJ.js";
4
+ import { a as usePollDataAdapter, i as useInitialPollState, n as PollRenderer, o as pollClasses, r as PollDataProvider } from "./renderer-CJEY_O80.js";
5
+ export { $createPollEditNode, $createPollNode, $isPollNode, POLL_NODE_KEY, PollDataProvider, PollEditDecorator, PollEditNode, PollNode, PollRenderer, createOptionId, createPollId, extractPolls, pollClasses, pollEditClasses, pollEditNodes, pollNodes, useInitialPollState, usePollDataAdapter };
@@ -0,0 +1,47 @@
1
+ import { r as PollNode } from "./PollNode-Cd9E_bOt.js";
2
+ //#region src/extractPolls.ts
3
+ function isPollNode(node) {
4
+ return node.type === "poll";
5
+ }
6
+ function coercePollMetadata(node) {
7
+ if (typeof node.pollId !== "string" || typeof node.question !== "string") return null;
8
+ if (!Array.isArray(node.options)) return null;
9
+ if (node.mode !== "single" && node.mode !== "multiple") return null;
10
+ const options = node.options.filter((option) => !!option && typeof option === "object" && typeof option.id === "string" && typeof option.label === "string").map((option) => ({
11
+ id: option.id,
12
+ label: option.label
13
+ }));
14
+ return {
15
+ pollId: node.pollId,
16
+ question: node.question,
17
+ options,
18
+ mode: node.mode,
19
+ ...typeof node.closeAt === "string" ? { closeAt: node.closeAt } : {},
20
+ ...node.showResults === "always" || node.showResults === "after-vote" || node.showResults === "after-close" ? { showResults: node.showResults } : {}
21
+ };
22
+ }
23
+ function walk(node, out) {
24
+ if (isPollNode(node)) {
25
+ const meta = coercePollMetadata(node);
26
+ if (meta) out.push(meta);
27
+ return;
28
+ }
29
+ const maybe = node;
30
+ if (Array.isArray(maybe.children)) for (const child of maybe.children) walk(child, out);
31
+ if (maybe.content && typeof maybe.content === "object") walkSerializedState(maybe.content, out);
32
+ }
33
+ function walkSerializedState(state, out) {
34
+ const root = state.root;
35
+ if (!root || !Array.isArray(root.children)) return;
36
+ for (const child of root.children) walk(child, out);
37
+ }
38
+ function extractPolls(state) {
39
+ const out = [];
40
+ walkSerializedState(state, out);
41
+ return out;
42
+ }
43
+ //#endregion
44
+ //#region src/node.ts
45
+ var pollNodes = [PollNode];
46
+ //#endregion
47
+ export { extractPolls as n, pollNodes as t };
package/dist/node.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { Klass, LexicalNode } from 'lexical';
2
+ export { extractPolls } from './extractPolls';
3
+ export type { PollNodePayload, SerializedPollNode } from './nodes/PollNode';
4
+ export { $createPollNode, $isPollNode, createOptionId, createPollId, PollNode, } from './nodes/PollNode';
5
+ export { POLL_NODE_KEY } from './slot';
6
+ export type { PollDataAdapter, PollMetadata, PollMode, PollOption, PollRendererProps, PollShowResults, PollState, } from './types';
7
+ export declare const pollNodes: Array<Klass<LexicalNode>>;
8
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIlD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,YAAY,EACZ,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAc,CAAC"}
package/dist/node.mjs ADDED
@@ -0,0 +1,3 @@
1
+ import { a as createPollId, i as createOptionId, n as $isPollNode, r as PollNode, s as POLL_NODE_KEY, t as $createPollNode } from "./PollNode-Cd9E_bOt.js";
2
+ import { n as extractPolls, t as pollNodes } from "./node-D-hnG4zJ.js";
3
+ export { $createPollNode, $isPollNode, POLL_NODE_KEY, PollNode, createOptionId, createPollId, extractPolls, pollNodes };
@@ -0,0 +1,14 @@
1
+ import { CommandItemConfig } from '@haklex/rich-editor/commands';
2
+ import { EditorConfig, LexicalEditor, NodeKey } from 'lexical';
3
+ import { ReactElement } from 'react';
4
+ import { PollNode, PollNodePayload, SerializedPollNode } from './PollNode';
5
+ export declare class PollEditNode extends PollNode {
6
+ static commandItems: CommandItemConfig[];
7
+ static getType(): string;
8
+ static clone(node: PollEditNode): PollEditNode;
9
+ constructor(payload?: PollNodePayload, key?: NodeKey);
10
+ static importJSON(serializedNode: SerializedPollNode): PollEditNode;
11
+ decorate(_editor: LexicalEditor, _config: EditorConfig): ReactElement;
12
+ }
13
+ export declare function $createPollEditNode(payload?: PollNodePayload): PollEditNode;
14
+ //# sourceMappingURL=PollEditNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollEditNode.d.ts","sourceRoot":"","sources":["../../src/nodes/PollEditNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErF,qBAAa,YAAa,SAAQ,QAAQ;IACxC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAetC;IAEF,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY;gBAclC,OAAO,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO;IAIpD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,YAAY;IAWnE,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;CAWtE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,CAE3E"}
@@ -0,0 +1,52 @@
1
+ import { EditorConfig, LexicalEditor, LexicalNode, NodeKey, SerializedLexicalNode, Spread, DecoratorNode } from 'lexical';
2
+ import { ReactElement } from 'react';
3
+ import { PollMode, PollOption, PollShowResults } from '../types';
4
+ export declare function createPollId(): string;
5
+ export declare function createOptionId(): string;
6
+ export interface PollNodePayload {
7
+ closeAt?: string;
8
+ mode?: PollMode;
9
+ options?: PollOption[];
10
+ pollId?: string;
11
+ question?: string;
12
+ showResults?: PollShowResults;
13
+ }
14
+ export type SerializedPollNode = Spread<{
15
+ pollId: string;
16
+ question: string;
17
+ options: PollOption[];
18
+ mode: PollMode;
19
+ closeAt?: string;
20
+ showResults?: PollShowResults;
21
+ }, SerializedLexicalNode>;
22
+ export declare class PollNode extends DecoratorNode<ReactElement> {
23
+ __pollId: string;
24
+ __question: string;
25
+ __options: PollOption[];
26
+ __mode: PollMode;
27
+ __closeAt?: string;
28
+ __showResults?: PollShowResults;
29
+ static getType(): string;
30
+ static clone(node: PollNode): PollNode;
31
+ constructor(payload?: PollNodePayload, key?: NodeKey);
32
+ createDOM(_config: EditorConfig): HTMLElement;
33
+ updateDOM(): boolean;
34
+ isInline(): boolean;
35
+ getPollId(): string;
36
+ getQuestion(): string;
37
+ setQuestion(question: string): void;
38
+ getOptions(): PollOption[];
39
+ setOptions(options: PollOption[]): void;
40
+ getMode(): PollMode;
41
+ setMode(mode: PollMode): void;
42
+ getCloseAt(): string | undefined;
43
+ setCloseAt(closeAt: string | undefined): void;
44
+ getShowResults(): PollShowResults | undefined;
45
+ setShowResults(showResults: PollShowResults | undefined): void;
46
+ static importJSON(serializedNode: SerializedPollNode): PollNode;
47
+ exportJSON(): SerializedPollNode;
48
+ decorate(_editor: LexicalEditor, _config: EditorConfig): ReactElement;
49
+ }
50
+ export declare function $createPollNode(payload?: PollNodePayload): PollNode;
51
+ export declare function $isPollNode(node: LexicalNode | null | undefined): node is PollNode;
52
+ //# sourceMappingURL=PollNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollNode.d.ts","sourceRoot":"","sources":["../../src/nodes/PollNode.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AAGpB,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,MAAM,EACP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMtE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,EACD,qBAAqB,CACtB,CAAC;AAEF,qBAAa,QAAS,SAAQ,aAAa,CAAC,YAAY,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,eAAe,CAAC;IAEhC,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;gBAc1B,OAAO,GAAE,eAAoB,EAAE,GAAG,CAAC,EAAE,OAAO;IAgBxD,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAM7C,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAIrB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnC,UAAU,IAAI,UAAU,EAAE;IAI1B,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAKvC,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK7B,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK7C,cAAc,IAAI,eAAe,GAAG,SAAS;IAI7C,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;IAK9D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAW/D,UAAU,IAAI,kBAAkB;IAchC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;CAUtE;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAEnE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF"}
@@ -0,0 +1,43 @@
1
+ export declare const editContainer: string;
2
+ export declare const editMeta: string;
3
+ export declare const editQuestion: string;
4
+ export declare const editOptionList: string;
5
+ export declare const editOptionRow: string;
6
+ export declare const editReorderColumn: string;
7
+ export declare const editReorderButton: string;
8
+ export declare const editOptionInput: string;
9
+ export declare const editRemoveButton: string;
10
+ export declare const editAddOption: string;
11
+ export declare const editAdvancedSummary: string;
12
+ export declare const editAdvancedGrid: string;
13
+ export declare const editAdvancedLabel: string;
14
+ export declare const editDateTimeField: string;
15
+ export declare const editDateTimeIcon: string;
16
+ export declare const editDateTimeInput: string;
17
+ export declare const editSelectTrigger: string;
18
+ export declare const editSelectContent: string;
19
+ export declare const editModeRow: string;
20
+ export declare const editModeControl: string;
21
+ export declare const pollEditClasses: {
22
+ readonly container: string;
23
+ readonly meta: string;
24
+ readonly question: string;
25
+ readonly optionList: string;
26
+ readonly optionRow: string;
27
+ readonly reorderColumn: string;
28
+ readonly reorderButton: string;
29
+ readonly optionInput: string;
30
+ readonly removeButton: string;
31
+ readonly addOption: string;
32
+ readonly advancedSummary: string;
33
+ readonly advancedGrid: string;
34
+ readonly advancedLabel: string;
35
+ readonly dateTimeField: string;
36
+ readonly dateTimeIcon: string;
37
+ readonly dateTimeInput: string;
38
+ readonly selectTrigger: string;
39
+ readonly selectContent: string;
40
+ readonly modeRow: string;
41
+ readonly modeControl: string;
42
+ };
43
+ //# sourceMappingURL=poll-edit.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-edit.css.d.ts","sourceRoot":"","sources":["../src/poll-edit.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAKxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAMnB,CAAC;AAEH,eAAO,MAAM,YAAY,QAiBvB,CAAC;AAEH,eAAO,MAAM,cAAc,QAIzB,CAAC;AAEH,eAAO,MAAM,aAAa,QAKxB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAK5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAwB5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAkB1B,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAgB3B,CAAC;AAEH,eAAO,MAAM,aAAa,QAoBxB,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAW9B,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAQ3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAmB5B,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAI3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAuB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAc5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC"}
@@ -0,0 +1,43 @@
1
+ export declare const pollContainer: string;
2
+ export declare const pollMeta: string;
3
+ export declare const pollQuestion: string;
4
+ export declare const pollOptionList: string;
5
+ export declare const pollOption: string;
6
+ export declare const pollOptionInteractive: string;
7
+ export declare const pollOptionSelected: string;
8
+ export declare const pollOptionDisabled: string;
9
+ export declare const pollTint: string;
10
+ export declare const pollTintActive: string;
11
+ export declare const pollOptionRow: string;
12
+ export declare const pollOptionLabel: string;
13
+ export declare const pollOptionPct: string;
14
+ export declare const pollOptionPctActive: string;
15
+ export declare const pollHint: string;
16
+ export declare const pollSubmit: string;
17
+ export declare const pollSubmitActive: string;
18
+ export declare const pollFooter: string;
19
+ export declare const pollErrorMessage: string;
20
+ export declare const pollSkeleton: string;
21
+ export declare const pollClasses: {
22
+ readonly container: string;
23
+ readonly meta: string;
24
+ readonly question: string;
25
+ readonly optionList: string;
26
+ readonly option: string;
27
+ readonly optionInteractive: string;
28
+ readonly optionSelected: string;
29
+ readonly optionDisabled: string;
30
+ readonly tint: string;
31
+ readonly tintActive: string;
32
+ readonly optionRow: string;
33
+ readonly optionLabel: string;
34
+ readonly optionPct: string;
35
+ readonly optionPctActive: string;
36
+ readonly hint: string;
37
+ readonly submit: string;
38
+ readonly submitActive: string;
39
+ readonly footer: string;
40
+ readonly errorMessage: string;
41
+ readonly skeleton: string;
42
+ };
43
+ //# sourceMappingURL=poll.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.css.d.ts","sourceRoot":"","sources":["../src/poll.css.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,QAMxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAMnB,CAAC;AAEH,eAAO,MAAM,YAAY,QAMvB,CAAC;AAEH,eAAO,MAAM,cAAc,QAIzB,CAAC;AAEH,eAAO,MAAM,UAAU,QAOrB,CAAC;AAEH,eAAO,MAAM,qBAAqB,QAQhC,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAE7B,CAAC;AAEH,eAAO,MAAM,QAAQ,QAQnB,CAAC;AAEH,eAAO,MAAM,cAAc,QAEzB,CAAC;AAEH,eAAO,MAAM,aAAa,QAMxB,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAKxB,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAE9B,CAAC;AAEH,eAAO,MAAM,QAAQ,QAMnB,CAAC;AAMH,eAAO,MAAM,UAAU,QAWrB,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAI3B,CAAC;AAEH,eAAO,MAAM,UAAU,QAQrB,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAI3B,CAAC;AAEH,eAAO,MAAM,YAAY,QAKvB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAqBd,CAAC"}
@@ -0,0 +1,257 @@
1
+ /* empty css */
2
+ import { createContext, use, useCallback, useMemo, useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/poll.css.ts
5
+ var pollClasses = {
6
+ container: "qovfuy0",
7
+ meta: "qovfuy1",
8
+ question: "qovfuy2",
9
+ optionList: "qovfuy3",
10
+ option: "qovfuy4",
11
+ optionInteractive: "qovfuy5",
12
+ optionSelected: "qovfuy6",
13
+ optionDisabled: "qovfuy7",
14
+ tint: "qovfuy8",
15
+ tintActive: "qovfuy9",
16
+ optionRow: "qovfuya",
17
+ optionLabel: "qovfuyb",
18
+ optionPct: "qovfuyc",
19
+ optionPctActive: "qovfuyd",
20
+ hint: "qovfuye",
21
+ submit: "qovfuyf",
22
+ submitActive: "qovfuyg",
23
+ footer: "qovfuyh",
24
+ errorMessage: "qovfuyi",
25
+ skeleton: "qovfuyj"
26
+ };
27
+ //#endregion
28
+ //#region src/PollDataContext.tsx
29
+ var PollDataContext = createContext({
30
+ adapter: null,
31
+ initialStates: {}
32
+ });
33
+ function PollDataProvider({ adapter, initialStates, children }) {
34
+ const value = useMemo(() => ({
35
+ adapter,
36
+ initialStates: initialStates ?? {}
37
+ }), [adapter, initialStates]);
38
+ return /* @__PURE__ */ jsx(PollDataContext.Provider, {
39
+ value,
40
+ children
41
+ });
42
+ }
43
+ function usePollDataAdapter() {
44
+ return use(PollDataContext).adapter;
45
+ }
46
+ function useInitialPollState(pollId) {
47
+ return use(PollDataContext).initialStates[pollId];
48
+ }
49
+ //#endregion
50
+ //#region src/PollRenderer.tsx
51
+ function shouldShowTallies(state, showResults) {
52
+ if (showResults === "after-vote") return state.userVote !== void 0 || state.closed;
53
+ if (showResults === "after-close") return state.closed;
54
+ return true;
55
+ }
56
+ function classNames(...names) {
57
+ return names.filter((n) => Boolean(n)).join(" ");
58
+ }
59
+ function PollStaticFallback({ question, options }) {
60
+ return /* @__PURE__ */ jsxs("div", {
61
+ className: pollClasses.container,
62
+ children: [/* @__PURE__ */ jsx("p", {
63
+ className: pollClasses.question,
64
+ children: question
65
+ }), /* @__PURE__ */ jsx("ul", {
66
+ className: pollClasses.optionList,
67
+ children: options.map((option) => /* @__PURE__ */ jsx("li", {
68
+ className: pollClasses.option,
69
+ children: /* @__PURE__ */ jsx("div", {
70
+ className: pollClasses.optionRow,
71
+ children: /* @__PURE__ */ jsx("span", {
72
+ className: pollClasses.optionLabel,
73
+ children: option.label
74
+ })
75
+ })
76
+ }, option.id))
77
+ })]
78
+ });
79
+ }
80
+ function PollInteractive({ adapter, closeAt, mode, options, pollId, question, showResults }) {
81
+ const initialState = useInitialPollState(pollId);
82
+ const liveState = adapter.usePollState(pollId);
83
+ const submit = adapter.useSubmit(pollId);
84
+ const state = liveState ?? initialState ?? {
85
+ tallies: {},
86
+ totalVotes: 0,
87
+ status: "loading",
88
+ closed: false,
89
+ canVote: false
90
+ };
91
+ const [pendingSelection, setPendingSelection] = useState([]);
92
+ const [isSubmitting, setIsSubmitting] = useState(false);
93
+ const showTallies = shouldShowTallies(state, showResults);
94
+ const userVoted = state.userVote !== void 0;
95
+ const isClosed = state.closed;
96
+ const canInteract = !userVoted && !isClosed && state.canVote && state.status !== "loading";
97
+ const tallyShare = useCallback((optionId) => {
98
+ if (!showTallies || state.totalVotes <= 0) return 0;
99
+ const tally = state.tallies[optionId] ?? 0;
100
+ return Math.max(0, Math.min(1, tally / state.totalVotes));
101
+ }, [
102
+ showTallies,
103
+ state.tallies,
104
+ state.totalVotes
105
+ ]);
106
+ const handleSingleClick = useCallback(async (optionId) => {
107
+ if (!canInteract || isSubmitting) return;
108
+ setIsSubmitting(true);
109
+ try {
110
+ await submit([optionId]);
111
+ } finally {
112
+ setIsSubmitting(false);
113
+ }
114
+ }, [
115
+ canInteract,
116
+ isSubmitting,
117
+ submit
118
+ ]);
119
+ const handleMultiToggle = useCallback((optionId) => {
120
+ if (!canInteract || isSubmitting) return;
121
+ setPendingSelection((prev) => prev.includes(optionId) ? prev.filter((id) => id !== optionId) : [...prev, optionId]);
122
+ }, [canInteract, isSubmitting]);
123
+ const handleMultiSubmit = useCallback(async () => {
124
+ if (!canInteract || isSubmitting || pendingSelection.length === 0) return;
125
+ setIsSubmitting(true);
126
+ try {
127
+ await submit([...pendingSelection]);
128
+ } finally {
129
+ setIsSubmitting(false);
130
+ }
131
+ }, [
132
+ canInteract,
133
+ isSubmitting,
134
+ pendingSelection,
135
+ submit
136
+ ]);
137
+ const metaLabel = useMemo(() => {
138
+ const parts = [mode === "single" ? "Single choice" : "Multiple choice"];
139
+ if (isClosed) parts.push("Voting closed");
140
+ else if (userVoted) parts.push("Voted");
141
+ return parts.join(" · ");
142
+ }, [
143
+ mode,
144
+ isClosed,
145
+ userVoted
146
+ ]);
147
+ if (state.status === "loading") return /* @__PURE__ */ jsxs("div", {
148
+ className: pollClasses.container,
149
+ children: [
150
+ /* @__PURE__ */ jsx("p", {
151
+ className: pollClasses.meta,
152
+ children: metaLabel
153
+ }),
154
+ /* @__PURE__ */ jsx("p", {
155
+ className: pollClasses.question,
156
+ children: question
157
+ }),
158
+ /* @__PURE__ */ jsx("ul", {
159
+ className: pollClasses.optionList,
160
+ children: options.map((option) => /* @__PURE__ */ jsx("li", { className: pollClasses.skeleton }, option.id))
161
+ })
162
+ ]
163
+ });
164
+ return /* @__PURE__ */ jsxs("div", {
165
+ className: pollClasses.container,
166
+ children: [
167
+ /* @__PURE__ */ jsx("p", {
168
+ className: pollClasses.meta,
169
+ children: metaLabel
170
+ }),
171
+ /* @__PURE__ */ jsx("p", {
172
+ className: pollClasses.question,
173
+ children: question
174
+ }),
175
+ /* @__PURE__ */ jsx("ul", {
176
+ className: pollClasses.optionList,
177
+ children: options.map((option) => {
178
+ const isUserChoice = state.userVote?.includes(option.id) ?? false;
179
+ const isPending = pendingSelection.includes(option.id);
180
+ const tintWidth = (() => {
181
+ if (canInteract && mode === "multiple" && isPending) return 1;
182
+ return tallyShare(option.id);
183
+ })();
184
+ const tintShouldBeActive = isUserChoice || isPending;
185
+ const labelHighlighted = isUserChoice || isPending;
186
+ const handleClick = canInteract ? mode === "single" ? () => handleSingleClick(option.id) : () => handleMultiToggle(option.id) : void 0;
187
+ return /* @__PURE__ */ jsxs("li", {
188
+ className: classNames(pollClasses.option, canInteract ? pollClasses.optionInteractive : pollClasses.optionDisabled, labelHighlighted && pollClasses.optionSelected),
189
+ onClick: handleClick,
190
+ ...canInteract ? {
191
+ role: "button",
192
+ tabIndex: 0,
193
+ onKeyDown: (event) => {
194
+ if (event.key === "Enter" || event.key === " ") {
195
+ event.preventDefault();
196
+ handleClick?.();
197
+ }
198
+ }
199
+ } : {},
200
+ children: [/* @__PURE__ */ jsx("span", {
201
+ "aria-hidden": true,
202
+ style: { width: `${tintWidth * 100}%` },
203
+ className: classNames(pollClasses.tint, tintShouldBeActive && pollClasses.tintActive)
204
+ }), /* @__PURE__ */ jsxs("div", {
205
+ className: pollClasses.optionRow,
206
+ children: [/* @__PURE__ */ jsxs("span", {
207
+ className: pollClasses.optionLabel,
208
+ children: [labelHighlighted && "✓ ", option.label]
209
+ }), showTallies && (userVoted || isClosed) ? /* @__PURE__ */ jsxs("span", {
210
+ className: classNames(pollClasses.optionPct, labelHighlighted && pollClasses.optionPctActive),
211
+ children: [Math.round(tallyShare(option.id) * 100), "%"]
212
+ }) : canInteract && mode === "single" ? /* @__PURE__ */ jsx("span", {
213
+ className: pollClasses.hint,
214
+ children: "Click to vote"
215
+ }) : null]
216
+ })]
217
+ }, option.id);
218
+ })
219
+ }),
220
+ canInteract && mode === "multiple" && /* @__PURE__ */ jsx("button", {
221
+ disabled: pendingSelection.length === 0 || isSubmitting,
222
+ type: "button",
223
+ className: classNames(pollClasses.submit, pendingSelection.length > 0 && !isSubmitting && pollClasses.submitActive),
224
+ onClick: handleMultiSubmit,
225
+ children: isSubmitting ? "Submitting…" : pendingSelection.length > 0 ? `Submit ${pendingSelection.length} ${pendingSelection.length === 1 ? "item" : "items"}` : "Submit (select at least one)"
226
+ }),
227
+ /* @__PURE__ */ jsxs("div", {
228
+ className: pollClasses.footer,
229
+ children: [(userVoted || isClosed) && state.totalVotes > 0 ? /* @__PURE__ */ jsxs("span", { children: [
230
+ state.totalVotes.toLocaleString(),
231
+ " ",
232
+ state.totalVotes === 1 ? "vote" : "votes"
233
+ ] }) : /* @__PURE__ */ jsx("span", {}), closeAt && !isClosed ? /* @__PURE__ */ jsxs("span", { children: ["Closes ", closeAt] }) : null]
234
+ }),
235
+ state.status === "error" && state.errorMessage ? /* @__PURE__ */ jsx("p", {
236
+ className: pollClasses.errorMessage,
237
+ children: state.errorMessage
238
+ }) : !state.canVote && !userVoted && !isClosed && state.errorMessage ? /* @__PURE__ */ jsx("p", {
239
+ className: pollClasses.errorMessage,
240
+ children: state.errorMessage
241
+ }) : null
242
+ ]
243
+ });
244
+ }
245
+ function PollRenderer(props) {
246
+ const adapter = usePollDataAdapter();
247
+ if (!adapter) return /* @__PURE__ */ jsx(PollStaticFallback, { ...props });
248
+ return /* @__PURE__ */ jsx(PollInteractive, {
249
+ adapter,
250
+ ...props
251
+ });
252
+ }
253
+ //#endregion
254
+ //#region src/renderer.ts
255
+ var renderer_default = PollRenderer;
256
+ //#endregion
257
+ export { usePollDataAdapter as a, useInitialPollState as i, PollRenderer as n, pollClasses as o, PollDataProvider as r, renderer_default as t };
@@ -0,0 +1,8 @@
1
+ import { PollRenderer } from './PollRenderer';
2
+ export type { PollDataProviderProps } from './PollDataContext';
3
+ export { PollDataProvider, useInitialPollState, usePollDataAdapter, } from './PollDataContext';
4
+ export type { PollDataAdapter, PollOption, PollRendererProps, PollShowResults, PollState, } from './types';
5
+ export { PollRenderer };
6
+ export { pollClasses } from './poll.css';
7
+ export default PollRenderer;
8
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AACpB,OAAO,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,eAAe,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { a as usePollDataAdapter, i as useInitialPollState, n as PollRenderer, o as pollClasses, r as PollDataProvider, t as renderer_default } from "./renderer-CJEY_O80.js";
2
+ export { PollDataProvider, PollRenderer, renderer_default as default, pollClasses, useInitialPollState, usePollDataAdapter };
@@ -0,0 +1,2 @@
1
+ :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.hc1wgp0{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.hc1wgp1{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.8;--rc-line-height-tight:1.4;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.hc1wgp2{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-line-height:1.5;--rc-line-height-tight:1.3;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.dark .hc1wgp0,[data-theme=dark] .hc1wgp0,.dark.hc1wgp0,[data-theme=dark].hc1wgp0,.dark .hc1wgp1,[data-theme=dark] .hc1wgp1,.dark.hc1wgp1,[data-theme=dark].hc1wgp1,.dark .hc1wgp2,[data-theme=dark] .hc1wgp2,.dark.hc1wgp2,[data-theme=dark].hc1wgp2{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}.jr1ls70{border-top:1px solid var(--rc-hr-border);border-bottom:1px solid var(--rc-hr-border);padding:var(--rc-space-md) 0;margin:var(--rc-space-lg) 0}.jr1ls71{color:var(--rc-text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin:0 0 var(--rc-space-sm);font-size:.7rem}.jr1ls72{width:100%;padding:var(--rc-space-xs) 0;margin-bottom:var(--rc-space-xs);color:var(--rc-text);background:0 0;border:none;outline:none;font-family:inherit;font-size:1rem;font-weight:600}.jr1ls72::placeholder{color:var(--rc-text-tertiary);font-weight:400}.jr1ls73{margin:0;padding:0;list-style:none}.jr1ls74{align-items:center;gap:var(--rc-space-xs);padding:var(--rc-space-xs) 0;display:flex}.jr1ls75{flex-direction:column;flex-shrink:0;gap:2px;display:flex}.jr1ls76{cursor:pointer;width:18px;height:16px;color:var(--rc-text-tertiary);background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:0;line-height:1;transition:color .12s,background .12s;display:inline-flex}.jr1ls76:hover:not(:disabled){color:var(--rc-text);background:var(--rc-fill-tertiary)}.jr1ls76:disabled{opacity:.3;cursor:default}.jr1ls77{border:1px solid #0000;border-bottom:1px solid var(--rc-hr-border);padding:var(--rc-space-xs) 0;color:var(--rc-text);background:0 0;outline:none;flex:1;font-family:inherit;font-size:.875rem}.jr1ls77:focus-visible{border-bottom-color:var(--rc-text)}.jr1ls77::placeholder{color:var(--rc-text-tertiary)}.jr1ls78{cursor:pointer;color:var(--rc-text-tertiary);background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:2px 6px;transition:color .12s;display:inline-flex}.jr1ls78:hover{color:var(--rc-text)}.jr1ls79{align-items:center;gap:var(--rc-space-xs);margin-top:var(--rc-space-sm);border:1px dashed var(--rc-hr-border);border-radius:var(--rc-radius-sm);padding:var(--rc-space-xs) var(--rc-space-md);color:var(--rc-text-tertiary);cursor:pointer;background:0 0;font-family:inherit;font-size:.875rem;transition:color .12s,border-color .12s;display:inline-flex}.jr1ls79:hover{color:var(--rc-text);border-color:var(--rc-text-secondary)}.jr1ls7a{margin-top:var(--rc-space-md);color:var(--rc-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:.875rem;list-style:none}.jr1ls7a::-webkit-details-marker{display:none}.jr1ls7a::marker{content:"";display:none}.jr1ls7b{gap:var(--rc-space-sm);margin-top:var(--rc-space-sm);color:var(--rc-text-secondary);grid-template-columns:120px 1fr;align-items:center;font-size:.875rem;display:grid}.jr1ls7c{color:var(--rc-text-tertiary)}.jr1ls7d{align-items:center;gap:var(--rc-space-xs);border:1px solid var(--rc-hr-border);border-radius:var(--rc-radius-sm);min-width:0;min-height:32px;padding:0 var(--rc-space-sm);background:var(--rc-bg);color:var(--rc-text);grid-template-columns:16px minmax(0,1fr);transition:border-color .12s,box-shadow .12s;display:grid}.jr1ls7d:focus-within{border-color:var(--rc-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--rc-text) 8%, transparent)}.jr1ls7e{color:var(--rc-text-tertiary);pointer-events:none;flex-shrink:0}.jr1ls7f{width:100%;min-width:0;color:var(--rc-text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;background:0 0;border:none;outline:none;font-family:inherit;font-size:.875rem;line-height:1.35}@media (prefers-color-scheme:dark){.jr1ls7f{--lightningcss-light: ;--lightningcss-dark:initial}}.jr1ls7f::-webkit-calendar-picker-indicator{opacity:.55;cursor:pointer}.jr1ls7f::-webkit-datetime-edit{padding:0}.jr1ls7f::-webkit-datetime-edit-fields-wrapper{padding:0}.jr1ls7g{background:var(--rc-bg);border-color:var(--rc-hr-border);width:100%;min-width:0;height:32px;box-shadow:none;font-size:.875rem}.jr1ls7g:focus-visible{border-color:var(--rc-text);box-shadow:0 0 0 2px color-mix(in srgb, var(--rc-text) 8%, transparent)}.jr1ls7h{min-width:var(--anchor-width)}.jr1ls7i{margin-top:var(--rc-space-sm);gap:var(--rc-space-sm);grid-template-columns:120px max-content;align-items:center;font-size:.875rem;display:grid}.jr1ls7j{justify-self:start;width:max-content;font-size:.875rem}.qovfuy0{border-top:1px solid var(--rc-hr-border);border-bottom:1px solid var(--rc-hr-border);padding:var(--rc-space-lg) 0;margin:var(--rc-space-lg) 0;font-family:inherit}.qovfuy1{color:var(--rc-text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin:0 0 var(--rc-space-xs);font-size:.7rem}.qovfuy2{color:var(--rc-text);margin:0 0 var(--rc-space-md);font-size:1rem;font-weight:600;line-height:1.5}.qovfuy3{margin:0;padding:0;list-style:none}.qovfuy4{padding:var(--rc-space-sm) var(--rc-space-md);border-radius:var(--rc-radius-sm);color:var(--rc-text-secondary);font-size:.875rem;transition:color .12s;position:relative}.qovfuy5{cursor:pointer;-webkit-user-select:none;user-select:none}.qovfuy5:hover{background-color:#0000000a}.qovfuy6{color:var(--rc-text);font-weight:600}.qovfuy7{cursor:default}.qovfuy8{border-radius:var(--rc-radius-sm);pointer-events:none;background:#0000000a;width:0;transition:width .32s cubic-bezier(.4,0,.2,1),background .2s;position:absolute;top:0;bottom:0;left:0;right:auto}.qovfuy9{background:#00000014}.qovfuya{justify-content:space-between;align-items:baseline;gap:var(--rc-space-sm);display:flex;position:relative}.qovfuyb{flex:1;min-width:0}.qovfuyc{font-variant-numeric:tabular-nums;color:var(--rc-text-tertiary);flex-shrink:0;font-size:.8125rem}.qovfuyd{color:var(--rc-text)}.qovfuye{color:var(--rc-text-tertiary);opacity:0;flex-shrink:0;font-size:.75rem;transition:opacity .12s}.qovfuy4:hover .qovfuye{opacity:1}.qovfuyf{margin-top:var(--rc-space-sm);padding:var(--rc-space-xs) var(--rc-space-md);border:1px solid var(--rc-hr-border);border-radius:var(--rc-radius-sm);color:var(--rc-text-tertiary);cursor:not-allowed;background:0 0;font-family:inherit;font-size:.8125rem;transition:color .12s,border-color .12s}.qovfuyg{color:var(--rc-text);border-color:var(--rc-text);cursor:pointer}.qovfuyh{color:var(--rc-text-tertiary);margin-top:var(--rc-space-md);justify-content:space-between;align-items:baseline;gap:var(--rc-space-sm);font-size:.75rem;display:flex}.qovfuyi{color:var(--rc-text-tertiary);margin-top:var(--rc-space-sm);font-size:.75rem}.qovfuyj{border-radius:var(--rc-radius-sm);height:1.25rem;margin:var(--rc-space-xs) 0;background:#0000000a}
2
+ /*$vite$:1*/
package/dist/slot.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RendererConfig slot key for `@haklex/rich-ext-poll`.
3
+ *
4
+ * Override modules should reference this constant instead of the bare string
5
+ * literal so renames stay searchable across the workspace.
6
+ */
7
+ export declare const POLL_NODE_KEY: "Poll";
8
+ //# sourceMappingURL=slot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../src/slot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAG,MAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './node';
2
+ export * from './renderer';
3
+ //# sourceMappingURL=static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { a as createPollId, i as createOptionId, n as $isPollNode, r as PollNode, s as POLL_NODE_KEY, t as $createPollNode } from "./PollNode-Cd9E_bOt.js";
2
+ import { n as extractPolls, t as pollNodes } from "./node-D-hnG4zJ.js";
3
+ import { a as usePollDataAdapter, i as useInitialPollState, n as PollRenderer, o as pollClasses, r as PollDataProvider } from "./renderer-CJEY_O80.js";
4
+ export { $createPollNode, $isPollNode, POLL_NODE_KEY, PollDataProvider, PollNode, PollRenderer, createOptionId, createPollId, extractPolls, pollClasses, pollNodes, useInitialPollState, usePollDataAdapter };