@underverse-ui/underverse 2.0.29 → 2.0.30

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 (35) hide show
  1. package/api-reference.json +1 -1
  2. package/dist/{EmojiPicker-NV3GQYWI.js → EmojiPicker-ISJ6RXYG.js} +4 -4
  3. package/dist/{chunk-LK6YWBI6.js → chunk-2P7TSXEE.js} +82 -25
  4. package/dist/chunk-2P7TSXEE.js.map +1 -0
  5. package/dist/{chunk-5QWYO527.js → chunk-37MHVJMV.js} +846 -90
  6. package/dist/chunk-37MHVJMV.js.map +1 -0
  7. package/dist/{chunk-XTZTUDRE.js → chunk-57BKIC6J.js} +711 -800
  8. package/dist/chunk-57BKIC6J.js.map +1 -0
  9. package/dist/{chunk-LRIRY4DG.js → chunk-5W63IHIN.js} +11 -3
  10. package/dist/chunk-5W63IHIN.js.map +1 -0
  11. package/dist/{chunk-F7MX3XXK.js → chunk-S4UHFRL3.js} +3 -3
  12. package/dist/{chunk-A4GUPKHM.js → chunk-ZP7F4ZD7.js} +63 -43
  13. package/dist/chunk-ZP7F4ZD7.js.map +1 -0
  14. package/dist/index.cjs +2225 -1311
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +55 -0
  17. package/dist/index.d.ts +55 -0
  18. package/dist/index.js +23 -10
  19. package/dist/index.js.map +1 -1
  20. package/dist/{menu-bar-AHG64PEB.js → menu-bar-DPCNNUX5.js} +193 -47
  21. package/dist/menu-bar-DPCNNUX5.js.map +1 -0
  22. package/dist/ueditor.cjs +9407 -8506
  23. package/dist/ueditor.cjs.map +1 -1
  24. package/dist/ueditor.d.cts +10 -0
  25. package/dist/ueditor.d.ts +10 -0
  26. package/dist/ueditor.js +4 -4
  27. package/package.json +2 -1
  28. package/dist/chunk-5QWYO527.js.map +0 -1
  29. package/dist/chunk-A4GUPKHM.js.map +0 -1
  30. package/dist/chunk-LK6YWBI6.js.map +0 -1
  31. package/dist/chunk-LRIRY4DG.js.map +0 -1
  32. package/dist/chunk-XTZTUDRE.js.map +0 -1
  33. package/dist/menu-bar-AHG64PEB.js.map +0 -1
  34. /package/dist/{EmojiPicker-NV3GQYWI.js.map → EmojiPicker-ISJ6RXYG.js.map} +0 -0
  35. /package/dist/{chunk-F7MX3XXK.js.map → chunk-S4UHFRL3.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-A4GUPKHM.js";
3
+ } from "./chunk-ZP7F4ZD7.js";
4
4
 
5
5
  // src/components/emoji-ui.tsx
6
6
  import React from "react";
@@ -32,12 +32,20 @@ function setEmojiBaseUrl(url) {
32
32
  function getEmojiImageUrl(unified) {
33
33
  return `${globalEmojiBaseUrl}/${unified}.png`;
34
34
  }
35
- var EmojiGridButton = ({ emoji, name, onClick, className, active = false }) => {
35
+ var EmojiGridButton = ({
36
+ emoji,
37
+ name,
38
+ onClick,
39
+ className,
40
+ active = false,
41
+ ...buttonProps
42
+ }) => {
36
43
  const [hasError, setHasError] = React.useState(false);
37
44
  const unified = React.useMemo(() => getEmojiUnifiedCode(emoji), [emoji]);
38
45
  return /* @__PURE__ */ jsx(
39
46
  "button",
40
47
  {
48
+ ...buttonProps,
41
49
  type: "button",
42
50
  "aria-label": formatEmojiName(name),
43
51
  title: formatEmojiName(name),
@@ -71,4 +79,4 @@ export {
71
79
  getEmojiImageUrl,
72
80
  EmojiGridButton
73
81
  };
74
- //# sourceMappingURL=chunk-LRIRY4DG.js.map
82
+ //# sourceMappingURL=chunk-5W63IHIN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/emoji-ui.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport function formatEmojiName(name: string) {\n return name.replaceAll(\"_\", \" \");\n}\n\nexport function formatEmojiCountLabel(template: string, shown: number, total: number) {\n return template\n .replace(\"{shown}\", String(shown))\n .replace(\"{total}\", String(total));\n}\n\n/**\n * Converts a Unicode emoji string into a lowercase hyphenated hex code point format\n * used by emoji CDNs (e.g. \"😀\" -> \"1f600\", \"#️⃣\" -> \"0023-fe0f-20e3\").\n */\nexport function getEmojiUnifiedCode(emoji: string): string {\n const codePoints = [];\n for (let i = 0; i < emoji.length; ) {\n const codePoint = emoji.codePointAt(i);\n if (codePoint === undefined) break;\n let hex = codePoint.toString(16).toLowerCase();\n if (hex.length < 4) {\n hex = hex.padStart(4, \"0\");\n }\n codePoints.push(hex);\n i += codePoint > 0xffff ? 2 : 1;\n }\n return codePoints.join(\"-\");\n}\n\nlet globalEmojiBaseUrl = \"/emojis\";\n\n/**\n * Configure a custom base URL for loading emoji image assets (e.g. `/emojis` for local offline storage).\n * If not set, defaults to jsDelivr CDN.\n */\nexport function setEmojiBaseUrl(url: string) {\n globalEmojiBaseUrl = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/**\n * Resolves the final image URL for a given unified emoji code.\n */\nexport function getEmojiImageUrl(unified: string): string {\n return `${globalEmojiBaseUrl}/${unified}.png`;\n}\n\nexport const EmojiGridButton: React.FC<{\n emoji: string;\n name: string;\n onClick: () => void;\n className?: string;\n active?: boolean;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\" | \"className\" | \"onClick\">> = ({\n emoji,\n name,\n onClick,\n className,\n active = false,\n ...buttonProps\n}) => {\n const [hasError, setHasError] = React.useState(false);\n const unified = React.useMemo(() => getEmojiUnifiedCode(emoji), [emoji]);\n\n return (\n <button\n {...buttonProps}\n type=\"button\"\n aria-label={formatEmojiName(name)}\n title={formatEmojiName(name)}\n onClick={onClick}\n className={cn(\n \"group flex h-9 w-9 items-center justify-center rounded-xl transition-all duration-300\",\n \"bg-transparent hover:bg-primary/10 border border-transparent hover:border-primary/20\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/20\",\n \"scale-100 hover:scale-110 active:scale-95\",\n active ? \"bg-primary/15 border-primary/30 ring-2 ring-primary/20\" : \"\",\n className,\n )}\n >\n {hasError ? (\n <span className=\"text-2xl transition-transform duration-300 group-hover:rotate-6\">{emoji}</span>\n ) : (\n <img\n src={getEmojiImageUrl(unified)}\n alt={emoji}\n onError={() => setHasError(true)}\n className=\"h-6.5 w-6.5 object-contain transition-all duration-300 group-hover:rotate-6 group-hover:drop-shadow-[0_2px_5px_rgba(0,0,0,0.15)]\"\n loading=\"lazy\"\n />\n )}\n </button>\n );\n};\n"],"mappings":";;;;;AAEA,OAAO,WAAW;AAmFV;AAhFD,SAAS,gBAAgB,MAAc;AAC5C,SAAO,KAAK,WAAW,KAAK,GAAG;AACjC;AAEO,SAAS,sBAAsB,UAAkB,OAAe,OAAe;AACpF,SAAO,SACJ,QAAQ,WAAW,OAAO,KAAK,CAAC,EAChC,QAAQ,WAAW,OAAO,KAAK,CAAC;AACrC;AAMO,SAAS,oBAAoB,OAAuB;AACzD,QAAM,aAAa,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,MAAM,UAAU;AAClC,UAAM,YAAY,MAAM,YAAY,CAAC;AACrC,QAAI,cAAc,OAAW;AAC7B,QAAI,MAAM,UAAU,SAAS,EAAE,EAAE,YAAY;AAC7C,QAAI,IAAI,SAAS,GAAG;AAClB,YAAM,IAAI,SAAS,GAAG,GAAG;AAAA,IAC3B;AACA,eAAW,KAAK,GAAG;AACnB,SAAK,YAAY,QAAS,IAAI;AAAA,EAChC;AACA,SAAO,WAAW,KAAK,GAAG;AAC5B;AAEA,IAAI,qBAAqB;AAMlB,SAAS,gBAAgB,KAAa;AAC3C,uBAAqB,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAC9D;AAKO,SAAS,iBAAiB,SAAyB;AACxD,SAAO,GAAG,kBAAkB,IAAI,OAAO;AACzC;AAEO,IAAM,kBAMoF,CAAC;AAAA,EAChG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AACpD,QAAM,UAAU,MAAM,QAAQ,MAAM,oBAAoB,KAAK,GAAG,CAAC,KAAK,CAAC;AAEvE,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAK;AAAA,MACL,cAAY,gBAAgB,IAAI;AAAA,MAChC,OAAO,gBAAgB,IAAI;AAAA,MAC3B;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,2DAA2D;AAAA,QACpE;AAAA,MACF;AAAA,MAEC,qBACC,oBAAC,UAAK,WAAU,mEAAmE,iBAAM,IAEzF;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,iBAAiB,OAAO;AAAA,UAC7B,KAAK;AAAA,UACL,SAAS,MAAM,YAAY,IAAI;AAAA,UAC/B,WAAU;AAAA,UACV,SAAQ;AAAA;AAAA,MACV;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EmojiGridButton
3
- } from "./chunk-LRIRY4DG.js";
3
+ } from "./chunk-5W63IHIN.js";
4
4
  import {
5
5
  EMOJI_LIST
6
6
  } from "./chunk-4TYW5K4J.js";
@@ -9,7 +9,7 @@ import {
9
9
  cn,
10
10
  formControlOutlineClass,
11
11
  useSmartTranslations
12
- } from "./chunk-A4GUPKHM.js";
12
+ } from "./chunk-ZP7F4ZD7.js";
13
13
 
14
14
  // src/components/EmojiPicker.tsx
15
15
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -205,4 +205,4 @@ export {
205
205
  EmojiPicker,
206
206
  EmojiPicker_default
207
207
  };
208
- //# sourceMappingURL=chunk-F7MX3XXK.js.map
208
+ //# sourceMappingURL=chunk-S4UHFRL3.js.map
@@ -190,6 +190,9 @@ var en_default = {
190
190
  loading: "Loading editor...",
191
191
  words: "words",
192
192
  characters: "characters",
193
+ accessibility: {
194
+ editorLabel: "Rich text editor"
195
+ },
193
196
  colors: {
194
197
  default: "Default",
195
198
  muted: "Muted",
@@ -314,6 +317,7 @@ var en_default = {
314
317
  uploadTab: "Upload",
315
318
  urlLabel: "Image URL",
316
319
  urlPlaceholder: "https://example.com/image.jpg",
320
+ invalid: "Enter a valid image URL, such as https://example.com/image.jpg.",
317
321
  uploadLabel: "Choose Image",
318
322
  uploadPlaceholder: "Click to upload image",
319
323
  uploading: "Uploading...",
@@ -441,7 +445,8 @@ var en_default = {
441
445
  unnamed: "Unnamed file",
442
446
  uploading: "(Uploading...)",
443
447
  uploadFailed: "Upload failed",
444
- retryUpload: "Retry upload"
448
+ retryUpload: "Retry upload",
449
+ download: "Download {name}"
445
450
  },
446
451
  menubar: {
447
452
  file: "File",
@@ -521,7 +526,8 @@ var en_default = {
521
526
  copyHtml: "Copy HTML",
522
527
  exportDefault: "Export HTML",
523
528
  previewEmpty: "Nothing to preview.",
524
- sourceCodeHint: "Edit HTML directly and click Apply to update the editor."
529
+ sourceCodeHint: "Edit HTML directly and click Apply to update the editor.",
530
+ invalidSource: "The HTML contains content this editor cannot read. Fix it and try again."
525
531
  }
526
532
  }
527
533
  };
@@ -645,6 +651,9 @@ var vi_default = {
645
651
  loading: "\u0110ang t\u1EA3i tr\xECnh so\u1EA1n th\u1EA3o...",
646
652
  words: "t\u1EEB",
647
653
  characters: "k\xFD t\u1EF1",
654
+ accessibility: {
655
+ editorLabel: "Tr\xECnh so\u1EA1n th\u1EA3o v\u0103n b\u1EA3n"
656
+ },
648
657
  colors: {
649
658
  default: "M\u1EB7c \u0111\u1ECBnh",
650
659
  muted: "M\u1EDD",
@@ -769,6 +778,7 @@ var vi_default = {
769
778
  uploadTab: "T\u1EA3i l\xEAn",
770
779
  urlLabel: "URL h\xECnh \u1EA3nh",
771
780
  urlPlaceholder: "https://example.com/image.jpg",
781
+ invalid: "Nh\u1EADp URL \u1EA3nh h\u1EE3p l\u1EC7, v\xED d\u1EE5 https://example.com/image.jpg.",
772
782
  uploadLabel: "Ch\u1ECDn h\xECnh \u1EA3nh",
773
783
  uploadPlaceholder: "Nh\u1EA5n \u0111\u1EC3 t\u1EA3i \u1EA3nh l\xEAn",
774
784
  uploading: "\u0110ang t\u1EA3i l\xEAn...",
@@ -896,7 +906,8 @@ var vi_default = {
896
906
  unnamed: "T\u1EC7p kh\xF4ng t\xEAn",
897
907
  uploading: "(\u0110ang t\u1EA3i l\xEAn...)",
898
908
  uploadFailed: "T\u1EA3i l\xEAn th\u1EA5t b\u1EA1i",
899
- retryUpload: "T\u1EA3i l\u1EA1i"
909
+ retryUpload: "T\u1EA3i l\u1EA1i",
910
+ download: "T\u1EA3i xu\u1ED1ng {name}"
900
911
  },
901
912
  menubar: {
902
913
  file: "T\u1EADp tin",
@@ -976,7 +987,8 @@ var vi_default = {
976
987
  copyHtml: "Sao ch\xE9p HTML",
977
988
  exportDefault: "Xu\u1EA5t HTML",
978
989
  previewEmpty: "Kh\xF4ng c\xF3 n\u1ED9i dung \u0111\u1EC3 xem tr\u01B0\u1EDBc.",
979
- sourceCodeHint: "Ch\u1EC9nh s\u1EEDa HTML tr\u1EF1c ti\u1EBFp v\xE0 nh\u1EA5n \xC1p d\u1EE5ng \u0111\u1EC3 c\u1EADp nh\u1EADt n\u1ED9i dung."
990
+ sourceCodeHint: "Ch\u1EC9nh s\u1EEDa HTML tr\u1EF1c ti\u1EBFp v\xE0 nh\u1EA5n \xC1p d\u1EE5ng \u0111\u1EC3 c\u1EADp nh\u1EADt n\u1ED9i dung.",
991
+ invalidSource: "HTML ch\u1EE9a n\u1ED9i dung m\xE0 tr\xECnh so\u1EA1n th\u1EA3o kh\xF4ng th\u1EC3 \u0111\u1ECDc. Vui l\xF2ng s\u1EEDa r\u1ED3i th\u1EED l\u1EA1i."
980
992
  }
981
993
  }
982
994
  };
@@ -1100,6 +1112,9 @@ var ko_default = {
1100
1112
  loading: "\uC5D0\uB514\uD130 \uB85C\uB529 \uC911...",
1101
1113
  words: "\uB2E8\uC5B4",
1102
1114
  characters: "\uC790",
1115
+ accessibility: {
1116
+ editorLabel: "\uC11C\uC2DD \uC788\uB294 \uD14D\uC2A4\uD2B8 \uD3B8\uC9D1\uAE30"
1117
+ },
1103
1118
  colors: {
1104
1119
  default: "\uAE30\uBCF8",
1105
1120
  muted: "\uD750\uB9BC",
@@ -1224,6 +1239,7 @@ var ko_default = {
1224
1239
  uploadTab: "\uC5C5\uB85C\uB4DC",
1225
1240
  urlLabel: "\uC774\uBBF8\uC9C0 URL",
1226
1241
  urlPlaceholder: "https://example.com/image.jpg",
1242
+ invalid: "https://example.com/image.jpg\uC640 \uAC19\uC740 \uC62C\uBC14\uB978 \uC774\uBBF8\uC9C0 URL\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.",
1227
1243
  uploadLabel: "\uC774\uBBF8\uC9C0 \uC120\uD0DD",
1228
1244
  uploadPlaceholder: "\uD074\uB9AD\uD558\uC5EC \uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC",
1229
1245
  uploading: "\uC5C5\uB85C\uB4DC \uC911...",
@@ -1351,7 +1367,8 @@ var ko_default = {
1351
1367
  unnamed: "\uC774\uB984 \uC5C6\uB294 \uD30C\uC77C",
1352
1368
  uploading: "(\uC5C5\uB85C\uB4DC \uC911...)",
1353
1369
  uploadFailed: "\uC5C5\uB85C\uB4DC\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.",
1354
- retryUpload: "\uB2E4\uC2DC \uC5C5\uB85C\uB4DC"
1370
+ retryUpload: "\uB2E4\uC2DC \uC5C5\uB85C\uB4DC",
1371
+ download: "{name} \uB2E4\uC6B4\uB85C\uB4DC"
1355
1372
  },
1356
1373
  menubar: {
1357
1374
  file: "\uD30C\uC77C",
@@ -1431,7 +1448,8 @@ var ko_default = {
1431
1448
  copyHtml: "HTML \uBCF5\uC0AC",
1432
1449
  exportDefault: "HTML \uCD94\uCD9C",
1433
1450
  previewEmpty: "\uBBF8\uB9AC\uBCFC \uB0B4\uC6A9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
1434
- sourceCodeHint: "HTML\uC744 \uC9C1\uC811 \uD3B8\uC9D1\uD558\uACE0 \uC801\uC6A9\uC744 \uD074\uB9AD\uD558\uC5EC \uC5D0\uB514\uD130\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uC138\uC694."
1451
+ sourceCodeHint: "HTML\uC744 \uC9C1\uC811 \uD3B8\uC9D1\uD558\uACE0 \uC801\uC6A9\uC744 \uD074\uB9AD\uD558\uC5EC \uC5D0\uB514\uD130\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uC138\uC694.",
1452
+ invalidSource: "\uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC77D\uC744 \uC218 \uC5C6\uB294 \uB0B4\uC6A9\uC774 HTML\uC5D0 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC218\uC815\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694."
1435
1453
  }
1436
1454
  }
1437
1455
  };
@@ -1555,6 +1573,9 @@ var ja_default = {
1555
1573
  loading: "\u30A8\u30C7\u30A3\u30BF\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D...",
1556
1574
  words: "\u5358\u8A9E",
1557
1575
  characters: "\u6587\u5B57",
1576
+ accessibility: {
1577
+ editorLabel: "\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u30A8\u30C7\u30A3\u30BF\u30FC"
1578
+ },
1558
1579
  colors: {
1559
1580
  default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
1560
1581
  muted: "\u30DF\u30E5\u30FC\u30C8",
@@ -1679,6 +1700,7 @@ var ja_default = {
1679
1700
  uploadTab: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1680
1701
  urlLabel: "\u753B\u50CF URL",
1681
1702
  urlPlaceholder: "https://example.com/image.jpg",
1703
+ invalid: "https://example.com/image.jpg \u306E\u3088\u3046\u306A\u6709\u52B9\u306A\u753B\u50CF URL \u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
1682
1704
  uploadLabel: "\u753B\u50CF\u3092\u9078\u629E",
1683
1705
  uploadPlaceholder: "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1684
1706
  uploading: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...",
@@ -1806,7 +1828,8 @@ var ja_default = {
1806
1828
  unnamed: "\u540D\u524D\u306A\u3057\u30D5\u30A1\u30A4\u30EB",
1807
1829
  uploading: "(\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...)",
1808
1830
  uploadFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5931\u6557",
1809
- retryUpload: "\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9"
1831
+ retryUpload: "\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1832
+ download: "{name}\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9"
1810
1833
  },
1811
1834
  menubar: {
1812
1835
  file: "\u30D5\u30A1\u30A4\u30EB",
@@ -1886,7 +1909,8 @@ var ja_default = {
1886
1909
  copyHtml: "HTML\u3092\u30B3\u30D4\u30FC",
1887
1910
  exportDefault: "HTML\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
1888
1911
  previewEmpty: "\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
1889
- sourceCodeHint: "HTML\u3092\u76F4\u63A5\u7DE8\u96C6\u3057\u3001\u9069\u7528\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002"
1912
+ sourceCodeHint: "HTML\u3092\u76F4\u63A5\u7DE8\u96C6\u3057\u3001\u9069\u7528\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002",
1913
+ invalidSource: "\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u8AAD\u307F\u8FBC\u3081\u306A\u3044\u5185\u5BB9\u304C HTML \u306B\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002"
1890
1914
  }
1891
1915
  }
1892
1916
  };
@@ -2144,6 +2168,33 @@ function useSmartLocale() {
2144
2168
  return nextIntlBridge?.locale ?? environmentLocale ?? internalLocale;
2145
2169
  }
2146
2170
 
2171
+ // src/components/UEditor/portal-context.tsx
2172
+ import * as React5 from "react";
2173
+ import { jsx as jsx5 } from "react/jsx-runtime";
2174
+ var UEditorPortalContext = React5.createContext(void 0);
2175
+ function UEditorPortalProvider({
2176
+ children,
2177
+ getPortalContainer
2178
+ }) {
2179
+ return /* @__PURE__ */ jsx5(UEditorPortalContext.Provider, { value: getPortalContainer, children });
2180
+ }
2181
+ function useUEditorPortalContainerGetter() {
2182
+ return React5.useContext(UEditorPortalContext);
2183
+ }
2184
+ function resolveUEditorPortalContainer(getPortalContainer, fallbackGetPortalContainer, fallbackDocument) {
2185
+ const getters = [getPortalContainer, fallbackGetPortalContainer];
2186
+ for (const getter of getters) {
2187
+ if (!getter) continue;
2188
+ try {
2189
+ const container = getter();
2190
+ if (container) return container;
2191
+ } catch {
2192
+ }
2193
+ }
2194
+ if (fallbackDocument) return fallbackDocument.body;
2195
+ return typeof document !== "undefined" ? document.body : null;
2196
+ }
2197
+
2147
2198
  // src/components/Tooltip.tsx
2148
2199
  import * as React6 from "react";
2149
2200
  import { createPortal } from "react-dom";
@@ -2178,33 +2229,6 @@ function mergeRefs(...refs) {
2178
2229
  };
2179
2230
  }
2180
2231
 
2181
- // src/components/UEditor/portal-context.tsx
2182
- import * as React5 from "react";
2183
- import { jsx as jsx5 } from "react/jsx-runtime";
2184
- var UEditorPortalContext = React5.createContext(void 0);
2185
- function UEditorPortalProvider({
2186
- children,
2187
- getPortalContainer
2188
- }) {
2189
- return /* @__PURE__ */ jsx5(UEditorPortalContext.Provider, { value: getPortalContainer, children });
2190
- }
2191
- function useUEditorPortalContainerGetter() {
2192
- return React5.useContext(UEditorPortalContext);
2193
- }
2194
- function resolveUEditorPortalContainer(getPortalContainer, fallbackGetPortalContainer, fallbackDocument) {
2195
- const getters = [getPortalContainer, fallbackGetPortalContainer];
2196
- for (const getter of getters) {
2197
- if (!getter) continue;
2198
- try {
2199
- const container = getter();
2200
- if (container) return container;
2201
- } catch {
2202
- }
2203
- }
2204
- if (fallbackDocument) return fallbackDocument.body;
2205
- return typeof document !== "undefined" ? document.body : null;
2206
- }
2207
-
2208
2232
  // src/components/Tooltip.tsx
2209
2233
  import { Fragment as Fragment2, jsx as jsx6, jsxs } from "react/jsx-runtime";
2210
2234
  var variantStyles = {
@@ -2279,6 +2303,7 @@ var Tooltip = React6.forwardRef(({
2279
2303
  const lastAppliedRef = React6.useRef(null);
2280
2304
  const openedByPointerRef = React6.useRef(false);
2281
2305
  const triggerSelector = React6.useId();
2306
+ const tooltipId = React6.useId();
2282
2307
  const getPortalContainer = useUEditorPortalContainerGetter();
2283
2308
  const portalContainer = isOpen ? resolveUEditorPortalContainer(getPortalContainer) : null;
2284
2309
  const portalDocument = portalContainer?.ownerDocument ?? null;
@@ -2287,13 +2312,6 @@ var Tooltip = React6.forwardRef(({
2287
2312
  const delayClose = typeof delay === "object" ? delay.close || 300 : delay;
2288
2313
  const offset = 8;
2289
2314
  const padding = 8;
2290
- React6.useLayoutEffect(() => {
2291
- if (typeof document === "undefined") return;
2292
- const triggerEl = document.querySelector(`[data-underverse-tooltip-trigger="${triggerSelector}"]`);
2293
- if (triggerEl) {
2294
- triggerRef.current = triggerEl;
2295
- }
2296
- }, [children, triggerSelector]);
2297
2315
  const updatePosition = React6.useCallback(() => {
2298
2316
  const triggerEl = triggerRef.current;
2299
2317
  const positionerEl = positionerRef.current;
@@ -2447,6 +2465,7 @@ var Tooltip = React6.forwardRef(({
2447
2465
  ...triggerPassthroughProps,
2448
2466
  ref: passthroughRef,
2449
2467
  "data-underverse-tooltip-trigger": triggerSelector,
2468
+ "aria-describedby": isOpen ? [childProps["aria-describedby"], triggerPassthroughProps["aria-describedby"], tooltipId].filter(Boolean).join(" ") : childProps["aria-describedby"] ?? triggerPassthroughProps["aria-describedby"],
2450
2469
  onMouseEnter: chainEventHandlers(
2451
2470
  triggerPassthroughProps.onMouseEnter,
2452
2471
  childProps.onMouseEnter,
@@ -2517,6 +2536,7 @@ var Tooltip = React6.forwardRef(({
2517
2536
  "div",
2518
2537
  {
2519
2538
  ref: panelRef,
2539
+ id: tooltipId,
2520
2540
  role: "tooltip",
2521
2541
  style: {
2522
2542
  opacity: 1,
@@ -2572,4 +2592,4 @@ export {
2572
2592
  resolveUEditorPortalContainer,
2573
2593
  Tooltip
2574
2594
  };
2575
- //# sourceMappingURL=chunk-A4GUPKHM.js.map
2595
+ //# sourceMappingURL=chunk-ZP7F4ZD7.js.map