@lindle/linoardo 1.0.23 → 1.0.25
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.
- package/dist/alert.cjs +18 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.d.cts +9 -0
- package/dist/alert.d.ts +9 -0
- package/dist/alert.js +3 -0
- package/dist/alert.js.map +1 -0
- package/dist/app-bar.cjs +168 -0
- package/dist/app-bar.cjs.map +1 -0
- package/dist/app-bar.d.cts +25 -0
- package/dist/app-bar.d.ts +25 -0
- package/dist/app-bar.js +3 -0
- package/dist/app-bar.js.map +1 -0
- package/dist/badge.cjs +205 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.d.cts +71 -0
- package/dist/badge.d.ts +71 -0
- package/dist/badge.js +3 -0
- package/dist/badge.js.map +1 -0
- package/dist/block.cjs +70 -0
- package/dist/block.cjs.map +1 -0
- package/dist/block.d.cts +32 -0
- package/dist/block.d.ts +32 -0
- package/dist/block.js +3 -0
- package/dist/block.js.map +1 -0
- package/dist/chunk-5GT6L4BE.js +48 -0
- package/dist/chunk-5GT6L4BE.js.map +1 -0
- package/dist/chunk-67BAO35I.js +146 -0
- package/dist/chunk-67BAO35I.js.map +1 -0
- package/dist/chunk-6SKW43XI.js +14 -0
- package/dist/chunk-6SKW43XI.js.map +1 -0
- package/dist/{chunk-JGEXEDKS.js → chunk-AUFMBVXA.js} +5 -5
- package/dist/{chunk-JGEXEDKS.js.map → chunk-AUFMBVXA.js.map} +1 -1
- package/dist/{chunk-SAGQYMS3.js → chunk-BZVDAMMY.js} +13 -16
- package/dist/chunk-BZVDAMMY.js.map +1 -0
- package/dist/chunk-HIRPMCQJ.js +183 -0
- package/dist/chunk-HIRPMCQJ.js.map +1 -0
- package/dist/{chunk-67USTSXI.js → chunk-KI4DBZ2V.js} +5 -3
- package/dist/chunk-KI4DBZ2V.js.map +1 -0
- package/dist/chunk-KQOR3C7E.js +16 -0
- package/dist/chunk-KQOR3C7E.js.map +1 -0
- package/dist/chunk-SCJMH5VE.js +469 -0
- package/dist/chunk-SCJMH5VE.js.map +1 -0
- package/dist/index.cjs +731 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -55
- package/dist/index.d.ts +8 -55
- package/dist/index.js +14 -190
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +3 -3
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +1 -1
- package/dist/notification.cjs +3 -1
- package/dist/notification.cjs.map +1 -1
- package/dist/notification.d.cts +1 -0
- package/dist/notification.d.ts +1 -0
- package/dist/notification.js +1 -1
- package/dist/select.cjs +10 -2
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +2 -1
- package/dist/styles.css +13 -0
- package/dist/textarea.cjs +486 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.d.cts +29 -0
- package/dist/textarea.d.ts +29 -0
- package/dist/textarea.js +4 -0
- package/dist/textarea.js.map +1 -0
- package/package.json +36 -1
- package/readme.md +46 -0
- package/dist/chunk-67USTSXI.js.map +0 -1
- package/dist/chunk-SAGQYMS3.js.map +0 -1
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import { generateString } from './chunk-6SKW43XI.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useEditor, EditorContent } from '@tiptap/react';
|
|
4
|
+
import StarterKit from '@tiptap/starter-kit';
|
|
5
|
+
import { marked } from 'marked';
|
|
6
|
+
import TurndownService from 'turndown';
|
|
7
|
+
import { twMerge } from 'tailwind-merge';
|
|
8
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
var baseClass = "textarea-base px-3 py-2 focus-visible:outline-none transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400";
|
|
11
|
+
var variantClasses = {
|
|
12
|
+
outlined: "rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-slate-900 dark:focus-visible:border-black dark:focus-visible:ring-black/40",
|
|
13
|
+
filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30",
|
|
14
|
+
standard: "rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 dark:border-b-gray-700 dark:focus-visible:border-primary/70"
|
|
15
|
+
};
|
|
16
|
+
var labelBackground = {
|
|
17
|
+
outlined: "bg-white/90 dark:bg-slate-900",
|
|
18
|
+
filled: "bg-gray-100 dark:bg-slate-800",
|
|
19
|
+
standard: "bg-transparent"
|
|
20
|
+
};
|
|
21
|
+
var advancedContainerVariant = {
|
|
22
|
+
outlined: "rounded border-2 border-black bg-white dark:border-black dark:bg-slate-900",
|
|
23
|
+
filled: "rounded border border-gray-200 bg-gray-100 dark:border-gray-700 dark:bg-slate-800",
|
|
24
|
+
standard: "border-b border-gray-300 bg-transparent dark:border-gray-700"
|
|
25
|
+
};
|
|
26
|
+
var renderMarkdown = (value) => marked.parse(value || "", { async: false });
|
|
27
|
+
var dispatchInputEvent = (element) => {
|
|
28
|
+
const event = new Event("input", { bubbles: true });
|
|
29
|
+
element.dispatchEvent(event);
|
|
30
|
+
};
|
|
31
|
+
var toolbarButtonBase = "px-3 py-1 text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-slate-700 disabled:cursor-not-allowed disabled:opacity-50";
|
|
32
|
+
var toolbarButtonActive = "bg-white text-gray-900 dark:bg-slate-900 dark:text-gray-100";
|
|
33
|
+
var handleModeToggle = (wrapperId, mode, textareaName, simpleId, advancedInputId) => {
|
|
34
|
+
if (typeof document === "undefined") return;
|
|
35
|
+
const wrapper = document.getElementById(wrapperId);
|
|
36
|
+
const simple = document.getElementById(simpleId);
|
|
37
|
+
const advancedInput = document.getElementById(advancedInputId);
|
|
38
|
+
if (wrapper) {
|
|
39
|
+
wrapper.dataset.mode = mode;
|
|
40
|
+
}
|
|
41
|
+
if (simple) {
|
|
42
|
+
simple.classList.toggle("hidden", mode !== "simple");
|
|
43
|
+
simple.name = mode === "simple" ? textareaName : "";
|
|
44
|
+
}
|
|
45
|
+
if (advancedInput) {
|
|
46
|
+
advancedInput.classList.toggle("hidden", mode !== "advanced");
|
|
47
|
+
advancedInput.name = mode === "advanced" ? textareaName : "";
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var TextArea = ({
|
|
51
|
+
variant = "outlined",
|
|
52
|
+
label,
|
|
53
|
+
className,
|
|
54
|
+
wrapperClassName,
|
|
55
|
+
id,
|
|
56
|
+
name,
|
|
57
|
+
placeholder,
|
|
58
|
+
rows = 4,
|
|
59
|
+
allowModeSwitch = true,
|
|
60
|
+
mode,
|
|
61
|
+
view = "editor",
|
|
62
|
+
value,
|
|
63
|
+
defaultValue,
|
|
64
|
+
disabled,
|
|
65
|
+
readOnly,
|
|
66
|
+
onChange,
|
|
67
|
+
onInput,
|
|
68
|
+
...props
|
|
69
|
+
}) => {
|
|
70
|
+
const textareaId = id || name || generateString();
|
|
71
|
+
const textareaName = name || textareaId;
|
|
72
|
+
const wrapperId = `${textareaId}-wrapper`;
|
|
73
|
+
const simpleTextareaId = `${textareaId}-simple`;
|
|
74
|
+
const advancedInputId = `${textareaId}-advanced-input`;
|
|
75
|
+
const advancedEditorId = `${textareaId}-advanced-editor`;
|
|
76
|
+
const advancedLabelId = `${textareaId}-advanced-label`;
|
|
77
|
+
const previewId = `${textareaId}-preview`;
|
|
78
|
+
const variantClass = variantClasses[variant] ?? variantClasses.outlined;
|
|
79
|
+
const labelPadding = label ? "pt-6" : void 0;
|
|
80
|
+
const placeholderValue = placeholder ?? (label ? " " : void 0);
|
|
81
|
+
const placeholderClass = label ? "placeholder-transparent" : void 0;
|
|
82
|
+
const labelBg = labelBackground[variant] ?? labelBackground.outlined;
|
|
83
|
+
const focusLabelBg = variant === "filled" ? "peer-focus:bg-gray-100 dark:peer-focus:bg-slate-800" : variant === "standard" ? "peer-focus:bg-transparent" : "peer-focus:bg-white/90 dark:peer-focus:bg-slate-900";
|
|
84
|
+
const resolvedMode = allowModeSwitch ? mode ?? "simple" : "simple";
|
|
85
|
+
const resolvedView = view ?? "editor";
|
|
86
|
+
const showEditor = resolvedView === "editor";
|
|
87
|
+
const showPreview = resolvedView === "view";
|
|
88
|
+
const contentValue = typeof value === "string" ? value : typeof defaultValue === "string" ? defaultValue : "";
|
|
89
|
+
const isControlled = typeof value === "string";
|
|
90
|
+
const editorEditable = !(disabled || readOnly);
|
|
91
|
+
const modeToggleName = `${textareaId}-mode-toggle`;
|
|
92
|
+
const simpleToggleId = `${modeToggleName}-simple`;
|
|
93
|
+
const advancedToggleId = `${modeToggleName}-advanced`;
|
|
94
|
+
const turndownService = React.useMemo(() => {
|
|
95
|
+
const service = new TurndownService({
|
|
96
|
+
codeBlockStyle: "fenced",
|
|
97
|
+
emDelimiter: "*",
|
|
98
|
+
strongDelimiter: "**",
|
|
99
|
+
bulletListMarker: "-"
|
|
100
|
+
});
|
|
101
|
+
service.addRule("strikethrough", {
|
|
102
|
+
filter: (node) => ["DEL", "S", "STRIKE"].includes(node.nodeName),
|
|
103
|
+
replacement: (content) => `~~${content}~~`
|
|
104
|
+
});
|
|
105
|
+
return service;
|
|
106
|
+
}, []);
|
|
107
|
+
const hiddenTextareaRef = React.useRef(null);
|
|
108
|
+
const lastMarkdownRef = React.useRef(contentValue);
|
|
109
|
+
const editorContentClass = twMerge(
|
|
110
|
+
baseClass,
|
|
111
|
+
"min-h-45 rounded border-0 bg-transparent outline-none whitespace-pre-wrap wrap-break-words",
|
|
112
|
+
"[&_p]:m-0 [&_p]:leading-6",
|
|
113
|
+
"[&_ul]:my-0 [&_ul]:list-disc [&_ul]:pl-5",
|
|
114
|
+
"[&_ol]:my-0 [&_ol]:list-decimal [&_ol]:pl-5",
|
|
115
|
+
"[&_li]:my-0",
|
|
116
|
+
"[&_blockquote]:border-l-2 [&_blockquote]:border-gray-300 [&_blockquote]:pl-3 [&_blockquote]:text-gray-600",
|
|
117
|
+
"dark:[&_blockquote]:border-gray-600 dark:[&_blockquote]:text-gray-300",
|
|
118
|
+
"[&_pre]:bg-gray-100 [&_pre]:rounded [&_pre]:p-3 [&_pre]:text-sm [&_pre]:overflow-x-auto",
|
|
119
|
+
"dark:[&_pre]:bg-slate-800",
|
|
120
|
+
"[&_code]:font-mono",
|
|
121
|
+
className,
|
|
122
|
+
!editorEditable ? "cursor-not-allowed opacity-50" : void 0
|
|
123
|
+
);
|
|
124
|
+
const editor = useEditor({
|
|
125
|
+
extensions: [StarterKit],
|
|
126
|
+
content: renderMarkdown(contentValue),
|
|
127
|
+
editable: editorEditable,
|
|
128
|
+
editorProps: {
|
|
129
|
+
attributes: {
|
|
130
|
+
class: editorContentClass,
|
|
131
|
+
role: "textbox",
|
|
132
|
+
"aria-multiline": "true",
|
|
133
|
+
...label ? { "aria-labelledby": advancedLabelId } : {}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
onUpdate: ({ editor: currentEditor }) => {
|
|
137
|
+
const markdown = turndownService.turndown(currentEditor.getHTML());
|
|
138
|
+
if (markdown === lastMarkdownRef.current) return;
|
|
139
|
+
lastMarkdownRef.current = markdown;
|
|
140
|
+
if (!hiddenTextareaRef.current) return;
|
|
141
|
+
hiddenTextareaRef.current.value = markdown;
|
|
142
|
+
dispatchInputEvent(hiddenTextareaRef.current);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
React.useEffect(() => {
|
|
146
|
+
if (!editor) return;
|
|
147
|
+
editor.setEditable(editorEditable);
|
|
148
|
+
}, [editor, editorEditable]);
|
|
149
|
+
React.useEffect(() => {
|
|
150
|
+
if (!editor) return;
|
|
151
|
+
editor.setOptions({
|
|
152
|
+
editorProps: {
|
|
153
|
+
...editor.options.editorProps,
|
|
154
|
+
attributes: {
|
|
155
|
+
...editor.options.editorProps?.attributes,
|
|
156
|
+
class: editorContentClass,
|
|
157
|
+
role: "textbox",
|
|
158
|
+
"aria-multiline": "true",
|
|
159
|
+
...label ? { "aria-labelledby": advancedLabelId } : {}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}, [editor, editorContentClass, label, advancedLabelId]);
|
|
164
|
+
React.useEffect(() => {
|
|
165
|
+
if (!editor || typeof value !== "string") return;
|
|
166
|
+
if (value === lastMarkdownRef.current) return;
|
|
167
|
+
editor.commands.setContent(renderMarkdown(value), { emitUpdate: false });
|
|
168
|
+
lastMarkdownRef.current = value;
|
|
169
|
+
if (hiddenTextareaRef.current) {
|
|
170
|
+
hiddenTextareaRef.current.value = value;
|
|
171
|
+
}
|
|
172
|
+
}, [editor, value]);
|
|
173
|
+
React.useEffect(() => {
|
|
174
|
+
if (!hiddenTextareaRef.current) return;
|
|
175
|
+
if (hiddenTextareaRef.current.value === contentValue) return;
|
|
176
|
+
hiddenTextareaRef.current.value = contentValue;
|
|
177
|
+
}, [contentValue]);
|
|
178
|
+
const textareaProps = {
|
|
179
|
+
...props,
|
|
180
|
+
onChange,
|
|
181
|
+
onInput,
|
|
182
|
+
disabled,
|
|
183
|
+
readOnly
|
|
184
|
+
};
|
|
185
|
+
const minHeightStyle = rows ? { minHeight: `${rows * 20}px` } : void 0;
|
|
186
|
+
return /* @__PURE__ */ jsxs(
|
|
187
|
+
"div",
|
|
188
|
+
{
|
|
189
|
+
id: wrapperId,
|
|
190
|
+
"data-mode": resolvedMode,
|
|
191
|
+
className: twMerge("flex flex-col gap-1", wrapperClassName),
|
|
192
|
+
children: [
|
|
193
|
+
allowModeSwitch && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"input",
|
|
196
|
+
{
|
|
197
|
+
type: "radio",
|
|
198
|
+
name: modeToggleName,
|
|
199
|
+
id: simpleToggleId,
|
|
200
|
+
value: "simple",
|
|
201
|
+
defaultChecked: resolvedMode === "simple",
|
|
202
|
+
className: "peer/simple sr-only",
|
|
203
|
+
onChange: () => handleModeToggle(wrapperId, "simple", textareaName, simpleTextareaId, advancedInputId)
|
|
204
|
+
}
|
|
205
|
+
),
|
|
206
|
+
/* @__PURE__ */ jsx(
|
|
207
|
+
"input",
|
|
208
|
+
{
|
|
209
|
+
type: "radio",
|
|
210
|
+
name: modeToggleName,
|
|
211
|
+
id: advancedToggleId,
|
|
212
|
+
value: "advanced",
|
|
213
|
+
defaultChecked: resolvedMode === "advanced",
|
|
214
|
+
className: "peer/advanced sr-only",
|
|
215
|
+
onChange: () => handleModeToggle(
|
|
216
|
+
wrapperId,
|
|
217
|
+
"advanced",
|
|
218
|
+
textareaName,
|
|
219
|
+
simpleTextareaId,
|
|
220
|
+
advancedInputId
|
|
221
|
+
)
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800", children: [
|
|
225
|
+
/* @__PURE__ */ jsx(
|
|
226
|
+
"label",
|
|
227
|
+
{
|
|
228
|
+
htmlFor: simpleToggleId,
|
|
229
|
+
className: twMerge(
|
|
230
|
+
"cursor-pointer px-3 py-1 transition-colors",
|
|
231
|
+
"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
|
|
232
|
+
"peer-checked/simple:bg-white peer-checked/simple:text-gray-900 peer-checked/simple:dark:bg-slate-900 peer-checked/simple:dark:text-gray-100"
|
|
233
|
+
),
|
|
234
|
+
children: "Jednoduch\xFD"
|
|
235
|
+
}
|
|
236
|
+
),
|
|
237
|
+
/* @__PURE__ */ jsx(
|
|
238
|
+
"label",
|
|
239
|
+
{
|
|
240
|
+
htmlFor: advancedToggleId,
|
|
241
|
+
className: twMerge(
|
|
242
|
+
"cursor-pointer px-3 py-1 transition-colors",
|
|
243
|
+
"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
|
|
244
|
+
"peer-checked/advanced:bg-white peer-checked/advanced:text-gray-900 peer-checked/advanced:dark:bg-slate-900 peer-checked/advanced:dark:text-gray-100"
|
|
245
|
+
),
|
|
246
|
+
children: "Pokro\u010Dil\xFD"
|
|
247
|
+
}
|
|
248
|
+
)
|
|
249
|
+
] }) })
|
|
250
|
+
] }),
|
|
251
|
+
(resolvedMode === "simple" || allowModeSwitch) && /* @__PURE__ */ jsxs(
|
|
252
|
+
"div",
|
|
253
|
+
{
|
|
254
|
+
className: twMerge(
|
|
255
|
+
"relative flex items-start",
|
|
256
|
+
allowModeSwitch ? "hidden peer-checked/simple:flex peer-checked/advanced:hidden" : void 0
|
|
257
|
+
),
|
|
258
|
+
children: [
|
|
259
|
+
/* @__PURE__ */ jsx(
|
|
260
|
+
"textarea",
|
|
261
|
+
{
|
|
262
|
+
...textareaProps,
|
|
263
|
+
id: simpleTextareaId,
|
|
264
|
+
name: !allowModeSwitch || resolvedMode === "simple" ? textareaName : "",
|
|
265
|
+
rows,
|
|
266
|
+
placeholder: placeholderValue,
|
|
267
|
+
value,
|
|
268
|
+
defaultValue,
|
|
269
|
+
className: twMerge(
|
|
270
|
+
"peer",
|
|
271
|
+
baseClass,
|
|
272
|
+
variantClass,
|
|
273
|
+
labelPadding,
|
|
274
|
+
placeholderClass,
|
|
275
|
+
className
|
|
276
|
+
)
|
|
277
|
+
}
|
|
278
|
+
),
|
|
279
|
+
label && /* @__PURE__ */ jsx(
|
|
280
|
+
"label",
|
|
281
|
+
{
|
|
282
|
+
htmlFor: simpleTextareaId,
|
|
283
|
+
className: twMerge(
|
|
284
|
+
"absolute transition-all duration-150 pointer-events-none left-3 text-gray-700 dark:text-gray-200",
|
|
285
|
+
"top-0 -translate-y-2/3 text-xs px-1",
|
|
286
|
+
labelBg,
|
|
287
|
+
focusLabelBg,
|
|
288
|
+
"peer-focus:top-0 peer-focus:-translate-y-1/2 peer-focus:text-xs peer-focus:px-1 peer-focus:text-gray-600 dark:peer-focus:text-gray-300",
|
|
289
|
+
"peer-placeholder-shown:top-3 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400"
|
|
290
|
+
),
|
|
291
|
+
children: label
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
),
|
|
297
|
+
(resolvedMode === "advanced" || allowModeSwitch) && /* @__PURE__ */ jsxs(
|
|
298
|
+
"div",
|
|
299
|
+
{
|
|
300
|
+
className: twMerge(
|
|
301
|
+
"flex flex-col gap-2",
|
|
302
|
+
allowModeSwitch ? "hidden peer-checked/advanced:flex peer-checked/simple:hidden" : void 0
|
|
303
|
+
),
|
|
304
|
+
children: [
|
|
305
|
+
label && /* @__PURE__ */ jsx(
|
|
306
|
+
"label",
|
|
307
|
+
{
|
|
308
|
+
id: advancedLabelId,
|
|
309
|
+
className: "text-sm font-medium text-gray-700 dark:text-gray-200",
|
|
310
|
+
children: label
|
|
311
|
+
}
|
|
312
|
+
),
|
|
313
|
+
showEditor && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-between gap-2", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800", children: [
|
|
314
|
+
/* @__PURE__ */ jsx(
|
|
315
|
+
"button",
|
|
316
|
+
{
|
|
317
|
+
type: "button",
|
|
318
|
+
className: twMerge(
|
|
319
|
+
toolbarButtonBase,
|
|
320
|
+
editor?.isActive("bold") ? toolbarButtonActive : void 0
|
|
321
|
+
),
|
|
322
|
+
onClick: () => editor?.chain().focus().toggleBold().run(),
|
|
323
|
+
disabled: !editor || !editorEditable,
|
|
324
|
+
children: "B"
|
|
325
|
+
}
|
|
326
|
+
),
|
|
327
|
+
/* @__PURE__ */ jsx(
|
|
328
|
+
"button",
|
|
329
|
+
{
|
|
330
|
+
type: "button",
|
|
331
|
+
className: twMerge(
|
|
332
|
+
toolbarButtonBase,
|
|
333
|
+
editor?.isActive("italic") ? toolbarButtonActive : void 0
|
|
334
|
+
),
|
|
335
|
+
onClick: () => editor?.chain().focus().toggleItalic().run(),
|
|
336
|
+
disabled: !editor || !editorEditable,
|
|
337
|
+
children: "I"
|
|
338
|
+
}
|
|
339
|
+
),
|
|
340
|
+
/* @__PURE__ */ jsx(
|
|
341
|
+
"button",
|
|
342
|
+
{
|
|
343
|
+
type: "button",
|
|
344
|
+
className: twMerge(
|
|
345
|
+
toolbarButtonBase,
|
|
346
|
+
editor?.isActive("strike") ? toolbarButtonActive : void 0
|
|
347
|
+
),
|
|
348
|
+
onClick: () => editor?.chain().focus().toggleStrike().run(),
|
|
349
|
+
disabled: !editor || !editorEditable,
|
|
350
|
+
children: "S"
|
|
351
|
+
}
|
|
352
|
+
),
|
|
353
|
+
/* @__PURE__ */ jsx(
|
|
354
|
+
"button",
|
|
355
|
+
{
|
|
356
|
+
type: "button",
|
|
357
|
+
className: twMerge(
|
|
358
|
+
toolbarButtonBase,
|
|
359
|
+
editor?.isActive("bulletList") ? toolbarButtonActive : void 0
|
|
360
|
+
),
|
|
361
|
+
onClick: () => editor?.chain().focus().toggleBulletList().run(),
|
|
362
|
+
disabled: !editor || !editorEditable,
|
|
363
|
+
children: "\u2022 List"
|
|
364
|
+
}
|
|
365
|
+
),
|
|
366
|
+
/* @__PURE__ */ jsx(
|
|
367
|
+
"button",
|
|
368
|
+
{
|
|
369
|
+
type: "button",
|
|
370
|
+
className: twMerge(
|
|
371
|
+
toolbarButtonBase,
|
|
372
|
+
editor?.isActive("orderedList") ? toolbarButtonActive : void 0
|
|
373
|
+
),
|
|
374
|
+
onClick: () => editor?.chain().focus().toggleOrderedList().run(),
|
|
375
|
+
disabled: !editor || !editorEditable,
|
|
376
|
+
children: "1. List"
|
|
377
|
+
}
|
|
378
|
+
),
|
|
379
|
+
/* @__PURE__ */ jsx(
|
|
380
|
+
"button",
|
|
381
|
+
{
|
|
382
|
+
type: "button",
|
|
383
|
+
className: twMerge(
|
|
384
|
+
toolbarButtonBase,
|
|
385
|
+
editor?.isActive("blockquote") ? toolbarButtonActive : void 0
|
|
386
|
+
),
|
|
387
|
+
onClick: () => editor?.chain().focus().toggleBlockquote().run(),
|
|
388
|
+
disabled: !editor || !editorEditable,
|
|
389
|
+
children: "Quote"
|
|
390
|
+
}
|
|
391
|
+
),
|
|
392
|
+
/* @__PURE__ */ jsx(
|
|
393
|
+
"button",
|
|
394
|
+
{
|
|
395
|
+
type: "button",
|
|
396
|
+
className: twMerge(
|
|
397
|
+
toolbarButtonBase,
|
|
398
|
+
editor?.isActive("code") ? toolbarButtonActive : void 0
|
|
399
|
+
),
|
|
400
|
+
onClick: () => editor?.chain().focus().toggleCode().run(),
|
|
401
|
+
disabled: !editor || !editorEditable,
|
|
402
|
+
children: "Code"
|
|
403
|
+
}
|
|
404
|
+
),
|
|
405
|
+
/* @__PURE__ */ jsx(
|
|
406
|
+
"button",
|
|
407
|
+
{
|
|
408
|
+
type: "button",
|
|
409
|
+
className: twMerge(
|
|
410
|
+
toolbarButtonBase,
|
|
411
|
+
editor?.isActive("codeBlock") ? toolbarButtonActive : void 0
|
|
412
|
+
),
|
|
413
|
+
onClick: () => editor?.chain().focus().toggleCodeBlock().run(),
|
|
414
|
+
disabled: !editor || !editorEditable,
|
|
415
|
+
children: "Code block"
|
|
416
|
+
}
|
|
417
|
+
)
|
|
418
|
+
] }) }),
|
|
419
|
+
/* @__PURE__ */ jsx("div", { className: twMerge("overflow-hidden", advancedContainerVariant[variant]), children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-3 space-y-3", children: [
|
|
420
|
+
showEditor && /* @__PURE__ */ jsx(
|
|
421
|
+
EditorContent,
|
|
422
|
+
{
|
|
423
|
+
editor,
|
|
424
|
+
id: advancedEditorId,
|
|
425
|
+
className: "w-full",
|
|
426
|
+
style: minHeightStyle
|
|
427
|
+
}
|
|
428
|
+
),
|
|
429
|
+
/* @__PURE__ */ jsx(
|
|
430
|
+
"textarea",
|
|
431
|
+
{
|
|
432
|
+
...textareaProps,
|
|
433
|
+
ref: hiddenTextareaRef,
|
|
434
|
+
id: advancedInputId,
|
|
435
|
+
name: !allowModeSwitch || resolvedMode === "advanced" ? textareaName : "",
|
|
436
|
+
rows,
|
|
437
|
+
placeholder: placeholderValue,
|
|
438
|
+
className: "sr-only",
|
|
439
|
+
...isControlled ? { value } : { defaultValue: contentValue }
|
|
440
|
+
}
|
|
441
|
+
),
|
|
442
|
+
showPreview && /* @__PURE__ */ jsx(
|
|
443
|
+
"div",
|
|
444
|
+
{
|
|
445
|
+
id: previewId,
|
|
446
|
+
className: twMerge(
|
|
447
|
+
baseClass,
|
|
448
|
+
"min-h-45 rounded border-0 px-0 focus:outline-none whitespace-pre-wrap wrap-break-words",
|
|
449
|
+
className
|
|
450
|
+
),
|
|
451
|
+
style: minHeightStyle,
|
|
452
|
+
dangerouslySetInnerHTML: {
|
|
453
|
+
__html: renderMarkdown(contentValue)
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
)
|
|
457
|
+
] }) })
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
]
|
|
462
|
+
}
|
|
463
|
+
);
|
|
464
|
+
};
|
|
465
|
+
var TextArea_default = TextArea;
|
|
466
|
+
|
|
467
|
+
export { TextArea_default };
|
|
468
|
+
//# sourceMappingURL=chunk-SCJMH5VE.js.map
|
|
469
|
+
//# sourceMappingURL=chunk-SCJMH5VE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Form/TextArea/index.tsx"],"names":[],"mappings":"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","file":"chunk-SCJMH5VE.js","sourcesContent":["'use client';\n\nimport React from 'react';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport { marked } from 'marked';\nimport TurndownService from 'turndown';\nimport { twMerge } from 'tailwind-merge';\nimport { generateString } from '../../utils/helpers/randomStr';\nimport type { TextAreaMode, TextAreaProps, TextAreaVariant, TextAreaView } from './types.textarea';\n\nconst baseClass =\n 'textarea-base px-3 py-2 focus-visible:outline-none transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400';\n\nconst variantClasses: Record<TextAreaVariant, string> = {\n outlined:\n 'rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-slate-900 dark:focus-visible:border-black dark:focus-visible:ring-black/40',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30',\n standard:\n 'rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 dark:border-b-gray-700 dark:focus-visible:border-primary/70'\n};\n\nconst labelBackground: Record<TextAreaVariant, string> = {\n outlined: 'bg-white/90 dark:bg-slate-900',\n filled: 'bg-gray-100 dark:bg-slate-800',\n standard: 'bg-transparent'\n};\n\nconst advancedContainerVariant: Record<TextAreaVariant, string> = {\n outlined: 'rounded border-2 border-black bg-white dark:border-black dark:bg-slate-900',\n filled: 'rounded border border-gray-200 bg-gray-100 dark:border-gray-700 dark:bg-slate-800',\n standard: 'border-b border-gray-300 bg-transparent dark:border-gray-700'\n};\n\nconst renderMarkdown = (value: string) => marked.parse(value || '', { async: false }) as string;\n\nconst dispatchInputEvent = (element: HTMLTextAreaElement) => {\n const event = new Event('input', { bubbles: true });\n element.dispatchEvent(event);\n};\n\nconst toolbarButtonBase =\n 'px-3 py-1 text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-slate-700 disabled:cursor-not-allowed disabled:opacity-50';\nconst toolbarButtonActive = 'bg-white text-gray-900 dark:bg-slate-900 dark:text-gray-100';\n\nconst handleModeToggle = (\n wrapperId: string,\n mode: TextAreaMode,\n textareaName: string,\n simpleId: string,\n advancedInputId: string\n) => {\n if (typeof document === 'undefined') return;\n const wrapper = document.getElementById(wrapperId);\n const simple = document.getElementById(simpleId) as HTMLTextAreaElement | null;\n const advancedInput = document.getElementById(advancedInputId) as HTMLTextAreaElement | null;\n\n if (wrapper) {\n wrapper.dataset.mode = mode;\n }\n\n if (simple) {\n simple.classList.toggle('hidden', mode !== 'simple');\n simple.name = mode === 'simple' ? textareaName : '';\n }\n\n if (advancedInput) {\n advancedInput.classList.toggle('hidden', mode !== 'advanced');\n advancedInput.name = mode === 'advanced' ? textareaName : '';\n }\n};\n\nconst TextArea: React.FC<TextAreaProps> = ({\n variant = 'outlined',\n label,\n className,\n wrapperClassName,\n id,\n name,\n placeholder,\n rows = 4,\n allowModeSwitch = true,\n mode,\n view = 'editor',\n value,\n defaultValue,\n disabled,\n readOnly,\n onChange,\n onInput,\n ...props\n}) => {\n const textareaId = id || name || generateString();\n const textareaName = name || textareaId;\n const wrapperId = `${textareaId}-wrapper`;\n const simpleTextareaId = `${textareaId}-simple`;\n const advancedInputId = `${textareaId}-advanced-input`;\n const advancedEditorId = `${textareaId}-advanced-editor`;\n const advancedLabelId = `${textareaId}-advanced-label`;\n const previewId = `${textareaId}-preview`;\n const variantClass = variantClasses[variant] ?? variantClasses.outlined;\n const labelPadding = label ? 'pt-6' : undefined;\n const placeholderValue = placeholder ?? (label ? ' ' : undefined);\n const placeholderClass = label ? 'placeholder-transparent' : undefined;\n const labelBg = labelBackground[variant] ?? labelBackground.outlined;\n const focusLabelBg =\n variant === 'filled'\n ? 'peer-focus:bg-gray-100 dark:peer-focus:bg-slate-800'\n : variant === 'standard'\n ? 'peer-focus:bg-transparent'\n : 'peer-focus:bg-white/90 dark:peer-focus:bg-slate-900';\n\n const resolvedMode: TextAreaMode = allowModeSwitch ? mode ?? 'simple' : 'simple';\n const resolvedView: TextAreaView = view ?? 'editor';\n const showEditor = resolvedView === 'editor';\n const showPreview = resolvedView === 'view';\n const contentValue =\n typeof value === 'string' ? value : typeof defaultValue === 'string' ? defaultValue : '';\n const isControlled = typeof value === 'string';\n const editorEditable = !(disabled || readOnly);\n const modeToggleName = `${textareaId}-mode-toggle`;\n const simpleToggleId = `${modeToggleName}-simple`;\n const advancedToggleId = `${modeToggleName}-advanced`;\n\n const turndownService = React.useMemo(() => {\n const service = new TurndownService({\n codeBlockStyle: 'fenced',\n emDelimiter: '*',\n strongDelimiter: '**',\n bulletListMarker: '-'\n });\n service.addRule('strikethrough', {\n filter: node => ['DEL', 'S', 'STRIKE'].includes(node.nodeName),\n replacement: content => `~~${content}~~`\n });\n return service;\n }, []);\n\n const hiddenTextareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n const lastMarkdownRef = React.useRef<string>(contentValue);\n const editorContentClass = twMerge(\n baseClass,\n 'min-h-45 rounded border-0 bg-transparent outline-none whitespace-pre-wrap wrap-break-words',\n '[&_p]:m-0 [&_p]:leading-6',\n '[&_ul]:my-0 [&_ul]:list-disc [&_ul]:pl-5',\n '[&_ol]:my-0 [&_ol]:list-decimal [&_ol]:pl-5',\n '[&_li]:my-0',\n '[&_blockquote]:border-l-2 [&_blockquote]:border-gray-300 [&_blockquote]:pl-3 [&_blockquote]:text-gray-600',\n 'dark:[&_blockquote]:border-gray-600 dark:[&_blockquote]:text-gray-300',\n '[&_pre]:bg-gray-100 [&_pre]:rounded [&_pre]:p-3 [&_pre]:text-sm [&_pre]:overflow-x-auto',\n 'dark:[&_pre]:bg-slate-800',\n '[&_code]:font-mono',\n className,\n !editorEditable ? 'cursor-not-allowed opacity-50' : undefined\n );\n\n const editor = useEditor({\n extensions: [StarterKit],\n content: renderMarkdown(contentValue),\n editable: editorEditable,\n editorProps: {\n attributes: {\n class: editorContentClass,\n role: 'textbox',\n 'aria-multiline': 'true',\n ...(label ? { 'aria-labelledby': advancedLabelId } : {})\n }\n },\n onUpdate: ({ editor: currentEditor }) => {\n const markdown = turndownService.turndown(currentEditor.getHTML());\n if (markdown === lastMarkdownRef.current) return;\n lastMarkdownRef.current = markdown;\n if (!hiddenTextareaRef.current) return;\n hiddenTextareaRef.current.value = markdown;\n dispatchInputEvent(hiddenTextareaRef.current);\n }\n });\n\n React.useEffect(() => {\n if (!editor) return;\n editor.setEditable(editorEditable);\n }, [editor, editorEditable]);\n\n React.useEffect(() => {\n if (!editor) return;\n editor.setOptions({\n editorProps: {\n ...editor.options.editorProps,\n attributes: {\n ...editor.options.editorProps?.attributes,\n class: editorContentClass,\n role: 'textbox',\n 'aria-multiline': 'true',\n ...(label ? { 'aria-labelledby': advancedLabelId } : {})\n }\n }\n });\n }, [editor, editorContentClass, label, advancedLabelId]);\n\n React.useEffect(() => {\n if (!editor || typeof value !== 'string') return;\n if (value === lastMarkdownRef.current) return;\n editor.commands.setContent(renderMarkdown(value), { emitUpdate: false });\n lastMarkdownRef.current = value;\n if (hiddenTextareaRef.current) {\n hiddenTextareaRef.current.value = value;\n }\n }, [editor, value]);\n\n React.useEffect(() => {\n if (!hiddenTextareaRef.current) return;\n if (hiddenTextareaRef.current.value === contentValue) return;\n hiddenTextareaRef.current.value = contentValue;\n }, [contentValue]);\n\n const textareaProps = {\n ...props,\n onChange,\n onInput,\n disabled,\n readOnly\n };\n\n const minHeightStyle = rows ? { minHeight: `${rows * 20}px` } : undefined;\n\n return (\n <div\n id={wrapperId}\n data-mode={resolvedMode}\n className={twMerge('flex flex-col gap-1', wrapperClassName)}\n >\n {allowModeSwitch && (\n <>\n <input\n type='radio'\n name={modeToggleName}\n id={simpleToggleId}\n value='simple'\n defaultChecked={resolvedMode === 'simple'}\n className='peer/simple sr-only'\n onChange={() =>\n handleModeToggle(wrapperId, 'simple', textareaName, simpleTextareaId, advancedInputId)\n }\n />\n <input\n type='radio'\n name={modeToggleName}\n id={advancedToggleId}\n value='advanced'\n defaultChecked={resolvedMode === 'advanced'}\n className='peer/advanced sr-only'\n onChange={() =>\n handleModeToggle(\n wrapperId,\n 'advanced',\n textareaName,\n simpleTextareaId,\n advancedInputId\n )\n }\n />\n <div className='flex justify-end'>\n <div className='inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800'>\n <label\n htmlFor={simpleToggleId}\n className={twMerge(\n 'cursor-pointer px-3 py-1 transition-colors',\n 'text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700',\n 'peer-checked/simple:bg-white peer-checked/simple:text-gray-900 peer-checked/simple:dark:bg-slate-900 peer-checked/simple:dark:text-gray-100'\n )}\n >\n Jednoduchý\n </label>\n <label\n htmlFor={advancedToggleId}\n className={twMerge(\n 'cursor-pointer px-3 py-1 transition-colors',\n 'text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700',\n 'peer-checked/advanced:bg-white peer-checked/advanced:text-gray-900 peer-checked/advanced:dark:bg-slate-900 peer-checked/advanced:dark:text-gray-100'\n )}\n >\n Pokročilý\n </label>\n </div>\n </div>\n </>\n )}\n\n {(resolvedMode === 'simple' || allowModeSwitch) && (\n <div\n className={twMerge(\n 'relative flex items-start',\n allowModeSwitch\n ? 'hidden peer-checked/simple:flex peer-checked/advanced:hidden'\n : undefined\n )}\n >\n <textarea\n {...textareaProps}\n id={simpleTextareaId}\n name={!allowModeSwitch || resolvedMode === 'simple' ? textareaName : ''}\n rows={rows}\n placeholder={placeholderValue}\n value={value}\n defaultValue={defaultValue}\n className={twMerge(\n 'peer',\n baseClass,\n variantClass,\n labelPadding,\n placeholderClass,\n className\n )}\n />\n\n {label && (\n <label\n htmlFor={simpleTextareaId}\n className={twMerge(\n 'absolute transition-all duration-150 pointer-events-none left-3 text-gray-700 dark:text-gray-200',\n 'top-0 -translate-y-2/3 text-xs px-1',\n labelBg,\n focusLabelBg,\n 'peer-focus:top-0 peer-focus:-translate-y-1/2 peer-focus:text-xs peer-focus:px-1 peer-focus:text-gray-600 dark:peer-focus:text-gray-300',\n 'peer-placeholder-shown:top-3 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400'\n )}\n >\n {label}\n </label>\n )}\n </div>\n )}\n\n {(resolvedMode === 'advanced' || allowModeSwitch) && (\n <div\n className={twMerge(\n 'flex flex-col gap-2',\n allowModeSwitch\n ? 'hidden peer-checked/advanced:flex peer-checked/simple:hidden'\n : undefined\n )}\n >\n {label && (\n <label\n id={advancedLabelId}\n className='text-sm font-medium text-gray-700 dark:text-gray-200'\n >\n {label}\n </label>\n )}\n\n {showEditor && (\n <div className='flex flex-wrap items-center justify-between gap-2'>\n <div className='inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800'>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('bold') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleBold().run()}\n disabled={!editor || !editorEditable}\n >\n B\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('italic') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n disabled={!editor || !editorEditable}\n >\n I\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('strike') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleStrike().run()}\n disabled={!editor || !editorEditable}\n >\n S\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('bulletList') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n disabled={!editor || !editorEditable}\n >\n • List\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('orderedList') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n disabled={!editor || !editorEditable}\n >\n 1. List\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('blockquote') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleBlockquote().run()}\n disabled={!editor || !editorEditable}\n >\n Quote\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('code') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleCode().run()}\n disabled={!editor || !editorEditable}\n >\n Code\n </button>\n <button\n type='button'\n className={twMerge(\n toolbarButtonBase,\n editor?.isActive('codeBlock') ? toolbarButtonActive : undefined\n )}\n onClick={() => editor?.chain().focus().toggleCodeBlock().run()}\n disabled={!editor || !editorEditable}\n >\n Code block\n </button>\n </div>\n </div>\n )}\n\n <div className={twMerge('overflow-hidden', advancedContainerVariant[variant])}>\n <div className='px-3 py-3 space-y-3'>\n {showEditor && (\n <EditorContent\n editor={editor}\n id={advancedEditorId}\n className='w-full'\n style={minHeightStyle}\n />\n )}\n\n <textarea\n {...textareaProps}\n ref={hiddenTextareaRef}\n id={advancedInputId}\n name={!allowModeSwitch || resolvedMode === 'advanced' ? textareaName : ''}\n rows={rows}\n placeholder={placeholderValue}\n className='sr-only'\n {...(isControlled ? { value } : { defaultValue: contentValue })}\n />\n\n {showPreview && (\n <div\n id={previewId}\n className={twMerge(\n baseClass,\n 'min-h-45 rounded border-0 px-0 focus:outline-none whitespace-pre-wrap wrap-break-words',\n className\n )}\n style={minHeightStyle}\n dangerouslySetInnerHTML={{\n __html: renderMarkdown(contentValue)\n }}\n />\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default TextArea;\n"]}
|