@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/helpers/randomStr.ts","../src/Form/TextArea/index.tsx"],"names":["marked","React","TurndownService","twMerge","useEditor","StarterKit","jsxs","Fragment","jsx","EditorContent"],"mappings":"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","file":"textarea.cjs","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","'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"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import react__default from 'react';
|
|
2
|
+
|
|
3
|
+
type TextAreaVariant = 'standard' | 'filled' | 'outlined';
|
|
4
|
+
type TextAreaMode = 'simple' | 'advanced';
|
|
5
|
+
type TextAreaView = 'editor' | 'view';
|
|
6
|
+
type TextAreaProps = react__default.TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
7
|
+
variant?: TextAreaVariant;
|
|
8
|
+
label?: react__default.ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Class applied to the outer wrapper around the textarea + label.
|
|
11
|
+
*/
|
|
12
|
+
wrapperClassName?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Allow switching between simple / advanced modes (if false, component stays in simple mode).
|
|
15
|
+
*/
|
|
16
|
+
allowModeSwitch?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Mode used when rendering (simple vs advanced). Defaults to simple when switching is disabled.
|
|
19
|
+
*/
|
|
20
|
+
mode?: TextAreaMode;
|
|
21
|
+
/**
|
|
22
|
+
* Viewing state for the advanced area.
|
|
23
|
+
*/
|
|
24
|
+
view?: TextAreaView;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const TextArea: react__default.FC<TextAreaProps>;
|
|
28
|
+
|
|
29
|
+
export { TextArea as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import react__default from 'react';
|
|
2
|
+
|
|
3
|
+
type TextAreaVariant = 'standard' | 'filled' | 'outlined';
|
|
4
|
+
type TextAreaMode = 'simple' | 'advanced';
|
|
5
|
+
type TextAreaView = 'editor' | 'view';
|
|
6
|
+
type TextAreaProps = react__default.TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
7
|
+
variant?: TextAreaVariant;
|
|
8
|
+
label?: react__default.ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Class applied to the outer wrapper around the textarea + label.
|
|
11
|
+
*/
|
|
12
|
+
wrapperClassName?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Allow switching between simple / advanced modes (if false, component stays in simple mode).
|
|
15
|
+
*/
|
|
16
|
+
allowModeSwitch?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Mode used when rendering (simple vs advanced). Defaults to simple when switching is disabled.
|
|
19
|
+
*/
|
|
20
|
+
mode?: TextAreaMode;
|
|
21
|
+
/**
|
|
22
|
+
* Viewing state for the advanced area.
|
|
23
|
+
*/
|
|
24
|
+
view?: TextAreaView;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const TextArea: react__default.FC<TextAreaProps>;
|
|
28
|
+
|
|
29
|
+
export { TextArea as default };
|
package/dist/textarea.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"textarea.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lindle/linoardo",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "",
|
|
@@ -100,6 +100,26 @@
|
|
|
100
100
|
"import": "./dist/card.js",
|
|
101
101
|
"require": "./dist/card.cjs"
|
|
102
102
|
},
|
|
103
|
+
"./block": {
|
|
104
|
+
"types": "./dist/block.d.ts",
|
|
105
|
+
"import": "./dist/block.js",
|
|
106
|
+
"require": "./dist/block.cjs"
|
|
107
|
+
},
|
|
108
|
+
"./app-bar": {
|
|
109
|
+
"types": "./dist/app-bar.d.ts",
|
|
110
|
+
"import": "./dist/app-bar.js",
|
|
111
|
+
"require": "./dist/app-bar.cjs"
|
|
112
|
+
},
|
|
113
|
+
"./hero": {
|
|
114
|
+
"types": "./dist/hero.d.ts",
|
|
115
|
+
"import": "./dist/hero.js",
|
|
116
|
+
"require": "./dist/hero.cjs"
|
|
117
|
+
},
|
|
118
|
+
"./profileCard": {
|
|
119
|
+
"types": "./dist/profileCard.d.ts",
|
|
120
|
+
"import": "./dist/profileCard.js",
|
|
121
|
+
"require": "./dist/profileCard.cjs"
|
|
122
|
+
},
|
|
103
123
|
"./masonry": {
|
|
104
124
|
"types": "./dist/masonry.d.ts",
|
|
105
125
|
"import": "./dist/masonry.js",
|
|
@@ -140,6 +160,21 @@
|
|
|
140
160
|
"import": "./dist/select.js",
|
|
141
161
|
"require": "./dist/select.cjs"
|
|
142
162
|
},
|
|
163
|
+
"./badge": {
|
|
164
|
+
"types": "./dist/badge.d.ts",
|
|
165
|
+
"import": "./dist/badge.js",
|
|
166
|
+
"require": "./dist/badge.cjs"
|
|
167
|
+
},
|
|
168
|
+
"./alert": {
|
|
169
|
+
"types": "./dist/alert.d.ts",
|
|
170
|
+
"import": "./dist/alert.js",
|
|
171
|
+
"require": "./dist/alert.cjs"
|
|
172
|
+
},
|
|
173
|
+
"./textarea": {
|
|
174
|
+
"types": "./dist/textarea.d.ts",
|
|
175
|
+
"import": "./dist/textarea.js",
|
|
176
|
+
"require": "./dist/textarea.cjs"
|
|
177
|
+
},
|
|
143
178
|
"./styles.css": "./dist/styles.css"
|
|
144
179
|
},
|
|
145
180
|
"scripts": {
|
package/readme.md
CHANGED
|
@@ -1 +1,47 @@
|
|
|
1
|
+
# Linoardo
|
|
2
|
+
|
|
3
|
+
Linoardo is a React UI component library. It is built on Tailwind CSS, includes core building blocks (Button, Input, Menu, Dialog, etc.), and lets you easily override the color palette via CSS variables.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm i @lindle/linoardo
|
|
9
|
+
# or
|
|
10
|
+
pnpm add @lindle/linoardo
|
|
11
|
+
# or
|
|
12
|
+
yarn add @lindle/linoardo
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
1. Import the library styles.
|
|
18
|
+
2. Import the components you want to use.
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import '@lindle/linoardo/styles.css';
|
|
22
|
+
import { Button } from '@lindle/linoardo';
|
|
23
|
+
|
|
24
|
+
export default function App() {
|
|
25
|
+
return <Button color='primary'>Action</Button>;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Initial values (CSS variables)
|
|
30
|
+
|
|
31
|
+
The primary color is controlled by the `--color-primary` variable. By default it is set to `oklch(0.62 0.13 250)`, but you can override it in your global styles.
|
|
32
|
+
|
|
33
|
+
```css
|
|
34
|
+
:root {
|
|
35
|
+
--color-primary: #0ea5e9;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If you want to scope the color locally, set it on a wrapper element:
|
|
40
|
+
|
|
41
|
+
```css
|
|
42
|
+
.app-theme {
|
|
43
|
+
--color-primary: #22c55e;
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
1
47
|
docker build --no-cache -t linoardo-storybook:latest .
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Feedback/Notification/index.tsx"],"names":["normalized"],"mappings":"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","file":"chunk-67USTSXI.js","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type {\n NotificationArgs,\n NotificationPlacement,\n NotificationProps,\n NotificationType,\n NotificationVariant\n} from './types.notification';\nimport type { GlobalVariant, PropIcon } from '../../global.types';\n\nconst placementClasses: Record<NotificationPlacement, string> = {\n topLeft: 'top-4 left-4 items-start',\n topRight: 'top-4 right-4 items-end',\n bottomLeft: 'bottom-4 left-4 items-start',\n bottomRight: 'bottom-4 right-4 items-end'\n};\n\nconst typeIconMap: Record<NotificationType, string> = {\n info: 'mdi-information-outline',\n success: 'mdi-check-circle-outline',\n warning: 'mdi-alert-outline',\n error: 'mdi-close-circle-outline'\n};\n\nconst typeAccentMap: Record<NotificationType, string> = {\n info: 'bg-sky-50 text-sky-600',\n success: 'bg-emerald-50 text-emerald-600',\n warning: 'bg-amber-50 text-amber-700',\n error: 'bg-red-50 text-red-600'\n};\n\nconst typeTone: Record<\n NotificationType,\n { bg: string; text: string; border: string; iconBg: string; iconText: string }\n> = {\n info: {\n bg: 'bg-sky-50',\n text: 'text-sky-900',\n border: 'border-sky-200',\n iconBg: 'bg-sky-100',\n iconText: 'text-sky-600'\n },\n success: {\n bg: 'bg-emerald-50',\n text: 'text-emerald-900',\n border: 'border-emerald-200',\n iconBg: 'bg-emerald-100',\n iconText: 'text-emerald-600'\n },\n warning: {\n bg: 'bg-amber-50',\n text: 'text-amber-900',\n border: 'border-amber-200',\n iconBg: 'bg-amber-100',\n iconText: 'text-amber-700'\n },\n error: {\n bg: 'bg-red-50',\n text: 'text-red-900',\n border: 'border-red-200',\n iconBg: 'bg-red-100',\n iconText: 'text-red-600'\n }\n};\n\nconst resolveVariantClass = (variant: NotificationVariant, type?: NotificationType) => {\n const tone = type ? typeTone[type] : undefined;\n switch (variant) {\n case 'filled':\n return twMerge(\n tone?.bg ?? 'bg-primary/10',\n tone?.text ?? 'text-primary',\n 'border border-transparent shadow-none'\n );\n case 'outline':\n return twMerge(\n 'bg-white/90',\n tone?.text ?? 'text-gray-900',\n tone?.border ?? 'border-primary/20',\n 'border-[1.5px]'\n );\n case 'ghost':\n return twMerge(\n 'bg-transparent shadow-none border border-transparent',\n tone?.text ?? 'text-gray-900'\n );\n case 'solid':\n default:\n return 'bg-white/95 text-gray-900 border border-gray-200';\n }\n};\n\nconst resolveIconClassName = (icon?: PropIcon | string) => {\n if (!icon) return undefined;\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n if (!trimmed) return undefined;\n if (trimmed.includes(' ')) return trimmed;\n const normalized = trimmed.startsWith('mdi-') ? trimmed : `mdi-${trimmed}`;\n return `mdi ${normalized}`;\n }\n const [library, iconName] = icon;\n const normalized = iconName?.startsWith('mdi-') ? iconName : `mdi-${iconName}`;\n return `mdi ${library} ${normalized}`.trim();\n};\n\nconst resolveIconNode = (icon?: React.ReactNode | PropIcon, fallbackClassName?: string) => {\n if (React.isValidElement(icon)) return icon;\n const iconClassName = resolveIconClassName(icon as PropIcon) ?? fallbackClassName;\n if (!iconClassName) return null;\n const hasBase = iconClassName.split(' ').some(token => token.trim() === 'mdi');\n const hasGlyph = iconClassName.includes('mdi-');\n const finalClassName = hasBase && hasGlyph ? iconClassName : `mdi ${iconClassName}`.trim();\n return <i className={finalClassName} aria-hidden />;\n};\n\nconst NotificationCard: React.FC<{\n item: NotificationArgs & { key: React.Key };\n}> = ({ item }) => {\n const {\n key,\n message,\n description,\n icon,\n closeIcon,\n closable = true,\n btn,\n onClick,\n className,\n style,\n role = 'status',\n type,\n variant = 'solid',\n ...rest\n } = item;\n\n const hasMessage = message !== undefined && message !== null;\n const hasDescription = description !== undefined && description !== null;\n const hasContent = hasMessage || hasDescription;\n const accentClass = type ? typeAccentMap[type] : undefined;\n const iconNode = resolveIconNode(icon, type ? `mdi ${typeIconMap[type]}` : undefined);\n const closeIconNode = resolveIconNode(closeIcon, 'mdi mdi-close');\n const variantClass = resolveVariantClass(variant as NotificationVariant, type);\n const toneIconBg = type ? typeTone[type]?.iconBg : undefined;\n const toneIconText = type ? typeTone[type]?.iconText : undefined;\n\n return (\n <article\n {...rest}\n role={role}\n className={twMerge(\n 'pointer-events-auto flex w-88 max-w-[calc(100vw-2.5rem)] gap-3 rounded-2xl p-4 shadow-xl ring-1 ring-black/5 backdrop-blur-sm transition hover:-translate-y-0.5 hover:shadow-2xl focus:outline-none',\n 'dark:border-gray-800 dark:bg-gray-900/95 dark:text-gray-50 dark:ring-white/5',\n variantClass,\n className\n )}\n style={style}\n onClick={onClick}\n >\n {iconNode ? (\n <div\n className={twMerge(\n 'mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-xl text-xl',\n toneIconBg ?? accentClass ?? 'bg-primary/10',\n toneIconText ?? 'text-primary'\n )}\n >\n {iconNode}\n </div>\n ) : null}\n <div className='min-w-0 flex-1 space-y-1'>\n {hasContent ? (\n <div className='space-y-1'>\n {hasMessage ? (\n <div className='text-[15px] font-semibold leading-5 text-gray-900 dark:text-white'>\n {message}\n </div>\n ) : null}\n {hasDescription ? (\n <div className='text-sm leading-6 text-gray-600 dark:text-gray-300'>\n {description}\n </div>\n ) : null}\n </div>\n ) : null}\n {btn ? <div className='pt-1 text-sm'>{btn}</div> : null}\n </div>\n {closable ? (\n <button\n type='button'\n aria-label='Zavřít upozornění'\n className='-mr-1 -mt-1 h-8 w-8 shrink-0 rounded-full text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white'\n onClick={event => {\n event.stopPropagation();\n item.onClose?.();\n }}\n >\n {closeIconNode}\n </button>\n ) : null}\n </article>\n );\n};\n\nconst Notification: React.FC<NotificationProps> = ({\n items = [],\n placement = 'topRight',\n gap = 12,\n containerClassName,\n className,\n ...rest\n}) => {\n if (!items.length) return null;\n\n const grouped = new Map<NotificationPlacement, (NotificationArgs & { key: React.Key })[]>();\n items.forEach(item => {\n const resolvedKey = item.key ?? `notification-${item.message ?? Math.random()}`;\n const resolvedPlacement = item.placement ?? placement;\n const group = grouped.get(resolvedPlacement) ?? [];\n group.push({ ...item, key: resolvedKey });\n grouped.set(resolvedPlacement, group);\n });\n\n return (\n <>\n {Array.from(grouped.entries()).map(([groupPlacement, groupItems]) => (\n <div\n key={groupPlacement}\n className={twMerge(\n 'pointer-events-none fixed z-70 flex w-full max-w-[24rem] flex-col',\n placementClasses[groupPlacement],\n containerClassName,\n className\n )}\n style={{ gap: `${gap}px` }}\n {...rest}\n >\n {groupItems.map(item => (\n <NotificationCard key={item.key} item={item} />\n ))}\n </div>\n ))}\n </>\n );\n};\n\nexport type {\n NotificationArgs,\n NotificationPlacement,\n NotificationProps,\n NotificationType,\n NotificationVariant\n} from './types.notification';\nexport default Notification;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/helpers/randomStr.ts","../src/Form/Select/index.tsx"],"names":[],"mappings":"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","file":"chunk-SAGQYMS3.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","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { GlobalSize } from '@lindle/linoardo/global.types';\nimport type { InputVariant } from '../Input/types';\nimport type { SelectOption, SelectOptionObject, SelectProps } from './types.select';\nimport { generateString } from '../../utils/helpers/randomStr';\n\nconst baseClass =\n 'select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n outline:\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-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25',\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 underlined:\n 'rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n rounded:\n 'rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20'\n} satisfies Record<InputVariant, string>;\n\nconst sizeClasses = {\n 'x-small': { padding: 'pl-2 pr-8 py-2', text: 'text-xs' },\n small: { padding: 'pl-2.5 pr-9 py-2.5', text: 'text-sm' },\n medium: { padding: 'pl-3 pr-10 py-3', text: 'text-base' },\n large: { padding: 'pl-3.5 pr-11 py-3.5', text: 'text-lg' },\n 'x-large': { padding: 'pl-4 pr-12 py-4', text: 'text-xl' }\n} satisfies Record<GlobalSize, { padding: string; text: string }>;\n\nconst normalizeOption = (option: SelectOption): SelectOptionObject => {\n if (typeof option === 'string') {\n return { label: option, value: option };\n }\n\n return option;\n};\n\n/**\n * Native select styled with the same visual variants as Input.\n * Accepts options as string[] or { label, value }[] for convenience.\n */\nconst Select: React.FC<SelectProps> = ({\n options,\n label,\n placeholder,\n variant = 'outline',\n size = 'medium',\n className,\n wrapperClassName,\n id,\n name,\n multiple,\n onFocus,\n onBlur,\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n const selectId = id || name || generateString();\n const selectName = name || selectId;\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;\n const normalizedOptions = options.map(normalizeOption);\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;\n const placeholderText = placeholder ?? (hasLabel ? ' ' : undefined);\n const [isFocused, setIsFocused] = React.useState(false);\n const [hasValue, setHasValue] = React.useState(() => {\n const initial = value ?? defaultValue;\n if (initial === undefined || initial === null) return false;\n if (multiple) {\n if (Array.isArray(initial)) return initial.length > 0;\n return String(initial).length > 0;\n }\n if (Array.isArray(initial)) {\n if (initial.length === 0) return false;\n return String(initial[0]).length > 0;\n }\n return String(initial).length > 0;\n });\n const isControlled = value !== undefined;\n\n React.useEffect(() => {\n if (!isControlled) return;\n if (value === undefined || value === null) {\n setHasValue(false);\n return;\n }\n if (multiple) {\n if (Array.isArray(value)) {\n setHasValue(value.length > 0);\n } else {\n setHasValue(String(value).length > 0);\n }\n return;\n }\n if (Array.isArray(value)) {\n setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);\n return;\n }\n setHasValue(String(value).length > 0);\n }, [isControlled, multiple, value]);\n\n const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? ' ' : placeholderText;\n const shouldRenderPlaceholder = !multiple && placeholderText !== undefined;\n const labelShouldFloat = hasValue || isFocused;\n const labelLeftClass = 'left-3';\n const labelBgDefault = ['outline', 'text', 'underlined'].includes(variant)\n ? 'bg-transparent'\n : 'bg-white/90 dark:bg-slate-900';\n\n const handleFocus: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleChange: React.ChangeEventHandler<HTMLSelectElement> = event => {\n if (!isControlled) {\n const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== '';\n setHasValue(nextHasValue);\n }\n onChange?.(event);\n };\n\n return (\n <div className={twMerge('flex flex-col gap-1', wrapperClassName)}>\n <div className='relative flex items-center'>\n <select\n {...props}\n id={selectId}\n name={selectName}\n multiple={multiple}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n className={twMerge('peer', baseClass, variantClass, sizeClass, className)}\n >\n {shouldRenderPlaceholder && (\n <option value='' disabled={props.required} hidden={hasValue}>\n {placeholderOptionLabel}\n </option>\n )}\n {normalizedOptions.map((option, index) => (\n <option key={`${selectId}-${option.value}-${index}`} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n {!multiple && (\n <span className='pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500 dark:text-gray-300'>\n <i className='mdi mdi-chevron-down text-base leading-none' aria-hidden />\n </span>\n )}\n {label && (\n <label\n htmlFor={selectId}\n className={twMerge(\n 'absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200',\n labelLeftClass,\n labelShouldFloat\n ? [\n 'top-0 text-xs px-1',\n isFocused ? '-translate-y-1/2 text-gray-600' : '-translate-y-2/3',\n labelBgDefault\n ].join(' ')\n : 'top-1/2 -translate-y-1/2 text-sm text-gray-500'\n )}\n >\n {label}\n </label>\n )}\n </div>\n </div>\n );\n};\n\nexport default Select;\nexport type { SelectProps, SelectOption, SelectOptionObject } from './types.select';\n"]}
|