@lindle/linoardo 1.0.49 → 1.0.51

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 (53) hide show
  1. package/dist/button.cjs +2 -4
  2. package/dist/button.cjs.map +1 -1
  3. package/dist/button.js +1 -1
  4. package/dist/chunk-3J6Y3EQW.js +538 -0
  5. package/dist/chunk-3J6Y3EQW.js.map +1 -0
  6. package/dist/{chunk-TRR7TDVA.js → chunk-4C6XQI62.js} +72 -40
  7. package/dist/chunk-4C6XQI62.js.map +1 -0
  8. package/dist/{chunk-HVGCLUW2.js → chunk-NJN7T34X.js} +4 -6
  9. package/dist/chunk-NJN7T34X.js.map +1 -0
  10. package/dist/{chunk-LRWM4ZWZ.js → chunk-QCRQUSET.js} +4 -4
  11. package/dist/chunk-QCRQUSET.js.map +1 -0
  12. package/dist/{chunk-Z5A2OIDI.js → chunk-SM2VNSPP.js} +4 -7
  13. package/dist/chunk-SM2VNSPP.js.map +1 -0
  14. package/dist/{chunk-LSIAP7ZZ.js → chunk-XLA2NCDF.js} +3 -9
  15. package/dist/chunk-XLA2NCDF.js.map +1 -0
  16. package/dist/expansion-panel.cjs +1 -7
  17. package/dist/expansion-panel.cjs.map +1 -1
  18. package/dist/expansion-panel.js +1 -1
  19. package/dist/index.cjs +643 -561
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.js +6 -7
  24. package/dist/index.js.map +1 -1
  25. package/dist/profileCard.cjs +3 -5
  26. package/dist/profileCard.cjs.map +1 -1
  27. package/dist/profileCard.js +2 -2
  28. package/dist/progress.cjs +2 -5
  29. package/dist/progress.cjs.map +1 -1
  30. package/dist/progress.js +1 -1
  31. package/dist/select.cjs +60 -37
  32. package/dist/select.cjs.map +1 -1
  33. package/dist/select.d.cts +4 -0
  34. package/dist/select.d.ts +4 -0
  35. package/dist/select.js +1 -2
  36. package/dist/styles.css +254 -187
  37. package/dist/textarea.cjs +484 -423
  38. package/dist/textarea.cjs.map +1 -1
  39. package/dist/textarea.d.cts +27 -23
  40. package/dist/textarea.d.ts +27 -23
  41. package/dist/textarea.js +1 -2
  42. package/dist/timeline.d.cts +1 -1
  43. package/dist/timeline.d.ts +1 -1
  44. package/package.json +7 -1
  45. package/dist/chunk-67TAA2MA.js +0 -470
  46. package/dist/chunk-67TAA2MA.js.map +0 -1
  47. package/dist/chunk-6SKW43XI.js +0 -14
  48. package/dist/chunk-6SKW43XI.js.map +0 -1
  49. package/dist/chunk-HVGCLUW2.js.map +0 -1
  50. package/dist/chunk-LRWM4ZWZ.js.map +0 -1
  51. package/dist/chunk-LSIAP7ZZ.js.map +0 -1
  52. package/dist/chunk-TRR7TDVA.js.map +0 -1
  53. package/dist/chunk-Z5A2OIDI.js.map +0 -1
@@ -1,470 +0,0 @@
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
- immediatelyRender: false,
128
- editable: editorEditable,
129
- editorProps: {
130
- attributes: {
131
- class: editorContentClass,
132
- role: "textbox",
133
- "aria-multiline": "true",
134
- ...label ? { "aria-labelledby": advancedLabelId } : {}
135
- }
136
- },
137
- onUpdate: ({ editor: currentEditor }) => {
138
- const markdown = turndownService.turndown(currentEditor.getHTML());
139
- if (markdown === lastMarkdownRef.current) return;
140
- lastMarkdownRef.current = markdown;
141
- if (!hiddenTextareaRef.current) return;
142
- hiddenTextareaRef.current.value = markdown;
143
- dispatchInputEvent(hiddenTextareaRef.current);
144
- }
145
- });
146
- React.useEffect(() => {
147
- if (!editor) return;
148
- editor.setEditable(editorEditable);
149
- }, [editor, editorEditable]);
150
- React.useEffect(() => {
151
- if (!editor) return;
152
- editor.setOptions({
153
- editorProps: {
154
- ...editor.options.editorProps,
155
- attributes: {
156
- ...editor.options.editorProps?.attributes,
157
- class: editorContentClass,
158
- role: "textbox",
159
- "aria-multiline": "true",
160
- ...label ? { "aria-labelledby": advancedLabelId } : {}
161
- }
162
- }
163
- });
164
- }, [editor, editorContentClass, label, advancedLabelId]);
165
- React.useEffect(() => {
166
- if (!editor || typeof value !== "string") return;
167
- if (value === lastMarkdownRef.current) return;
168
- editor.commands.setContent(renderMarkdown(value), { emitUpdate: false });
169
- lastMarkdownRef.current = value;
170
- if (hiddenTextareaRef.current) {
171
- hiddenTextareaRef.current.value = value;
172
- }
173
- }, [editor, value]);
174
- React.useEffect(() => {
175
- if (!hiddenTextareaRef.current) return;
176
- if (hiddenTextareaRef.current.value === contentValue) return;
177
- hiddenTextareaRef.current.value = contentValue;
178
- }, [contentValue]);
179
- const textareaProps = {
180
- ...props,
181
- onChange,
182
- onInput,
183
- disabled,
184
- readOnly
185
- };
186
- const minHeightStyle = rows ? { minHeight: `${rows * 20}px` } : void 0;
187
- return /* @__PURE__ */ jsxs(
188
- "div",
189
- {
190
- id: wrapperId,
191
- "data-mode": resolvedMode,
192
- className: twMerge("flex flex-col gap-1", wrapperClassName),
193
- children: [
194
- allowModeSwitch && /* @__PURE__ */ jsxs(Fragment, { children: [
195
- /* @__PURE__ */ jsx(
196
- "input",
197
- {
198
- type: "radio",
199
- name: modeToggleName,
200
- id: simpleToggleId,
201
- value: "simple",
202
- defaultChecked: resolvedMode === "simple",
203
- className: "peer/simple sr-only",
204
- onChange: () => handleModeToggle(wrapperId, "simple", textareaName, simpleTextareaId, advancedInputId)
205
- }
206
- ),
207
- /* @__PURE__ */ jsx(
208
- "input",
209
- {
210
- type: "radio",
211
- name: modeToggleName,
212
- id: advancedToggleId,
213
- value: "advanced",
214
- defaultChecked: resolvedMode === "advanced",
215
- className: "peer/advanced sr-only",
216
- onChange: () => handleModeToggle(
217
- wrapperId,
218
- "advanced",
219
- textareaName,
220
- simpleTextareaId,
221
- advancedInputId
222
- )
223
- }
224
- ),
225
- /* @__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: [
226
- /* @__PURE__ */ jsx(
227
- "label",
228
- {
229
- htmlFor: simpleToggleId,
230
- className: twMerge(
231
- "cursor-pointer px-3 py-1 transition-colors",
232
- "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
233
- "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"
234
- ),
235
- children: "Jednoduch\xFD"
236
- }
237
- ),
238
- /* @__PURE__ */ jsx(
239
- "label",
240
- {
241
- htmlFor: advancedToggleId,
242
- className: twMerge(
243
- "cursor-pointer px-3 py-1 transition-colors",
244
- "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
245
- "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"
246
- ),
247
- children: "Pokro\u010Dil\xFD"
248
- }
249
- )
250
- ] }) })
251
- ] }),
252
- (resolvedMode === "simple" || allowModeSwitch) && /* @__PURE__ */ jsxs(
253
- "div",
254
- {
255
- className: twMerge(
256
- "relative flex items-start",
257
- allowModeSwitch ? "hidden peer-checked/simple:flex peer-checked/advanced:hidden" : void 0
258
- ),
259
- children: [
260
- /* @__PURE__ */ jsx(
261
- "textarea",
262
- {
263
- ...textareaProps,
264
- id: simpleTextareaId,
265
- name: !allowModeSwitch || resolvedMode === "simple" ? textareaName : "",
266
- rows,
267
- placeholder: placeholderValue,
268
- value,
269
- defaultValue,
270
- className: twMerge(
271
- "peer",
272
- baseClass,
273
- variantClass,
274
- labelPadding,
275
- placeholderClass,
276
- className
277
- )
278
- }
279
- ),
280
- label && /* @__PURE__ */ jsx(
281
- "label",
282
- {
283
- htmlFor: simpleTextareaId,
284
- className: twMerge(
285
- "absolute transition-all duration-150 pointer-events-none left-3 text-gray-700 dark:text-gray-200",
286
- "top-0 -translate-y-2/3 text-xs px-1",
287
- labelBg,
288
- focusLabelBg,
289
- "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",
290
- "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"
291
- ),
292
- children: label
293
- }
294
- )
295
- ]
296
- }
297
- ),
298
- (resolvedMode === "advanced" || allowModeSwitch) && /* @__PURE__ */ jsxs(
299
- "div",
300
- {
301
- className: twMerge(
302
- "flex flex-col gap-2",
303
- allowModeSwitch ? "hidden peer-checked/advanced:flex peer-checked/simple:hidden" : void 0
304
- ),
305
- children: [
306
- label && /* @__PURE__ */ jsx(
307
- "label",
308
- {
309
- id: advancedLabelId,
310
- className: "text-sm font-medium text-gray-700 dark:text-gray-200",
311
- children: label
312
- }
313
- ),
314
- 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: [
315
- /* @__PURE__ */ jsx(
316
- "button",
317
- {
318
- type: "button",
319
- className: twMerge(
320
- toolbarButtonBase,
321
- editor?.isActive("bold") ? toolbarButtonActive : void 0
322
- ),
323
- onClick: () => editor?.chain().focus().toggleBold().run(),
324
- disabled: !editor || !editorEditable,
325
- children: "B"
326
- }
327
- ),
328
- /* @__PURE__ */ jsx(
329
- "button",
330
- {
331
- type: "button",
332
- className: twMerge(
333
- toolbarButtonBase,
334
- editor?.isActive("italic") ? toolbarButtonActive : void 0
335
- ),
336
- onClick: () => editor?.chain().focus().toggleItalic().run(),
337
- disabled: !editor || !editorEditable,
338
- children: "I"
339
- }
340
- ),
341
- /* @__PURE__ */ jsx(
342
- "button",
343
- {
344
- type: "button",
345
- className: twMerge(
346
- toolbarButtonBase,
347
- editor?.isActive("strike") ? toolbarButtonActive : void 0
348
- ),
349
- onClick: () => editor?.chain().focus().toggleStrike().run(),
350
- disabled: !editor || !editorEditable,
351
- children: "S"
352
- }
353
- ),
354
- /* @__PURE__ */ jsx(
355
- "button",
356
- {
357
- type: "button",
358
- className: twMerge(
359
- toolbarButtonBase,
360
- editor?.isActive("bulletList") ? toolbarButtonActive : void 0
361
- ),
362
- onClick: () => editor?.chain().focus().toggleBulletList().run(),
363
- disabled: !editor || !editorEditable,
364
- children: "\u2022 List"
365
- }
366
- ),
367
- /* @__PURE__ */ jsx(
368
- "button",
369
- {
370
- type: "button",
371
- className: twMerge(
372
- toolbarButtonBase,
373
- editor?.isActive("orderedList") ? toolbarButtonActive : void 0
374
- ),
375
- onClick: () => editor?.chain().focus().toggleOrderedList().run(),
376
- disabled: !editor || !editorEditable,
377
- children: "1. List"
378
- }
379
- ),
380
- /* @__PURE__ */ jsx(
381
- "button",
382
- {
383
- type: "button",
384
- className: twMerge(
385
- toolbarButtonBase,
386
- editor?.isActive("blockquote") ? toolbarButtonActive : void 0
387
- ),
388
- onClick: () => editor?.chain().focus().toggleBlockquote().run(),
389
- disabled: !editor || !editorEditable,
390
- children: "Quote"
391
- }
392
- ),
393
- /* @__PURE__ */ jsx(
394
- "button",
395
- {
396
- type: "button",
397
- className: twMerge(
398
- toolbarButtonBase,
399
- editor?.isActive("code") ? toolbarButtonActive : void 0
400
- ),
401
- onClick: () => editor?.chain().focus().toggleCode().run(),
402
- disabled: !editor || !editorEditable,
403
- children: "Code"
404
- }
405
- ),
406
- /* @__PURE__ */ jsx(
407
- "button",
408
- {
409
- type: "button",
410
- className: twMerge(
411
- toolbarButtonBase,
412
- editor?.isActive("codeBlock") ? toolbarButtonActive : void 0
413
- ),
414
- onClick: () => editor?.chain().focus().toggleCodeBlock().run(),
415
- disabled: !editor || !editorEditable,
416
- children: "Code block"
417
- }
418
- )
419
- ] }) }),
420
- /* @__PURE__ */ jsx("div", { className: twMerge("overflow-hidden", advancedContainerVariant[variant]), children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-3 space-y-3", children: [
421
- showEditor && /* @__PURE__ */ jsx(
422
- EditorContent,
423
- {
424
- editor,
425
- id: advancedEditorId,
426
- className: "w-full",
427
- style: minHeightStyle
428
- }
429
- ),
430
- /* @__PURE__ */ jsx(
431
- "textarea",
432
- {
433
- ...textareaProps,
434
- ref: hiddenTextareaRef,
435
- id: advancedInputId,
436
- name: !allowModeSwitch || resolvedMode === "advanced" ? textareaName : "",
437
- rows,
438
- placeholder: placeholderValue,
439
- className: "sr-only",
440
- ...isControlled ? { value } : { defaultValue: contentValue }
441
- }
442
- ),
443
- showPreview && /* @__PURE__ */ jsx(
444
- "div",
445
- {
446
- id: previewId,
447
- className: twMerge(
448
- baseClass,
449
- "min-h-45 rounded border-0 px-0 focus:outline-none whitespace-pre-wrap wrap-break-words",
450
- className
451
- ),
452
- style: minHeightStyle,
453
- dangerouslySetInnerHTML: {
454
- __html: renderMarkdown(contentValue)
455
- }
456
- }
457
- )
458
- ] }) })
459
- ]
460
- }
461
- )
462
- ]
463
- }
464
- );
465
- };
466
- var TextArea_default = TextArea;
467
-
468
- export { TextArea_default };
469
- //# sourceMappingURL=chunk-67TAA2MA.js.map
470
- //# sourceMappingURL=chunk-67TAA2MA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Form/TextArea/index.tsx"],"names":[],"mappings":"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","file":"chunk-67TAA2MA.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 immediatelyRender: false,\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"]}
@@ -1,14 +0,0 @@
1
- // src/utils/helpers/randomStr.ts
2
- var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
3
- function generateString(length = 5) {
4
- let result = "";
5
- const charactersLength = characters.length;
6
- for (let i = 0; i < length; i++) {
7
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
8
- }
9
- return result;
10
- }
11
-
12
- export { generateString };
13
- //# sourceMappingURL=chunk-6SKW43XI.js.map
14
- //# sourceMappingURL=chunk-6SKW43XI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/helpers/randomStr.ts"],"names":[],"mappings":";AAAA,IAAM,UAAA,GAAa,gEAAA;AAEZ,SAAS,cAAA,CAAe,SAAS,CAAA,EAAG;AACzC,EAAA,IAAI,MAAA,GAAiB,EAAA;AACrB,EAAA,MAAM,mBAAmB,UAAA,CAAW,MAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,UAAA,CAAW,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,gBAAgB,CAAC,CAAA;AAAA,EAC1E;AAEA,EAAA,OAAO,MAAA;AACT","file":"chunk-6SKW43XI.js","sourcesContent":["const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function generateString(length = 5) {\n let result: string = '';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Containment/Button/states.button.ts","../src/Containment/Button/index.tsx"],"names":["normalized"],"mappings":";;;;;;AAIO,IAAM,IAAA,GACX,oQAAA;AAEF,IAAM,2BAAA,GAA8B;AAAA,EAClC,KAAA,EAAO,iOAAA;AAAA,EACP,OAAA,EACE,gTAAA;AAAA,EACF,KAAA,EACE,oKAAA;AAAA,EACF,IAAA,EACE,mKAAA;AAAA,EACF,MAAA,EACE,0KAAA;AAAA,EACF,UAAA,EACE,0LAAA;AAAA,EACF,KAAA,EACE;AACJ,CAAA;AAEA,IAAM,qBAAA,GAAwE;AAAA,EAC5E,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,sEAAA;AAAA,IACP,KAAA,EAAO,mFAAA;AAAA,IACP,OAAA,EACE,gNAAA;AAAA,IACF,KAAA,EACE,oJAAA;AAAA,IACF,IAAA,EAAM,qJAAA;AAAA,IACN,MAAA,EACE,0KAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,sEAAA;AAAA,IACP,KAAA,EAAO,mFAAA;AAAA,IACP,OAAA,EACE,uNAAA;AAAA,IACF,KAAA,EACE,8JAAA;AAAA,IACF,IAAA,EAAM,mKAAA;AAAA,IACN,MAAA,EACE,gLAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,mEAAA;AAAA,IACP,KAAA,EAAO,gFAAA;AAAA,IACP,OAAA,EACE,gNAAA;AAAA,IACF,KAAA,EACE,6JAAA;AAAA,IACF,IAAA,EAAM,iKAAA;AAAA,IACN,MAAA,EACE,gLAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,+EAAA;AAAA,IACP,KAAA,EACE,4FAAA;AAAA,IACF,OAAA,EACE,4OAAA;AAAA,IACF,KAAA,EACE,yLAAA;AAAA,IACF,IAAA,EAAM,qLAAA;AAAA,IACN,MAAA,EACE,oNAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,yEAAA;AAAA,IACP,KAAA,EAAO,sFAAA;AAAA,IACP,OAAA,EACE,8NAAA;AAAA,IACF,KAAA,EACE,2KAAA;AAAA,IACF,IAAA,EAAM,2KAAA;AAAA,IACN,MAAA,EACE,kMAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,mEAAA;AAAA,IACP,KAAA,EAAO,gFAAA;AAAA,IACP,OAAA,EACE,gNAAA;AAAA,IACF,KAAA,EACE,6JAAA;AAAA,IACF,IAAA,EAAM,iKAAA;AAAA,IACN,MAAA,EACE,gLAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EACE,4KAAA;AAAA,IACF,KAAA,EACE,yLAAA;AAAA,IACF,OAAA,EACE,6KAAA;AAAA,IACF,KAAA,EACE,8JAAA;AAAA,IACF,IAAA,EAAM,mKAAA;AAAA,IACN,MAAA,EACE,4KAAA;AAAA,IACF,UAAA,EACE;AAAA,GACJ;AAAA,EACA,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,mBAAA,GAAsB,CAAC,OAAA,EAAwB,OAAA,KAAqB;AAC/E,EAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,OAAO,CAAA,IAAK,qBAAA,CAAsB,OAAA;AAChF,EAAA,OAAO,eAAA,CAAgB,OAAO,CAAA,IAAK,eAAA,CAAgB,KAAA;AACrD,CAAA;AAEO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAA+B;AAClE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAMA,cAAa,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,GAAI,OAAA,GAAU,OAAO,OAAO,CAAA,CAAA;AACxE,IAAA,OAAO,CAAC,KAAA,EAAOA,WAAU,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACrC;AAEA,EAAA,MAAM,CAAC,OAAA,EAAS,YAAY,CAAA,GAAI,IAAA;AAChC,EAAA,MAAM,iBAAA,GAAoB,QAAQ,IAAA,EAAK;AACvC,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,iBAAiD,CAAA,IAAK;AAAA,IACxF;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,aAAa,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,WAAA,CAAY,KAAK,GAAG,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,GAAI,QAAA,GAAW,OAAO,QAAQ,CAAA,CAAA;AAC3E,EAAA,OAAO,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI,CAAC,GAAG,WAAA,EAAa,UAAU,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACnE,CAAA;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,SAAA,EAAW,qBAAA;AAAA,EACX,KAAA,EAAO,qBAAA;AAAA,EACP,MAAA,EAAQ,qBAAA;AAAA,EACR,KAAA,EAAO,mBAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,SAAA,EAAW,2BAAA;AAAA,EACX,KAAA,EAAO,6BAAA;AAAA,EACP,MAAA,EAAQ,6BAAA;AAAA,EACR,KAAA,EAAO,6BAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,uBAAA,GAA0B;AAAA,EACrC,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;ACpKA,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,CACE;AAAA,IACE,OAAA,GAAU,OAAA;AAAA,IACV,KAAA,GAAQ,SAAA;AAAA,IACR,IAAA,GAAO,QAAA;AAAA,IACP,KAAA,GAAQ,KAAA;AAAA,IACR,OAAA,GAAU,KAAA;AAAA,IACV,WAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,YAAY,EAAA,IAAM,QAAA;AACxB,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,QAAA,GAAY,mBAAA,CAAoB,IAAI,CAAA,IAAK,oBAAoB,MAAA,GAAW,WAAA,CAAY,IAAI,CAAA,IAAK,WAAA,CAAY,MAAA;AAC3H,IAAA,MAAM,gBAAgB,QAAA,GAAY,uBAAA,CAAwB,IAAI,CAAA,IAAK,wBAAwB,MAAA,GAAU,MAAA;AACrG,IAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,GAAW,IAAA;AACtC,IAAA,MAAM,iBAAiB,SAAA,KAAc,QAAA;AACrC,IAAA,MAAM,aAAa,QAAA,IAAY,OAAA;AAC/B,IAAA,MAAM,UAAU,OAAA,IAAW,IAAA,KAAS,QAAA,KAAa,CAAC,aAAa,gBAAA,GAAmB,gBAAA;AAClF,IAAA,MAAM,iBAAA,GAAoB,qBAAqB,IAAI,CAAA;AACnD,IAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,iBAAA,IAAqB,CAAC,OAAO,CAAA;AAC9D,IAAA,MAAM,qBAAA,GAAwB,WAAA,KAAgB,MAAA,IAAa,WAAA,KAAgB,IAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,QAAA,GAAW,IAAA,GAAO,OAAA,IAAW,wBAAwB,WAAA,GAAc,QAAA;AACnF,IAAA,MAAM,aAAA,GAAA,CAAiB,OAAA,IAAW,gBAAA,KAAqB,OAAA,CAAQ,OAAO,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,gBAAgB,OAAA,GAAU,MAAA;AAC3C,IAAA,MAAM,mBAAmB,OAAA,GAAU,OAAA,CAAQ,0BAAA,EAA4B,cAAA,EAAgB,aAAa,CAAA,GAAI,MAAA;AACxG,IAAA,MAAM,gBAAgB,gBAAA,GAAmB,OAAA,CAAQ,cAAA,EAAgB,aAAA,EAAe,iBAAiB,CAAA,GAAI,MAAA;AAErG,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACE,GAAG,IAAA;AAAA,QACJ,IAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA,EAAU,iBAAiB,UAAA,GAAa,MAAA;AAAA,QACxC,eAAA,EAAe,CAAC,cAAA,GAAiB,UAAA,GAAa,MAAA;AAAA,QAC9C,SAAA,EAAW,QAAQ,IAAA,EAAM,MAAA,EAAQ,cAAc,SAAA,EAAW,UAAA,EAAY,UAAU,SAAS,CAAA;AAAA,QACzF,gBAAc,OAAA,IAAW,MAAA;AAAA,QACzB,aAAW,OAAA,IAAW,MAAA;AAAA,QAErB,QAAA,EAAA;AAAA,UAAA,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,gBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,UACvD,iCAAiB,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,aAAA,EAAe,eAAW,IAAA,EAAC,CAAA;AAAA,UAC1D;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,QAAA;AAEzB,IAAM,eAAA,GAAkB,CAAC,OAAA,KAAyE;AAChG,EAAA,IAAI,CAAO,KAAA,CAAA,cAAA,CAAe,OAAO,CAAA,EAAG;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAc,OAAA,CAAQ,IAAA;AAC5B,EAAA,OAAO,OAAA,CAAQ,IAAA,KAAS,UAAA,IAAc,WAAA,CAAY,gBAAgB,UAAA,CAAW,WAAA;AAC/E,CAAA;AAEA,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA,CAA6C,CAAC,KAAA,EAAO,GAAA,KAAQ;AACrF,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,GAAQ,KAAA;AAAA,IACR,QAAA,GAAW,KAAA;AAAA,IACX,OAAA,GAAU,KAAA;AAAA,IACV,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,GAAW,IAAA;AAAA,IACX,SAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,WAAW,4BAAA,GAA+B,iCAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,QAAQ,qBAAA,GAAwB,MAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,QAAA,GAClB,QAAA,GACE,6GAAA,GACA,6GAAA,GACF,MAAA;AAEJ,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAA4C;AAChE,IAAA,IAAI,CAAO,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAa,mBAAa,KAAA,EAAO;AAAA,QAC/B,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,OAAA,IAAW,OAAA;AAAA,QAChC,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,KAAA;AAAA,QAC5B,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,IAAA,IAAQ,IAAA;AAAA,QAC1B,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,KAAA;AAAA,QAC5B,QAAA,EAAU,KAAA,CAAM,KAAA,CAAM,QAAA,IAAY,QAAA;AAAA,QAClC,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,OAAA,IAAW,OAAA;AAAA,QAChC,QAAA,EAAU,KAAA,CAAM,KAAA,CAAM,QAAA,IAAY;AAAA,OACnC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,OAAO,KAAA,CAAM,UAAU,QAAA,IAAY,UAAA,IAAc,MAAM,KAAA,EAAO;AAC/E,MAAA,MAAM,iBAAuB,KAAA,CAAA,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,UAA6B,YAAY,CAAA;AAC/F,MAAA,IAAI,cAAA,KAAmB,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AAC3C,QAAA,OAAa,KAAA,CAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAW,cAAc,CAAA;AAAA,MAC5D;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAyB,KAAA,CAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,YAAY,CAAA;AAElE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MACA,MAAM,IAAA,IAAQ,OAAA;AAAA,MACd,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAW,UAAA,EAAY,eAAe,SAAS,CAAA;AAAA,MAEjE,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AAED,WAAA,CAAY,WAAA,GAAc,cAAA;AAE1B,IAAM,MAAA,GAAS,UAAA;AACf,MAAA,CAAO,KAAA,GAAQ,WAAA;AAEf,IAAO,cAAA,GAAQ","file":"chunk-HVGCLUW2.js","sourcesContent":["import { iconBaseClasses } from '@lindle/linoardo/globals';\nimport type { GlobalSize, Palette } from '@lindle/linoardo/global.types';\nimport type { ButtonProps, ButtonVariant } from './types.button';\n\nexport const base =\n 'btn-base focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900 rounded-lg transition-colors duration-200 font-medium disabled:opacity-50 disabled:cursor-not-allowed';\n\nconst blackAndWhitePaletteClasses = {\n solid: 'bg-black text-white hover:bg-black/90 focus-visible:ring-black/40 focus-visible:ring-offset-white dark:bg-white dark:text-black dark:hover:bg-white/90 dark:focus-visible:ring-white/40 dark:focus-visible:ring-offset-gray-900',\n outline:\n 'border-2 border-black text-black bg-white hover:bg-black hover:text-white focus-visible:ring-black/40 focus-visible:ring-offset-white dark:border-white dark:text-white dark:bg-transparent dark:hover:bg-white dark:hover:text-black dark:focus-visible:ring-white/40 dark:focus-visible:ring-offset-gray-900',\n ghost:\n 'text-black bg-neutral-200 hover:bg-neutral-300 focus-visible:ring-black/20 border border-transparent dark:text-white dark:bg-neutral-800 dark:hover:bg-neutral-700',\n text:\n 'bg-transparent text-black hover:bg-neutral-200 focus-visible:ring-black/20 underline-offset-2 border border-transparent dark:text-white dark:hover:bg-neutral-800',\n filled:\n 'bg-black/10 text-black border border-black/30 hover:bg-black/20 focus-visible:ring-black/20 dark:bg-white/10 dark:text-white dark:border-white/30 dark:hover:bg-white/20',\n underlined:\n 'bg-transparent text-black border border-transparent underline decoration-2 underline-offset-4 hover:bg-neutral-200 focus-visible:ring-black/20 dark:text-white dark:hover:bg-neutral-800',\n sharp:\n 'bg-black text-white rounded-none hover:bg-black/90 focus-visible:ring-black/40 dark:bg-white dark:text-black dark:hover:bg-white/90 dark:focus-visible:ring-white/40'\n} satisfies Record<ButtonVariant, string>;\n\nconst paletteVariantClasses: Record<Palette, Record<ButtonVariant, string>> = {\n primary: {\n solid: 'bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary',\n sharp: 'rounded-none bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary',\n outline:\n 'border border-primary text-primary bg-white hover:bg-primary hover:text-white focus-visible:ring-primary dark:bg-gray-900 dark:text-primary dark:border-primary/60 dark:hover:bg-primary dark:hover:text-white',\n ghost:\n 'text-primary bg-primary/10 hover:bg-primary/20 focus-visible:ring-primary/40 border border-transparent dark:bg-primary/20 dark:hover:bg-primary/30',\n text: 'bg-transparent text-primary hover:bg-primary/10 focus-visible:ring-primary/30 underline-offset-2 border border-transparent dark:hover:bg-primary/20',\n filled:\n 'bg-primary/15 text-primary border border-primary/30 hover:bg-primary/25 focus-visible:ring-primary/25 dark:bg-primary/20 dark:border-primary/40 dark:hover:bg-primary/30',\n underlined:\n 'bg-transparent text-primary border border-transparent underline decoration-2 underline-offset-4 hover:bg-primary/5 focus-visible:ring-primary/25 dark:hover:bg-primary/15',\n },\n neutral: {\n solid: 'bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500',\n sharp: 'rounded-none bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500',\n outline:\n 'border border-gray-400 text-gray-700 bg-white hover:bg-gray-700 hover:text-white focus-visible:ring-gray-400 dark:border-gray-600 dark:text-gray-200 dark:bg-gray-900 dark:hover:bg-gray-200 dark:hover:text-gray-900',\n ghost:\n 'text-gray-700 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-300 border border-transparent dark:text-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700',\n text: 'bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent dark:text-gray-200 dark:hover:bg-gray-800',\n filled:\n 'bg-gray-200 text-gray-900 border border-gray-300 hover:bg-gray-300 focus-visible:ring-gray-300 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700 dark:hover:bg-gray-700',\n underlined:\n 'bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-300 dark:text-gray-100 dark:hover:bg-gray-800',\n },\n info: {\n solid: 'bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400',\n sharp: 'rounded-none bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400',\n outline:\n 'border border-sky-500 text-sky-600 bg-white hover:bg-sky-500 hover:text-white focus-visible:ring-sky-400 dark:bg-gray-900 dark:text-sky-400 dark:border-sky-500/70 dark:hover:bg-sky-500 dark:hover:text-white',\n ghost:\n 'text-sky-600 bg-sky-100 hover:bg-sky-200 focus-visible:ring-sky-300 border border-transparent dark:text-sky-300 dark:bg-sky-900/40 dark:hover:bg-sky-900/55',\n text: 'bg-transparent text-sky-600 hover:bg-sky-100 focus-visible:ring-sky-200 underline-offset-2 border border-transparent dark:text-sky-300 dark:hover:bg-sky-900/35',\n filled:\n 'bg-sky-100 text-sky-700 border border-sky-200 hover:bg-sky-200 focus-visible:ring-sky-200 dark:bg-sky-900/35 dark:text-sky-200 dark:border-sky-700/60 dark:hover:bg-sky-900/50',\n underlined:\n 'bg-transparent text-sky-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-sky-50 focus-visible:ring-sky-200 dark:text-sky-300 dark:hover:bg-sky-900/30',\n },\n success: {\n solid: 'bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400',\n sharp:\n 'rounded-none bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400',\n outline:\n 'border border-emerald-500 text-emerald-600 bg-white hover:bg-emerald-500 hover:text-white focus-visible:ring-emerald-400 dark:bg-gray-900 dark:text-emerald-400 dark:border-emerald-500/70 dark:hover:bg-emerald-500 dark:hover:text-white',\n ghost:\n 'text-emerald-600 bg-emerald-100 hover:bg-emerald-200 focus-visible:ring-emerald-300 border border-transparent dark:text-emerald-300 dark:bg-emerald-900/35 dark:hover:bg-emerald-900/50',\n text: 'bg-transparent text-emerald-600 hover:bg-emerald-100 focus-visible:ring-emerald-200 underline-offset-2 border border-transparent dark:text-emerald-300 dark:hover:bg-emerald-900/30',\n filled:\n 'bg-emerald-100 text-emerald-700 border border-emerald-200 hover:bg-emerald-200 focus-visible:ring-emerald-200 dark:bg-emerald-900/35 dark:text-emerald-200 dark:border-emerald-700/60 dark:hover:bg-emerald-900/50',\n underlined:\n 'bg-transparent text-emerald-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-emerald-50 focus-visible:ring-emerald-200 dark:text-emerald-300 dark:hover:bg-emerald-900/30',\n },\n warning: {\n solid: 'bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400',\n sharp: 'rounded-none bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400',\n outline:\n 'border border-amber-500 text-amber-600 bg-white hover:bg-amber-500 hover:text-white focus-visible:ring-amber-400 dark:bg-gray-900 dark:text-amber-300 dark:border-amber-500/70 dark:hover:bg-amber-500 dark:hover:text-white',\n ghost:\n 'text-amber-600 bg-amber-100 hover:bg-amber-200 focus-visible:ring-amber-300 border border-transparent dark:text-amber-300 dark:bg-amber-900/35 dark:hover:bg-amber-900/50',\n text: 'bg-transparent text-amber-600 hover:bg-amber-100 focus-visible:ring-amber-200 underline-offset-2 border border-transparent dark:text-amber-300 dark:hover:bg-amber-900/30',\n filled:\n 'bg-amber-100 text-amber-800 border border-amber-200 hover:bg-amber-200 focus-visible:ring-amber-200 dark:bg-amber-900/35 dark:text-amber-200 dark:border-amber-700/60 dark:hover:bg-amber-900/50',\n underlined:\n 'bg-transparent text-amber-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-amber-50 focus-visible:ring-amber-200 dark:text-amber-300 dark:hover:bg-amber-900/30',\n },\n danger: {\n solid: 'bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400',\n sharp: 'rounded-none bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400',\n outline:\n 'border border-red-500 text-red-600 bg-white hover:bg-red-500 hover:text-white focus-visible:ring-red-400 dark:bg-gray-900 dark:text-red-400 dark:border-red-500/70 dark:hover:bg-red-500 dark:hover:text-white',\n ghost:\n 'text-red-600 bg-red-100 hover:bg-red-200 focus-visible:ring-red-300 border border-transparent dark:text-red-300 dark:bg-red-900/35 dark:hover:bg-red-900/50',\n text: 'bg-transparent text-red-600 hover:bg-red-100 focus-visible:ring-red-200 underline-offset-2 border border-transparent dark:text-red-300 dark:hover:bg-red-900/30',\n filled:\n 'bg-red-100 text-red-700 border border-red-200 hover:bg-red-200 focus-visible:ring-red-200 dark:bg-red-900/35 dark:text-red-200 dark:border-red-700/60 dark:hover:bg-red-900/50',\n underlined:\n 'bg-transparent text-red-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-red-50 focus-visible:ring-red-200 dark:text-red-300 dark:hover:bg-red-900/30',\n },\n surface: {\n solid:\n 'bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200 dark:bg-gray-900 dark:text-gray-100 dark:border-gray-700 dark:hover:bg-gray-800',\n sharp:\n 'rounded-none bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200 dark:bg-gray-900 dark:text-gray-100 dark:border-gray-700 dark:hover:bg-gray-800',\n outline:\n 'border border-gray-300 text-gray-900 bg-white hover:bg-gray-100 focus-visible:ring-gray-200 dark:border-gray-600 dark:text-gray-100 dark:bg-gray-900 dark:hover:bg-gray-800',\n ghost:\n 'text-gray-900 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-200 border border-transparent dark:text-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700',\n text: 'bg-transparent text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent dark:text-gray-100 dark:hover:bg-gray-800',\n filled:\n 'bg-gray-50 text-gray-900 border border-gray-200 hover:bg-white focus-visible:ring-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700 dark:hover:bg-gray-700',\n underlined:\n 'bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-200 dark:text-gray-100 dark:hover:bg-gray-800',\n },\n bw: blackAndWhitePaletteClasses\n};\n\nexport const resolveVariantClass = (variant: ButtonVariant, palette: Palette) => {\n const paletteVariants = paletteVariantClasses[palette] ?? paletteVariantClasses.primary;\n return paletteVariants[variant] ?? paletteVariants.solid;\n};\n\nexport const resolveIconClassName = (icon?: ButtonProps['icon']) => {\n if (!icon) {\n return undefined;\n }\n\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.includes(' ')) {\n return trimmed;\n }\n\n const normalized = trimmed.startsWith('mdi-') ? trimmed : `mdi-${trimmed}`;\n return ['mdi', normalized].join(' ');\n }\n\n const [library, providedName] = icon;\n const normalizedLibrary = library.trim();\n const baseClasses = iconBaseClasses[normalizedLibrary as keyof typeof iconBaseClasses] ?? [\n normalizedLibrary\n ];\n const iconName = providedName.trim();\n if (!iconName) {\n return baseClasses.join(' ');\n }\n\n const normalized = iconName.startsWith('mdi-') ? iconName : `mdi-${iconName}`;\n return Array.from(new Set([...baseClasses, normalized])).join(' ');\n};\n\nexport const sizeClasses = {\n 'x-small': 'px-2.5 py-1 text-xs',\n small: 'px-3 py-1.5 text-sm',\n medium: 'px-4 py-2 text-base',\n large: 'px-6 py-3 text-lg',\n 'x-large': 'px-7 py-3.5 text-xl'\n} satisfies Record<GlobalSize, string>;\n\nexport const iconOnlySizeClasses = {\n 'x-small': 'p-0 text-xs aspect-square',\n small: 'p-2.5 text-sm aspect-square',\n medium: 'p-3 text-base aspect-square',\n large: 'p-3.5 text-lg aspect-square',\n 'x-large': 'p-4 text-xl aspect-square'\n} satisfies Record<GlobalSize, string>;\n\nexport const iconOnlyIconSizeClasses = {\n 'x-small': 'text-sm',\n small: 'text-base',\n medium: 'text-lg',\n large: 'text-xl',\n 'x-large': 'text-2xl'\n} satisfies Record<GlobalSize, string>;\n","import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ButtonGroupProps, ButtonProps } from './types.button';\nimport { base, iconOnlyIconSizeClasses, iconOnlySizeClasses, resolveIconClassName, resolveVariantClass, sizeClasses } from './states.button';\n\ntype PolymorphicRef<T extends React.ElementType> = React.ComponentPropsWithRef<T>['ref'];\ntype ButtonBaseComponent = {\n <T extends React.ElementType = 'button'>(props: ButtonProps<T> & { ref?: PolymorphicRef<T> }): React.ReactElement | null;\n displayName?: string;\n};\ntype ButtonComponent = ButtonBaseComponent & {\n Group: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;\n};\n\n/**\n * Containment button supporting variant, size, block layout and loading states.\n */\nconst ButtonBase = React.forwardRef(\n <T extends React.ElementType = 'button'>(\n {\n variant = 'solid',\n color = 'primary',\n size = 'medium',\n block = false,\n loading = false,\n loadingText,\n icon,\n iconOnly = false,\n className,\n children,\n disabled,\n onClick,\n type,\n as,\n ...rest\n }: ButtonProps<T>,\n ref: React.ForwardedRef<unknown>\n ) => {\n const Component = as ?? 'button';\n const variantClass = resolveVariantClass(variant, color);\n const sizeClass = iconOnly ? (iconOnlySizeClasses[size] ?? iconOnlySizeClasses.medium) : (sizeClasses[size] ?? sizeClasses.medium);\n const iconSizeClass = iconOnly ? (iconOnlyIconSizeClasses[size] ?? iconOnlyIconSizeClasses.medium) : undefined;\n const blockClass = block ? 'w-full' : null;\n const isNativeButton = Component === 'button';\n const isDisabled = disabled || loading;\n const cursor = (onClick || type === 'submit') && !isDisabled ? 'cursor-pointer' : 'cursor-default';\n const resolvedIconClass = resolveIconClassName(icon);\n const shouldRenderIcon = Boolean(resolvedIconClass && !loading);\n const isLoadingTextProvided = loadingText !== undefined && loadingText !== null;\n const content = iconOnly ? null : loading && isLoadingTextProvided ? loadingText : children;\n const hasDecorators = (loading || shouldRenderIcon) && Boolean(content);\n const gapClass = hasDecorators ? 'gap-2' : undefined;\n const loadingIconClass = loading ? twMerge('mdi mdi-loading mdi-spin', 'leading-none', iconSizeClass) : undefined;\n const iconClassName = shouldRenderIcon ? twMerge('leading-none', iconSizeClass, resolvedIconClass) : undefined;\n\n return (\n <Component\n {...rest}\n type={type}\n ref={ref as PolymorphicRef<T>}\n onClick={onClick}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-disabled={!isNativeButton ? isDisabled : undefined}\n className={twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className)}\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n >\n {loading && <i className={loadingIconClass} aria-hidden />}\n {iconClassName && <i className={iconClassName} aria-hidden />}\n {content}\n </Component>\n );\n }\n) as ButtonBaseComponent;\n\nButtonBase.displayName = 'Button';\n\nconst isButtonElement = (element: React.ReactNode): element is React.ReactElement<ButtonProps> => {\n if (!React.isValidElement(element)) {\n return false;\n }\n\n const elementType = element.type as { displayName?: string };\n return element.type === ButtonBase || elementType.displayName === ButtonBase.displayName;\n};\n\nconst ButtonGroup = React.forwardRef<HTMLDivElement, ButtonGroupProps>((props, ref) => {\n const {\n variant,\n color,\n size,\n block = false,\n disabled = false,\n loading = false,\n iconOnly,\n vertical = false,\n attached = true,\n className,\n role,\n children,\n ...rest\n } = props;\n\n const groupBase = vertical ? 'inline-flex w-fit flex-col' : 'inline-flex w-fit items-stretch';\n const blockClass = block ? 'w-full [&>*]:flex-1' : undefined;\n const attachedClass = attached\n ? vertical\n ? '[&>*:not(:first-child)]:-mt-px [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:rounded-b-none'\n : '[&>*:not(:first-child)]:-ml-px [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:rounded-r-none'\n : undefined;\n\n const enhanceChild = (child: React.ReactNode): React.ReactNode => {\n if (!React.isValidElement(child)) {\n return child;\n }\n\n if (isButtonElement(child)) {\n return React.cloneElement(child, {\n variant: child.props.variant ?? variant,\n color: child.props.color ?? color,\n size: child.props.size ?? size,\n block: child.props.block ?? block,\n disabled: child.props.disabled ?? disabled,\n loading: child.props.loading ?? loading,\n iconOnly: child.props.iconOnly ?? iconOnly\n });\n }\n\n if (child.props && typeof child.props === 'object' && 'children' in child.props) {\n const nestedChildren = React.Children.map(child.props.children as React.ReactNode, enhanceChild);\n if (nestedChildren !== child.props.children) {\n return React.cloneElement(child, undefined, nestedChildren);\n }\n }\n\n return child;\n };\n\n const resolvedChildren = React.Children.map(children, enhanceChild);\n\n return (\n <div\n {...rest}\n ref={ref}\n role={role ?? 'group'}\n className={twMerge(groupBase, blockClass, attachedClass, className)}\n >\n {resolvedChildren}\n </div>\n );\n});\n\nButtonGroup.displayName = 'Button.Group';\n\nconst Button = ButtonBase as ButtonComponent;\nButton.Group = ButtonGroup;\n\nexport default Button;\n"]}