@lindle/linoardo 1.0.52 → 1.0.53
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/{chunk-S7VLFCLP.js → chunk-7UHEFXWO.js} +5 -19
- package/dist/chunk-7UHEFXWO.js.map +1 -0
- package/dist/{chunk-3J6Y3EQW.js → chunk-HOPFH5GQ.js} +32 -8
- package/dist/chunk-HOPFH5GQ.js.map +1 -0
- package/dist/index.cjs +33 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/notification.cjs +3 -17
- package/dist/notification.cjs.map +1 -1
- package/dist/notification.js +1 -1
- package/dist/styles.css +34 -17
- package/dist/textarea.cjs +30 -7
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3J6Y3EQW.js.map +0 -1
- package/dist/chunk-S7VLFCLP.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { Notification_default as Notification } from './chunk-
|
|
1
|
+
export { Notification_default as Notification } from './chunk-7UHEFXWO.js';
|
|
2
2
|
export { Progress_default as Progress } from './chunk-SM2VNSPP.js';
|
|
3
3
|
export { TimeLine_default as TimeLine, TimeLineItem } from './chunk-LZYVTGJD.js';
|
|
4
4
|
export { Input_default as Input } from './chunk-UGG35FPX.js';
|
|
5
|
-
export { TextArea_default as TextArea } from './chunk-
|
|
5
|
+
export { TextArea_default as TextArea } from './chunk-HOPFH5GQ.js';
|
|
6
6
|
export { Slider_default as Slider } from './chunk-KK33I72F.js';
|
|
7
7
|
export { Switch_default as Switch } from './chunk-GKZFVQW6.js';
|
|
8
8
|
export { Select_default as Select } from './chunk-4C6XQI62.js';
|
package/dist/notification.cjs
CHANGED
|
@@ -108,23 +108,11 @@ var resolveVariantClass = (variant, type) => {
|
|
|
108
108
|
const tone = type ? typeTone[type] : void 0;
|
|
109
109
|
switch (variant) {
|
|
110
110
|
case "filled":
|
|
111
|
-
return tailwindMerge.twMerge(
|
|
112
|
-
tone?.bg ?? "bg-primary/10",
|
|
113
|
-
tone?.text ?? "text-primary",
|
|
114
|
-
"border border-transparent shadow-none"
|
|
115
|
-
);
|
|
111
|
+
return tailwindMerge.twMerge(tone?.bg ?? "bg-primary/10", tone?.text ?? "text-primary", "border border-transparent shadow-none");
|
|
116
112
|
case "outline":
|
|
117
|
-
return tailwindMerge.twMerge(
|
|
118
|
-
"bg-white/90",
|
|
119
|
-
tone?.text ?? "text-gray-900",
|
|
120
|
-
tone?.border ?? "border-primary/20",
|
|
121
|
-
"border-[1.5px]"
|
|
122
|
-
);
|
|
113
|
+
return tailwindMerge.twMerge("bg-white/90", tone?.text ?? "text-gray-900", tone?.border ?? "border-primary/20", "border-[1.5px]");
|
|
123
114
|
case "ghost":
|
|
124
|
-
return tailwindMerge.twMerge(
|
|
125
|
-
"bg-transparent shadow-none border border-transparent",
|
|
126
|
-
tone?.text ?? "text-gray-900"
|
|
127
|
-
);
|
|
115
|
+
return tailwindMerge.twMerge("bg-transparent shadow-none border border-transparent", tone?.text ?? "text-gray-900");
|
|
128
116
|
case "solid":
|
|
129
117
|
default:
|
|
130
118
|
return "bg-white/95 text-gray-900 border border-gray-200";
|
|
@@ -154,13 +142,11 @@ var resolveIconNode = (icon, fallbackClassName) => {
|
|
|
154
142
|
};
|
|
155
143
|
var NotificationCard = ({ item }) => {
|
|
156
144
|
const {
|
|
157
|
-
key,
|
|
158
145
|
message,
|
|
159
146
|
description,
|
|
160
147
|
icon,
|
|
161
148
|
closeIcon,
|
|
162
149
|
closable = true,
|
|
163
|
-
duration,
|
|
164
150
|
btn,
|
|
165
151
|
onClick,
|
|
166
152
|
className,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Feedback/Notification/index.tsx"],"names":["twMerge","normalized","React","jsx","jsxs","Fragment"],"mappings":"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","file":"notification.cjs","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 { 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 isBrowser = typeof window !== 'undefined';\n\ntype AutoCloseEntry = {\n timeoutId: ReturnType<typeof setTimeout>;\n duration: number;\n onClose: () => void;\n};\n\nconst autoCloseTimers = new Map<React.Key, AutoCloseEntry>();\n\nconst clearAutoCloseTimer = (key: React.Key) => {\n const existing = autoCloseTimers.get(key);\n if (!existing) return;\n clearTimeout(existing.timeoutId);\n autoCloseTimers.delete(key);\n};\n\nconst scheduleAutoClose = (\n key: React.Key,\n duration: number | null | undefined,\n onClose?: () => void\n) => {\n if (!isBrowser) return;\n if (typeof duration !== 'number' || !Number.isFinite(duration) || duration < 0 || !onClose) {\n clearAutoCloseTimer(key);\n return;\n }\n\n const existing = autoCloseTimers.get(key);\n if (existing && existing.duration === duration && existing.onClose === onClose) return;\n if (existing) clearAutoCloseTimer(key);\n\n const timeoutId = setTimeout(() => {\n autoCloseTimers.delete(key);\n onClose();\n }, duration);\n\n autoCloseTimers.set(key, { timeoutId, duration, onClose });\n};\n\nconst cleanupStaleTimers = (activeKeys: Set<React.Key>) => {\n if (!isBrowser) return;\n for (const key of Array.from(autoCloseTimers.keys())) {\n if (!activeKeys.has(key)) {\n clearAutoCloseTimer(key);\n }\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 duration,\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 variant = 'solid',\n gap = 12,\n containerClassName,\n className,\n ...rest\n}) => {\n if (!items.length) {\n if (isBrowser) {\n for (const key of Array.from(autoCloseTimers.keys())) {\n clearAutoCloseTimer(key);\n }\n }\n return null;\n }\n\n const grouped = new Map<NotificationPlacement, (NotificationArgs & { key: React.Key })[]>();\n const activeKeys = new Set<React.Key>();\n items.forEach(item => {\n const resolvedKey = item.key ?? `notification-${item.message ?? Math.random()}`;\n const resolvedPlacement = item.placement ?? placement;\n const resolvedVariant = item.variant ?? variant;\n activeKeys.add(resolvedKey);\n scheduleAutoClose(resolvedKey, item.duration, item.onClose);\n const group = grouped.get(resolvedPlacement) ?? [];\n group.push({ ...item, key: resolvedKey, variant: resolvedVariant });\n grouped.set(resolvedPlacement, group);\n });\n cleanupStaleTimers(activeKeys);\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
|
+
{"version":3,"sources":["../src/Feedback/Notification/index.tsx"],"names":["twMerge","normalized","React","jsx","jsxs","Fragment"],"mappings":"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","file":"notification.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { NotificationArgs, NotificationPlacement, NotificationProps, NotificationType, NotificationVariant } from './types.notification';\nimport type { 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<NotificationType, { bg: string; text: string; border: string; iconBg: string; iconText: string }> = {\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 isBrowser = typeof window !== 'undefined';\n\ntype AutoCloseEntry = {\n timeoutId: ReturnType<typeof setTimeout>;\n duration: number;\n onClose: () => void;\n};\n\nconst autoCloseTimers = new Map<React.Key, AutoCloseEntry>();\n\nconst clearAutoCloseTimer = (key: React.Key) => {\n const existing = autoCloseTimers.get(key);\n if (!existing) return;\n clearTimeout(existing.timeoutId);\n autoCloseTimers.delete(key);\n};\n\nconst scheduleAutoClose = (key: React.Key, duration: number | null | undefined, onClose?: () => void) => {\n if (!isBrowser) return;\n if (typeof duration !== 'number' || !Number.isFinite(duration) || duration < 0 || !onClose) {\n clearAutoCloseTimer(key);\n return;\n }\n\n const existing = autoCloseTimers.get(key);\n if (existing && existing.duration === duration && existing.onClose === onClose) return;\n if (existing) clearAutoCloseTimer(key);\n\n const timeoutId = setTimeout(() => {\n autoCloseTimers.delete(key);\n onClose();\n }, duration);\n\n autoCloseTimers.set(key, { timeoutId, duration, onClose });\n};\n\nconst cleanupStaleTimers = (activeKeys: Set<React.Key>) => {\n if (!isBrowser) return;\n for (const key of Array.from(autoCloseTimers.keys())) {\n if (!activeKeys.has(key)) {\n clearAutoCloseTimer(key);\n }\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(tone?.bg ?? 'bg-primary/10', tone?.text ?? 'text-primary', 'border border-transparent shadow-none');\n case 'outline':\n return twMerge('bg-white/90', tone?.text ?? 'text-gray-900', tone?.border ?? 'border-primary/20', 'border-[1.5px]');\n case 'ghost':\n return twMerge('bg-transparent shadow-none border border-transparent', tone?.text ?? 'text-gray-900');\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 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 ? <div className='text-[15px] font-semibold leading-5 text-gray-900 dark:text-white'>{message}</div> : null}\n {hasDescription ? <div className='text-sm leading-6 text-gray-600 dark:text-gray-300'>{description}</div> : 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 variant = 'solid',\n gap = 12,\n containerClassName,\n className,\n ...rest\n}) => {\n if (!items.length) {\n if (isBrowser) {\n for (const key of Array.from(autoCloseTimers.keys())) {\n clearAutoCloseTimer(key);\n }\n }\n return null;\n }\n\n const grouped = new Map<NotificationPlacement, (NotificationArgs & { key: React.Key })[]>();\n const activeKeys = new Set<React.Key>();\n items.forEach(item => {\n const resolvedKey = item.key ?? `notification-${item.message ?? Math.random()}`;\n const resolvedPlacement = item.placement ?? placement;\n const resolvedVariant = item.variant ?? variant;\n activeKeys.add(resolvedKey);\n scheduleAutoClose(resolvedKey, item.duration, item.onClose);\n const group = grouped.get(resolvedPlacement) ?? [];\n group.push({ ...item, key: resolvedKey, variant: resolvedVariant });\n grouped.set(resolvedPlacement, group);\n });\n cleanupStaleTimers(activeKeys);\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 { NotificationArgs, NotificationPlacement, NotificationProps, NotificationType, NotificationVariant } from './types.notification';\nexport default Notification;\n"]}
|
package/dist/notification.js
CHANGED
package/dist/styles.css
CHANGED
|
@@ -2670,6 +2670,33 @@
|
|
|
2670
2670
|
}
|
|
2671
2671
|
}
|
|
2672
2672
|
}
|
|
2673
|
+
.peer-not-placeholder-shown\:-top-2 {
|
|
2674
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
2675
|
+
top: calc(var(--spacing) * -2);
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
.peer-not-placeholder-shown\:left-0 {
|
|
2679
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
2680
|
+
left: calc(var(--spacing) * 0);
|
|
2681
|
+
}
|
|
2682
|
+
}
|
|
2683
|
+
.peer-not-placeholder-shown\:-translate-y-full {
|
|
2684
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
2685
|
+
--tw-translate-y: -100%;
|
|
2686
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2687
|
+
}
|
|
2688
|
+
}
|
|
2689
|
+
.peer-not-placeholder-shown\:bg-white {
|
|
2690
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
2691
|
+
background-color: var(--color-white);
|
|
2692
|
+
}
|
|
2693
|
+
}
|
|
2694
|
+
.peer-not-placeholder-shown\:text-xs {
|
|
2695
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
2696
|
+
font-size: var(--text-xs);
|
|
2697
|
+
line-height: var(--tw-leading, var(--text-xs--line-height));
|
|
2698
|
+
}
|
|
2699
|
+
}
|
|
2673
2700
|
.peer-checked\:visible {
|
|
2674
2701
|
&:is(:where(.peer):checked ~ *) {
|
|
2675
2702
|
visibility: visible;
|
|
@@ -2848,16 +2875,6 @@
|
|
|
2848
2875
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2849
2876
|
}
|
|
2850
2877
|
}
|
|
2851
|
-
.peer-\[\&\:not\(\:placeholder-shown\)\]\:bg-white {
|
|
2852
|
-
&:is(:where(.peer):not(:placeholder-shown) ~ *) {
|
|
2853
|
-
background-color: var(--color-white);
|
|
2854
|
-
}
|
|
2855
|
-
}
|
|
2856
|
-
.peer-\[\&\:not\(\:placeholder-shown\)\]\:px-1 {
|
|
2857
|
-
&:is(:where(.peer):not(:placeholder-shown) ~ *) {
|
|
2858
|
-
padding-inline: calc(var(--spacing) * 1);
|
|
2859
|
-
}
|
|
2860
|
-
}
|
|
2861
2878
|
.peer-\[\&\:not\(\:placeholder-shown\)\]\:text-xs {
|
|
2862
2879
|
&:is(:where(.peer):not(:placeholder-shown) ~ *) {
|
|
2863
2880
|
font-size: var(--text-xs);
|
|
@@ -4866,6 +4883,13 @@
|
|
|
4866
4883
|
--tw-ring-offset-color: var(--color-gray-900);
|
|
4867
4884
|
}
|
|
4868
4885
|
}
|
|
4886
|
+
.dark\:peer-not-placeholder-shown\:text-gray-200 {
|
|
4887
|
+
&:is(.dark &) {
|
|
4888
|
+
&:is(:where(.peer):not(*:placeholder-shown) ~ *) {
|
|
4889
|
+
color: var(--color-gray-200);
|
|
4890
|
+
}
|
|
4891
|
+
}
|
|
4892
|
+
}
|
|
4869
4893
|
.dark\:peer-placeholder-shown\:text-gray-400 {
|
|
4870
4894
|
&:is(.dark &) {
|
|
4871
4895
|
&:is(:where(.peer):placeholder-shown ~ *) {
|
|
@@ -4887,13 +4911,6 @@
|
|
|
4887
4911
|
}
|
|
4888
4912
|
}
|
|
4889
4913
|
}
|
|
4890
|
-
.dark\:peer-\[\&\:not\(\:placeholder-shown\)\]\:bg-slate-900 {
|
|
4891
|
-
&:is(.dark &) {
|
|
4892
|
-
&:is(:where(.peer):not(:placeholder-shown) ~ *) {
|
|
4893
|
-
background-color: var(--color-slate-900);
|
|
4894
|
-
}
|
|
4895
|
-
}
|
|
4896
|
-
}
|
|
4897
4914
|
.dark\:peer-\[\&\:not\(\:placeholder-shown\)\]\:text-gray-200 {
|
|
4898
4915
|
&:is(.dark &) {
|
|
4899
4916
|
&:is(:where(.peer):not(:placeholder-shown) ~ *) {
|
package/dist/textarea.cjs
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var CodeBlockLowlight = require('@tiptap/extension-code-block-lowlight');
|
|
5
5
|
var StarterKit = require('@tiptap/starter-kit');
|
|
6
|
-
var Underline = require('@tiptap/extension-underline');
|
|
7
6
|
var react = require('@tiptap/react');
|
|
8
7
|
var lowlight$1 = require('lowlight');
|
|
9
8
|
var TurndownService = require('turndown');
|
|
@@ -16,7 +15,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
16
15
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
17
16
|
var CodeBlockLowlight__default = /*#__PURE__*/_interopDefault(CodeBlockLowlight);
|
|
18
17
|
var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
|
|
19
|
-
var Underline__default = /*#__PURE__*/_interopDefault(Underline);
|
|
20
18
|
var TurndownService__default = /*#__PURE__*/_interopDefault(TurndownService);
|
|
21
19
|
|
|
22
20
|
// src/Form/TextArea/index.tsx
|
|
@@ -74,7 +72,17 @@ var statusMessageClasses = {
|
|
|
74
72
|
warn: "text-amber-600 dark:text-amber-300",
|
|
75
73
|
success: "text-emerald-600 dark:text-emerald-300"
|
|
76
74
|
};
|
|
77
|
-
var DEFAULT_TOOLBAR = [
|
|
75
|
+
var DEFAULT_TOOLBAR = [
|
|
76
|
+
"bold",
|
|
77
|
+
"italic",
|
|
78
|
+
"underline",
|
|
79
|
+
"strike",
|
|
80
|
+
"heading",
|
|
81
|
+
"bulletList",
|
|
82
|
+
"orderedList",
|
|
83
|
+
"blockquote",
|
|
84
|
+
"codeBlock"
|
|
85
|
+
];
|
|
78
86
|
var CODE_BLOCK_LANGUAGES = ["ts", "json", "python", "bash"];
|
|
79
87
|
var DEFAULT_CODE_BLOCK_LANGUAGE = CODE_BLOCK_LANGUAGES[0];
|
|
80
88
|
var TEXTAREA_TAB_CHARACTER = " ";
|
|
@@ -153,7 +161,23 @@ var ToolbarButton = ({ label, active, disabled, onMouseDown }) => /* @__PURE__ *
|
|
|
153
161
|
}
|
|
154
162
|
);
|
|
155
163
|
var TextArea = React__default.default.forwardRef(
|
|
156
|
-
({
|
|
164
|
+
({
|
|
165
|
+
variant = "outline",
|
|
166
|
+
size = "medium",
|
|
167
|
+
rounded = "md",
|
|
168
|
+
success,
|
|
169
|
+
error,
|
|
170
|
+
warn,
|
|
171
|
+
className,
|
|
172
|
+
wrapperClassName,
|
|
173
|
+
label,
|
|
174
|
+
prepend,
|
|
175
|
+
append,
|
|
176
|
+
rows = 4,
|
|
177
|
+
richText = false,
|
|
178
|
+
toolbar = DEFAULT_TOOLBAR,
|
|
179
|
+
...props
|
|
180
|
+
}, ref) => {
|
|
157
181
|
const { placeholder, onFocus, onBlur, onChange, onKeyDown, value, defaultValue, disabled, readOnly, ...textareaProps } = props;
|
|
158
182
|
const reactId = React__default.default.useId();
|
|
159
183
|
const hasLabel = Boolean(label);
|
|
@@ -191,8 +215,7 @@ var TextArea = React__default.default.forwardRef(
|
|
|
191
215
|
HTMLAttributes: {
|
|
192
216
|
class: "hljs"
|
|
193
217
|
}
|
|
194
|
-
})
|
|
195
|
-
Underline__default.default
|
|
218
|
+
})
|
|
196
219
|
],
|
|
197
220
|
content: markdownToHtml(resolvedMarkdownValue),
|
|
198
221
|
editable: richText && !disabled && !readOnly,
|
|
@@ -526,7 +549,7 @@ var TextArea = React__default.default.forwardRef(
|
|
|
526
549
|
"-top-2 -translate-y-full text-xs bg-white px-1 dark:bg-slate-900",
|
|
527
550
|
!richText && "peer-focus:left-0 peer-focus:-top-5 peer-focus:-translate-y-full peer-focus:text-xs peer-focus:text-gray-600 dark:peer-focus:text-gray-300",
|
|
528
551
|
!richText && "peer-placeholder-shown:top-3 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:px-0 peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400",
|
|
529
|
-
!richText && "peer-
|
|
552
|
+
!richText && "peer-not-placeholder-shown:left-0 peer-not-placeholder-shown:-top-2 peer-not-placeholder-shown:-translate-y-full peer-not-placeholder-shown:text-xs peer-not-placeholder-shown:bg-white peer-[&:peer-not-placeholder-shown:px-1 peer-[&:not(:placeholder-shpeer-not-placeholder-shown:text-gray-700 r-not-placeholder-shown:bg-slate-900 dark:peer-not-placeholder-shown:text-gray-200",
|
|
530
553
|
richText && (isFocused || resolvedMarkdownValue) && "-top-2 -translate-y-full text-xs",
|
|
531
554
|
richText && !(isFocused || resolvedMarkdownValue) && "top-3 translate-y-0 text-sm bg-transparent px-0 text-gray-500 dark:text-gray-400"
|
|
532
555
|
),
|
package/dist/textarea.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Form/TextArea/index.tsx"],"names":["createLowlight","common","TurndownService","marked","jsx","twMerge","React","useEditor","StarterKit","CodeBlockLowlight","Underline","nextValue","nextPosition","jsxs","Fragment","EditorContent"],"mappings":"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","file":"textarea.cjs","sourcesContent":["import React from 'react';\nimport CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';\nimport StarterKit from '@tiptap/starter-kit';\nimport Underline from '@tiptap/extension-underline';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport { common, createLowlight } from 'lowlight';\nimport TurndownService from 'turndown';\nimport { marked } from 'marked';\nimport { twMerge } from 'tailwind-merge';\nimport type { InputRounded, InputSize, InputVariant } from '../Input/types';\nimport type { TextAreaFormattingToolbar, TextAreaProps } from './types.textarea';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-within:border-primary/70 dark:focus-within:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-within:border-primary/70 dark:focus-within:ring-primary/40',\n outline:\n 'rounded border-2 border-black bg-white focus-within:border-black focus-within:ring-2 focus-within:ring-black/30 dark:border-black dark:bg-transparent dark:focus-within:border-black dark:focus-within:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent px-0 bg-transparent focus-within:border-primary focus-within:ring-0 focus-within:ring-transparent dark:border-b-gray-600 dark:focus-within:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-within:bg-white focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-within:bg-slate-700 dark:focus-within:border-primary/60 dark:focus-within:ring-primary/25',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-within:border-primary/60 dark:focus-within:ring-primary/30',\n underlined:\n 'rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-within:border-primary focus-within:ring-0 focus-within:ring-transparent dark:border-b-gray-600 dark:focus-within:border-primary/70'\n} satisfies Record<InputVariant, string>;\n\nconst roundedClasses = {\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl'\n} satisfies Record<InputRounded, string>;\n\nconst sizeClasses = {\n 'x-small': {\n paddingY: 'py-2',\n paddingX: 'px-2',\n text: 'text-xs'\n },\n small: {\n paddingY: 'py-2.5',\n paddingX: 'px-2.5',\n text: 'text-sm'\n },\n medium: {\n paddingY: 'py-3',\n paddingX: 'px-3',\n text: 'text-base'\n },\n large: {\n paddingY: 'py-3.5',\n paddingX: 'px-3.5',\n text: 'text-lg'\n },\n 'x-large': {\n paddingY: 'py-4',\n paddingX: 'px-4',\n text: 'text-xl'\n }\n} satisfies Record<\n InputSize,\n {\n paddingY: string;\n paddingX: string;\n text: string;\n }\n>;\n\nconst statusClasses = {\n error: 'border-red-500 focus:border-red-500 focus:ring-red-400',\n warn: 'border-amber-500 focus:border-amber-500 focus:ring-amber-400',\n success: 'border-emerald-500 focus:border-emerald-500 focus:ring-emerald-400'\n} as const;\n\nconst statusMessageClasses = {\n error: 'text-red-600 dark:text-red-300',\n warn: 'text-amber-600 dark:text-amber-300',\n success: 'text-emerald-600 dark:text-emerald-300'\n} as const;\n\nconst DEFAULT_TOOLBAR: TextAreaFormattingToolbar[] = ['bold', 'italic', 'underline', 'strike', 'heading', 'bulletList', 'orderedList', 'blockquote', 'codeBlock'];\nconst CODE_BLOCK_LANGUAGES = ['ts', 'json', 'python', 'bash'] as const;\nconst DEFAULT_CODE_BLOCK_LANGUAGE = CODE_BLOCK_LANGUAGES[0];\nconst TEXTAREA_TAB_CHARACTER = '\\t';\nconst lowlight = createLowlight(common);\nlowlight.registerAlias({ ts: 'typescript' });\nconst turndown = new TurndownService({\n codeBlockStyle: 'fenced',\n headingStyle: 'atx',\n bulletListMarker: '-'\n});\n\nconst markdownToHtml = (markdown?: string) => {\n if (!markdown) {\n return '<p></p>';\n }\n\n return marked.parse(markdown) as string;\n};\n\nconst htmlToMarkdown = (html: string) => turndown.turndown(html).trim();\n\nconst createChangeEvent = (element: HTMLTextAreaElement): React.ChangeEvent<HTMLTextAreaElement> =>\n ({\n target: element,\n currentTarget: element\n }) as React.ChangeEvent<HTMLTextAreaElement>;\n\nconst assignRef = <T,>(ref: React.ForwardedRef<T>, value: T | null) => {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n if (ref) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n};\n\nconst updateTextareaValue = (element: HTMLTextAreaElement, nextValue: string, selectionStart: number, selectionEnd: number) => {\n element.value = nextValue;\n element.setSelectionRange(selectionStart, selectionEnd);\n};\n\nconst indentSelectedLines = (value: string, selectionStart: number, selectionEnd: number) => {\n const lineStart = value.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n const lineEndIndex = value.indexOf('\\n', selectionEnd);\n const lineEnd = lineEndIndex === -1 ? value.length : lineEndIndex;\n const selectedBlock = value.slice(lineStart, lineEnd);\n const lines = selectedBlock.split('\\n');\n const indentedBlock = lines.map(line => `${TEXTAREA_TAB_CHARACTER}${line}`).join('\\n');\n\n return {\n nextValue: `${value.slice(0, lineStart)}${indentedBlock}${value.slice(lineEnd)}`,\n selectionStart: selectionStart + TEXTAREA_TAB_CHARACTER.length,\n selectionEnd: selectionEnd + lines.length * TEXTAREA_TAB_CHARACTER.length\n };\n};\n\nconst outdentSelectedLines = (value: string, selectionStart: number, selectionEnd: number) => {\n const lineStart = value.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n const lineEndIndex = value.indexOf('\\n', selectionEnd);\n const lineEnd = lineEndIndex === -1 ? value.length : lineEndIndex;\n const selectedBlock = value.slice(lineStart, lineEnd);\n const lines = selectedBlock.split('\\n');\n const updatedLines = lines.map(line => (line.startsWith(TEXTAREA_TAB_CHARACTER) ? line.slice(TEXTAREA_TAB_CHARACTER.length) : line));\n const removedBeforeSelectionStart = selectionStart === lineStart && !lines[0].startsWith(TEXTAREA_TAB_CHARACTER) ? 0 : lines[0].startsWith(TEXTAREA_TAB_CHARACTER) ? TEXTAREA_TAB_CHARACTER.length : 0;\n const removedTotal = lines.reduce((count, line) => count + (line.startsWith(TEXTAREA_TAB_CHARACTER) ? TEXTAREA_TAB_CHARACTER.length : 0), 0);\n\n return {\n nextValue: `${value.slice(0, lineStart)}${updatedLines.join('\\n')}${value.slice(lineEnd)}`,\n selectionStart: Math.max(lineStart, selectionStart - removedBeforeSelectionStart),\n selectionEnd: Math.max(lineStart, selectionEnd - removedTotal)\n };\n};\n\ntype ToolbarButtonProps = {\n label: string;\n active?: boolean;\n disabled?: boolean;\n onMouseDown: React.MouseEventHandler<HTMLButtonElement>;\n};\n\ntype CodeBlockLanguage = (typeof CODE_BLOCK_LANGUAGES)[number];\n\nconst isCodeBlockLanguage = (value: string): value is CodeBlockLanguage => CODE_BLOCK_LANGUAGES.includes(value as CodeBlockLanguage);\n\nconst ToolbarButton = ({ label, active, disabled, onMouseDown }: ToolbarButtonProps) => (\n <button\n type='button'\n disabled={disabled}\n onMouseDown={onMouseDown}\n className={twMerge(\n 'inline-flex min-w-8 items-center justify-center rounded border px-2 py-1 text-xs font-medium transition-colors',\n active\n ? 'border-primary bg-primary text-white'\n : 'border-gray-300 bg-white text-gray-700 hover:border-gray-400 hover:bg-gray-50 dark:border-slate-600 dark:bg-slate-900 dark:text-gray-200 dark:hover:bg-slate-800',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </button>\n);\n\n/**\n * Multiline text input matching Input variants, sizing and status messaging.\n */\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n { variant = 'outline', size = 'medium', rounded = 'md', success, error, warn, className, wrapperClassName, label, prepend, append, rows = 4, richText = false, toolbar = DEFAULT_TOOLBAR, ...props },\n ref\n ) => {\n const { placeholder, onFocus, onBlur, onChange, onKeyDown, value, defaultValue, disabled, readOnly, ...textareaProps } = props;\n const reactId = React.useId();\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder;\n const [isFocused, setIsFocused] = React.useState(false);\n const classBase = 'textarea-base transition-colors duration-200 w-full has-[textarea:disabled]:opacity-50 has-[textarea:disabled]:cursor-not-allowed';\n const textareaBase =\n 'peer block w-full min-w-0 resize-y border-0 bg-transparent p-0 text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400 focus:outline-none focus:ring-0';\n const proseBase =\n 'ProseMirror min-h-[7rem] w-full border-0 bg-transparent p-0 text-gray-900 dark:text-gray-100 focus:outline-none [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-3 [&_blockquote]:italic dark:[&_blockquote]:border-slate-600 [&_:not(pre)>code]:rounded [&_:not(pre)>code]:bg-black [&_:not(pre)>code]:px-1 [&_:not(pre)>code]:py-0.5 [&_:not(pre)>code]:text-white dark:[&_:not(pre)>code]:bg-black dark:[&_:not(pre)>code]:text-white [&_pre]:overflow-x-auto [&_pre]:rounded [&_pre]:bg-black [&_pre]:p-3 [&_pre]:text-white [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-white [&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5 [&_h1]:text-2xl [&_h1]:font-semibold [&_h2]:text-xl [&_h2]:font-semibold';\n const hiddenTextareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n const forwardedRef = React.useRef<HTMLTextAreaElement | null>(null);\n const isControlled = value !== undefined;\n const markdownValue = typeof value === 'string' ? value : typeof defaultValue === 'string' ? defaultValue : '';\n const [internalMarkdown, setInternalMarkdown] = React.useState(markdownValue);\n const resolvedMarkdownValue = isControlled ? (typeof value === 'string' ? value : '') : internalMarkdown;\n\n const status = error\n ? { tone: 'error' as const, message: error }\n : warn\n ? { tone: 'warn' as const, message: warn }\n : success\n ? { tone: 'success' as const, message: success }\n : undefined;\n\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const toneClass = status ? statusClasses[status.tone] : undefined;\n const hasPrepend = typeof prepend === 'string' ? prepend.trim().length > 0 : Boolean(prepend);\n const hasAppend = typeof append === 'string' ? append.trim().length > 0 : Boolean(append);\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = [sizeConfig.paddingY, sizeConfig.paddingX, sizeConfig.text].join(' ');\n const roundedClass = variant === 'sharp' || variant === 'text' || variant === 'underlined' ? 'rounded-none' : roundedClasses[rounded];\n\n const inputName = textareaProps.name || reactId;\n const basePlaceholder = placeholder ?? (hasLabel ? ' ' : undefined);\n const placeholderValue = hidePlaceholderUntilFocus ? (isFocused ? placeholder : ' ') : basePlaceholder;\n const placeholderClass = hidePlaceholderUntilFocus\n ? 'placeholder-transparent focus:placeholder-gray-500 focus:dark:placeholder-gray-400'\n : undefined;\n const editor = useEditor({\n extensions: [\n StarterKit.configure({ heading: { levels: [1, 2] }, codeBlock: false }),\n CodeBlockLowlight.configure({\n defaultLanguage: DEFAULT_CODE_BLOCK_LANGUAGE,\n enableTabIndentation: true,\n lowlight,\n HTMLAttributes: {\n class: 'hljs'\n }\n }),\n Underline\n ],\n content: markdownToHtml(resolvedMarkdownValue),\n editable: richText && !disabled && !readOnly,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: twMerge(proseBase, placeholderClass),\n 'data-placeholder': placeholderValue ?? ''\n }\n },\n onFocus: () => {\n if (!richText) {\n return;\n }\n\n if (hidePlaceholderUntilFocus) {\n setIsFocused(true);\n }\n const target = hiddenTextareaRef.current;\n if (target) {\n onFocus?.(createChangeEvent(target) as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n },\n onBlur: () => {\n if (!richText) {\n return;\n }\n\n if (hidePlaceholderUntilFocus) {\n setIsFocused(false);\n }\n const target = hiddenTextareaRef.current;\n if (target) {\n onBlur?.(createChangeEvent(target) as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n },\n onUpdate: ({ editor: currentEditor }) => {\n if (!richText) {\n return;\n }\n\n const nextMarkdown = htmlToMarkdown(currentEditor.getHTML());\n const target = hiddenTextareaRef.current;\n\n setInternalMarkdown(nextMarkdown);\n\n if (!target) {\n return;\n }\n\n target.value = nextMarkdown;\n onChange?.(createChangeEvent(target));\n }\n });\n const activeCodeBlockLanguage = (() => {\n const language = editor?.getAttributes('codeBlock').language;\n if (typeof language === 'string' && isCodeBlockLanguage(language)) {\n return language;\n }\n\n return DEFAULT_CODE_BLOCK_LANGUAGE;\n })();\n\n React.useEffect(() => {\n if (!richText) {\n return;\n }\n\n const target = hiddenTextareaRef.current;\n if (!target) {\n return;\n }\n\n target.value = resolvedMarkdownValue;\n forwardedRef.current = target;\n assignRef(ref, target);\n }, [ref, resolvedMarkdownValue, richText]);\n\n React.useEffect(() => {\n if (!editor || !richText || !isControlled) {\n return;\n }\n\n const nextMarkdown = typeof value === 'string' ? value : '';\n const currentMarkdown = htmlToMarkdown(editor.getHTML());\n if (currentMarkdown === nextMarkdown) {\n return;\n }\n\n editor.commands.setContent(markdownToHtml(nextMarkdown), { emitUpdate: false });\n }, [editor, isControlled, richText, value]);\n\n React.useEffect(() => {\n if (!isControlled) {\n setInternalMarkdown(typeof defaultValue === 'string' ? defaultValue : '');\n }\n }, [defaultValue, isControlled]);\n\n React.useEffect(() => {\n if (!editor || !richText) {\n return;\n }\n\n editor.setEditable(!disabled && !readOnly);\n }, [disabled, editor, readOnly, richText]);\n\n const renderPrepend = hasPrepend ? (\n typeof prepend === 'string' ? (\n <span className={twMerge('text-gray-500 dark:text-gray-400', sizeConfig.text)}>{prepend}</span>\n ) : (\n prepend\n )\n ) : null;\n const renderAppend = hasAppend ? (\n typeof append === 'string' ? (\n <span className={twMerge('text-gray-500 dark:text-gray-400', sizeConfig.text)}>{append}</span>\n ) : (\n append\n )\n ) : null;\n\n const handleFocus: React.FocusEventHandler<HTMLTextAreaElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLTextAreaElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLTextAreaElement> = event => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented || event.key !== 'Tab' || disabled || readOnly) {\n return;\n }\n\n const target = event.currentTarget;\n const { selectionStart, selectionEnd, value: currentValue } = target;\n\n event.preventDefault();\n\n if (selectionStart !== selectionEnd && currentValue.slice(selectionStart, selectionEnd).includes('\\n')) {\n const nextState = event.shiftKey\n ? outdentSelectedLines(currentValue, selectionStart, selectionEnd)\n : indentSelectedLines(currentValue, selectionStart, selectionEnd);\n\n updateTextareaValue(target, nextState.nextValue, nextState.selectionStart, nextState.selectionEnd);\n onChange?.(createChangeEvent(target));\n return;\n }\n\n if (event.shiftKey) {\n const lineStart = currentValue.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n if (currentValue.slice(lineStart, selectionStart).endsWith(TEXTAREA_TAB_CHARACTER)) {\n const nextValue = `${currentValue.slice(0, selectionStart - TEXTAREA_TAB_CHARACTER.length)}${currentValue.slice(selectionEnd)}`;\n const nextPosition = selectionStart - TEXTAREA_TAB_CHARACTER.length;\n\n updateTextareaValue(target, nextValue, nextPosition, nextPosition);\n onChange?.(createChangeEvent(target));\n }\n return;\n }\n\n const nextValue = `${currentValue.slice(0, selectionStart)}${TEXTAREA_TAB_CHARACTER}${currentValue.slice(selectionEnd)}`;\n const nextPosition = selectionStart + TEXTAREA_TAB_CHARACTER.length;\n\n updateTextareaValue(target, nextValue, nextPosition, nextPosition);\n onChange?.(createChangeEvent(target));\n };\n\n return (\n <div className={twMerge('flex flex-col gap-1', wrapperClassName)}>\n <div className={twMerge('flex w-full items-start gap-2', classBase, variantClass, roundedClass, toneClass, sizeClass, className)}>\n {hasPrepend && <span className='flex shrink-0 items-start pt-0.5'>{renderPrepend}</span>}\n\n <div className='relative min-w-0 flex-1'>\n {richText ? (\n <>\n <textarea\n {...textareaProps}\n ref={node => {\n hiddenTextareaRef.current = node;\n forwardedRef.current = node;\n if (node) {\n assignRef(ref, node);\n }\n }}\n id={inputName}\n name={inputName}\n rows={rows}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n disabled={disabled}\n readOnly\n tabIndex={-1}\n aria-hidden\n className='sr-only'\n />\n <div className='flex flex-wrap gap-1 border-b border-gray-200 pb-2 dark:border-slate-700'>\n {toolbar.includes('bold') && (\n <ToolbarButton\n label='B'\n disabled={!editor?.isEditable}\n active={editor?.isActive('bold')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBold().run();\n }}\n />\n )}\n {toolbar.includes('italic') && (\n <ToolbarButton\n label='I'\n disabled={!editor?.isEditable}\n active={editor?.isActive('italic')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleItalic().run();\n }}\n />\n )}\n {toolbar.includes('underline') && (\n <ToolbarButton\n label='U'\n disabled={!editor?.isEditable}\n active={editor?.isActive('underline')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleUnderline().run();\n }}\n />\n )}\n {toolbar.includes('strike') && (\n <ToolbarButton\n label='S'\n disabled={!editor?.isEditable}\n active={editor?.isActive('strike')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleStrike().run();\n }}\n />\n )}\n {toolbar.includes('heading') && (\n <>\n <ToolbarButton\n label='H1'\n disabled={!editor?.isEditable}\n active={editor?.isActive('heading', { level: 1 })}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleHeading({ level: 1 }).run();\n }}\n />\n <ToolbarButton\n label='H2'\n disabled={!editor?.isEditable}\n active={editor?.isActive('heading', { level: 2 })}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleHeading({ level: 2 }).run();\n }}\n />\n </>\n )}\n {toolbar.includes('bulletList') && (\n <ToolbarButton\n label='List'\n disabled={!editor?.isEditable}\n active={editor?.isActive('bulletList')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBulletList().run();\n }}\n />\n )}\n {toolbar.includes('orderedList') && (\n <ToolbarButton\n label='1.'\n disabled={!editor?.isEditable}\n active={editor?.isActive('orderedList')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleOrderedList().run();\n }}\n />\n )}\n {toolbar.includes('blockquote') && (\n <ToolbarButton\n label='Quote'\n disabled={!editor?.isEditable}\n active={editor?.isActive('blockquote')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBlockquote().run();\n }}\n />\n )}\n {toolbar.includes('codeBlock') && (\n <>\n <ToolbarButton\n label='Code'\n disabled={!editor?.isEditable}\n active={editor?.isActive('codeBlock')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleCodeBlock({ language: activeCodeBlockLanguage }).run();\n }}\n />\n <label className='sr-only' htmlFor={`${inputName}-code-language`}>\n Code language\n </label>\n <select\n id={`${inputName}-code-language`}\n value={activeCodeBlockLanguage}\n disabled={!editor?.isEditable}\n className='min-w-24 rounded border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/30 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-600 dark:bg-slate-900 dark:text-gray-200'\n onChange={event => {\n const language = event.target.value;\n if (!isCodeBlockLanguage(language)) {\n return;\n }\n\n editor?.chain().focus().setCodeBlock({ language }).run();\n }}\n >\n {CODE_BLOCK_LANGUAGES.map(language => (\n <option key={language} value={language}>\n {language}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <EditorContent editor={editor} className='pt-3' />\n </>\n ) : (\n <textarea\n {...textareaProps}\n ref={node => {\n forwardedRef.current = node;\n assignRef(ref, node);\n }}\n id={inputName}\n name={inputName}\n rows={rows}\n placeholder={placeholderValue}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n defaultValue={defaultValue}\n className={twMerge(textareaBase, placeholderClass)}\n />\n )}\n\n {label && (\n <label\n htmlFor={inputName}\n className={twMerge(\n 'absolute left-0 z-10 transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200',\n '-top-2 -translate-y-full text-xs bg-white px-1 dark:bg-slate-900',\n !richText && 'peer-focus:left-0 peer-focus:-top-5 peer-focus:-translate-y-full peer-focus:text-xs peer-focus:text-gray-600 dark:peer-focus:text-gray-300',\n !richText &&\n 'peer-placeholder-shown:top-3 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:px-0 peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400',\n !richText &&\n 'peer-[&:not(:placeholder-shown)]:left-0 peer-[&:not(:placeholder-shown)]:-top-2 peer-[&:not(:placeholder-shown)]:-translate-y-full peer-[&:not(:placeholder-shown)]:text-xs peer-[&:not(:placeholder-shown)]:bg-white peer-[&:not(:placeholder-shown)]:px-1 peer-[&:not(:placeholder-shown)]:text-gray-700 dark:peer-[&:not(:placeholder-shown)]:bg-slate-900 dark:peer-[&:not(:placeholder-shown)]:text-gray-200',\n richText && (isFocused || resolvedMarkdownValue) && '-top-2 -translate-y-full text-xs',\n richText && !(isFocused || resolvedMarkdownValue) && 'top-3 translate-y-0 text-sm bg-transparent px-0 text-gray-500 dark:text-gray-400'\n )}\n >\n {label}\n </label>\n )}\n </div>\n\n {hasAppend && <span className='flex shrink-0 items-start pt-0.5'>{renderAppend}</span>}\n </div>\n {status?.message && <span className={twMerge('text-sm', statusMessageClasses[status.tone])}>{status.message}</span>}\n </div>\n );\n }\n);\n\nTextArea.displayName = 'TextArea';\n\nexport type { TextAreaProps } from './types.textarea';\nexport default TextArea;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Form/TextArea/index.tsx"],"names":["createLowlight","common","TurndownService","marked","jsx","twMerge","React","useEditor","StarterKit","CodeBlockLowlight","nextValue","nextPosition","jsxs","Fragment","EditorContent"],"mappings":"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","file":"textarea.cjs","sourcesContent":["import React from 'react';\nimport CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';\nimport StarterKit from '@tiptap/starter-kit';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport { common, createLowlight } from 'lowlight';\nimport TurndownService from 'turndown';\nimport { marked } from 'marked';\nimport { twMerge } from 'tailwind-merge';\nimport type { InputRounded, InputSize, InputVariant } from '../Input/types';\nimport type { TextAreaFormattingToolbar, TextAreaProps } from './types.textarea';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-within:border-primary/70 dark:focus-within:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-within:border-primary/70 dark:focus-within:ring-primary/40',\n outline:\n 'rounded border-2 border-black bg-white focus-within:border-black focus-within:ring-2 focus-within:ring-black/30 dark:border-black dark:bg-transparent dark:focus-within:border-black dark:focus-within:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent px-0 bg-transparent focus-within:border-primary focus-within:ring-0 focus-within:ring-transparent dark:border-b-gray-600 dark:focus-within:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-within:bg-white focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-within:bg-slate-700 dark:focus-within:border-primary/60 dark:focus-within:ring-primary/25',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-within:border-primary/60 dark:focus-within:ring-primary/30',\n underlined:\n 'rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-within:border-primary focus-within:ring-0 focus-within:ring-transparent dark:border-b-gray-600 dark:focus-within:border-primary/70'\n} satisfies Record<InputVariant, string>;\n\nconst roundedClasses = {\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl'\n} satisfies Record<InputRounded, string>;\n\nconst sizeClasses = {\n 'x-small': {\n paddingY: 'py-2',\n paddingX: 'px-2',\n text: 'text-xs'\n },\n small: {\n paddingY: 'py-2.5',\n paddingX: 'px-2.5',\n text: 'text-sm'\n },\n medium: {\n paddingY: 'py-3',\n paddingX: 'px-3',\n text: 'text-base'\n },\n large: {\n paddingY: 'py-3.5',\n paddingX: 'px-3.5',\n text: 'text-lg'\n },\n 'x-large': {\n paddingY: 'py-4',\n paddingX: 'px-4',\n text: 'text-xl'\n }\n} satisfies Record<\n InputSize,\n {\n paddingY: string;\n paddingX: string;\n text: string;\n }\n>;\n\nconst statusClasses = {\n error: 'border-red-500 focus:border-red-500 focus:ring-red-400',\n warn: 'border-amber-500 focus:border-amber-500 focus:ring-amber-400',\n success: 'border-emerald-500 focus:border-emerald-500 focus:ring-emerald-400'\n} as const;\n\nconst statusMessageClasses = {\n error: 'text-red-600 dark:text-red-300',\n warn: 'text-amber-600 dark:text-amber-300',\n success: 'text-emerald-600 dark:text-emerald-300'\n} as const;\n\nconst DEFAULT_TOOLBAR: TextAreaFormattingToolbar[] = [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'heading',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'codeBlock'\n];\nconst CODE_BLOCK_LANGUAGES = ['ts', 'json', 'python', 'bash'] as const;\nconst DEFAULT_CODE_BLOCK_LANGUAGE = CODE_BLOCK_LANGUAGES[0];\nconst TEXTAREA_TAB_CHARACTER = '\\t';\nconst lowlight = createLowlight(common);\nlowlight.registerAlias({ ts: 'typescript' });\nconst turndown = new TurndownService({\n codeBlockStyle: 'fenced',\n headingStyle: 'atx',\n bulletListMarker: '-'\n});\n\nconst markdownToHtml = (markdown?: string) => {\n if (!markdown) {\n return '<p></p>';\n }\n\n return marked.parse(markdown) as string;\n};\n\nconst htmlToMarkdown = (html: string) => turndown.turndown(html).trim();\n\nconst createChangeEvent = (element: HTMLTextAreaElement): React.ChangeEvent<HTMLTextAreaElement> =>\n ({\n target: element,\n currentTarget: element\n }) as React.ChangeEvent<HTMLTextAreaElement>;\n\nconst assignRef = <T,>(ref: React.ForwardedRef<T>, value: T | null) => {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n if (ref) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n};\n\nconst updateTextareaValue = (element: HTMLTextAreaElement, nextValue: string, selectionStart: number, selectionEnd: number) => {\n element.value = nextValue;\n element.setSelectionRange(selectionStart, selectionEnd);\n};\n\nconst indentSelectedLines = (value: string, selectionStart: number, selectionEnd: number) => {\n const lineStart = value.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n const lineEndIndex = value.indexOf('\\n', selectionEnd);\n const lineEnd = lineEndIndex === -1 ? value.length : lineEndIndex;\n const selectedBlock = value.slice(lineStart, lineEnd);\n const lines = selectedBlock.split('\\n');\n const indentedBlock = lines.map(line => `${TEXTAREA_TAB_CHARACTER}${line}`).join('\\n');\n\n return {\n nextValue: `${value.slice(0, lineStart)}${indentedBlock}${value.slice(lineEnd)}`,\n selectionStart: selectionStart + TEXTAREA_TAB_CHARACTER.length,\n selectionEnd: selectionEnd + lines.length * TEXTAREA_TAB_CHARACTER.length\n };\n};\n\nconst outdentSelectedLines = (value: string, selectionStart: number, selectionEnd: number) => {\n const lineStart = value.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n const lineEndIndex = value.indexOf('\\n', selectionEnd);\n const lineEnd = lineEndIndex === -1 ? value.length : lineEndIndex;\n const selectedBlock = value.slice(lineStart, lineEnd);\n const lines = selectedBlock.split('\\n');\n const updatedLines = lines.map(line => (line.startsWith(TEXTAREA_TAB_CHARACTER) ? line.slice(TEXTAREA_TAB_CHARACTER.length) : line));\n const removedBeforeSelectionStart =\n selectionStart === lineStart && !lines[0].startsWith(TEXTAREA_TAB_CHARACTER)\n ? 0\n : lines[0].startsWith(TEXTAREA_TAB_CHARACTER)\n ? TEXTAREA_TAB_CHARACTER.length\n : 0;\n const removedTotal = lines.reduce((count, line) => count + (line.startsWith(TEXTAREA_TAB_CHARACTER) ? TEXTAREA_TAB_CHARACTER.length : 0), 0);\n\n return {\n nextValue: `${value.slice(0, lineStart)}${updatedLines.join('\\n')}${value.slice(lineEnd)}`,\n selectionStart: Math.max(lineStart, selectionStart - removedBeforeSelectionStart),\n selectionEnd: Math.max(lineStart, selectionEnd - removedTotal)\n };\n};\n\ntype ToolbarButtonProps = {\n label: string;\n active?: boolean;\n disabled?: boolean;\n onMouseDown: React.MouseEventHandler<HTMLButtonElement>;\n};\n\ntype CodeBlockLanguage = (typeof CODE_BLOCK_LANGUAGES)[number];\n\nconst isCodeBlockLanguage = (value: string): value is CodeBlockLanguage => CODE_BLOCK_LANGUAGES.includes(value as CodeBlockLanguage);\n\nconst ToolbarButton = ({ label, active, disabled, onMouseDown }: ToolbarButtonProps) => (\n <button\n type='button'\n disabled={disabled}\n onMouseDown={onMouseDown}\n className={twMerge(\n 'inline-flex min-w-8 items-center justify-center rounded border px-2 py-1 text-xs font-medium transition-colors',\n active\n ? 'border-primary bg-primary text-white'\n : 'border-gray-300 bg-white text-gray-700 hover:border-gray-400 hover:bg-gray-50 dark:border-slate-600 dark:bg-slate-900 dark:text-gray-200 dark:hover:bg-slate-800',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </button>\n);\n\n/**\n * Multiline text input matching Input variants, sizing and status messaging.\n */\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n variant = 'outline',\n size = 'medium',\n rounded = 'md',\n success,\n error,\n warn,\n className,\n wrapperClassName,\n label,\n prepend,\n append,\n rows = 4,\n richText = false,\n toolbar = DEFAULT_TOOLBAR,\n ...props\n },\n ref\n ) => {\n const { placeholder, onFocus, onBlur, onChange, onKeyDown, value, defaultValue, disabled, readOnly, ...textareaProps } = props;\n const reactId = React.useId();\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder;\n const [isFocused, setIsFocused] = React.useState(false);\n const classBase =\n 'textarea-base transition-colors duration-200 w-full has-[textarea:disabled]:opacity-50 has-[textarea:disabled]:cursor-not-allowed';\n const textareaBase =\n 'peer block w-full min-w-0 resize-y border-0 bg-transparent p-0 text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400 focus:outline-none focus:ring-0';\n const proseBase =\n 'ProseMirror min-h-[7rem] w-full border-0 bg-transparent p-0 text-gray-900 dark:text-gray-100 focus:outline-none [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-3 [&_blockquote]:italic dark:[&_blockquote]:border-slate-600 [&_:not(pre)>code]:rounded [&_:not(pre)>code]:bg-black [&_:not(pre)>code]:px-1 [&_:not(pre)>code]:py-0.5 [&_:not(pre)>code]:text-white dark:[&_:not(pre)>code]:bg-black dark:[&_:not(pre)>code]:text-white [&_pre]:overflow-x-auto [&_pre]:rounded [&_pre]:bg-black [&_pre]:p-3 [&_pre]:text-white [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-white [&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5 [&_h1]:text-2xl [&_h1]:font-semibold [&_h2]:text-xl [&_h2]:font-semibold';\n const hiddenTextareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n const forwardedRef = React.useRef<HTMLTextAreaElement | null>(null);\n const isControlled = value !== undefined;\n const markdownValue = typeof value === 'string' ? value : typeof defaultValue === 'string' ? defaultValue : '';\n const [internalMarkdown, setInternalMarkdown] = React.useState(markdownValue);\n const resolvedMarkdownValue = isControlled ? (typeof value === 'string' ? value : '') : internalMarkdown;\n\n const status = error\n ? { tone: 'error' as const, message: error }\n : warn\n ? { tone: 'warn' as const, message: warn }\n : success\n ? { tone: 'success' as const, message: success }\n : undefined;\n\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const toneClass = status ? statusClasses[status.tone] : undefined;\n const hasPrepend = typeof prepend === 'string' ? prepend.trim().length > 0 : Boolean(prepend);\n const hasAppend = typeof append === 'string' ? append.trim().length > 0 : Boolean(append);\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = [sizeConfig.paddingY, sizeConfig.paddingX, sizeConfig.text].join(' ');\n const roundedClass = variant === 'sharp' || variant === 'text' || variant === 'underlined' ? 'rounded-none' : roundedClasses[rounded];\n\n const inputName = textareaProps.name || reactId;\n const basePlaceholder = placeholder ?? (hasLabel ? ' ' : undefined);\n const placeholderValue = hidePlaceholderUntilFocus ? (isFocused ? placeholder : ' ') : basePlaceholder;\n const placeholderClass = hidePlaceholderUntilFocus\n ? 'placeholder-transparent focus:placeholder-gray-500 focus:dark:placeholder-gray-400'\n : undefined;\n const editor = useEditor({\n extensions: [\n StarterKit.configure({ heading: { levels: [1, 2] }, codeBlock: false }),\n CodeBlockLowlight.configure({\n defaultLanguage: DEFAULT_CODE_BLOCK_LANGUAGE,\n enableTabIndentation: true,\n lowlight,\n HTMLAttributes: {\n class: 'hljs'\n }\n })\n ],\n content: markdownToHtml(resolvedMarkdownValue),\n editable: richText && !disabled && !readOnly,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: twMerge(proseBase, placeholderClass),\n 'data-placeholder': placeholderValue ?? ''\n }\n },\n onFocus: () => {\n if (!richText) {\n return;\n }\n\n if (hidePlaceholderUntilFocus) {\n setIsFocused(true);\n }\n const target = hiddenTextareaRef.current;\n if (target) {\n onFocus?.(createChangeEvent(target) as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n },\n onBlur: () => {\n if (!richText) {\n return;\n }\n\n if (hidePlaceholderUntilFocus) {\n setIsFocused(false);\n }\n const target = hiddenTextareaRef.current;\n if (target) {\n onBlur?.(createChangeEvent(target) as unknown as React.FocusEvent<HTMLTextAreaElement>);\n }\n },\n onUpdate: ({ editor: currentEditor }) => {\n if (!richText) {\n return;\n }\n\n const nextMarkdown = htmlToMarkdown(currentEditor.getHTML());\n const target = hiddenTextareaRef.current;\n\n setInternalMarkdown(nextMarkdown);\n\n if (!target) {\n return;\n }\n\n target.value = nextMarkdown;\n onChange?.(createChangeEvent(target));\n }\n });\n const activeCodeBlockLanguage = (() => {\n const language = editor?.getAttributes('codeBlock').language;\n if (typeof language === 'string' && isCodeBlockLanguage(language)) {\n return language;\n }\n\n return DEFAULT_CODE_BLOCK_LANGUAGE;\n })();\n\n React.useEffect(() => {\n if (!richText) {\n return;\n }\n\n const target = hiddenTextareaRef.current;\n if (!target) {\n return;\n }\n\n target.value = resolvedMarkdownValue;\n forwardedRef.current = target;\n assignRef(ref, target);\n }, [ref, resolvedMarkdownValue, richText]);\n\n React.useEffect(() => {\n if (!editor || !richText || !isControlled) {\n return;\n }\n\n const nextMarkdown = typeof value === 'string' ? value : '';\n const currentMarkdown = htmlToMarkdown(editor.getHTML());\n if (currentMarkdown === nextMarkdown) {\n return;\n }\n\n editor.commands.setContent(markdownToHtml(nextMarkdown), { emitUpdate: false });\n }, [editor, isControlled, richText, value]);\n\n React.useEffect(() => {\n if (!isControlled) {\n setInternalMarkdown(typeof defaultValue === 'string' ? defaultValue : '');\n }\n }, [defaultValue, isControlled]);\n\n React.useEffect(() => {\n if (!editor || !richText) {\n return;\n }\n\n editor.setEditable(!disabled && !readOnly);\n }, [disabled, editor, readOnly, richText]);\n\n const renderPrepend = hasPrepend ? (\n typeof prepend === 'string' ? (\n <span className={twMerge('text-gray-500 dark:text-gray-400', sizeConfig.text)}>{prepend}</span>\n ) : (\n prepend\n )\n ) : null;\n const renderAppend = hasAppend ? (\n typeof append === 'string' ? (\n <span className={twMerge('text-gray-500 dark:text-gray-400', sizeConfig.text)}>{append}</span>\n ) : (\n append\n )\n ) : null;\n\n const handleFocus: React.FocusEventHandler<HTMLTextAreaElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLTextAreaElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLTextAreaElement> = event => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented || event.key !== 'Tab' || disabled || readOnly) {\n return;\n }\n\n const target = event.currentTarget;\n const { selectionStart, selectionEnd, value: currentValue } = target;\n\n event.preventDefault();\n\n if (selectionStart !== selectionEnd && currentValue.slice(selectionStart, selectionEnd).includes('\\n')) {\n const nextState = event.shiftKey\n ? outdentSelectedLines(currentValue, selectionStart, selectionEnd)\n : indentSelectedLines(currentValue, selectionStart, selectionEnd);\n\n updateTextareaValue(target, nextState.nextValue, nextState.selectionStart, nextState.selectionEnd);\n onChange?.(createChangeEvent(target));\n return;\n }\n\n if (event.shiftKey) {\n const lineStart = currentValue.lastIndexOf('\\n', Math.max(0, selectionStart - 1)) + 1;\n if (currentValue.slice(lineStart, selectionStart).endsWith(TEXTAREA_TAB_CHARACTER)) {\n const nextValue = `${currentValue.slice(0, selectionStart - TEXTAREA_TAB_CHARACTER.length)}${currentValue.slice(selectionEnd)}`;\n const nextPosition = selectionStart - TEXTAREA_TAB_CHARACTER.length;\n\n updateTextareaValue(target, nextValue, nextPosition, nextPosition);\n onChange?.(createChangeEvent(target));\n }\n return;\n }\n\n const nextValue = `${currentValue.slice(0, selectionStart)}${TEXTAREA_TAB_CHARACTER}${currentValue.slice(selectionEnd)}`;\n const nextPosition = selectionStart + TEXTAREA_TAB_CHARACTER.length;\n\n updateTextareaValue(target, nextValue, nextPosition, nextPosition);\n onChange?.(createChangeEvent(target));\n };\n\n return (\n <div className={twMerge('flex flex-col gap-1', wrapperClassName)}>\n <div className={twMerge('flex w-full items-start gap-2', classBase, variantClass, roundedClass, toneClass, sizeClass, className)}>\n {hasPrepend && <span className='flex shrink-0 items-start pt-0.5'>{renderPrepend}</span>}\n\n <div className='relative min-w-0 flex-1'>\n {richText ? (\n <>\n <textarea\n {...textareaProps}\n ref={node => {\n hiddenTextareaRef.current = node;\n forwardedRef.current = node;\n if (node) {\n assignRef(ref, node);\n }\n }}\n id={inputName}\n name={inputName}\n rows={rows}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n disabled={disabled}\n readOnly\n tabIndex={-1}\n aria-hidden\n className='sr-only'\n />\n <div className='flex flex-wrap gap-1 border-b border-gray-200 pb-2 dark:border-slate-700'>\n {toolbar.includes('bold') && (\n <ToolbarButton\n label='B'\n disabled={!editor?.isEditable}\n active={editor?.isActive('bold')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBold().run();\n }}\n />\n )}\n {toolbar.includes('italic') && (\n <ToolbarButton\n label='I'\n disabled={!editor?.isEditable}\n active={editor?.isActive('italic')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleItalic().run();\n }}\n />\n )}\n {toolbar.includes('underline') && (\n <ToolbarButton\n label='U'\n disabled={!editor?.isEditable}\n active={editor?.isActive('underline')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleUnderline().run();\n }}\n />\n )}\n {toolbar.includes('strike') && (\n <ToolbarButton\n label='S'\n disabled={!editor?.isEditable}\n active={editor?.isActive('strike')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleStrike().run();\n }}\n />\n )}\n {toolbar.includes('heading') && (\n <>\n <ToolbarButton\n label='H1'\n disabled={!editor?.isEditable}\n active={editor?.isActive('heading', { level: 1 })}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleHeading({ level: 1 }).run();\n }}\n />\n <ToolbarButton\n label='H2'\n disabled={!editor?.isEditable}\n active={editor?.isActive('heading', { level: 2 })}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleHeading({ level: 2 }).run();\n }}\n />\n </>\n )}\n {toolbar.includes('bulletList') && (\n <ToolbarButton\n label='List'\n disabled={!editor?.isEditable}\n active={editor?.isActive('bulletList')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBulletList().run();\n }}\n />\n )}\n {toolbar.includes('orderedList') && (\n <ToolbarButton\n label='1.'\n disabled={!editor?.isEditable}\n active={editor?.isActive('orderedList')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleOrderedList().run();\n }}\n />\n )}\n {toolbar.includes('blockquote') && (\n <ToolbarButton\n label='Quote'\n disabled={!editor?.isEditable}\n active={editor?.isActive('blockquote')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleBlockquote().run();\n }}\n />\n )}\n {toolbar.includes('codeBlock') && (\n <>\n <ToolbarButton\n label='Code'\n disabled={!editor?.isEditable}\n active={editor?.isActive('codeBlock')}\n onMouseDown={event => {\n event.preventDefault();\n editor?.chain().focus().toggleCodeBlock({ language: activeCodeBlockLanguage }).run();\n }}\n />\n <label className='sr-only' htmlFor={`${inputName}-code-language`}>\n Code language\n </label>\n <select\n id={`${inputName}-code-language`}\n value={activeCodeBlockLanguage}\n disabled={!editor?.isEditable}\n className='min-w-24 rounded border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/30 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-600 dark:bg-slate-900 dark:text-gray-200'\n onChange={event => {\n const language = event.target.value;\n if (!isCodeBlockLanguage(language)) {\n return;\n }\n\n editor?.chain().focus().setCodeBlock({ language }).run();\n }}\n >\n {CODE_BLOCK_LANGUAGES.map(language => (\n <option key={language} value={language}>\n {language}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <EditorContent editor={editor} className='pt-3' />\n </>\n ) : (\n <textarea\n {...textareaProps}\n ref={node => {\n forwardedRef.current = node;\n assignRef(ref, node);\n }}\n id={inputName}\n name={inputName}\n rows={rows}\n placeholder={placeholderValue}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n defaultValue={defaultValue}\n className={twMerge(textareaBase, placeholderClass)}\n />\n )}\n\n {label && (\n <label\n htmlFor={inputName}\n className={twMerge(\n 'absolute left-0 z-10 transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200',\n '-top-2 -translate-y-full text-xs bg-white px-1 dark:bg-slate-900',\n !richText &&\n 'peer-focus:left-0 peer-focus:-top-5 peer-focus:-translate-y-full peer-focus:text-xs peer-focus:text-gray-600 dark:peer-focus:text-gray-300',\n !richText &&\n 'peer-placeholder-shown:top-3 peer-placeholder-shown:translate-y-0 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:px-0 peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400',\n !richText &&\n 'peer-not-placeholder-shown:left-0 peer-not-placeholder-shown:-top-2 peer-not-placeholder-shown:-translate-y-full peer-not-placeholder-shown:text-xs peer-not-placeholder-shown:bg-white peer-[&:peer-not-placeholder-shown:px-1 peer-[&:not(:placeholder-shpeer-not-placeholder-shown:text-gray-700 r-not-placeholder-shown:bg-slate-900 dark:peer-not-placeholder-shown:text-gray-200',\n richText && (isFocused || resolvedMarkdownValue) && '-top-2 -translate-y-full text-xs',\n richText &&\n !(isFocused || resolvedMarkdownValue) &&\n 'top-3 translate-y-0 text-sm bg-transparent px-0 text-gray-500 dark:text-gray-400'\n )}\n >\n {label}\n </label>\n )}\n </div>\n\n {hasAppend && <span className='flex shrink-0 items-start pt-0.5'>{renderAppend}</span>}\n </div>\n {status?.message && <span className={twMerge('text-sm', statusMessageClasses[status.tone])}>{status.message}</span>}\n </div>\n );\n }\n);\n\nTextArea.displayName = 'TextArea';\n\nexport type { TextAreaProps } from './types.textarea';\nexport default TextArea;\n"]}
|
package/dist/textarea.js
CHANGED