@mieweb/ui 0.11.0-dev.28 → 0.11.0-dev.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/MIGRATION.md +49 -0
  2. package/dist/chunk-2VISTX7O.js +802 -0
  3. package/dist/chunk-2VISTX7O.js.map +1 -0
  4. package/dist/{chunk-3XVJYGEE.js → chunk-43QBEF6N.js} +51 -18
  5. package/dist/chunk-43QBEF6N.js.map +1 -0
  6. package/dist/{chunk-J4IIHRMP.cjs → chunk-6GKIISNZ.cjs} +51 -18
  7. package/dist/chunk-6GKIISNZ.cjs.map +1 -0
  8. package/dist/{chunk-IEZXJWHJ.cjs → chunk-7XKM6V2K.cjs} +3 -3
  9. package/dist/{chunk-IEZXJWHJ.cjs.map → chunk-7XKM6V2K.cjs.map} +1 -1
  10. package/dist/{chunk-24MB5436.js → chunk-AK4LHJPC.js} +5 -2
  11. package/dist/chunk-AK4LHJPC.js.map +1 -0
  12. package/dist/chunk-AQUHEKXL.cjs +829 -0
  13. package/dist/chunk-AQUHEKXL.cjs.map +1 -0
  14. package/dist/{chunk-E63B5DB7.js → chunk-MBDT2MGR.js} +4 -4
  15. package/dist/{chunk-E63B5DB7.js.map → chunk-MBDT2MGR.js.map} +1 -1
  16. package/dist/{chunk-DXFP53KF.js → chunk-NIO3XVUV.js} +3 -3
  17. package/dist/{chunk-DXFP53KF.js.map → chunk-NIO3XVUV.js.map} +1 -1
  18. package/dist/{chunk-CXJWYWST.cjs → chunk-PRA2V5BP.cjs} +7 -7
  19. package/dist/{chunk-CXJWYWST.cjs.map → chunk-PRA2V5BP.cjs.map} +1 -1
  20. package/dist/{chunk-3E7C5N2G.js → chunk-SFSBYC46.js} +3 -3
  21. package/dist/{chunk-3E7C5N2G.js.map → chunk-SFSBYC46.js.map} +1 -1
  22. package/dist/{chunk-ZWKC4JML.cjs → chunk-ZIJMLRI3.cjs} +9 -9
  23. package/dist/{chunk-ZWKC4JML.cjs.map → chunk-ZIJMLRI3.cjs.map} +1 -1
  24. package/dist/{chunk-XL4XN4I6.cjs → chunk-ZLBNYCYT.cjs} +5 -2
  25. package/dist/chunk-ZLBNYCYT.cjs.map +1 -0
  26. package/dist/components/EmailEditor/index.cjs +16 -16
  27. package/dist/components/EmailEditor/index.js +7 -7
  28. package/dist/components/RecordHeader/index.cjs +4 -4
  29. package/dist/components/RecordHeader/index.js +2 -2
  30. package/dist/components/RichTextEditor/index.cjs +5 -5
  31. package/dist/components/RichTextEditor/index.d.cts +20 -0
  32. package/dist/components/RichTextEditor/index.d.ts +20 -0
  33. package/dist/components/RichTextEditor/index.js +2 -2
  34. package/dist/components/SuperChat/index.cjs +2 -2
  35. package/dist/components/SuperChat/index.js +2 -2
  36. package/dist/components/Textarea/index.cjs +22 -4
  37. package/dist/components/Textarea/index.d.cts +40 -14
  38. package/dist/components/Textarea/index.d.ts +40 -14
  39. package/dist/components/Textarea/index.js +15 -1
  40. package/dist/esheet.cjs +10 -5
  41. package/dist/esheet.cjs.map +1 -1
  42. package/dist/esheet.js +7 -2
  43. package/dist/esheet.js.map +1 -1
  44. package/dist/index.cjs +147 -151
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.cts +113 -52
  47. package/dist/index.d.ts +113 -52
  48. package/dist/index.js +14 -37
  49. package/dist/index.js.map +1 -1
  50. package/dist/styles.css +1 -1
  51. package/dist/tailwind-preset.cjs +4 -4
  52. package/dist/tailwind-preset.js +1 -1
  53. package/dist/utils/index.cjs +9 -9
  54. package/dist/utils/index.js +1 -1
  55. package/package.json +1 -1
  56. package/dist/chunk-24MB5436.js.map +0 -1
  57. package/dist/chunk-3XVJYGEE.js.map +0 -1
  58. package/dist/chunk-BUN6RUJ5.cjs +0 -393
  59. package/dist/chunk-BUN6RUJ5.cjs.map +0 -1
  60. package/dist/chunk-CPG7SDON.js +0 -370
  61. package/dist/chunk-CPG7SDON.js.map +0 -1
  62. package/dist/chunk-J4IIHRMP.cjs.map +0 -1
  63. package/dist/chunk-XL4XN4I6.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TextAreaRich/TextAreaRich.tsx","../src/components/TextAreaPlain/TextAreaPlain.tsx","../src/components/Textarea/Textarea.tsx"],"names":["React","jsx","React3","jsxs"],"mappings":"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","file":"chunk-2VISTX7O.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { RichTextEditor, type RichTextEditorProps } from '../RichTextEditor';\n\nexport interface TextAreaRichProps extends Omit<\n RichTextEditorProps,\n 'chromeless' | 'blockMenu' | 'defaultToolbar'\n> {\n /**\n * Initial toolbar visibility when `toolbar` is uncontrolled. TextAreaRich\n * is chromeless, so this defaults to `'hidden'`; the block gutter menu's\n * \"Show toolbar\" reveals it on demand.\n */\n defaultToolbar?: 'visible' | 'hidden';\n}\n\n/**\n * A textarea-like rich text surface: looks like the auto-growing `Textarea`\n * (bordered, single Input row tall, grows with content) but is\n * `RichTextEditor` underneath — toolbar hidden until requested, markdown\n * block shortcuts (`##` + space → heading…), the Notion-style block gutter\n * menu, and `.shortcut` macro expansion when `macros` is provided.\n *\n * The value contract is `RichTextEditor`'s: `value`/`onChange` carry **HTML**,\n * not plain text. Need plain text for form posts or native bindings — use\n * `Textarea`. Need the full always-on toolbar — use `RichTextEditor`.\n */\nconst TextAreaRich = React.forwardRef<HTMLDivElement, TextAreaRichProps>(\n (\n { className, markdownShortcuts = true, defaultToolbar = 'hidden', ...rest },\n ref\n ) => (\n <RichTextEditor\n ref={ref}\n chromeless\n blockMenu\n markdownShortcuts={markdownShortcuts}\n defaultToolbar={defaultToolbar}\n className={cn(\n // Textarea's chrome: border, radius, focus ring (on the wrapper via\n // focus-within since the editable sits inside it).\n 'border-input rounded-lg border',\n 'transition-colors duration-200',\n 'focus-within:ring-ring focus-within:border-transparent focus-within:ring-2',\n className\n )}\n {...rest}\n />\n )\n);\n\nTextAreaRich.displayName = 'TextAreaRich';\n\nexport { TextAreaRich };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { RequiredMark, type RequiredMarkVariant } from '../Input';\n\nconst textareaVariants = cva(\n [\n 'w-full px-3 py-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'resize-y',\n ],\n {\n variants: {\n size: {\n sm: 'text-sm min-h-[60px]',\n md: 'text-base min-h-[80px]',\n lg: 'text-lg min-h-[100px]',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n resize: {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer placeholder:text-transparent',\n },\n autoResize: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n // Floating labels reserve top padding so entered text always starts\n // below the floated label, plus a little extra min-height.\n {\n labelVariant: 'floating',\n size: 'sm',\n className: 'pt-5 min-h-[76px]',\n },\n {\n labelVariant: 'floating',\n size: 'md',\n className: 'pt-6 min-h-[96px]',\n },\n {\n labelVariant: 'floating',\n size: 'lg',\n className: 'pt-7 min-h-[120px]',\n },\n // Auto-growing textareas start at the same visual height as a\n // single-line Input (h-8/h-10/h-12): min-height matches the Input\n // size token and the vertical padding is tuned so one line of text\n // plus padding plus borders lands exactly on that height.\n {\n autoResize: true,\n labelVariant: 'stacked',\n size: 'sm',\n className: 'min-h-8 py-[5px]',\n },\n {\n autoResize: true,\n labelVariant: 'stacked',\n size: 'md',\n className: 'min-h-10 py-[7px]',\n },\n {\n autoResize: true,\n labelVariant: 'stacked',\n size: 'lg',\n className: 'min-h-12 py-[9px]',\n },\n // Floating label + auto-grow: single line below the floated label.\n {\n autoResize: true,\n labelVariant: 'floating',\n size: 'sm',\n className: 'min-h-[50px]',\n },\n {\n autoResize: true,\n labelVariant: 'floating',\n size: 'md',\n className: 'min-h-[58px]',\n },\n {\n autoResize: true,\n labelVariant: 'floating',\n size: 'lg',\n className: 'min-h-[66px]',\n },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n resize: 'vertical',\n labelVariant: 'stacked',\n autoResize: true,\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n ],\n {\n variants: {\n size: {\n sm: [\n 'text-sm top-3',\n 'peer-focus:top-1 peer-[:not(:placeholder-shown)]:top-1 peer-autofill:top-1',\n 'peer-focus:text-[0.65rem] peer-[:not(:placeholder-shown)]:text-[0.65rem] peer-autofill:text-[0.65rem]',\n ],\n md: [\n 'text-base top-4',\n 'peer-focus:top-1.5 peer-[:not(:placeholder-shown)]:top-1.5 peer-autofill:top-1.5',\n 'peer-focus:text-xs peer-[:not(:placeholder-shown)]:text-xs peer-autofill:text-xs',\n ],\n lg: [\n 'text-lg top-5',\n 'peer-focus:top-2 peer-[:not(:placeholder-shown)]:top-2 peer-autofill:top-2',\n 'peer-focus:text-sm peer-[:not(:placeholder-shown)]:text-sm peer-autofill:text-sm',\n ],\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface TextAreaPlainProps\n extends\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>,\n Omit<VariantProps<typeof textareaVariants>, 'labelVariant'> {\n /** Label for the textarea */\n label?: string;\n /**\n * How the label is rendered.\n * - `stacked` (default): label above the textarea.\n * - `floating`: label rests inside the textarea like a placeholder and\n * floats to the top (staying inside it) when focused or filled.\n * Ignores `placeholder`; when `hideLabel` is set, falls back to a\n * visually-hidden stacked label.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Whether the label should be visually hidden */\n hideLabel?: boolean;\n /** Error message to display */\n error?: string;\n /** Helper text to display */\n helperText?: string;\n /** Maximum character count */\n maxLength?: number;\n /** Show character count */\n showCount?: boolean;\n /**\n * Grow and shrink with content (default). The empty control matches a\n * single-line `Input`'s height; `rows` sets a taller growth floor, and\n * dragging the native resize handle sets a new floor the same way. Set\n * `false` for a classic fixed-height textarea.\n */\n autoResize?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n}\n\n/**\n * A multi-line text input component with character count and auto-resize.\n *\n * @example\n * ```tsx\n * <TextAreaPlain label=\"Description\" placeholder=\"Enter a description...\" />\n * <TextAreaPlain\n * label=\"Bio\"\n * maxLength={280}\n * showCount\n * helperText=\"Tell us about yourself\"\n * />\n * ```\n */\nconst TextAreaPlain = React.forwardRef<HTMLTextAreaElement, TextAreaPlainProps>(\n (\n {\n className,\n size,\n hasError,\n resize,\n label,\n labelVariant = 'stacked',\n hideLabel,\n error,\n helperText,\n maxLength,\n showCount = false,\n autoResize = true,\n required = false,\n requiredVariant,\n id,\n rows,\n value,\n defaultValue,\n onChange,\n placeholder,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLTextAreaElement>(null);\n const [internalValue, setInternalValue] = React.useState(\n (defaultValue as string) || ''\n );\n\n const generatedId = React.useId();\n const textareaId = id || generatedId;\n const errorId = `${textareaId}-error`;\n const helperId = `${textareaId}-helper`;\n const countId = `${textareaId}-count`;\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n // Get current value\n const currentValue = value !== undefined ? String(value) : internalValue;\n const characterCount = currentValue.length;\n\n // Auto-resize logic: collapse to natural height, then grow to fit\n // content. CSS min-height (single-line baseline) and rows (via\n // scrollHeight) act as floors; a consumer-configured initial height\n // (style/class) and dragging the native resize handle set a user floor;\n // a consumer max-height still caps the rendered height.\n const userFloorRef = React.useRef<number | null>(null);\n const expectedHeightRef = React.useRef<number | null>(null);\n const initialFloorCapturedRef = React.useRef(false);\n\n const adjustHeight = React.useCallback(() => {\n const textarea = internalRef.current;\n if (textarea && autoResize) {\n textarea.style.height = 'auto';\n const borders = textarea.offsetHeight - textarea.clientHeight;\n const next = Math.max(\n textarea.scrollHeight + borders,\n userFloorRef.current ?? 0\n );\n textarea.style.height = `${next}px`;\n // Record the actual rendered height (a CSS max-height may clamp the\n // value we set) so clamping is never mistaken for a manual drag.\n expectedHeightRef.current = textarea.offsetHeight || next;\n }\n }, [autoResize]);\n\n // Measures prefilled values on mount and controlled values on update.\n // On mount, a consumer-configured initial height (inline style or a\n // height class) that exceeds the content height becomes the growth\n // floor — auto-sizing must not collapse below a configured baseline.\n React.useEffect(() => {\n const textarea = internalRef.current;\n if (textarea && autoResize && !initialFloorCapturedRef.current) {\n initialFloorCapturedRef.current = true;\n const configured = textarea.offsetHeight;\n adjustHeight();\n if (configured - textarea.offsetHeight > 1) {\n userFloorRef.current = configured;\n textarea.style.height = `${configured}px`;\n expectedHeightRef.current = textarea.offsetHeight || configured;\n }\n return;\n }\n adjustHeight();\n }, [currentValue, adjustHeight, autoResize]);\n\n // Re-measure when the available width changes (wrapping changes), and\n // detect heights we didn't set ourselves — the user dragging the native\n // resize handle — adopting the dragged height as the new growth floor.\n // The drag check runs first so a diagonal resize (width + height in one\n // notification) keeps the dragged height through the re-measure.\n React.useEffect(() => {\n const textarea = internalRef.current;\n if (!autoResize || !textarea || typeof ResizeObserver === 'undefined') {\n return;\n }\n let lastWidth = textarea.offsetWidth;\n const observer = new ResizeObserver(() => {\n const expected = expectedHeightRef.current;\n const height = textarea.offsetHeight;\n if (expected !== null && Math.abs(height - expected) > 1) {\n userFloorRef.current = height;\n expectedHeightRef.current = height;\n }\n if (textarea.offsetWidth !== lastWidth) {\n lastWidth = textarea.offsetWidth;\n adjustHeight();\n }\n });\n observer.observe(textarea);\n return () => observer.disconnect();\n }, [autoResize, adjustHeight]);\n\n // Handle change\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n adjustHeight();\n },\n [value, onChange, adjustHeight]\n );\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n showCount ? countId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n const textareaElement = (\n <textarea\n data-slot=\"textarea\"\n data-auto-resize={autoResize ? 'true' : undefined}\n ref={internalRef}\n id={textareaId}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n onChange={handleChange}\n maxLength={maxLength}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n required={required}\n // Auto-grow starts at one visible line; an explicit rows raises the\n // floor (scrollHeight never reports less than the rows box).\n rows={autoResize ? (rows ?? 1) : rows}\n // A single-space placeholder keeps :placeholder-shown reliable so the\n // label can float via CSS alone.\n placeholder={isFloating ? ' ' : placeholder}\n className={cn(\n textareaVariants({\n size,\n hasError: hasError || !!error,\n resize,\n labelVariant: isFloating ? 'floating' : 'stacked',\n autoResize,\n }),\n className\n )}\n {...props}\n />\n );\n\n return (\n <div data-slot=\"textarea-wrapper\" className=\"flex flex-col gap-1.5\">\n {label && !isFloating && (\n <label\n data-slot=\"textarea-label\"\n htmlFor={textareaId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n {isFloating ? (\n <div className=\"relative\">\n {textareaElement}\n <label\n data-slot=\"textarea-label\"\n htmlFor={textareaId}\n className={floatingLabelVariants({\n size,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n </div>\n ) : (\n textareaElement\n )}\n <div\n data-slot=\"textarea-footer\"\n className=\"flex items-center justify-between gap-2\"\n >\n <div className=\"flex-1\">\n {error && (\n <p\n id={errorId}\n data-slot=\"textarea-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"textarea-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n {showCount && (\n <p\n id={countId}\n data-slot=\"textarea-count\"\n className={cn(\n 'text-muted-foreground shrink-0 text-xs',\n maxLength && characterCount >= maxLength && 'text-destructive'\n )}\n >\n {characterCount}\n {maxLength && `/${maxLength}`}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextAreaPlain.displayName = 'TextAreaPlain';\n\nexport { TextAreaPlain, textareaVariants };\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { RequiredMark } from '../Input';\nimport { TextAreaRich } from '../TextAreaRich';\nimport { TextAreaPlain } from '../TextAreaPlain';\nimport type { TextAreaPlainProps } from '../TextAreaPlain';\n\n/**\n * `Textarea` keeps `TextAreaPlain`'s prop surface so existing call sites\n * compile unchanged while rendering `TextAreaRich` underneath.\n */\nexport interface TextareaProps extends TextAreaPlainProps {\n /**\n * Set `false` to opt out of the rich surface: renders the native\n * `TextAreaPlain` instead — no block gutter menu, no formatting, no HTML —\n * and restores every native textarea behaviour (`maxLength` enforcement,\n * `resize`, `autoResize={false}`, floating labels).\n */\n richText?: boolean;\n}\n\n// --- plain text <-> HTML (lossless round-trip for plain text) --------------\n\nfunction escapeHtml(text: string): string {\n return text\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;');\n}\n\n/**\n * Newline normalization applied to every incoming plain value: a native\n * textarea's API value never contains CR, so CRLF/CR collapse to LF before\n * any conversion. Without this, `'a\\r\\nb'` would leave a literal CR inside a\n * paragraph and gain a blank line on the next round-trip.\n */\nfunction normalizeNewlines(text: string): string {\n return text.replace(/\\r\\n?/g, '\\n');\n}\n\n/**\n * Converts plain text to the editor's HTML: each line becomes a paragraph,\n * empty lines become `<p><br></p>`. Newlines are normalized to LF first\n * (matching native textarea behaviour); after that,\n * `htmlToPlain(plainToHtml(text)) === text` for every string, so stored\n * plain values survive untouched.\n */\nexport function plainToHtml(text: string): string {\n if (!text) return '';\n return normalizeNewlines(text)\n .split('\\n')\n .map((line) => (line ? `<p>${escapeHtml(line)}</p>` : '<p><br></p>'))\n .join('');\n}\n\nconst BLOCK_TAGS = new Set([\n 'P',\n 'DIV',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'LI',\n 'UL',\n 'OL',\n 'BLOCKQUOTE',\n 'PRE',\n 'TABLE',\n 'CAPTION',\n 'THEAD',\n 'TBODY',\n 'TFOOT',\n 'TR',\n]);\n\n/** Table cells separate with tabs; their row supplies the newline. */\nconst CELL_TAGS = new Set(['TD', 'TH']);\n\n/**\n * Structural table tags never render text of their own — whitespace-only\n * text nodes directly under them are pretty-printing between cells/rows\n * (`<tr>\\n <td>`), not field content.\n */\nconst TABLE_STRUCTURE_TAGS = new Set([\n 'TABLE',\n 'THEAD',\n 'TBODY',\n 'TFOOT',\n 'TR',\n]);\n\n/** Tags whose text is invisible — contributing it would leak code as text. */\nconst IGNORED_TAGS = new Set(['SCRIPT', 'STYLE', 'TEMPLATE', 'NOSCRIPT']);\n\nfunction nodeListToText(nodes: Iterable<Node>): string {\n let out = '';\n // Cell separators are positional, not content-based: an empty cell still\n // owns a column, so `Drug | (blank) | Dose` must stay `Drug\\t\\tDose`.\n let afterCell = false;\n for (const node of nodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent ?? '';\n const parentTag = node.parentElement?.tagName;\n // Indentation between structural table elements is markup\n // formatting, not content — whitespace inside cells still counts.\n if (!text.trim() && parentTag && TABLE_STRUCTURE_TAGS.has(parentTag)) {\n continue;\n }\n out += text;\n // Inter-cell whitespace from pretty-printed table markup does not\n // break the cell sequence.\n if (text.trim()) afterCell = false;\n continue;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\n const el = node as Element;\n if (IGNORED_TAGS.has(el.tagName)) continue;\n if (el.tagName === 'BR') {\n afterCell = false;\n out += '\\n';\n continue;\n }\n if (CELL_TAGS.has(el.tagName)) {\n if (afterCell) out += '\\t';\n out += nodeListToText(el.childNodes);\n afterCell = true;\n continue;\n }\n afterCell = false;\n if (BLOCK_TAGS.has(el.tagName)) {\n // A block starts its own line — inline content before it\n // (`a<div>b</div>`) must not fuse with the block's first line.\n if (out && !out.endsWith('\\n')) out += '\\n';\n let inner = nodeListToText(el.childNodes);\n // A lone <br> inside a block is the \"empty paragraph\" convention,\n // not an extra line break.\n if (inner === '\\n') inner = '';\n out += inner;\n // A block ends its own line — but a nested block\n // (`<blockquote><p>a</p></blockquote>`) already supplied the\n // newline; adding another would fabricate a blank line.\n if (inner === '' || !inner.endsWith('\\n')) out += '\\n';\n continue;\n }\n out += nodeListToText(el.childNodes);\n }\n return out;\n}\n\n/** Extracts plain text from editor HTML: blocks and `<br>` become newlines. */\nexport function htmlToPlain(html: string): string {\n if (!html) return '';\n // A <template> is the spec's inert parser: untrusted markup (pasted HTML\n // reaches this extractor) cannot load resources or run handlers like\n // `<img onerror>` while being read — unlike a detached <div>, whose\n // subtree is still \"browsing-context connected\" enough to fetch.\n const root = document.createElement('template');\n root.innerHTML = html;\n const text = nodeListToText(root.content.childNodes);\n return text.endsWith('\\n') ? text.slice(0, -1) : text;\n}\n\n/**\n * Paste/drop insertion policy: clipboard HTML is flattened to escaped plain\n * paragraphs before it reaches the live editable, so clipboard styles, host\n * CSS classes and embedded content never become active inside a field whose\n * contract is plain text.\n */\nfunction sanitizePastedHtml(html: string): string {\n return plainToHtml(htmlToPlain(html));\n}\n\n// --- dev-only one-time warnings for dropped native behaviours ---------------\n\nconst warned = new Set<string>();\nfunction warnOnce(key: string, message: string): void {\n if (process.env.NODE_ENV !== 'production' && !warned.has(key)) {\n warned.add(key);\n console.warn(`[mieweb/ui Textarea] ${message}`);\n }\n}\n\n/**\n * The rich implementation behind `Textarea` (see its docs). Separate\n * component so the `richText={false}` branch never mounts these hooks.\n */\nconst RichTextarea = React.forwardRef<HTMLTextAreaElement, TextAreaPlainProps>(\n (\n {\n label,\n labelVariant = 'stacked',\n hideLabel,\n error,\n helperText,\n maxLength,\n showCount,\n autoResize = true,\n requiredVariant,\n size = 'md',\n hasError,\n resize,\n className,\n value,\n defaultValue,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n name,\n form,\n id,\n rows,\n required,\n readOnly,\n disabled,\n placeholder,\n 'aria-describedby': ariaDescribedBy,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n ref\n ) => {\n // One-time upgrade notice: this surface replaced the native <textarea>\n // in 0.12.0 — reaches exactly the developers affected, in dev only.\n warnOnce(\n 'rich-upgrade',\n 'Since 0.12.0 Textarea renders a rich text surface (plain-text value ' +\n 'contract unchanged). Watch for: CSS \"textarea\" selectors, E2E ' +\n 'fill()/type(), and maxLength no longer blocking typing. Opt out per ' +\n 'field with richText={false} or use TextAreaPlain. See MIGRATION.md.'\n );\n if (labelVariant === 'floating') {\n warnOnce(\n 'floating',\n 'labelVariant=\"floating\" is not supported by the rich surface; ' +\n 'falling back to a stacked label. Use TextAreaPlain for floating labels.'\n );\n }\n if (autoResize === false) {\n warnOnce(\n 'autoResize',\n 'autoResize={false} is ignored; the rich surface always grows with ' +\n 'content. Use TextAreaPlain for a fixed-height textarea.'\n );\n }\n if (resize !== undefined) {\n warnOnce(\n 'resize',\n 'resize is ignored; the rich surface has no native resize handle. ' +\n 'Use TextAreaPlain for drag-resizing.'\n );\n }\n if (maxLength !== undefined) {\n warnOnce(\n 'maxLength',\n 'maxLength is not enforced while typing; the character count still ' +\n 'reflects it. Enforce limits in onChange or use TextAreaPlain.'\n );\n }\n\n const reactId = React.useId();\n const errorId = `${reactId}-error`;\n const helperId = `${reactId}-helper`;\n const countId = `${reactId}-count`;\n\n const controlledValue =\n value !== undefined ? normalizeNewlines(String(value)) : undefined;\n\n const [state, setState] = React.useState(() => {\n const plain =\n controlledValue ??\n (defaultValue !== undefined\n ? normalizeNewlines(String(defaultValue))\n : '');\n return { html: plainToHtml(plain), plain };\n });\n\n // Controlled resync: only when the parent hands us a value different from\n // the plain text we last reported — echoing our own value back (the usual\n // controlled round-trip) keeps the user's rich formatting intact.\n if (controlledValue !== undefined && controlledValue !== state.plain) {\n setState({ html: plainToHtml(controlledValue), plain: controlledValue });\n }\n\n const hiddenRef = React.useRef<HTMLTextAreaElement>(null);\n const editorWrapperRef = React.useRef<HTMLDivElement>(null);\n\n // Rejected-edit resync. When a controlled parent refuses an edit, the\n // committed value never changes — the optimistic state above is reverted\n // during the same render — so the editor's [value]-gated sync never\n // fires and its DOM would keep the rejected text. Compare *plain* text\n // (not HTML) so accepted edits keep the user's rich formatting.\n React.useEffect(() => {\n const editable =\n editorWrapperRef.current?.querySelector<HTMLElement>(\n '[role=\"textbox\"]'\n );\n if (editable && htmlToPlain(editable.innerHTML) !== state.plain) {\n editable.innerHTML = state.html;\n }\n });\n\n const focusEditor = React.useCallback(() => {\n editorWrapperRef.current\n ?.querySelector<HTMLElement>('[role=\"textbox\"]')\n ?.focus();\n }, []);\n\n // The forwarded ref is the hidden mirror <textarea> — `ref.current.value`\n // reads the current plain text — with focus/blur redirected to the editor.\n React.useImperativeHandle(ref, () => {\n const node = hiddenRef.current as HTMLTextAreaElement;\n node.focus = focusEditor;\n node.blur = () => {\n const editable =\n editorWrapperRef.current?.querySelector<HTMLElement>(\n '[role=\"textbox\"]'\n );\n if (document.activeElement === editable) editable?.blur();\n };\n return node;\n }, [focusEditor]);\n\n // External-label bridge: existing call sites pair\n // `<Label htmlFor={id}>` with `<Textarea id={id}>`. The id now lands on a\n // contenteditable div, which `htmlFor` neither names nor focuses. Find\n // the external label, point `aria-labelledby` at it (restoring the\n // accessible name) and focus the editor when it is clicked.\n const [externalLabelId, setExternalLabelId] = React.useState<string>();\n React.useEffect(() => {\n if (!id) return;\n const externalLabel = document.querySelector<HTMLLabelElement>(\n `label[for=\"${globalThis.CSS.escape(id)}\"]`\n );\n if (!externalLabel) return;\n if (!externalLabel.id) externalLabel.id = `${reactId}-external-label`;\n setExternalLabelId(externalLabel.id);\n const handleClick = () => focusEditor();\n externalLabel.addEventListener('click', handleClick);\n return () => externalLabel.removeEventListener('click', handleClick);\n }, [id, reactId, focusEditor]);\n\n // Re-targets editor events at the mirror so legacy handlers keep reading\n // `event.target.value` as plain text, like they did on the native\n // textarea. The original event is the prototype — reads and propagation\n // state delegate to it — with only the targets overridden;\n // stopPropagation/preventDefault forward to the original so React's\n // dispatch loop (which checks the original) honours them.\n const retargetEvent = React.useCallback(\n <E extends React.SyntheticEvent>(event: E): E => {\n const node = hiddenRef.current;\n if (!node) return event;\n const retargeted = Object.create(event) as E;\n Object.defineProperties(retargeted, {\n target: { value: node, enumerable: true },\n currentTarget: { value: node, enumerable: true },\n stopPropagation: { value: () => event.stopPropagation() },\n preventDefault: { value: () => event.preventDefault() },\n });\n return retargeted;\n },\n []\n );\n\n type MirrorFocusEvent = React.FocusEvent<HTMLTextAreaElement>;\n type MirrorKeyboardEvent = React.KeyboardEvent<HTMLTextAreaElement>;\n\n // Focus boundary that includes the editor's own portals: the block\n // gutter menu mounts under `document.body` and moves focus to its first\n // item on open, so DOM containment alone would fire the host's blur\n // mid-format (a blur-to-save consumer would commit early). A portal is\n // ours when a trigger inside this wrapper `aria-controls` its menu.\n const focusStaysInside = (\n event: React.FocusEvent<HTMLDivElement>\n ): boolean => {\n const related = event.relatedTarget;\n if (!related) return false;\n if (event.currentTarget.contains(related)) return true;\n const menuId = related\n .closest('[data-slot=\"dropdown-menu\"]')\n ?.querySelector('[role=\"menu\"]')?.id;\n return (\n !!menuId &&\n !!event.currentTarget.querySelector(\n `[aria-controls=\"${globalThis.CSS.escape(menuId)}\"]`\n )\n );\n };\n\n const handleHtmlChange = (html: string) => {\n const plain = htmlToPlain(html);\n setState({ html, plain });\n const node = hiddenRef.current;\n if (onChange && node) {\n node.value = plain;\n const nativeEvent = new Event('change');\n onChange({\n target: node,\n currentTarget: node,\n type: 'change',\n bubbles: false,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 0,\n isTrusted: false,\n timeStamp: Date.now(),\n nativeEvent,\n preventDefault: () => {},\n stopPropagation: () => {},\n isDefaultPrevented: () => false,\n isPropagationStopped: () => false,\n persist: () => {},\n } as React.ChangeEvent<HTMLTextAreaElement>);\n }\n };\n\n const showError = !!error;\n const invalid = hasError || showError;\n const describedByIds =\n [\n showError ? errorId : null,\n helperText && !showError ? helperId : null,\n showCount ? countId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const characterCount = state.plain.length;\n\n // The editable's own metrics (RichTextEditor pins `text-base` and a\n // one-row min-height): `size` restyles the font, `rows` restores the\n // size-aware growth floor a native textarea got for free.\n const lineHeightPx = size === 'sm' ? 20 : size === 'lg' ? 28 : 24;\n const editorStyle = rows\n ? // 7px block padding each side, matching the editable's py-[7px].\n { minHeight: `${rows * lineHeightPx + 14}px` }\n : undefined;\n\n return (\n <div data-slot=\"textarea-wrapper\" className=\"flex flex-col gap-1.5\">\n {label && (\n <label\n data-slot=\"textarea-label\"\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {required && <RequiredMark variant={requiredVariant} />}\n </label>\n )}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions --\n not interactive itself: delegates events bubbling from the\n contenteditable textbox inside, like a native field's wrapper */}\n <div\n ref={editorWrapperRef}\n className=\"w-full\"\n // Composed like native textarea events: blur/focus only fire when\n // focus actually leaves/enters the field (moves inside the editor\n // chrome — gutter menu, toolbar — don't count), and all events are\n // re-targeted at the mirror so `event.target.value` stays plain.\n onBlur={\n onBlur &&\n ((event: React.FocusEvent<HTMLDivElement>) => {\n if (focusStaysInside(event)) return;\n onBlur(retargetEvent(event) as unknown as MirrorFocusEvent);\n })\n }\n onFocus={\n onFocus &&\n ((event: React.FocusEvent<HTMLDivElement>) => {\n if (focusStaysInside(event)) return;\n onFocus(retargetEvent(event) as unknown as MirrorFocusEvent);\n })\n }\n onKeyDown={\n onKeyDown &&\n ((event: React.KeyboardEvent<HTMLDivElement>) =>\n onKeyDown(retargetEvent(event) as unknown as MirrorKeyboardEvent))\n }\n onKeyUp={\n onKeyUp &&\n ((event: React.KeyboardEvent<HTMLDivElement>) =>\n onKeyUp(retargetEvent(event) as unknown as MirrorKeyboardEvent))\n }\n >\n <TextAreaRich\n value={state.html}\n onChange={handleHtmlChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n sanitizeHtml={sanitizePastedHtml}\n aria-label={ariaLabel ?? label}\n aria-labelledby={ariaLabelledBy ?? externalLabelId}\n aria-describedby={describedByIds}\n aria-invalid={invalid || undefined}\n aria-required={required || undefined}\n editorClassName={cn(\n // A native textarea renders repeated spaces and tabs\n // faithfully; normal HTML layout would collapse them.\n 'whitespace-pre-wrap',\n size === 'sm' && 'text-sm',\n size === 'lg' && 'text-lg'\n )}\n editorStyle={editorStyle}\n className={cn(\n size === 'sm' && 'text-sm',\n size === 'lg' && 'text-lg',\n invalid &&\n 'border-destructive focus-within:ring-destructive focus-within:border-destructive',\n disabled && 'cursor-not-allowed opacity-50',\n className\n )}\n />\n </div>\n {/* Mirrors the plain value for form posts and the forwarded ref. */}\n <textarea\n data-slot=\"textarea-mirror\"\n ref={hiddenRef}\n hidden\n readOnly\n tabIndex={-1}\n aria-hidden=\"true\"\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n value={state.plain}\n />\n <div\n data-slot=\"textarea-footer\"\n className=\"flex items-center justify-between gap-2\"\n >\n <div className=\"flex-1\">\n {showError && (\n <p\n id={errorId}\n data-slot=\"textarea-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !showError && (\n <p\n id={helperId}\n data-slot=\"textarea-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n {showCount && (\n <p\n id={countId}\n data-slot=\"textarea-count\"\n className={cn(\n 'text-muted-foreground shrink-0 text-xs',\n maxLength && characterCount >= maxLength && 'text-destructive'\n )}\n >\n {characterCount}\n {maxLength && `/${maxLength}`}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nRichTextarea.displayName = 'RichTextarea';\n\n/**\n * A multi-line text input that is rich text underneath. `Textarea` keeps its\n * plain-text contract — `value`, `defaultValue` and `onChange`'s\n * `event.target.value` are plain strings — while rendering `TextAreaRich`\n * (hidden toolbar, markdown shortcuts, block gutter menu) so every note\n * field gets formatting for free.\n *\n * Formatting the user applies is visible while editing but only the plain\n * text is reported through `onChange`; hosts that persist HTML should use\n * `TextAreaRich` directly. Need the native `<textarea>` element (hard\n * `maxLength`, native validation, autofill, drag-resize, floating label) —\n * pass `richText={false}` or use `TextAreaPlain`.\n *\n * A hidden `<textarea>` mirrors the plain value so `name` form posts and\n * `ref.current.value` keep working; `ref.current.focus()` focuses the editor.\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ richText = true, ...props }, ref) =>\n richText ? (\n <RichTextarea ref={ref} {...props} />\n ) : (\n <TextAreaPlain ref={ref} {...props} />\n )\n);\n\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Separator } from './chunk-OQWZYKJM.js';
2
2
  import { Dropdown, DropdownSeparator, DropdownLabel, DropdownItem, DropdownSubmenu } from './chunk-OYUIEJPN.js';
3
- import { isHtmlEmpty } from './chunk-ERLPVXOV.js';
4
3
  import { Input } from './chunk-3IMM2PM4.js';
4
+ import { isHtmlEmpty } from './chunk-ERLPVXOV.js';
5
5
  import { X, Search, History, BookOpen, ChevronRight, ChevronDown, Plus } from './chunk-BKSPDTX4.js';
6
6
  import { Button } from './chunk-WFBUBT54.js';
7
7
  import { cn } from './chunk-TQONQSJO.js';
@@ -463,8 +463,17 @@ var RichTextEditor = React2.forwardRef(
463
463
  blockMenuLabels,
464
464
  markdownShortcuts = false,
465
465
  chromeless = false,
466
- "aria-label": ariaLabel
466
+ id,
467
+ readOnly = false,
468
+ editorClassName,
469
+ editorStyle,
470
+ "aria-label": ariaLabel,
471
+ "aria-labelledby": ariaLabelledBy,
472
+ "aria-describedby": ariaDescribedBy,
473
+ "aria-invalid": ariaInvalid,
474
+ "aria-required": ariaRequired
467
475
  }, ref) => {
476
+ const inert = disabled || readOnly;
468
477
  const editorRef = React2.useRef(null);
469
478
  const [isListening, setIsListening] = React2.useState(false);
470
479
  const [speechSupported, setSpeechSupported] = React2.useState(false);
@@ -487,6 +496,7 @@ var RichTextEditor = React2.forwardRef(
487
496
  onToolbarChange?.(next);
488
497
  };
489
498
  const toolbarVisibleRef = React2.useRef(toolbarVisible);
499
+ const inertRef = React2.useRef(inert);
490
500
  const [blockMenuOpen, setBlockMenuOpen] = React2.useState(false);
491
501
  const [gutterTop, setGutterTop] = React2.useState(chromeless ? 7 : 16);
492
502
  const gutterWrapperRef = React2.useRef(null);
@@ -543,6 +553,16 @@ var RichTextEditor = React2.forwardRef(
543
553
  setIsListening(false);
544
554
  }
545
555
  }, [toolbarVisible]);
556
+ React2.useEffect(() => {
557
+ inertRef.current = inert;
558
+ if (!inert) return;
559
+ if (recognitionRef.current && isListeningRef.current) {
560
+ shouldRestartRef.current = false;
561
+ isListeningRef.current = false;
562
+ recognitionRef.current.stop();
563
+ setIsListening(false);
564
+ }
565
+ }, [inert]);
546
566
  React2.useEffect(() => {
547
567
  if (editorRef.current && editorRef.current.innerHTML !== value) {
548
568
  editorRef.current.innerHTML = value;
@@ -580,20 +600,20 @@ var RichTextEditor = React2.forwardRef(
580
600
  insertSanitized(html);
581
601
  };
582
602
  const execCommand = (command) => {
583
- if (disabled) return;
603
+ if (inert) return;
584
604
  document.execCommand(command, false);
585
605
  editorRef.current?.focus();
586
606
  updateContent();
587
607
  };
588
608
  const handleConvertToMustache = () => {
589
- if (disabled || !editorRef.current) return;
609
+ if (inert || !editorRef.current) return;
590
610
  editorRef.current.innerHTML = convertAngleBracketsToMustache(
591
611
  editorRef.current.innerHTML
592
612
  );
593
613
  updateContent();
594
614
  };
595
615
  const insertVariable = (variable) => {
596
- if (disabled || !editorRef.current) return;
616
+ if (inert || !editorRef.current) return;
597
617
  editorRef.current.focus();
598
618
  const textToInsert = variable.insertValue ?? variable.value;
599
619
  const selection = window.getSelection();
@@ -648,7 +668,7 @@ var RichTextEditor = React2.forwardRef(
648
668
  }
649
669
  };
650
670
  const insertMacro = (macro) => {
651
- if (disabled || !editorRef.current) return;
671
+ if (inert || !editorRef.current) return;
652
672
  focusRestoringSelection();
653
673
  insertTextAtSelection(macro.content);
654
674
  };
@@ -767,7 +787,7 @@ var RichTextEditor = React2.forwardRef(
767
787
  return true;
768
788
  };
769
789
  const handleEditorKeyDown = (event) => {
770
- if (disabled) return;
790
+ if (inert) return;
771
791
  if (blockMenu && event.key === "/" && (event.ctrlKey || event.metaKey) && !event.altKey) {
772
792
  event.preventDefault();
773
793
  openBlockMenuAtCaret();
@@ -846,7 +866,7 @@ var RichTextEditor = React2.forwardRef(
846
866
  setBlockMenuOpen(true);
847
867
  };
848
868
  const applyBlockFormat = (command, value2) => {
849
- if (disabled || !editorRef.current) return;
869
+ if (inert || !editorRef.current) return;
850
870
  setBlockMenuOpen(false);
851
871
  editorRef.current.focus();
852
872
  const target = blockTargetRangeRef.current;
@@ -890,7 +910,7 @@ var RichTextEditor = React2.forwardRef(
890
910
  );
891
911
  return;
892
912
  }
893
- if (!toolbarVisibleRef.current) return;
913
+ if (!toolbarVisibleRef.current || inertRef.current) return;
894
914
  const recognition = new SpeechRecognition();
895
915
  recognition.continuous = true;
896
916
  recognition.interimResults = true;
@@ -902,6 +922,7 @@ var RichTextEditor = React2.forwardRef(
902
922
  shouldRestartRef.current = true;
903
923
  };
904
924
  recognition.onresult = (event) => {
925
+ if (inertRef.current) return;
905
926
  let finalTranscript = "";
906
927
  for (let i = event.resultIndex; i < event.results.length; i++) {
907
928
  const result = event.results[i];
@@ -943,9 +964,9 @@ var RichTextEditor = React2.forwardRef(
943
964
  setIsListening(false);
944
965
  };
945
966
  recognition.onend = () => {
946
- if (shouldRestartRef.current && isListeningRef.current) {
967
+ if (shouldRestartRef.current && isListeningRef.current && !inertRef.current) {
947
968
  setTimeout(() => {
948
- if (shouldRestartRef.current && isListeningRef.current) {
969
+ if (shouldRestartRef.current && isListeningRef.current && !inertRef.current) {
949
970
  try {
950
971
  recognition.start();
951
972
  } catch {
@@ -1202,7 +1223,7 @@ var RichTextEditor = React2.forwardRef(
1202
1223
  variant: isListening ? "danger" : "ghost",
1203
1224
  size: "sm",
1204
1225
  onClick: toggleDictation,
1205
- disabled: disabled || !speechSupported,
1226
+ disabled: inert || !speechSupported,
1206
1227
  className: cn(
1207
1228
  "h-8 gap-1 px-2",
1208
1229
  isListening && "animate-pulse"
@@ -1251,7 +1272,7 @@ var RichTextEditor = React2.forwardRef(
1251
1272
  ),
1252
1273
  onMouseMove: blockMenu && !disabled ? handleGutterMouseMove : void 0,
1253
1274
  children: [
1254
- blockMenu && !disabled && /* @__PURE__ */ jsx(
1275
+ blockMenu && !inert && /* @__PURE__ */ jsx(
1255
1276
  "div",
1256
1277
  {
1257
1278
  "data-slot": "rich-text-editor-block-gutter",
@@ -1380,7 +1401,10 @@ var RichTextEditor = React2.forwardRef(
1380
1401
  // native textarea clips its own) instead of wrapping out
1381
1402
  // of the one-row field.
1382
1403
  chromeless ? "end-0 truncate px-3 py-[7px] text-base" : "p-4",
1383
- blockMenu && "ps-10"
1404
+ blockMenu && "ps-10",
1405
+ // Keep the placeholder's font in step with the editable
1406
+ // when the host restyles it (e.g. Textarea's `size`).
1407
+ editorClassName
1384
1408
  ),
1385
1409
  children: placeholder
1386
1410
  }
@@ -1389,10 +1413,17 @@ var RichTextEditor = React2.forwardRef(
1389
1413
  "div",
1390
1414
  {
1391
1415
  ref: editorRef,
1416
+ id,
1392
1417
  role: "textbox",
1393
1418
  "aria-multiline": "true",
1394
1419
  "aria-label": ariaLabel ?? placeholder,
1395
- contentEditable: !disabled,
1420
+ "aria-labelledby": ariaLabelledBy,
1421
+ "aria-describedby": ariaDescribedBy,
1422
+ "aria-invalid": ariaInvalid,
1423
+ "aria-required": ariaRequired,
1424
+ "aria-readonly": readOnly || void 0,
1425
+ "aria-disabled": disabled || void 0,
1426
+ contentEditable: !inert,
1396
1427
  "data-macros-open": hasMacros && macrosOpen ? "" : void 0,
1397
1428
  tabIndex: disabled ? -1 : 0,
1398
1429
  onInput: updateContent,
@@ -1421,8 +1452,10 @@ var RichTextEditor = React2.forwardRef(
1421
1452
  "[&_blockquote]:border-border [&_blockquote]:text-muted-foreground [&_blockquote]:my-2 [&_blockquote]:border-s-4 [&_blockquote]:ps-3",
1422
1453
  blockMenu && "ps-10",
1423
1454
  hasMacros && macrosOpen && "md:min-h-[400px]",
1424
- disabled && "bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300"
1455
+ disabled && "bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300",
1456
+ editorClassName
1425
1457
  ),
1458
+ style: editorStyle,
1426
1459
  suppressContentEditableWarning: true
1427
1460
  }
1428
1461
  )
@@ -1454,5 +1487,5 @@ var RichTextEditor = React2.forwardRef(
1454
1487
  RichTextEditor.displayName = "RichTextEditor";
1455
1488
 
1456
1489
  export { MacroLibrary, RichTextEditor, convertAngleBracketsToMustache, processDictation };
1457
- //# sourceMappingURL=chunk-3XVJYGEE.js.map
1458
- //# sourceMappingURL=chunk-3XVJYGEE.js.map
1490
+ //# sourceMappingURL=chunk-43QBEF6N.js.map
1491
+ //# sourceMappingURL=chunk-43QBEF6N.js.map