markdown-flow-ui 0.2.5 → 0.2.6

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 (42) hide show
  1. package/dist/_virtual/index.cjs8.js +1 -1
  2. package/dist/_virtual/index.cjs9.js +1 -1
  3. package/dist/_virtual/index.es8.js +2 -2
  4. package/dist/_virtual/index.es9.js +2 -2
  5. package/dist/assets/markdown-flow-ui.css +1 -1
  6. package/dist/components/ContentRender/CodeBlock.cjs.js.map +1 -1
  7. package/dist/components/ContentRender/CodeBlock.d.ts +1 -1
  8. package/dist/components/ContentRender/CodeBlock.es.js.map +1 -1
  9. package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
  10. package/dist/components/ContentRender/ContentRender.es.js +6 -1
  11. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  12. package/dist/components/MarkdownFlowEditor/locales/en-US.json.d.ts +70 -0
  13. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.d.ts +70 -0
  14. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.d.ts +70 -0
  15. package/dist/components/Slide/Slide.cjs.js +1 -1
  16. package/dist/components/Slide/Slide.cjs.js.map +1 -1
  17. package/dist/components/Slide/Slide.es.js +258 -254
  18. package/dist/components/Slide/Slide.es.js.map +1 -1
  19. package/dist/components/Slide/diff-utils.cjs.js +4 -4
  20. package/dist/components/Slide/diff-utils.cjs.js.map +1 -1
  21. package/dist/components/Slide/diff-utils.es.js +49 -49
  22. package/dist/components/Slide/diff-utils.es.js.map +1 -1
  23. package/dist/components/Slide/types.d.ts +1 -0
  24. package/dist/components/ui/inputGroup/input-group.cjs.js +1 -1
  25. package/dist/components/ui/inputGroup/input-group.cjs.js.map +1 -1
  26. package/dist/components/ui/inputGroup/input-group.d.ts +21 -1
  27. package/dist/components/ui/inputGroup/input-group.es.js +19 -17
  28. package/dist/components/ui/inputGroup/input-group.es.js.map +1 -1
  29. package/dist/components/ui/inputGroup/textarea.cjs.js.map +1 -1
  30. package/dist/components/ui/inputGroup/textarea.d.ts +2 -1
  31. package/dist/components/ui/inputGroup/textarea.es.js.map +1 -1
  32. package/dist/markdown-flow-ui-lib.css +1 -1
  33. package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
  34. package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
  35. package/dist/node_modules/classnames/index.cjs.js +1 -1
  36. package/dist/node_modules/classnames/index.es.js +1 -1
  37. package/package.json +1 -1
  38. package/dist/components/ContentRender/ContentRender.stories.d.ts +0 -37
  39. package/dist/components/ContentRender/MarkdownFlowInput.stories.d.ts +0 -33
  40. package/dist/components/MarkdownFlow/MarkdownFlow.stories.d.ts +0 -31
  41. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.stories.d.ts +0 -64
  42. package/dist/components/Slide/Slide.stories.d.ts +0 -2590
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=/!\+\+\+\s*([\s\S]*?)\s*!\+\+\+/,x=/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/,h=(e,n)=>e===n||e.trim()===n.trim(),d=e=>{if(!e)return{};const n=e.match(m);if(!n)return{trailingContent:e.trim()||void 0};const s=n[1]?.trim(),i=e.slice(n.index+n[0].length).trim();return{patchText:s||void 0,trailingContent:i||void 0}},p=e=>{const n=e.split(`
2
- `),s=n[0]?.match(/^---\s+a\/(\d+)/),i=n[1]?.match(/^\+\+\+\s+b\/(\d+)/);if(!s||!i||s[1]!==i[1])return null;const r=[];let t=null;return n.slice(2).forEach(o=>{const l=o.match(x);if(l){t&&r.push(t),t={oldStart:Number.parseInt(l[1],10),lines:[]};return}t&&t.lines.push(o)}),t&&r.push(t),r.length===0?null:{targetIndex:Number.parseInt(s[1],10),hunks:r}},g=(e,n)=>{const s=p(n);if(!s)return null;const i=e.split(`
3
- `),r=[];let t=0;for(const o of s.hunks){const l=Math.max(o.oldStart-1,0);for(;t<l&&t<i.length;)r.push(i[t]),t+=1;for(const f of o.lines){const u=f[0],a=f.slice(1);if(u===" "){const c=i[t];if(c==null||!h(c,a))return null;r.push(c),t+=1;continue}if(u==="-"){const c=i[t];if(c==null||!h(c,a))return null;t+=1;continue}if(u==="+"){r.push(a);continue}}}for(;t<i.length;)r.push(i[t]),t+=1;return r.join(`
4
- `)},C=(e,n)=>{const s=typeof n.content=="string"?n.content:void 0,{patchText:i,trailingContent:r}=d(s);if(!i)return r?[...e,{...n,type:"text",content:r}]:null;const t=p(i);if(!t)return null;const o=e[t.targetIndex],l=typeof o?.content=="string"?o.content:void 0;if(!o||!l)return null;const f=g(l,i);if(!f)return null;const u=e.map((a,c)=>c===t.targetIndex?{...a,content:f}:a);return r?[...u,{...n,type:"text",content:r}]:u};exports.applyDiffElement=C;exports.applyUnifiedDiff=g;exports.parseUnifiedDiff=p;exports.splitDiffContent=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=/!\+\+\+\s*([\s\S]*?)\s*!\+\+\+/,x=/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/,h=(r,n)=>r===n||r.trim()===n.trim(),d=r=>{if(!r)return{};const n=r.match(m);if(!n)return{trailingContent:r.trim()||void 0};const s=n[1]?.trim(),i=n.index??0,e=r.slice(i+n[0].length).trim();return{patchText:s||void 0,trailingContent:e||void 0}},p=r=>{const n=r.split(`
2
+ `),s=n[0]?.match(/^---\s+a\/(\d+)/),i=n[1]?.match(/^\+\+\+\s+b\/(\d+)/);if(!s||!i||s[1]!==i[1])return null;const e=[];let t=null;return n.slice(2).forEach(o=>{const l=o.match(x);if(l){t&&e.push(t),t={oldStart:Number.parseInt(l[1],10),lines:[]};return}t&&t.lines.push(o)}),t&&e.push(t),e.length===0?null:{targetIndex:Number.parseInt(s[1],10),hunks:e}},g=(r,n)=>{const s=p(n);if(!s)return null;const i=r.split(`
3
+ `),e=[];let t=0;for(const o of s.hunks){const l=Math.max(o.oldStart-1,0);for(;t<l&&t<i.length;)e.push(i[t]),t+=1;for(const f of o.lines){const u=f[0],a=f.slice(1);if(u===" "){const c=i[t];if(c==null||!h(c,a))return null;e.push(c),t+=1;continue}if(u==="-"){const c=i[t];if(c==null||!h(c,a))return null;t+=1;continue}if(u==="+"){e.push(a);continue}}}for(;t<i.length;)e.push(i[t]),t+=1;return e.join(`
4
+ `)},C=(r,n)=>{const s=typeof n.content=="string"?n.content:void 0,{patchText:i,trailingContent:e}=d(s);if(!i)return e?[...r,{...n,type:"text",content:e}]:null;const t=p(i);if(!t)return null;const o=r[t.targetIndex],l=typeof o?.content=="string"?o.content:void 0;if(!o||!l)return null;const f=g(l,i);if(!f)return null;const u=r.map((a,c)=>c===t.targetIndex?{...a,content:f}:a);return e?[...u,{...n,type:"text",content:e}]:u};exports.applyDiffElement=C;exports.applyUnifiedDiff=g;exports.parseUnifiedDiff=p;exports.splitDiffContent=d;
5
5
  //# sourceMappingURL=diff-utils.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-utils.cjs.js","sources":["../../../src/components/Slide/diff-utils.ts"],"sourcesContent":["import type { Element } from \"./types\";\n\ntype DiffHunk = {\n oldStart: number;\n lines: string[];\n};\n\ntype ParsedUnifiedDiff = {\n targetIndex: number;\n hunks: DiffHunk[];\n};\n\ntype DiffContentParts = {\n patchText?: string;\n trailingContent?: string;\n};\n\nconst DIFF_BLOCK_PATTERN = /!\\+\\+\\+\\s*([\\s\\S]*?)\\s*!\\+\\+\\+/;\nconst HUNK_HEADER_PATTERN = /^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/;\n\nconst isComparableLineMatch = (sourceLine: string, expectedLine: string) =>\n sourceLine === expectedLine || sourceLine.trim() === expectedLine.trim();\n\nexport const splitDiffContent = (content?: string): DiffContentParts => {\n if (!content) {\n return {};\n }\n\n const matched = content.match(DIFF_BLOCK_PATTERN);\n\n if (!matched) {\n return {\n trailingContent: content.trim() || undefined,\n };\n }\n\n const patchText = matched[1]?.trim();\n const trailingContent = content\n .slice(matched.index + matched[0].length)\n .trim();\n\n return {\n patchText: patchText || undefined,\n trailingContent: trailingContent || undefined,\n };\n};\n\nexport const parseUnifiedDiff = (\n patchText: string\n): ParsedUnifiedDiff | null => {\n const lines = patchText.split(\"\\n\");\n const targetMatch = lines[0]?.match(/^---\\s+a\\/(\\d+)/);\n const nextMatch = lines[1]?.match(/^\\+\\+\\+\\s+b\\/(\\d+)/);\n\n if (!targetMatch || !nextMatch || targetMatch[1] !== nextMatch[1]) {\n return null;\n }\n\n const hunks: DiffHunk[] = [];\n let currentHunk: DiffHunk | null = null;\n\n lines.slice(2).forEach((line) => {\n const headerMatch = line.match(HUNK_HEADER_PATTERN);\n\n if (headerMatch) {\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n currentHunk = {\n oldStart: Number.parseInt(headerMatch[1], 10),\n lines: [],\n };\n return;\n }\n\n if (currentHunk) {\n currentHunk.lines.push(line);\n }\n });\n\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n if (hunks.length === 0) {\n return null;\n }\n\n return {\n targetIndex: Number.parseInt(targetMatch[1], 10),\n hunks,\n };\n};\n\nexport const applyUnifiedDiff = (\n source: string,\n patchText: string\n): string | null => {\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const sourceLines = source.split(\"\\n\");\n const resultLines: string[] = [];\n let sourceCursor = 0;\n\n for (const hunk of parsed.hunks) {\n const hunkStartIndex = Math.max(hunk.oldStart - 1, 0);\n\n while (sourceCursor < hunkStartIndex && sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n for (const line of hunk.lines) {\n const marker = line[0];\n const expectedLine = line.slice(1);\n\n if (marker === \" \") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n resultLines.push(currentLine);\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"-\") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"+\") {\n resultLines.push(expectedLine);\n continue;\n }\n\n if (marker === \"\\\\\") {\n continue;\n }\n }\n }\n\n while (sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n return resultLines.join(\"\\n\");\n};\n\nexport const applyDiffElement = (\n currentList: Element[],\n diffElement: Element\n): Element[] | null => {\n const content =\n typeof diffElement.content === \"string\" ? diffElement.content : undefined;\n const { patchText, trailingContent } = splitDiffContent(content);\n\n if (!patchText) {\n return trailingContent\n ? [\n ...currentList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ]\n : null;\n }\n\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const targetElement = currentList[parsed.targetIndex];\n const targetContent =\n typeof targetElement?.content === \"string\"\n ? targetElement.content\n : undefined;\n\n if (!targetElement || !targetContent) {\n return null;\n }\n\n const patchedContent = applyUnifiedDiff(targetContent, patchText);\n\n if (!patchedContent) {\n return null;\n }\n\n const nextList = currentList.map((element, index) =>\n index === parsed.targetIndex\n ? {\n ...element,\n content: patchedContent,\n }\n : element\n );\n\n if (!trailingContent) {\n return nextList;\n }\n\n return [\n ...nextList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ];\n};\n"],"names":["DIFF_BLOCK_PATTERN","HUNK_HEADER_PATTERN","isComparableLineMatch","sourceLine","expectedLine","splitDiffContent","content","matched","patchText","trailingContent","parseUnifiedDiff","lines","targetMatch","nextMatch","hunks","currentHunk","line","headerMatch","applyUnifiedDiff","source","parsed","sourceLines","resultLines","sourceCursor","hunk","hunkStartIndex","marker","currentLine","applyDiffElement","currentList","diffElement","targetElement","targetContent","patchedContent","nextList","element","index"],"mappings":"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"}
1
+ {"version":3,"file":"diff-utils.cjs.js","sources":["../../../src/components/Slide/diff-utils.ts"],"sourcesContent":["import type { Element } from \"./types\";\n\ntype DiffHunk = {\n oldStart: number;\n lines: string[];\n};\n\ntype ParsedUnifiedDiff = {\n targetIndex: number;\n hunks: DiffHunk[];\n};\n\ntype DiffContentParts = {\n patchText?: string;\n trailingContent?: string;\n};\n\nconst DIFF_BLOCK_PATTERN = /!\\+\\+\\+\\s*([\\s\\S]*?)\\s*!\\+\\+\\+/;\nconst HUNK_HEADER_PATTERN = /^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/;\n\nconst isComparableLineMatch = (sourceLine: string, expectedLine: string) =>\n sourceLine === expectedLine || sourceLine.trim() === expectedLine.trim();\n\nexport const splitDiffContent = (content?: string): DiffContentParts => {\n if (!content) {\n return {};\n }\n\n const matched = content.match(DIFF_BLOCK_PATTERN);\n\n if (!matched) {\n return {\n trailingContent: content.trim() || undefined,\n };\n }\n\n const patchText = matched[1]?.trim();\n const matchStart = matched.index ?? 0;\n const trailingContent = content.slice(matchStart + matched[0].length).trim();\n\n return {\n patchText: patchText || undefined,\n trailingContent: trailingContent || undefined,\n };\n};\n\nexport const parseUnifiedDiff = (\n patchText: string\n): ParsedUnifiedDiff | null => {\n const lines = patchText.split(\"\\n\");\n const targetMatch = lines[0]?.match(/^---\\s+a\\/(\\d+)/);\n const nextMatch = lines[1]?.match(/^\\+\\+\\+\\s+b\\/(\\d+)/);\n\n if (!targetMatch || !nextMatch || targetMatch[1] !== nextMatch[1]) {\n return null;\n }\n\n const hunks: DiffHunk[] = [];\n let currentHunk: DiffHunk | null = null;\n\n lines.slice(2).forEach((line) => {\n const headerMatch = line.match(HUNK_HEADER_PATTERN);\n\n if (headerMatch) {\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n currentHunk = {\n oldStart: Number.parseInt(headerMatch[1], 10),\n lines: [],\n };\n return;\n }\n\n if (currentHunk) {\n currentHunk.lines.push(line);\n }\n });\n\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n if (hunks.length === 0) {\n return null;\n }\n\n return {\n targetIndex: Number.parseInt(targetMatch[1], 10),\n hunks,\n };\n};\n\nexport const applyUnifiedDiff = (\n source: string,\n patchText: string\n): string | null => {\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const sourceLines = source.split(\"\\n\");\n const resultLines: string[] = [];\n let sourceCursor = 0;\n\n for (const hunk of parsed.hunks) {\n const hunkStartIndex = Math.max(hunk.oldStart - 1, 0);\n\n while (sourceCursor < hunkStartIndex && sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n for (const line of hunk.lines) {\n const marker = line[0];\n const expectedLine = line.slice(1);\n\n if (marker === \" \") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n resultLines.push(currentLine);\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"-\") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"+\") {\n resultLines.push(expectedLine);\n continue;\n }\n\n if (marker === \"\\\\\") {\n continue;\n }\n }\n }\n\n while (sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n return resultLines.join(\"\\n\");\n};\n\nexport const applyDiffElement = (\n currentList: Element[],\n diffElement: Element\n): Element[] | null => {\n const content =\n typeof diffElement.content === \"string\" ? diffElement.content : undefined;\n const { patchText, trailingContent } = splitDiffContent(content);\n\n if (!patchText) {\n return trailingContent\n ? [\n ...currentList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ]\n : null;\n }\n\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const targetElement = currentList[parsed.targetIndex];\n const targetContent =\n typeof targetElement?.content === \"string\"\n ? targetElement.content\n : undefined;\n\n if (!targetElement || !targetContent) {\n return null;\n }\n\n const patchedContent = applyUnifiedDiff(targetContent, patchText);\n\n if (!patchedContent) {\n return null;\n }\n\n const nextList = currentList.map((element, index) =>\n index === parsed.targetIndex\n ? {\n ...element,\n content: patchedContent,\n }\n : element\n );\n\n if (!trailingContent) {\n return nextList;\n }\n\n return [\n ...nextList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ];\n};\n"],"names":["DIFF_BLOCK_PATTERN","HUNK_HEADER_PATTERN","isComparableLineMatch","sourceLine","expectedLine","splitDiffContent","content","matched","patchText","matchStart","trailingContent","parseUnifiedDiff","lines","targetMatch","nextMatch","hunks","currentHunk","line","headerMatch","applyUnifiedDiff","source","parsed","sourceLines","resultLines","sourceCursor","hunk","hunkStartIndex","marker","currentLine","applyDiffElement","currentList","diffElement","targetElement","targetContent","patchedContent","nextList","element","index"],"mappings":"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"}
@@ -1,106 +1,106 @@
1
- const d = /!\+\+\+\s*([\s\S]*?)\s*!\+\+\+/, g = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/, f = (e, n) => e === n || e.trim() === n.trim(), m = (e) => {
2
- if (!e)
1
+ const d = /!\+\+\+\s*([\s\S]*?)\s*!\+\+\+/, g = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/, f = (r, n) => r === n || r.trim() === n.trim(), m = (r) => {
2
+ if (!r)
3
3
  return {};
4
- const n = e.match(d);
4
+ const n = r.match(d);
5
5
  if (!n)
6
6
  return {
7
- trailingContent: e.trim() || void 0
7
+ trailingContent: r.trim() || void 0
8
8
  };
9
- const i = n[1]?.trim(), r = e.slice(n.index + n[0].length).trim();
9
+ const o = n[1]?.trim(), s = n.index ?? 0, e = r.slice(s + n[0].length).trim();
10
10
  return {
11
- patchText: i || void 0,
12
- trailingContent: r || void 0
11
+ patchText: o || void 0,
12
+ trailingContent: e || void 0
13
13
  };
14
- }, p = (e) => {
15
- const n = e.split(`
16
- `), i = n[0]?.match(/^---\s+a\/(\d+)/), r = n[1]?.match(/^\+\+\+\s+b\/(\d+)/);
17
- if (!i || !r || i[1] !== r[1])
14
+ }, p = (r) => {
15
+ const n = r.split(`
16
+ `), o = n[0]?.match(/^---\s+a\/(\d+)/), s = n[1]?.match(/^\+\+\+\s+b\/(\d+)/);
17
+ if (!o || !s || o[1] !== s[1])
18
18
  return null;
19
- const s = [];
19
+ const e = [];
20
20
  let t = null;
21
- return n.slice(2).forEach((o) => {
22
- const u = o.match(g);
21
+ return n.slice(2).forEach((i) => {
22
+ const u = i.match(g);
23
23
  if (u) {
24
- t && s.push(t), t = {
24
+ t && e.push(t), t = {
25
25
  oldStart: Number.parseInt(u[1], 10),
26
26
  lines: []
27
27
  };
28
28
  return;
29
29
  }
30
- t && t.lines.push(o);
31
- }), t && s.push(t), s.length === 0 ? null : {
32
- targetIndex: Number.parseInt(i[1], 10),
33
- hunks: s
30
+ t && t.lines.push(i);
31
+ }), t && e.push(t), e.length === 0 ? null : {
32
+ targetIndex: Number.parseInt(o[1], 10),
33
+ hunks: e
34
34
  };
35
- }, x = (e, n) => {
36
- const i = p(n);
37
- if (!i)
35
+ }, x = (r, n) => {
36
+ const o = p(n);
37
+ if (!o)
38
38
  return null;
39
- const r = e.split(`
40
- `), s = [];
39
+ const s = r.split(`
40
+ `), e = [];
41
41
  let t = 0;
42
- for (const o of i.hunks) {
43
- const u = Math.max(o.oldStart - 1, 0);
44
- for (; t < u && t < r.length; )
45
- s.push(r[t]), t += 1;
46
- for (const h of o.lines) {
42
+ for (const i of o.hunks) {
43
+ const u = Math.max(i.oldStart - 1, 0);
44
+ for (; t < u && t < s.length; )
45
+ e.push(s[t]), t += 1;
46
+ for (const h of i.lines) {
47
47
  const l = h[0], a = h.slice(1);
48
48
  if (l === " ") {
49
- const c = r[t];
49
+ const c = s[t];
50
50
  if (c == null || !f(c, a))
51
51
  return null;
52
- s.push(c), t += 1;
52
+ e.push(c), t += 1;
53
53
  continue;
54
54
  }
55
55
  if (l === "-") {
56
- const c = r[t];
56
+ const c = s[t];
57
57
  if (c == null || !f(c, a))
58
58
  return null;
59
59
  t += 1;
60
60
  continue;
61
61
  }
62
62
  if (l === "+") {
63
- s.push(a);
63
+ e.push(a);
64
64
  continue;
65
65
  }
66
66
  }
67
67
  }
68
- for (; t < r.length; )
69
- s.push(r[t]), t += 1;
70
- return s.join(`
68
+ for (; t < s.length; )
69
+ e.push(s[t]), t += 1;
70
+ return e.join(`
71
71
  `);
72
- }, C = (e, n) => {
73
- const i = typeof n.content == "string" ? n.content : void 0, { patchText: r, trailingContent: s } = m(i);
74
- if (!r)
75
- return s ? [
76
- ...e,
72
+ }, C = (r, n) => {
73
+ const o = typeof n.content == "string" ? n.content : void 0, { patchText: s, trailingContent: e } = m(o);
74
+ if (!s)
75
+ return e ? [
76
+ ...r,
77
77
  {
78
78
  ...n,
79
79
  type: "text",
80
- content: s
80
+ content: e
81
81
  }
82
82
  ] : null;
83
- const t = p(r);
83
+ const t = p(s);
84
84
  if (!t)
85
85
  return null;
86
- const o = e[t.targetIndex], u = typeof o?.content == "string" ? o.content : void 0;
87
- if (!o || !u)
86
+ const i = r[t.targetIndex], u = typeof i?.content == "string" ? i.content : void 0;
87
+ if (!i || !u)
88
88
  return null;
89
- const h = x(u, r);
89
+ const h = x(u, s);
90
90
  if (!h)
91
91
  return null;
92
- const l = e.map(
92
+ const l = r.map(
93
93
  (a, c) => c === t.targetIndex ? {
94
94
  ...a,
95
95
  content: h
96
96
  } : a
97
97
  );
98
- return s ? [
98
+ return e ? [
99
99
  ...l,
100
100
  {
101
101
  ...n,
102
102
  type: "text",
103
- content: s
103
+ content: e
104
104
  }
105
105
  ] : l;
106
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"diff-utils.es.js","sources":["../../../src/components/Slide/diff-utils.ts"],"sourcesContent":["import type { Element } from \"./types\";\n\ntype DiffHunk = {\n oldStart: number;\n lines: string[];\n};\n\ntype ParsedUnifiedDiff = {\n targetIndex: number;\n hunks: DiffHunk[];\n};\n\ntype DiffContentParts = {\n patchText?: string;\n trailingContent?: string;\n};\n\nconst DIFF_BLOCK_PATTERN = /!\\+\\+\\+\\s*([\\s\\S]*?)\\s*!\\+\\+\\+/;\nconst HUNK_HEADER_PATTERN = /^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/;\n\nconst isComparableLineMatch = (sourceLine: string, expectedLine: string) =>\n sourceLine === expectedLine || sourceLine.trim() === expectedLine.trim();\n\nexport const splitDiffContent = (content?: string): DiffContentParts => {\n if (!content) {\n return {};\n }\n\n const matched = content.match(DIFF_BLOCK_PATTERN);\n\n if (!matched) {\n return {\n trailingContent: content.trim() || undefined,\n };\n }\n\n const patchText = matched[1]?.trim();\n const trailingContent = content\n .slice(matched.index + matched[0].length)\n .trim();\n\n return {\n patchText: patchText || undefined,\n trailingContent: trailingContent || undefined,\n };\n};\n\nexport const parseUnifiedDiff = (\n patchText: string\n): ParsedUnifiedDiff | null => {\n const lines = patchText.split(\"\\n\");\n const targetMatch = lines[0]?.match(/^---\\s+a\\/(\\d+)/);\n const nextMatch = lines[1]?.match(/^\\+\\+\\+\\s+b\\/(\\d+)/);\n\n if (!targetMatch || !nextMatch || targetMatch[1] !== nextMatch[1]) {\n return null;\n }\n\n const hunks: DiffHunk[] = [];\n let currentHunk: DiffHunk | null = null;\n\n lines.slice(2).forEach((line) => {\n const headerMatch = line.match(HUNK_HEADER_PATTERN);\n\n if (headerMatch) {\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n currentHunk = {\n oldStart: Number.parseInt(headerMatch[1], 10),\n lines: [],\n };\n return;\n }\n\n if (currentHunk) {\n currentHunk.lines.push(line);\n }\n });\n\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n if (hunks.length === 0) {\n return null;\n }\n\n return {\n targetIndex: Number.parseInt(targetMatch[1], 10),\n hunks,\n };\n};\n\nexport const applyUnifiedDiff = (\n source: string,\n patchText: string\n): string | null => {\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const sourceLines = source.split(\"\\n\");\n const resultLines: string[] = [];\n let sourceCursor = 0;\n\n for (const hunk of parsed.hunks) {\n const hunkStartIndex = Math.max(hunk.oldStart - 1, 0);\n\n while (sourceCursor < hunkStartIndex && sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n for (const line of hunk.lines) {\n const marker = line[0];\n const expectedLine = line.slice(1);\n\n if (marker === \" \") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n resultLines.push(currentLine);\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"-\") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"+\") {\n resultLines.push(expectedLine);\n continue;\n }\n\n if (marker === \"\\\\\") {\n continue;\n }\n }\n }\n\n while (sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n return resultLines.join(\"\\n\");\n};\n\nexport const applyDiffElement = (\n currentList: Element[],\n diffElement: Element\n): Element[] | null => {\n const content =\n typeof diffElement.content === \"string\" ? diffElement.content : undefined;\n const { patchText, trailingContent } = splitDiffContent(content);\n\n if (!patchText) {\n return trailingContent\n ? [\n ...currentList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ]\n : null;\n }\n\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const targetElement = currentList[parsed.targetIndex];\n const targetContent =\n typeof targetElement?.content === \"string\"\n ? targetElement.content\n : undefined;\n\n if (!targetElement || !targetContent) {\n return null;\n }\n\n const patchedContent = applyUnifiedDiff(targetContent, patchText);\n\n if (!patchedContent) {\n return null;\n }\n\n const nextList = currentList.map((element, index) =>\n index === parsed.targetIndex\n ? {\n ...element,\n content: patchedContent,\n }\n : element\n );\n\n if (!trailingContent) {\n return nextList;\n }\n\n return [\n ...nextList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ];\n};\n"],"names":["DIFF_BLOCK_PATTERN","HUNK_HEADER_PATTERN","isComparableLineMatch","sourceLine","expectedLine","splitDiffContent","content","matched","patchText","trailingContent","parseUnifiedDiff","lines","targetMatch","nextMatch","hunks","currentHunk","line","headerMatch","applyUnifiedDiff","source","parsed","sourceLines","resultLines","sourceCursor","hunk","hunkStartIndex","marker","currentLine","applyDiffElement","currentList","diffElement","targetElement","targetContent","patchedContent","nextList","element","index"],"mappings":"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"}
1
+ {"version":3,"file":"diff-utils.es.js","sources":["../../../src/components/Slide/diff-utils.ts"],"sourcesContent":["import type { Element } from \"./types\";\n\ntype DiffHunk = {\n oldStart: number;\n lines: string[];\n};\n\ntype ParsedUnifiedDiff = {\n targetIndex: number;\n hunks: DiffHunk[];\n};\n\ntype DiffContentParts = {\n patchText?: string;\n trailingContent?: string;\n};\n\nconst DIFF_BLOCK_PATTERN = /!\\+\\+\\+\\s*([\\s\\S]*?)\\s*!\\+\\+\\+/;\nconst HUNK_HEADER_PATTERN = /^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/;\n\nconst isComparableLineMatch = (sourceLine: string, expectedLine: string) =>\n sourceLine === expectedLine || sourceLine.trim() === expectedLine.trim();\n\nexport const splitDiffContent = (content?: string): DiffContentParts => {\n if (!content) {\n return {};\n }\n\n const matched = content.match(DIFF_BLOCK_PATTERN);\n\n if (!matched) {\n return {\n trailingContent: content.trim() || undefined,\n };\n }\n\n const patchText = matched[1]?.trim();\n const matchStart = matched.index ?? 0;\n const trailingContent = content.slice(matchStart + matched[0].length).trim();\n\n return {\n patchText: patchText || undefined,\n trailingContent: trailingContent || undefined,\n };\n};\n\nexport const parseUnifiedDiff = (\n patchText: string\n): ParsedUnifiedDiff | null => {\n const lines = patchText.split(\"\\n\");\n const targetMatch = lines[0]?.match(/^---\\s+a\\/(\\d+)/);\n const nextMatch = lines[1]?.match(/^\\+\\+\\+\\s+b\\/(\\d+)/);\n\n if (!targetMatch || !nextMatch || targetMatch[1] !== nextMatch[1]) {\n return null;\n }\n\n const hunks: DiffHunk[] = [];\n let currentHunk: DiffHunk | null = null;\n\n lines.slice(2).forEach((line) => {\n const headerMatch = line.match(HUNK_HEADER_PATTERN);\n\n if (headerMatch) {\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n currentHunk = {\n oldStart: Number.parseInt(headerMatch[1], 10),\n lines: [],\n };\n return;\n }\n\n if (currentHunk) {\n currentHunk.lines.push(line);\n }\n });\n\n if (currentHunk) {\n hunks.push(currentHunk);\n }\n\n if (hunks.length === 0) {\n return null;\n }\n\n return {\n targetIndex: Number.parseInt(targetMatch[1], 10),\n hunks,\n };\n};\n\nexport const applyUnifiedDiff = (\n source: string,\n patchText: string\n): string | null => {\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const sourceLines = source.split(\"\\n\");\n const resultLines: string[] = [];\n let sourceCursor = 0;\n\n for (const hunk of parsed.hunks) {\n const hunkStartIndex = Math.max(hunk.oldStart - 1, 0);\n\n while (sourceCursor < hunkStartIndex && sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n for (const line of hunk.lines) {\n const marker = line[0];\n const expectedLine = line.slice(1);\n\n if (marker === \" \") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n resultLines.push(currentLine);\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"-\") {\n const currentLine = sourceLines[sourceCursor];\n\n if (\n currentLine == null ||\n !isComparableLineMatch(currentLine, expectedLine)\n ) {\n return null;\n }\n\n sourceCursor += 1;\n continue;\n }\n\n if (marker === \"+\") {\n resultLines.push(expectedLine);\n continue;\n }\n\n if (marker === \"\\\\\") {\n continue;\n }\n }\n }\n\n while (sourceCursor < sourceLines.length) {\n resultLines.push(sourceLines[sourceCursor]);\n sourceCursor += 1;\n }\n\n return resultLines.join(\"\\n\");\n};\n\nexport const applyDiffElement = (\n currentList: Element[],\n diffElement: Element\n): Element[] | null => {\n const content =\n typeof diffElement.content === \"string\" ? diffElement.content : undefined;\n const { patchText, trailingContent } = splitDiffContent(content);\n\n if (!patchText) {\n return trailingContent\n ? [\n ...currentList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ]\n : null;\n }\n\n const parsed = parseUnifiedDiff(patchText);\n\n if (!parsed) {\n return null;\n }\n\n const targetElement = currentList[parsed.targetIndex];\n const targetContent =\n typeof targetElement?.content === \"string\"\n ? targetElement.content\n : undefined;\n\n if (!targetElement || !targetContent) {\n return null;\n }\n\n const patchedContent = applyUnifiedDiff(targetContent, patchText);\n\n if (!patchedContent) {\n return null;\n }\n\n const nextList = currentList.map((element, index) =>\n index === parsed.targetIndex\n ? {\n ...element,\n content: patchedContent,\n }\n : element\n );\n\n if (!trailingContent) {\n return nextList;\n }\n\n return [\n ...nextList,\n {\n ...diffElement,\n type: \"text\",\n content: trailingContent,\n },\n ];\n};\n"],"names":["DIFF_BLOCK_PATTERN","HUNK_HEADER_PATTERN","isComparableLineMatch","sourceLine","expectedLine","splitDiffContent","content","matched","patchText","matchStart","trailingContent","parseUnifiedDiff","lines","targetMatch","nextMatch","hunks","currentHunk","line","headerMatch","applyUnifiedDiff","source","parsed","sourceLines","resultLines","sourceCursor","hunk","hunkStartIndex","marker","currentLine","applyDiffElement","currentList","diffElement","targetElement","targetContent","patchedContent","nextList","element","index"],"mappings":"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"}
@@ -29,6 +29,7 @@ export interface Element {
29
29
  readonly?: boolean;
30
30
  audio_segments?: ElementAudioSegment[];
31
31
  subtitle_cues?: ElementSubtitleCue[];
32
+ [key: string]: unknown;
32
33
  }
33
34
  export interface SlidePlayerCustomActionContext {
34
35
  currentElement?: Element;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../_virtual/jsx-runtime.cjs.js"),u=require("react"),p=require("../../../node_modules/class-variance-authority/dist/index.cjs.js"),s=require("../../../lib/utils.cjs.js"),d=require("./button.cjs.js"),l=require("./textarea.cjs.js");function c(t){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(a,e,n.get?n:{enumerable:!0,get:()=>t[e]})}}return a.default=t,Object.freeze(a)}const g=c(u);function x({className:t,...a}){return r.jsxRuntimeExports.jsx("span",{"data-slot":"input-group",role:"group",className:s.cn("bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none","h-9 min-w-0 has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>input]:pl-2","has-[>[data-align=inline-end]]:[&>input]:pr-2","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3","has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",t),...a})}const h=p.cva("text-sm shadow-none flex gap-2 items-center",{variants:{size:{xs:"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",sm:"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5","icon-xs":"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0","icon-sm":"size-8 p-0 has-[>svg]:p-0"}},defaultVariants:{size:"xs"}});function b({className:t,type:a="button",variant:e="ghost",size:n="xs",...i}){return r.jsxRuntimeExports.jsx(d.Button,{type:a,"data-size":n,variant:e,className:s.cn(h({size:n}),t),...i})}const o=g.forwardRef(({className:t,...a},e)=>r.jsxRuntimeExports.jsx(l.Textarea,{ref:e,"data-slot":"input-group-control",className:s.cn("resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent",t),...a}));o.displayName="InputGroupTextarea";exports.InputGroup=x;exports.InputGroupButton=b;exports.InputGroupTextarea=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../_virtual/jsx-runtime.cjs.js"),u=require("react"),p=require("../../../node_modules/class-variance-authority/dist/index.cjs.js"),s=require("../../../lib/utils.cjs.js"),d=require("./button.cjs.js"),l=require("./textarea.cjs.js");function c(t){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(a,e,n.get?n:{enumerable:!0,get:()=>t[e]})}}return a.default=t,Object.freeze(a)}const x=c(u);function g({className:t,...a}){return r.jsxRuntimeExports.jsx("span",{"data-slot":"input-group",role:"group",className:s.cn("bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none","h-9 min-w-0 has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>input]:pl-2","has-[>[data-align=inline-end]]:[&>input]:pr-2","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3","has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",t),...a})}const h=p.cva("text-sm shadow-none flex shrink-0 gap-2 items-center",{variants:{size:{xs:"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",sm:"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5","icon-xs":"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0","icon-sm":"size-8 p-0 has-[>svg]:p-0"}},defaultVariants:{size:"xs"}});function b({className:t,type:a="button",variant:e="ghost",size:n="xs",...i}){return r.jsxRuntimeExports.jsx(d.Button,{type:a,"data-size":n,variant:e,className:s.cn(h({size:n}),t),...i})}const o=x.forwardRef(({className:t,...a},e)=>r.jsxRuntimeExports.jsx(l.Textarea,{ref:e,"data-slot":"input-group-control",className:s.cn("min-w-0 max-w-none flex-1 resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent",t),...a}));o.displayName="InputGroupTextarea";exports.InputGroup=g;exports.InputGroupButton=b;exports.InputGroupTextarea=o;
2
2
  //# sourceMappingURL=input-group.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-group.cjs.js","sources":["../../../../src/components/ui/inputGroup/input-group.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <span\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupTextarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <Textarea\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(\n \"resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n});\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n"],"names":["InputGroup","className","props","jsx","cn","inputGroupButtonVariants","cva","InputGroupButton","type","variant","size","Button","InputGroupTextarea","React","ref","Textarea"],"mappings":"smBAQA,SAASA,EAAW,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CACxE,OACEC,EAAAA,kBAAAA,IAAC,OAAA,CACC,YAAU,cACV,KAAK,QACL,UAAWC,EAAAA,GACT,6JACA,qCAGA,kDACA,gDACA,iIACA,2HAGA,iLAEAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CA6CA,MAAMG,EAA2BC,EAAAA,IAC/B,8CACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,0GACJ,GAAI,kDACJ,UACE,8DACF,UAAW,2BAAA,CACb,EAEF,gBAAiB,CACf,KAAM,IAAA,CACR,CAEJ,EAEA,SAASC,EAAiB,CACxB,UAAAN,EACA,KAAAO,EAAO,SACP,QAAAC,EAAU,QACV,KAAAC,EAAO,KACP,GAAGR,CACL,EACiD,CAC/C,OACEC,EAAAA,kBAAAA,IAACQ,EAAAA,OAAA,CACC,KAAAH,EACA,YAAWE,EACX,QAAAD,EACA,UAAWL,EAAAA,GAAGC,EAAyB,CAAE,KAAAK,CAAA,CAAM,EAAGT,CAAS,EAC1D,GAAGC,CAAA,CAAA,CAGV,CA8BA,MAAMU,EAAqBC,EAAM,WAG/B,CAAC,CAAE,UAAAZ,EAAW,GAAGC,CAAA,EAASY,IAExBX,EAAAA,kBAAAA,IAACY,EAAAA,SAAA,CACC,IAAAD,EACA,YAAU,sBACV,UAAWV,EAAAA,GACT,0FACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGT,EACDU,EAAmB,YAAc"}
1
+ {"version":3,"file":"input-group.cjs.js","sources":["../../../../src/components/ui/inputGroup/input-group.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { TextAreaProps, TextAreaRef } from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <span\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex shrink-0 gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"min-w-0 flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupTextarea = React.forwardRef<TextAreaRef, TextAreaProps>(\n ({ className, ...props }, ref) => {\n return (\n <Textarea\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(\n \"min-w-0 max-w-none flex-1 resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n }\n);\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n"],"names":["InputGroup","className","props","jsx","cn","inputGroupButtonVariants","cva","InputGroupButton","type","variant","size","Button","InputGroupTextarea","React","ref","Textarea"],"mappings":"smBASA,SAASA,EAAW,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CACxE,OACEC,EAAAA,kBAAAA,IAAC,OAAA,CACC,YAAU,cACV,KAAK,QACL,UAAWC,EAAAA,GACT,6JACA,qCAGA,kDACA,gDACA,iIACA,2HAGA,iLAEAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CA6CA,MAAMG,EAA2BC,EAAAA,IAC/B,uDACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,0GACJ,GAAI,kDACJ,UACE,8DACF,UAAW,2BAAA,CACb,EAEF,gBAAiB,CACf,KAAM,IAAA,CACR,CAEJ,EAEA,SAASC,EAAiB,CACxB,UAAAN,EACA,KAAAO,EAAO,SACP,QAAAC,EAAU,QACV,KAAAC,EAAO,KACP,GAAGR,CACL,EACiD,CAC/C,OACEC,EAAAA,kBAAAA,IAACQ,EAAAA,OAAA,CACC,KAAAH,EACA,YAAWE,EACX,QAAAD,EACA,UAAWL,EAAAA,GAAGC,EAAyB,CAAE,KAAAK,CAAA,CAAM,EAAGT,CAAS,EAC1D,GAAGC,CAAA,CAAA,CAGV,CA8BA,MAAMU,EAAqBC,EAAM,WAC/B,CAAC,CAAE,UAAAZ,EAAW,GAAGC,CAAA,EAASY,IAEtBX,EAAAA,kBAAAA,IAACY,EAAAA,SAAA,CACC,IAAAD,EACA,YAAU,sBACV,UAAWV,EAAAA,GACT,oHACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAIZ,EACAU,EAAmB,YAAc"}
@@ -1,4 +1,5 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
+ import { TextAreaRef } from 'rc-textarea';
2
3
  import { Button } from './button';
3
4
  import * as React from "react";
4
5
  declare function InputGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
@@ -12,5 +13,24 @@ declare const inputGroupButtonVariants: (props?: ({
12
13
  declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, "size"> & VariantProps<typeof inputGroupButtonVariants>): React.JSX.Element;
13
14
  declare function InputGroupText({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
14
15
  declare function InputGroupInput({ className, ...props }: React.ComponentProps<"input">): React.JSX.Element;
15
- declare const InputGroupTextarea: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
16
+ declare const InputGroupTextarea: React.ForwardRefExoticComponent<Omit<import('rc-textarea/lib/interface').HTMLTextareaProps, "value" | "onResize"> & {
17
+ value?: import('rc-textarea/lib/interface').HTMLTextareaProps["value"] | bigint;
18
+ prefixCls?: string;
19
+ className?: string;
20
+ style?: React.CSSProperties;
21
+ autoSize?: boolean | import('rc-textarea').AutoSizeType;
22
+ onPressEnter?: React.KeyboardEventHandler<HTMLTextAreaElement>;
23
+ onResize?: (size: {
24
+ width: number;
25
+ height: number;
26
+ }) => void;
27
+ classNames?: import('rc-input/lib/interface').CommonInputProps["classNames"] & {
28
+ textarea?: string;
29
+ count?: string;
30
+ };
31
+ styles?: {
32
+ textarea?: React.CSSProperties;
33
+ count?: React.CSSProperties;
34
+ };
35
+ } & Pick<import('rc-input/lib/interface').BaseInputProps, "allowClear" | "suffix"> & Pick<import('rc-input').InputProps, "showCount" | "count" | "onClear"> & React.RefAttributes<TextAreaRef>>;
16
36
  export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
@@ -4,7 +4,7 @@ import { cva as p } from "../../../node_modules/class-variance-authority/dist/in
4
4
  import { cn as s } from "../../../lib/utils.es.js";
5
5
  import { Button as d } from "./button.es.js";
6
6
  import { Textarea as u } from "./textarea.es.js";
7
- function v({ className: a, ...t }) {
7
+ function f({ className: a, ...t }) {
8
8
  return /* @__PURE__ */ n.jsx(
9
9
  "span",
10
10
  {
@@ -27,7 +27,7 @@ function v({ className: a, ...t }) {
27
27
  );
28
28
  }
29
29
  const l = p(
30
- "text-sm shadow-none flex gap-2 items-center",
30
+ "text-sm shadow-none flex shrink-0 gap-2 items-center",
31
31
  {
32
32
  variants: {
33
33
  size: {
@@ -42,7 +42,7 @@ const l = p(
42
42
  }
43
43
  }
44
44
  );
45
- function f({
45
+ function v({
46
46
  className: a,
47
47
  type: t = "button",
48
48
  variant: r = "ghost",
@@ -60,22 +60,24 @@ function f({
60
60
  }
61
61
  );
62
62
  }
63
- const c = i.forwardRef(({ className: a, ...t }, r) => /* @__PURE__ */ n.jsx(
64
- u,
65
- {
66
- ref: r,
67
- "data-slot": "input-group-control",
68
- className: s(
69
- "resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent",
70
- a
71
- ),
72
- ...t
73
- }
74
- ));
63
+ const c = i.forwardRef(
64
+ ({ className: a, ...t }, r) => /* @__PURE__ */ n.jsx(
65
+ u,
66
+ {
67
+ ref: r,
68
+ "data-slot": "input-group-control",
69
+ className: s(
70
+ "min-w-0 max-w-none flex-1 resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent",
71
+ a
72
+ ),
73
+ ...t
74
+ }
75
+ )
76
+ );
75
77
  c.displayName = "InputGroupTextarea";
76
78
  export {
77
- v as InputGroup,
78
- f as InputGroupButton,
79
+ f as InputGroup,
80
+ v as InputGroupButton,
79
81
  c as InputGroupTextarea
80
82
  };
81
83
  //# sourceMappingURL=input-group.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-group.es.js","sources":["../../../../src/components/ui/inputGroup/input-group.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <span\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupTextarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <Textarea\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(\n \"resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n});\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n"],"names":["InputGroup","className","props","jsx","cn","inputGroupButtonVariants","cva","InputGroupButton","type","variant","size","Button","InputGroupTextarea","React","ref","Textarea"],"mappings":";;;;;;AAQA,SAASA,EAAW,EAAE,WAAAC,GAAW,GAAGC,KAAsC;AACxE,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAWC;AAAA,QACT;AAAA,QACA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAGA;AAAA,QAEAH;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AA6CA,MAAMG,IAA2BC;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,WACE;AAAA,QACF,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAEA,SAASC,EAAiB;AAAA,EACxB,WAAAN;AAAA,EACA,MAAAO,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,GAAGR;AACL,GACiD;AAC/C,SACEC,gBAAAA,EAAAA;AAAAA,IAACQ;AAAA,IAAA;AAAA,MACC,MAAAH;AAAA,MACA,aAAWE;AAAA,MACX,SAAAD;AAAA,MACA,WAAWL,EAAGC,EAAyB,EAAE,MAAAK,EAAA,CAAM,GAAGT,CAAS;AAAA,MAC1D,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AA8BA,MAAMU,IAAqBC,EAAM,WAG/B,CAAC,EAAE,WAAAZ,GAAW,GAAGC,EAAA,GAASY,MAExBX,gBAAAA,EAAAA;AAAAA,EAACY;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,aAAU;AAAA,IACV,WAAWV;AAAA,MACT;AAAA,MACAH;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AAAA,CAGT;AACDU,EAAmB,cAAc;"}
1
+ {"version":3,"file":"input-group.es.js","sources":["../../../../src/components/ui/inputGroup/input-group.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { TextAreaProps, TextAreaRef } from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <span\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"bg-white group/input-group border-input dark:bg-input/30 relative flex items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex shrink-0 gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n);\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"min-w-0 flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n}\n\nconst InputGroupTextarea = React.forwardRef<TextAreaRef, TextAreaProps>(\n ({ className, ...props }, ref) => {\n return (\n <Textarea\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(\n \"min-w-0 max-w-none flex-1 resize-none rounded-none border-0 bg-transparent py-1.5 shadow-none dark:bg-transparent\",\n className\n )}\n {...props}\n />\n );\n }\n);\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n"],"names":["InputGroup","className","props","jsx","cn","inputGroupButtonVariants","cva","InputGroupButton","type","variant","size","Button","InputGroupTextarea","React","ref","Textarea"],"mappings":";;;;;;AASA,SAASA,EAAW,EAAE,WAAAC,GAAW,GAAGC,KAAsC;AACxE,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAWC;AAAA,QACT;AAAA,QACA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAGA;AAAA,QAEAH;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AA6CA,MAAMG,IAA2BC;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,WACE;AAAA,QACF,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAEA,SAASC,EAAiB;AAAA,EACxB,WAAAN;AAAA,EACA,MAAAO,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,GAAGR;AACL,GACiD;AAC/C,SACEC,gBAAAA,EAAAA;AAAAA,IAACQ;AAAA,IAAA;AAAA,MACC,MAAAH;AAAA,MACA,aAAWE;AAAA,MACX,SAAAD;AAAA,MACA,WAAWL,EAAGC,EAAyB,EAAE,MAAAK,EAAA,CAAM,GAAGT,CAAS;AAAA,MAC1D,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AA8BA,MAAMU,IAAqBC,EAAM;AAAA,EAC/B,CAAC,EAAE,WAAAZ,GAAW,GAAGC,EAAA,GAASY,MAEtBX,gBAAAA,EAAAA;AAAAA,IAACY;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWV;AAAA,QACT;AAAA,QACAH;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAU,EAAmB,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.cjs.js","sources":["../../../../src/components/ui/inputGroup/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport RcTextArea, { TextAreaProps as RcTextAreaProps } from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype TextareaProps = RcTextAreaProps;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, autoSize = { minRows: 1 }, style, ...props }, ref) => {\n return (\n <RcTextArea\n ref={ref}\n autoSize={autoSize}\n className={cn(\n \"border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"resize-none\",\n className\n )}\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["Textarea","React","className","autoSize","style","props","ref","jsx","RcTextArea","cn"],"mappings":"mxBAQMA,EAAWC,EAAM,WACrB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAW,CAAE,QAAS,CAAA,EAAK,MAAAC,EAAO,GAAGC,CAAA,EAASC,IAExDC,EAAAA,kBAAAA,IAACC,EAAAA,QAAA,CACC,IAAAF,EACA,SAAAH,EACA,UAAWM,EAAAA,GACT,4UACA,cACAP,CAAA,EAEF,MAAO,CACL,WAAY,WACZ,UAAW,aACX,GAAGE,CAAA,EAEJ,GAAGC,CAAA,CAAA,CAIZ,EAEAL,EAAS,YAAc"}
1
+ {"version":3,"file":"textarea.cjs.js","sources":["../../../../src/components/ui/inputGroup/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport RcTextArea, {\n TextAreaProps as RcTextAreaProps,\n TextAreaRef,\n} from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype TextareaProps = RcTextAreaProps;\n\nconst Textarea = React.forwardRef<TextAreaRef, TextareaProps>(\n ({ className, autoSize = { minRows: 1 }, style, ...props }, ref) => {\n return (\n <RcTextArea\n ref={ref}\n autoSize={autoSize}\n className={cn(\n \"border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"resize-none\",\n className\n )}\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["Textarea","React","className","autoSize","style","props","ref","jsx","RcTextArea","cn"],"mappings":"mxBAWMA,EAAWC,EAAM,WACrB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAW,CAAE,QAAS,CAAA,EAAK,MAAAC,EAAO,GAAGC,CAAA,EAASC,IAExDC,EAAAA,kBAAAA,IAACC,EAAAA,QAAA,CACC,IAAAF,EACA,SAAAH,EACA,UAAWM,EAAAA,GACT,4UACA,cACAP,CAAA,EAEF,MAAO,CACL,WAAY,WACZ,UAAW,aACX,GAAGE,CAAA,EAEJ,GAAGC,CAAA,CAAA,CAIZ,EAEAL,EAAS,YAAc"}
@@ -1,3 +1,4 @@
1
+ import { TextAreaRef } from 'rc-textarea';
1
2
  import * as React from "react";
2
3
  declare const Textarea: React.ForwardRefExoticComponent<Omit<import('rc-textarea/lib/interface').HTMLTextareaProps, "value" | "onResize"> & {
3
4
  value?: import('rc-textarea/lib/interface').HTMLTextareaProps["value"] | bigint;
@@ -18,5 +19,5 @@ declare const Textarea: React.ForwardRefExoticComponent<Omit<import('rc-textarea
18
19
  textarea?: React.CSSProperties;
19
20
  count?: React.CSSProperties;
20
21
  };
21
- } & Pick<import('rc-input/lib/interface').BaseInputProps, "allowClear" | "suffix"> & Pick<import('rc-input').InputProps, "showCount" | "count" | "onClear"> & React.RefAttributes<HTMLTextAreaElement>>;
22
+ } & Pick<import('rc-input/lib/interface').BaseInputProps, "allowClear" | "suffix"> & Pick<import('rc-input').InputProps, "showCount" | "count" | "onClear"> & React.RefAttributes<TextAreaRef>>;
22
23
  export { Textarea };
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.es.js","sources":["../../../../src/components/ui/inputGroup/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport RcTextArea, { TextAreaProps as RcTextAreaProps } from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype TextareaProps = RcTextAreaProps;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, autoSize = { minRows: 1 }, style, ...props }, ref) => {\n return (\n <RcTextArea\n ref={ref}\n autoSize={autoSize}\n className={cn(\n \"border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"resize-none\",\n className\n )}\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["Textarea","React","className","autoSize","style","props","ref","jsx","RcTextArea","cn"],"mappings":";;;;;;;;AAQA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,UAAAC,IAAW,EAAE,SAAS,EAAA,GAAK,OAAAC,GAAO,GAAGC,EAAA,GAASC,MAExDC,gBAAAA,EAAAA;AAAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,UAAAH;AAAA,MACA,WAAWM;AAAA,QACT;AAAA,QACA;AAAA,QACAP;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,GAAGE;AAAA,MAAA;AAAA,MAEJ,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAL,EAAS,cAAc;"}
1
+ {"version":3,"file":"textarea.es.js","sources":["../../../../src/components/ui/inputGroup/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport RcTextArea, {\n TextAreaProps as RcTextAreaProps,\n TextAreaRef,\n} from \"rc-textarea\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype TextareaProps = RcTextAreaProps;\n\nconst Textarea = React.forwardRef<TextAreaRef, TextareaProps>(\n ({ className, autoSize = { minRows: 1 }, style, ...props }, ref) => {\n return (\n <RcTextArea\n ref={ref}\n autoSize={autoSize}\n className={cn(\n \"border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"resize-none\",\n className\n )}\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["Textarea","React","className","autoSize","style","props","ref","jsx","RcTextArea","cn"],"mappings":";;;;;;;;AAWA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,UAAAC,IAAW,EAAE,SAAS,EAAA,GAAK,OAAAC,GAAO,GAAGC,EAAA,GAASC,MAExDC,gBAAAA,EAAAA;AAAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,UAAAH;AAAA,MACA,WAAWM;AAAA,QACT;AAAA,QACA;AAAA,QACAP;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,GAAGE;AAAA,MAAA;AAAA,MAEJ,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAL,EAAS,cAAc;"}