@puckeditor/core 0.21.0-canary.d1c0d6a2

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 (52) hide show
  1. package/README.md +114 -0
  2. package/dist/Editor-32UYWE6W.mjs +204 -0
  3. package/dist/Editor-IQP25PUX.css +404 -0
  4. package/dist/Render-3OV4N4MT.css +102 -0
  5. package/dist/Render-FXZX6NFH.mjs +55 -0
  6. package/dist/actions-BkBoKAc5.d.mts +838 -0
  7. package/dist/actions-BkBoKAc5.d.ts +838 -0
  8. package/dist/chunk-3VQHXASI.mjs +33 -0
  9. package/dist/chunk-6KNQXLQR.mjs +708 -0
  10. package/dist/chunk-AOEDIUVK.mjs +11 -0
  11. package/dist/chunk-GVKHZNTR.mjs +53 -0
  12. package/dist/chunk-K562SEXI.mjs +1813 -0
  13. package/dist/chunk-KN3XDS7U.mjs +528 -0
  14. package/dist/chunk-M6W7YEVX.mjs +95 -0
  15. package/dist/chunk-MEL7FUSF.mjs +63 -0
  16. package/dist/chunk-NYGQH27S.mjs +445 -0
  17. package/dist/chunk-PSLS3ZEH.mjs +8074 -0
  18. package/dist/chunk-Q3TJ2VYO.mjs +436 -0
  19. package/dist/chunk-REWRIUGR.mjs +156 -0
  20. package/dist/chunk-V2IQTPPK.mjs +111 -0
  21. package/dist/chunk-V5I7CVLT.mjs +103 -0
  22. package/dist/chunk-Y2EFNT5P.mjs +108 -0
  23. package/dist/full-2GJTAAZE.css +301 -0
  24. package/dist/full-4OS3O57Y.mjs +93 -0
  25. package/dist/index-bqD1SEOb.d.mts +118 -0
  26. package/dist/index-lt1zf5WR.d.ts +118 -0
  27. package/dist/index.css +2629 -0
  28. package/dist/index.d.mts +309 -0
  29. package/dist/index.d.ts +309 -0
  30. package/dist/index.js +14177 -0
  31. package/dist/index.mjs +78 -0
  32. package/dist/internal.d.mts +27 -0
  33. package/dist/internal.d.ts +27 -0
  34. package/dist/internal.js +927 -0
  35. package/dist/internal.mjs +13 -0
  36. package/dist/loaded-DCQVLO7I.mjs +57 -0
  37. package/dist/loaded-JGRO7BH7.mjs +57 -0
  38. package/dist/loaded-KKVJE5KH.mjs +60 -0
  39. package/dist/loaded-RVWBFK7L.css +87 -0
  40. package/dist/no-external.css +2631 -0
  41. package/dist/no-external.d.mts +21 -0
  42. package/dist/no-external.d.ts +21 -0
  43. package/dist/no-external.js +14180 -0
  44. package/dist/no-external.mjs +83 -0
  45. package/dist/rsc.css +102 -0
  46. package/dist/rsc.d.mts +27 -0
  47. package/dist/rsc.d.ts +27 -0
  48. package/dist/rsc.js +1445 -0
  49. package/dist/rsc.mjs +130 -0
  50. package/dist/walk-tree-CRRDqx6_.d.mts +29 -0
  51. package/dist/walk-tree-CS7sEpfG.d.ts +29 -0
  52. package/package.json +137 -0
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ <br /><br /><br />
2
+
3
+ <div align="center">
4
+
5
+ <a href="https://puckeditor.com?utm_source=readme&utm_medium=code&utm_campaign=repo&utm_contents=logo">
6
+ <picture>
7
+ <source media="(prefers-color-scheme: dark)" srcset="https://res.cloudinary.com/die3nptcg/image/upload/Puck_Logo_White_RGB_j2rwgg.svg" height="100px" aria-label="Puck logo">
8
+ <img src="https://res.cloudinary.com/die3nptcg/image/upload/Puck_Logo_Black_RGB_dqsjag.svg" height="100px" aria-label="Puck logo">
9
+ </picture>
10
+ </a>
11
+
12
+ _The visual editor for React_
13
+
14
+ [Documentation](https://puckeditor.com/docs?utm_source=readme&utm_medium=code&utm_campaign=repo&utm_contents=docs_link) • [Demo](https://demo.puckeditor.com/edit?utm_source=readme&utm_medium=code&utm_campaign=repo&utm_contents=demo_link) • [Discord](https://discord.gg/V9mDAhuxyZ) • [Contributing](https://github.com/puckeditor/puck/blob/main/CONTRIBUTING.md)
15
+
16
+ ⭐️ Enjoying Puck? Please [leave a star](https://github.com/puckeditor/puck)!
17
+
18
+ <br />
19
+
20
+ [![GIF showing a page being created in the Puck Editor, with components being added, arranged, and customized in real time](https://github.com/user-attachments/assets/25e1ae25-ca5e-450f-afa0-01816830b731)](https://demo.puckeditor.com/edit)
21
+
22
+ </div>
23
+
24
+ ## What is Puck?
25
+
26
+ Puck is a modular, open-source visual editor for React.js. You can use Puck to build custom drag-and-drop experiences with your own application and React components.
27
+
28
+ Because Puck is just a React component, it plays well with all React.js environments, including Next.js. You own your data and there’s no vendor lock-in.
29
+
30
+ Puck is also [licensed under MIT](https://github.com/puckeditor/puck?tab=MIT-1-ov-file#readme), making it suitable for both internal systems and commercial applications.
31
+
32
+ ## Quick start
33
+
34
+ Install the package:
35
+
36
+ ```sh
37
+ npm i @puckeditor/core --save # or npx create-puck-app my-app
38
+ ```
39
+
40
+ Render the editor:
41
+
42
+ ```jsx
43
+ // Editor.jsx
44
+ import { Puck } from "@puckeditor/core";
45
+ import "@puckeditor/core/puck.css";
46
+
47
+ // Create Puck component config
48
+ const config = {
49
+ components: {
50
+ HeadingBlock: {
51
+ fields: {
52
+ children: {
53
+ type: "text",
54
+ },
55
+ },
56
+ render: ({ children }) => {
57
+ return <h1>{children}</h1>;
58
+ },
59
+ },
60
+ },
61
+ };
62
+
63
+ // Describe the initial data
64
+ const initialData = {};
65
+
66
+ // Save the data to your database
67
+ const save = (data) => {};
68
+
69
+ // Render Puck editor
70
+ export function Editor() {
71
+ return <Puck config={config} data={initialData} onPublish={save} />;
72
+ }
73
+ ```
74
+
75
+ Render the page:
76
+
77
+ ```jsx
78
+ // Page.jsx
79
+ import { Render } from "@puckeditor/core";
80
+ import "@puckeditor/core/puck.css";
81
+
82
+ export function Page() {
83
+ return <Render config={config} data={data} />;
84
+ }
85
+ ```
86
+
87
+ ## Recipes
88
+
89
+ Use `create-puck-app` to quickly spin up a a pre-configured app based on our provided [recipes](https://github.com/puckeditor/puck/tree/main/recipes):
90
+
91
+ ```sh
92
+ npx create-puck-app my-app
93
+ ```
94
+
95
+ Available recipes include:
96
+
97
+ - [**next**](https://github.com/puckeditor/puck/tree/main/recipes/next): Next.js example, using App Router and static page generation
98
+ - [**remix**](https://github.com/puckeditor/puck/tree/main/recipes/remix): Remix Run v2 example, using dynamic routes at root-level
99
+ - [**react-router**](https://github.com/puckeditor/puck/tree/main/recipes/react-router): React Router v7 app example, using dynamic routes to create pages at any level
100
+
101
+ ## Community
102
+
103
+ - [Discord server](https://discord.gg/D9e4E3MQVZ) for discussions
104
+ - [awesome-puck](https://github.com/puckeditor/awesome-puck) community repo for plugins, custom fields & more
105
+
106
+ ## Get support
107
+
108
+ If you have any questions about Puck, please open a [GitHub issue](https://github.com/puckeditor/puck/issues) or join us on [Discord](https://discord.gg/D9e4E3MQVZ).
109
+
110
+ Or [book a discovery call](https://app.cal.com/chrisvxd/puck-enquiry/) for hands-on support and consultancy.
111
+
112
+ ## License
113
+
114
+ MIT © [The Puck Contributors](https://github.com/puckeditor/puck/graphs/contributors)
@@ -0,0 +1,204 @@
1
+ import {
2
+ PuckRichText
3
+ } from "./chunk-V5I7CVLT.mjs";
4
+ import {
5
+ EditorInner,
6
+ LoadedRichTextMenu
7
+ } from "./chunk-V2IQTPPK.mjs";
8
+ import "./chunk-AOEDIUVK.mjs";
9
+ import "./chunk-6KNQXLQR.mjs";
10
+ import "./chunk-GVKHZNTR.mjs";
11
+ import "./chunk-MEL7FUSF.mjs";
12
+ import "./chunk-3VQHXASI.mjs";
13
+ import {
14
+ useAppStore,
15
+ useAppStoreApi
16
+ } from "./chunk-K562SEXI.mjs";
17
+ import "./chunk-KN3XDS7U.mjs";
18
+ import "./chunk-REWRIUGR.mjs";
19
+ import "./chunk-Y2EFNT5P.mjs";
20
+ import "./chunk-Q3TJ2VYO.mjs";
21
+ import {
22
+ __spreadProps,
23
+ __spreadValues,
24
+ init_react_import
25
+ } from "./chunk-M6W7YEVX.mjs";
26
+
27
+ // components/RichTextEditor/components/Editor.tsx
28
+ init_react_import();
29
+ import { memo, useMemo } from "react";
30
+
31
+ // components/RichTextEditor/lib/use-synced-editor.ts
32
+ init_react_import();
33
+ import { useEditor } from "@tiptap/react";
34
+ import { useEffect, useRef } from "react";
35
+ import { useDebounce } from "use-debounce";
36
+ function useSyncedEditor({
37
+ content,
38
+ onChange,
39
+ extensions,
40
+ editable = true,
41
+ onFocusChange,
42
+ name
43
+ }) {
44
+ const [debouncedState, setDebouncedState] = useDebounce(null, 50, {
45
+ leading: true,
46
+ maxWait: 200
47
+ });
48
+ const syncingRef = useRef(false);
49
+ const lastSyncedRef = useRef("");
50
+ const editTimer = useRef(null);
51
+ const isPending = !!editTimer.current;
52
+ const isFocused = useAppStore((s) => s.state.ui.field.focus === name);
53
+ const resetTimer = (clearOn) => {
54
+ if (editTimer.current) {
55
+ clearTimeout(editTimer.current);
56
+ }
57
+ editTimer.current = setTimeout(() => {
58
+ if (lastSyncedRef.current === clearOn) {
59
+ editTimer.current = null;
60
+ }
61
+ }, 200);
62
+ };
63
+ const appStoreApi = useAppStoreApi();
64
+ const editor = useEditor({
65
+ extensions,
66
+ content,
67
+ editable,
68
+ immediatelyRender: false,
69
+ parseOptions: { preserveWhitespace: "full" },
70
+ onUpdate: ({ editor: editor2 }) => {
71
+ if (syncingRef.current || !isFocused) {
72
+ appStoreApi.getState().setUi({ field: { focus: name } });
73
+ return;
74
+ }
75
+ const html = editor2.getHTML();
76
+ const { from, to } = editor2.state.selection;
77
+ setDebouncedState({ from, to, html });
78
+ resetTimer(html);
79
+ lastSyncedRef.current = html;
80
+ }
81
+ });
82
+ useEffect(() => {
83
+ if (!editor) return;
84
+ const handleFocus = () => {
85
+ onFocusChange == null ? void 0 : onFocusChange(editor);
86
+ };
87
+ editor.on("focus", handleFocus);
88
+ return () => {
89
+ editor.off("focus", handleFocus);
90
+ };
91
+ }, [editor, onFocusChange]);
92
+ useEffect(() => {
93
+ if (debouncedState) {
94
+ const { ui } = appStoreApi.getState().state;
95
+ onChange(debouncedState.html, {
96
+ field: __spreadProps(__spreadValues({}, ui.field), {
97
+ metadata: { from: debouncedState.from, to: debouncedState.to }
98
+ })
99
+ });
100
+ }
101
+ }, [editor, debouncedState, onChange, appStoreApi, name]);
102
+ useEffect(() => {
103
+ editor == null ? void 0 : editor.setEditable(editable);
104
+ }, [editor, editable]);
105
+ useEffect(() => {
106
+ var _a;
107
+ if (!editor) return;
108
+ if (isPending) {
109
+ return;
110
+ }
111
+ const current = editor.getHTML();
112
+ if (current === content) return;
113
+ syncingRef.current = true;
114
+ editor.commands.setContent(content, { emitUpdate: false });
115
+ const { ui } = appStoreApi.getState().state;
116
+ if (typeof ((_a = ui.field.metadata) == null ? void 0 : _a.from) !== "undefined") {
117
+ editor.commands.setTextSelection({
118
+ from: ui.field.metadata.from,
119
+ to: ui.field.metadata.to
120
+ });
121
+ }
122
+ syncingRef.current = false;
123
+ }, [content, editor, appStoreApi]);
124
+ return editor;
125
+ }
126
+
127
+ // components/RichTextEditor/components/Editor.tsx
128
+ import { EditorContent } from "@tiptap/react";
129
+ import { jsx } from "react/jsx-runtime";
130
+ var Editor = memo((props) => {
131
+ const {
132
+ onChange,
133
+ content,
134
+ readOnly = false,
135
+ field,
136
+ inline = false,
137
+ onFocus,
138
+ id,
139
+ name
140
+ } = props;
141
+ const { tiptap = {}, options } = field;
142
+ const { extensions = [] } = tiptap;
143
+ const loadedExtensions = useMemo(
144
+ () => [PuckRichText.configure(options), ...extensions],
145
+ [field, extensions]
146
+ );
147
+ const appStoreApi = useAppStoreApi();
148
+ const focusName = `${name}${inline ? "::inline" : ""}`;
149
+ const editor = useSyncedEditor({
150
+ content,
151
+ onChange,
152
+ extensions: loadedExtensions,
153
+ editable: !readOnly,
154
+ name: focusName,
155
+ onFocusChange: (editor2) => {
156
+ if (editor2) {
157
+ const s = appStoreApi.getState();
158
+ appStoreApi.setState({
159
+ currentRichText: {
160
+ field,
161
+ editor: editor2,
162
+ id,
163
+ inline
164
+ },
165
+ state: __spreadProps(__spreadValues({}, s.state), {
166
+ ui: __spreadProps(__spreadValues({}, s.state.ui), {
167
+ field: __spreadProps(__spreadValues({}, s.state.ui.field), {
168
+ focus: focusName
169
+ })
170
+ })
171
+ })
172
+ });
173
+ onFocus == null ? void 0 : onFocus(editor2);
174
+ }
175
+ }
176
+ });
177
+ const menuEditor = useAppStore((s) => {
178
+ var _a, _b;
179
+ if (!inline && ((_a = s.currentRichText) == null ? void 0 : _a.id) === id && ((_b = s.currentRichText) == null ? void 0 : _b.inlineComponentId)) {
180
+ return s.currentRichText.editor;
181
+ }
182
+ return editor;
183
+ });
184
+ if (!editor) return null;
185
+ return /* @__PURE__ */ jsx(
186
+ EditorInner,
187
+ __spreadProps(__spreadValues({}, props), {
188
+ editor,
189
+ menu: /* @__PURE__ */ jsx(
190
+ LoadedRichTextMenu,
191
+ {
192
+ field,
193
+ editor: menuEditor,
194
+ readOnly
195
+ }
196
+ ),
197
+ children: /* @__PURE__ */ jsx(EditorContent, { editor, className: "rich-text" })
198
+ })
199
+ );
200
+ });
201
+ Editor.displayName = "Editor";
202
+ export {
203
+ Editor
204
+ };
@@ -0,0 +1,404 @@
1
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/RichTextMenu/styles.module.css/#css-module-data */
2
+ ._RichTextMenu_k97eh_1 {
3
+ display: flex;
4
+ flex-direction: row;
5
+ flex-wrap: nowrap;
6
+ }
7
+ ._RichTextMenu--form_k97eh_7 {
8
+ border-top-left-radius: 4px;
9
+ border-top-right-radius: 4px;
10
+ padding: 6px 6px;
11
+ background-color: var(--puck-color-grey-12);
12
+ position: relative;
13
+ scrollbar-width: none;
14
+ overflow-x: auto;
15
+ }
16
+ ._RichTextMenu-group_k97eh_17 {
17
+ display: flex;
18
+ align-items: space-between;
19
+ flex-direction: row;
20
+ flex-wrap: nowrap;
21
+ padding-inline: 6px;
22
+ gap: 2px;
23
+ position: relative;
24
+ }
25
+ ._RichTextMenu-group_k97eh_17:first-of-type {
26
+ padding-left: 0;
27
+ }
28
+ ._RichTextMenu-group_k97eh_17:last-of-type {
29
+ padding-right: 0;
30
+ }
31
+ ._RichTextMenu--inline_k97eh_35 ._RichTextMenu-group_k97eh_17 {
32
+ color: var(--puck-color-grey-08);
33
+ gap: 0px;
34
+ flex-wrap: nowrap;
35
+ }
36
+ ._RichTextMenu-group_k97eh_17 + ._RichTextMenu-group_k97eh_17 {
37
+ border-left: 1px solid var(--puck-color-grey-10);
38
+ }
39
+ ._RichTextMenu--inline_k97eh_35 ._RichTextMenu-group_k97eh_17 + ._RichTextMenu-group_k97eh_17 {
40
+ border-left: 0.5px solid var(--puck-color-grey-05);
41
+ }
42
+
43
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/IconButton/IconButton.module.css/#css-module-data */
44
+ ._IconButton_ffob9_1 {
45
+ align-items: center;
46
+ background: transparent;
47
+ border: none;
48
+ border-radius: 4px;
49
+ color: currentColor;
50
+ display: flex;
51
+ font-family: var(--puck-font-family);
52
+ justify-content: center;
53
+ padding: 4px;
54
+ transition: background-color 50ms ease-in, color 50ms ease-in;
55
+ }
56
+ ._IconButton--active_ffob9_14 {
57
+ color: var(--puck-color-azure-04);
58
+ }
59
+ ._IconButton_ffob9_1:focus-visible {
60
+ outline: 2px solid var(--puck-color-azure-05);
61
+ outline-offset: -2px;
62
+ }
63
+ @media (hover: hover) and (pointer: fine) {
64
+ ._IconButton_ffob9_1:hover:not(._IconButton--disabled_ffob9_24) {
65
+ background: var(--puck-color-grey-10);
66
+ color: var(--puck-color-azure-04);
67
+ cursor: pointer;
68
+ transition: none;
69
+ }
70
+ }
71
+ ._IconButton_ffob9_1:active {
72
+ background: var(--puck-color-azure-11);
73
+ transition: none;
74
+ }
75
+ ._IconButton-title_ffob9_37 {
76
+ clip: rect(0 0 0 0);
77
+ clip-path: inset(100%);
78
+ height: 1px;
79
+ overflow: hidden;
80
+ position: absolute;
81
+ white-space: nowrap;
82
+ width: 1px;
83
+ }
84
+ ._IconButton--disabled_ffob9_24 {
85
+ color: var(--puck-color-grey-07);
86
+ }
87
+
88
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/Loader/styles.module.css/#css-module-data */
89
+ @keyframes _loader-animation_nacdm_1 {
90
+ 0% {
91
+ transform: rotate(0deg) scale(1);
92
+ }
93
+ 50% {
94
+ transform: rotate(180deg) scale(0.8);
95
+ }
96
+ 100% {
97
+ transform: rotate(360deg) scale(1);
98
+ }
99
+ }
100
+ ._Loader_nacdm_13 {
101
+ background: transparent;
102
+ border-radius: 100%;
103
+ border: 2px solid currentColor;
104
+ border-bottom-color: transparent;
105
+ display: inline-block;
106
+ animation: _loader-animation_nacdm_1 1s 0s infinite linear;
107
+ animation-fill-mode: both;
108
+ }
109
+
110
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/ActionBar/styles.module.css/#css-module-data */
111
+ ._ActionBar_1nmyk_1 {
112
+ align-items: center;
113
+ cursor: default;
114
+ display: flex;
115
+ width: auto;
116
+ padding: 4px;
117
+ padding-inline-start: 0;
118
+ padding-inline-end: 0;
119
+ border-top-left-radius: 8px;
120
+ border-top-right-radius: 8px;
121
+ border-radius: 8px;
122
+ background: var(--puck-color-grey-01);
123
+ color: var(--puck-color-white);
124
+ font-family: var(--puck-font-family);
125
+ min-height: 26px;
126
+ }
127
+ ._ActionBar-label_1nmyk_18 {
128
+ color: var(--puck-color-grey-08);
129
+ font-size: var(--puck-font-size-xxxs);
130
+ font-weight: 500;
131
+ padding-inline-start: 8px;
132
+ padding-inline-end: 8px;
133
+ margin-inline-start: 4px;
134
+ margin-inline-end: 4px;
135
+ text-overflow: ellipsis;
136
+ white-space: nowrap;
137
+ }
138
+ ._ActionBarAction_1nmyk_30 + ._ActionBar-label_1nmyk_18 {
139
+ padding-inline-start: 0;
140
+ }
141
+ ._ActionBar-label_1nmyk_18 + ._ActionBarAction_1nmyk_30 {
142
+ margin-inline-start: -4px;
143
+ }
144
+ ._ActionBar-group_1nmyk_38 {
145
+ align-items: center;
146
+ border-inline-start: 0.5px solid var(--puck-color-grey-05);
147
+ display: flex;
148
+ height: 100%;
149
+ padding-inline-start: 4px;
150
+ padding-inline-end: 4px;
151
+ }
152
+ ._ActionBar-group_1nmyk_38:first-of-type {
153
+ border-inline-start: 0;
154
+ }
155
+ ._ActionBar-group_1nmyk_38:empty {
156
+ display: none;
157
+ }
158
+ ._ActionBarAction_1nmyk_30 {
159
+ background: transparent;
160
+ border: none;
161
+ color: var(--puck-color-grey-08);
162
+ cursor: pointer;
163
+ padding: 6px;
164
+ margin-inline-start: 4px;
165
+ margin-inline-end: 4px;
166
+ border-radius: 4px;
167
+ overflow: hidden;
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+ transition: color 50ms ease-in;
172
+ }
173
+ ._ActionBarAction--disabled_1nmyk_71 {
174
+ cursor: auto;
175
+ color: var(--puck-color-grey-06);
176
+ }
177
+ ._ActionBarAction_1nmyk_30 svg {
178
+ max-width: none !important;
179
+ }
180
+ ._ActionBarAction_1nmyk_30:focus-visible {
181
+ outline: 2px solid var(--puck-color-azure-05);
182
+ outline-offset: -2px;
183
+ }
184
+ @media (hover: hover) and (pointer: fine) {
185
+ ._ActionBarAction_1nmyk_30:hover:not(._ActionBarAction--disabled_1nmyk_71) {
186
+ color: var(--puck-color-azure-06);
187
+ transition: none;
188
+ }
189
+ }
190
+ ._ActionBarAction_1nmyk_30:active:not(._ActionBarAction--disabled_1nmyk_71),
191
+ ._ActionBarAction--active_1nmyk_93 {
192
+ color: var(--puck-color-azure-07);
193
+ transition: none;
194
+ }
195
+ ._ActionBar-group_1nmyk_38 * {
196
+ margin: 0;
197
+ }
198
+ ._ActionBar-separator_1nmyk_102 {
199
+ background: var(--puck-color-grey-05);
200
+ margin-inline: 4px;
201
+ width: 0.5px;
202
+ height: 100%;
203
+ }
204
+
205
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/RichTextMenu/components/Control/styles.module.css/#css-module-data */
206
+ ._Control_1aveu_1 .lucide {
207
+ height: 18px;
208
+ width: 18px;
209
+ }
210
+ ._Control--inline_1aveu_6 .lucide {
211
+ height: 16px;
212
+ width: 16px;
213
+ }
214
+
215
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/Select/styles.module.css/#css-module-data */
216
+ ._Select_xjbef_1 {
217
+ position: relative;
218
+ z-index: 1;
219
+ }
220
+ ._Select-button_xjbef_6 {
221
+ align-items: center;
222
+ background: transparent;
223
+ border: none;
224
+ border-radius: 4px;
225
+ display: flex;
226
+ justify-content: center;
227
+ gap: 0px;
228
+ height: 100%;
229
+ padding: 4px;
230
+ padding-right: 2px;
231
+ }
232
+ ._Select--hasOptions_xjbef_19 ._Select-button_xjbef_6 {
233
+ color: currentColor;
234
+ }
235
+ ._Select--hasOptions_xjbef_19:not(._Select--disabled_xjbef_23) ._Select-button_xjbef_6 {
236
+ cursor: pointer;
237
+ }
238
+ ._Select-buttonIcon_xjbef_27 {
239
+ align-items: center;
240
+ display: flex;
241
+ justify-content: center;
242
+ }
243
+ ._Select--standalone_xjbef_33 ._Select-buttonIcon_xjbef_27 .lucide {
244
+ height: 18px;
245
+ width: 18px;
246
+ }
247
+ ._Select--actionBar_xjbef_38 ._Select-buttonIcon_xjbef_27 .lucide {
248
+ height: 16px;
249
+ width: 16px;
250
+ }
251
+ ._Select--hasOptions_xjbef_19:not(._Select--disabled_xjbef_23) ._Select-button_xjbef_6:hover,
252
+ ._Select--hasValue_xjbef_44 ._Select-button_xjbef_6 {
253
+ background: var(--puck-color-grey-10);
254
+ color: var(--puck-color-azure-04);
255
+ }
256
+ ._Select--disabled_xjbef_23 ._Select-button_xjbef_6 {
257
+ color: var(--puck-color-grey-07);
258
+ }
259
+ ._Select--actionBar_xjbef_38 {
260
+ &._Select--hasOptions_xjbef_19 ._Select-button_xjbef_6:hover,
261
+ &._Select--hasValue_xjbef_44 ._Select-button_xjbef_6 {
262
+ background: none;
263
+ color: var(--puck-color-azure-07);
264
+ }
265
+ }
266
+ ._Select-items_xjbef_61 {
267
+ background: white;
268
+ border: 1px solid var(--puck-color-grey-09);
269
+ border-radius: 8px;
270
+ margin: 10px 8px;
271
+ margin-left: 0;
272
+ padding: 4px;
273
+ z-index: 2;
274
+ list-style: none;
275
+ }
276
+ ._SelectItem_xjbef_72 {
277
+ background: transparent;
278
+ border-radius: 4px;
279
+ border: none;
280
+ color: var(--puck-color-grey-04);
281
+ cursor: pointer;
282
+ display: flex;
283
+ gap: 8px;
284
+ align-items: center;
285
+ font-size: var(--puck-font-size-xxs);
286
+ margin: 0;
287
+ padding: 8px 12px;
288
+ width: 100%;
289
+ }
290
+ ._SelectItem--isSelected_xjbef_87 {
291
+ background: var(--puck-color-azure-11);
292
+ color: var(--puck-color-azure-04);
293
+ font-weight: 500;
294
+ }
295
+ ._SelectItem--isSelected_xjbef_87 ._SelectItem-icon_xjbef_93 {
296
+ color: var(--puck-color-azure-04);
297
+ }
298
+ ._SelectItem_xjbef_72:hover {
299
+ background: var(--puck-color-azure-11);
300
+ color: var(--puck-color-azure-04);
301
+ }
302
+
303
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/RichTextEditor/styles.module.css/#css-module-data */
304
+ ._RichTextEditor_z25h4_1 .ProseMirror {
305
+ white-space: pre-wrap;
306
+ word-wrap: break-word;
307
+ cursor: text;
308
+ outline: none;
309
+ position: relative;
310
+ }
311
+ ._RichTextEditor_z25h4_1 .rich-text * {
312
+ white-space: pre-wrap;
313
+ user-select: auto;
314
+ -webkit-user-select: auto;
315
+ }
316
+ ._RichTextEditor_z25h4_1 .rich-text blockquote {
317
+ margin: 1em 0;
318
+ padding: 0 1em;
319
+ border-left: 4px solid var(--puck-color-grey-09);
320
+ }
321
+ ._RichTextEditor_z25h4_1 .rich-text code {
322
+ background-color: var(--puck-color-grey-11);
323
+ padding: 4px 8px;
324
+ border-radius: 4px;
325
+ }
326
+ ._RichTextEditor_z25h4_1 .rich-text p:empty::before {
327
+ content: "\a0";
328
+ }
329
+ ._RichTextEditor_z25h4_1 .rich-text pre code {
330
+ display: block;
331
+ padding: 8px 12px;
332
+ }
333
+ ._RichTextEditor_z25h4_1 .rich-text > *:first-child,
334
+ ._RichTextEditor_z25h4_1 .ProseMirror > *:first-child,
335
+ ._RichTextEditor_z25h4_1 .rich-text * p:first-of-type {
336
+ margin-top: 0;
337
+ }
338
+ ._RichTextEditor_z25h4_1 .rich-text > *:last-child,
339
+ ._RichTextEditor_z25h4_1 .ProseMirror > *:last-child,
340
+ ._RichTextEditor_z25h4_1 .rich-text * p:last-of-type {
341
+ margin-bottom: 0;
342
+ }
343
+ ._RichTextEditor--editor_z25h4_50 {
344
+ background: var(--puck-color-white);
345
+ border-width: 1px;
346
+ border-style: solid;
347
+ border-color: var(--puck-color-grey-09);
348
+ border-radius: 4px;
349
+ box-sizing: border-box;
350
+ display: flex;
351
+ flex-direction: column;
352
+ font-family: inherit;
353
+ font-size: var(--puck-font-size-xxs);
354
+ resize: vertical;
355
+ text-align: initial;
356
+ transition: border-color 50ms ease-in;
357
+ width: 100%;
358
+ max-width: 100%;
359
+ min-height: 128px;
360
+ }
361
+ ._RichTextEditor--editor_z25h4_50 .rich-text {
362
+ flex-grow: 1;
363
+ }
364
+ ._RichTextEditor--editor_z25h4_50 .rich-text:not(:has(.ProseMirror)),
365
+ ._RichTextEditor--editor_z25h4_50 .rich-text .ProseMirror {
366
+ height: 100%;
367
+ padding: 12px 15px;
368
+ }
369
+ ._RichTextEditor--editor_z25h4_50 .rich-text ul,
370
+ ._RichTextEditor--editor_z25h4_50 .rich-text ol {
371
+ padding-left: 24px;
372
+ }
373
+ ._RichTextEditor--editor_z25h4_50 .rich-text li {
374
+ line-height: 1.5;
375
+ }
376
+ ._RichTextEditor--editor_z25h4_50 .rich-text p {
377
+ margin-block: 12px;
378
+ }
379
+ ._RichTextEditor--editor_z25h4_50 .rich-text ul {
380
+ list-style: disc;
381
+ }
382
+ ._RichTextEditor--editor_z25h4_50 .rich-text ol {
383
+ list-style: decimal;
384
+ }
385
+ ._RichTextEditor--editor_z25h4_50:focus-within {
386
+ border-color: var(--puck-color-grey-05);
387
+ outline: 2px solid var(--puck-color-azure-05);
388
+ transition: none;
389
+ }
390
+ ._RichTextEditor--editor_z25h4_50._RichTextEditor--disabled_z25h4_107 {
391
+ background: var(--puck-color-grey-11);
392
+ }
393
+ ._RichTextEditor_z25h4_1:not(:focus-within):not(._RichTextEditor--isActive_z25h4_111) .ProseMirror ::selection {
394
+ background-color: transparent;
395
+ }
396
+ ._RichTextEditor-menu_z25h4_117 {
397
+ border-bottom: 1px solid var(--puck-color-grey-10);
398
+ position: sticky;
399
+ top: 0;
400
+ z-index: 1;
401
+ }
402
+ ._RichTextEditor--disabled_z25h4_107 ._RichTextEditor-menu_z25h4_117 {
403
+ border-bottom: 1px solid var(--puck-color-grey-09);
404
+ }