@underverse-ui/underverse 2.0.7 → 2.0.9

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 (31) hide show
  1. package/api-reference.json +1 -1
  2. package/dist/{EmojiPicker-34YATB7Z.js → EmojiPicker-RPB24XXJ.js} +4 -4
  3. package/dist/{chunk-JINSMREP.js → chunk-7V65PWQN.js} +3 -3
  4. package/dist/{chunk-PLHJWXCW.js → chunk-CKG2QLQL.js} +61 -1
  5. package/dist/chunk-CKG2QLQL.js.map +1 -0
  6. package/dist/{chunk-A7XL4RDV.js → chunk-K5PVUTXH.js} +7 -5
  7. package/dist/chunk-K5PVUTXH.js.map +1 -0
  8. package/dist/{chunk-KGNYK5YF.js → chunk-KKASHK7A.js} +2 -2
  9. package/dist/{chunk-TETMVVUP.js → chunk-VDIAFUIE.js} +11 -65
  10. package/dist/chunk-VDIAFUIE.js.map +1 -0
  11. package/dist/{chunk-XE3RJHVX.js → chunk-WNVGXH5Y.js} +12 -10
  12. package/dist/chunk-WNVGXH5Y.js.map +1 -0
  13. package/dist/index.cjs +278 -141
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +7 -0
  16. package/dist/index.d.ts +7 -0
  17. package/dist/index.js +297 -167
  18. package/dist/index.js.map +1 -1
  19. package/dist/{menu-bar-NFEW4FOJ.js → menu-bar-R5ZFI2ST.js} +4 -4
  20. package/dist/ueditor.cjs +25 -9
  21. package/dist/ueditor.cjs.map +1 -1
  22. package/dist/ueditor.js +4 -4
  23. package/package.json +2 -1
  24. package/dist/chunk-A7XL4RDV.js.map +0 -1
  25. package/dist/chunk-PLHJWXCW.js.map +0 -1
  26. package/dist/chunk-TETMVVUP.js.map +0 -1
  27. package/dist/chunk-XE3RJHVX.js.map +0 -1
  28. /package/dist/{EmojiPicker-34YATB7Z.js.map → EmojiPicker-RPB24XXJ.js.map} +0 -0
  29. /package/dist/{chunk-JINSMREP.js.map → chunk-7V65PWQN.js.map} +0 -0
  30. /package/dist/{chunk-KGNYK5YF.js.map → chunk-KKASHK7A.js.map} +0 -0
  31. /package/dist/{menu-bar-NFEW4FOJ.js.map → menu-bar-R5ZFI2ST.js.map} +0 -0
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  EmojiGridButton
3
- } from "./chunk-KGNYK5YF.js";
3
+ } from "./chunk-KKASHK7A.js";
4
4
  import {
5
5
  EMOJI_LIST
6
6
  } from "./chunk-4TYW5K4J.js";
7
7
  import {
8
8
  Tooltip,
9
9
  cn,
10
+ formControlOutlineClass,
10
11
  useSmartTranslations
11
- } from "./chunk-PLHJWXCW.js";
12
+ } from "./chunk-CKG2QLQL.js";
12
13
 
13
14
  // src/components/EmojiPicker.tsx
14
15
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -152,8 +153,9 @@ var EmojiPicker = ({
152
153
  value: search,
153
154
  onChange: (e) => setSearch(e.target.value),
154
155
  className: cn(
155
- "w-full rounded-2xl border border-border/10 bg-muted/20 py-2 pl-9.5 pr-9 text-sm transition-all duration-300",
156
- "placeholder:text-muted-foreground/60 focus:outline-none focus:ring-2 focus:ring-primary/15 focus:border-primary/20",
156
+ "w-full rounded-2xl bg-muted/20 py-2 pl-9.5 pr-9 text-sm transition-all duration-300",
157
+ formControlOutlineClass,
158
+ "placeholder:text-muted-foreground/60",
157
159
  "focus:bg-background/90 focus:shadow-[0_0_12px_rgba(var(--color-primary-rgb),0.04)]"
158
160
  )
159
161
  }
@@ -203,4 +205,4 @@ export {
203
205
  EmojiPicker,
204
206
  EmojiPicker_default
205
207
  };
206
- //# sourceMappingURL=chunk-A7XL4RDV.js.map
208
+ //# sourceMappingURL=chunk-K5PVUTXH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/EmojiPicker.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Search, X, Smile, Leaf, Utensils, Dumbbell, Lightbulb, Hash, Flag } from \"lucide-react\";\nimport { useSmartTranslations } from \"../hooks/useSmartTranslations\";\nimport { cn } from \"../utils/cn\";\nimport { EmojiGridButton } from \"./emoji-ui\";\nimport { Tooltip } from \"./Tooltip\";\nimport { EMOJI_LIST } from \"./UEditor/emojis\";\nimport { formControlOutlineClass } from \"../constants/form-control-size\";\n\n/** Public props for the `EmojiPicker` component. */\nexport interface EmojiPickerProps {\n onEmojiSelect: (emoji: string) => void;\n className?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n emptyHint?: string;\n showSearch?: boolean;\n showCategoryNav?: boolean;\n columns?: number;\n maxHeight?: string;\n chrome?: \"standalone\" | \"embedded\";\n}\n\nconst CATEGORY_ICONS: Record<string, React.ComponentType<{ className?: string }>> = {\n smileys_people: Smile,\n animals_nature: Leaf,\n food_drink: Utensils,\n activity: Dumbbell,\n objects: Lightbulb,\n symbols: Hash,\n flags: Flag,\n};\n\nexport const EmojiPicker: React.FC<EmojiPickerProps> = ({\n onEmojiSelect,\n className,\n searchPlaceholder,\n emptyText,\n emptyHint,\n showSearch = true,\n showCategoryNav = true,\n columns = 9,\n maxHeight = \"20rem\",\n chrome = \"standalone\",\n}) => {\n const t = useSmartTranslations(\"UEditor\");\n const [search, setSearch] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState(EMOJI_LIST[0]?.id || \"\");\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const categoryRefs = useRef<Record<string, HTMLDivElement | null>>({});\n const isUserScrolling = useRef(false);\n \n const resolvedSearchPlaceholder = searchPlaceholder ?? t(\"emojiPicker.searchPlaceholder\");\n const resolvedEmptyText = emptyText ?? t(\"emojiPicker.noResults\");\n const resolvedEmptyHint = emptyHint ?? t(\"emojiPicker.tryDifferentSearch\");\n const resolvedColumns = Math.max(1, Math.floor(columns));\n const isEmbedded = chrome === \"embedded\";\n \n const gridStyle = {\n gridTemplateColumns: `repeat(${resolvedColumns}, minmax(0, 1fr))`,\n } satisfies React.CSSProperties;\n\n const filteredCategories = useMemo(() => {\n if (!search.trim()) return EMOJI_LIST;\n\n const query = search.toLowerCase();\n return EMOJI_LIST.map((category) => ({\n ...category,\n emojis: category.emojis.filter((emoji) => emoji.name.toLowerCase().includes(query) || emoji.emoji.includes(search)),\n })).filter((category) => category.emojis.length > 0);\n }, [search]);\n\n useEffect(() => {\n if (search) return;\n\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n if (!isUserScrolling.current) return;\n\n let maxVisibility = 0;\n let mostVisibleCategory = EMOJI_LIST[0]?.id || \"\";\n\n EMOJI_LIST.forEach((category) => {\n const element = categoryRefs.current[category.id];\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const visibleTop = Math.max(rect.top, containerRect.top);\n const visibleBottom = Math.min(rect.bottom, containerRect.bottom);\n const visibleHeight = Math.max(0, visibleBottom - visibleTop);\n\n if (visibleHeight > maxVisibility) {\n maxVisibility = visibleHeight;\n mostVisibleCategory = category.id;\n }\n });\n\n if (mostVisibleCategory !== activeCategory) {\n setActiveCategory(mostVisibleCategory);\n }\n };\n\n container.addEventListener(\"scroll\", handleScroll);\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, [activeCategory, search]);\n\n useEffect(() => {\n isUserScrolling.current = true;\n }, []);\n\n const renderEmojiCategory = (category: (typeof EMOJI_LIST)[number], assignRef = false) => (\n <div\n key={category.id}\n ref={\n assignRef\n ? (el) => {\n categoryRefs.current[category.id] = el;\n }\n : undefined\n }\n className=\"scroll-mt-3 mb-2\"\n >\n <div className=\"sticky top-0 z-10 bg-card/85 backdrop-blur-md py-1.5 px-2 text-[10px] font-bold uppercase tracking-wider text-muted-foreground/90 border-b border-border/5 mb-2 flex items-center gap-1.5 rounded-lg select-none\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-primary/70 animate-pulse\" />\n {category.name}\n </div>\n <div className=\"grid gap-1.5 p-1\" style={gridStyle}>\n {category.emojis.map((emoji) => (\n <EmojiGridButton\n key={emoji.name}\n emoji={emoji.emoji}\n name={emoji.name}\n onClick={() => handleEmojiClick(emoji.emoji)}\n className=\"text-2xl\"\n />\n ))}\n </div>\n </div>\n );\n\n const searchResultContent =\n filteredCategories.length > 0 ? (\n filteredCategories.map((category) => (\n <div key={category.id} className=\"mb-4 animate-fade-in\">\n {renderEmojiCategory(category)}\n </div>\n ))\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center text-center py-12 animate-fade-in\">\n <div className=\"mb-3 text-4xl animate-bounce\">🔍</div>\n <div className=\"text-sm font-semibold text-muted-foreground\">{resolvedEmptyText}</div>\n <div className=\"mt-1 text-xs text-muted-foreground/80\">{resolvedEmptyHint}</div>\n </div>\n );\n\n const handleEmojiClick = (emoji: string) => {\n onEmojiSelect(emoji);\n setSearch(\"\");\n };\n\n const handleCategoryClick = (categoryId: string) => {\n const element = categoryRefs.current[categoryId];\n if (!element || !scrollContainerRef.current) return;\n\n isUserScrolling.current = false;\n setActiveCategory(categoryId);\n element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\n window.setTimeout(() => {\n isUserScrolling.current = true;\n }, 500);\n };\n\n return (\n <div\n className={cn(\n \"flex max-h-128 w-96 flex-col overflow-hidden transition-all duration-300\",\n isEmbedded\n ? \"bg-transparent\"\n : \"rounded-3xl border border-border/10 bg-gradient-to-b from-card/98 to-card/95 backdrop-blur-2xl shadow-[0_20px_50px_rgba(0,0,0,0.18)] dark:shadow-[0_20px_50px_rgba(0,0,0,0.45)] shadow-primary/2\",\n className,\n )}\n >\n {showSearch && (\n <div className=\"shrink-0 border-b border-border/10 p-3.5 bg-card/10\">\n <div className=\"relative group\">\n <Search className=\"absolute left-3.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground/60 transition-colors group-focus-within:text-primary\" />\n <input\n type=\"text\"\n placeholder={resolvedSearchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className={cn(\n \"w-full rounded-2xl bg-muted/20 py-2 pl-9.5 pr-9 text-sm transition-all duration-300\",\n formControlOutlineClass,\n \"placeholder:text-muted-foreground/60\",\n \"focus:bg-background/90 focus:shadow-[0_0_12px_rgba(var(--color-primary-rgb),0.04)]\",\n )}\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground/60 hover:text-foreground transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Styled custom scrollbar container */}\n <div \n ref={scrollContainerRef} \n className=\"shrink overflow-y-auto px-4 py-3 scrollbar-thin scrollbar-thumb-muted-foreground/15 hover:scrollbar-thumb-muted-foreground/25 scrollbar-track-transparent transition-all duration-200\" \n style={{ height: maxHeight }}\n >\n {search ? searchResultContent : <div className=\"space-y-3\">{EMOJI_LIST.map((category) => renderEmojiCategory(category, true))}</div>}\n </div>\n\n {!search && showCategoryNav && (\n <div className={cn(\"flex shrink-0 items-center justify-around border-t border-border/10 px-3 py-2 backdrop-blur-md bg-muted/5\")}>\n {EMOJI_LIST.map((category) => {\n const IconComponent = CATEGORY_ICONS[category.id] || Smile;\n return (\n <button\n key={category.id}\n type=\"button\"\n onClick={() => handleCategoryClick(category.id)}\n className={cn(\n \"rounded-2xl p-2.5 transition-all duration-300\",\n activeCategory === category.id\n ? \"bg-primary/10 text-primary scale-115 shadow-sm shadow-primary/5\"\n : \"text-muted-foreground/60 hover:bg-muted/40 hover:text-foreground hover:scale-105\",\n )}\n >\n <Tooltip placement=\"top\" content={<span className=\"text-xs font-semibold\">{category.name}</span>}>\n <span className=\"inline-flex\">\n <IconComponent className=\"h-4 w-4\" />\n </span>\n </Tooltip>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport default EmojiPicker;\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-PLHJWXCW.js";
3
+ } from "./chunk-CKG2QLQL.js";
4
4
 
5
5
  // src/components/emoji-ui.tsx
6
6
  import React from "react";
@@ -71,4 +71,4 @@ export {
71
71
  getEmojiImageUrl,
72
72
  EmojiGridButton
73
73
  };
74
- //# sourceMappingURL=chunk-KGNYK5YF.js.map
74
+ //# sourceMappingURL=chunk-KKASHK7A.js.map
@@ -2,10 +2,14 @@ import {
2
2
  Tooltip,
3
3
  chainEventHandlers,
4
4
  cn,
5
+ formControlFixedClass,
6
+ formControlOutlineClass,
7
+ formControlSizeStyles,
8
+ formControlValueClass,
5
9
  mergeRefs,
6
10
  setRefValue,
7
11
  useSmartTranslations
8
- } from "./chunk-PLHJWXCW.js";
12
+ } from "./chunk-CKG2QLQL.js";
9
13
 
10
14
  // src/contexts/UnderverseConfigContext.tsx
11
15
  import * as React from "react";
@@ -576,60 +580,6 @@ var Popover = ({
576
580
  // src/components/DropdownMenu.tsx
577
581
  import React3, { useState as useState2 } from "react";
578
582
  import { ChevronRight } from "lucide-react";
579
-
580
- // src/constants/form-control-size.ts
581
- var formControlSizeStyles = {
582
- xs: {
583
- control: "h-6 px-2 text-xs leading-none",
584
- compactControl: "h-6 px-2 text-xs leading-none",
585
- input: "h-6 px-2 text-xs leading-none",
586
- label: "text-xs",
587
- icon: "h-3.5 w-3.5",
588
- iconButton: "h-6 w-6",
589
- tag: "h-4 max-w-20 px-1.5 text-[10px] leading-none"
590
- },
591
- sm: {
592
- control: "h-8 px-3 text-sm leading-none",
593
- compactControl: "h-8 px-2.5 text-sm leading-none",
594
- input: "h-8 px-3 text-sm leading-none",
595
- label: "text-xs",
596
- icon: "h-4 w-4 md:h-3.5 md:w-3.5",
597
- iconButton: "h-7 w-7 md:h-6 md:w-6",
598
- tag: "h-5 max-w-24 px-2 text-[10px] leading-none"
599
- },
600
- md: {
601
- control: "h-10 px-4 text-sm leading-none",
602
- compactControl: "h-10 px-3 text-sm leading-none",
603
- input: "h-10 px-4 text-sm leading-none",
604
- label: "text-sm",
605
- icon: "h-4 w-4",
606
- iconButton: "h-8 w-8",
607
- tag: "h-6 max-w-28 px-2 text-xs leading-none"
608
- },
609
- lg: {
610
- control: "h-12 px-6 text-base leading-none",
611
- compactControl: "h-12 px-4 text-base leading-none",
612
- input: "h-12 px-5 text-base leading-none",
613
- label: "text-base",
614
- icon: "h-5 w-5",
615
- iconButton: "h-10 w-10",
616
- tag: "h-7 max-w-32 px-2.5 text-sm leading-none"
617
- },
618
- xl: {
619
- control: "h-14 px-8 text-base leading-none",
620
- compactControl: "h-14 px-5 text-base leading-none",
621
- input: "h-14 px-6 text-base leading-none",
622
- label: "text-base",
623
- icon: "h-5 w-5",
624
- iconButton: "h-12 w-12",
625
- tag: "h-8 max-w-36 px-3 text-sm leading-none"
626
- }
627
- };
628
- var formControlLabelClass = "font-medium";
629
- var formControlFixedClass = "min-h-0 overflow-hidden";
630
- var formControlValueClass = "max-h-full min-w-0 flex-1 truncate whitespace-nowrap";
631
-
632
- // src/components/DropdownMenu.tsx
633
583
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
634
584
  var DropdownMenuContext = React3.createContext(null);
635
585
  function useDropdownMenuClose() {
@@ -992,12 +942,12 @@ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", cla
992
942
  "button",
993
943
  {
994
944
  className: cn(
995
- "inline-flex items-center justify-between gap-2 border bg-background border-border/60",
945
+ "inline-flex items-center justify-between gap-2 bg-background",
946
+ formControlOutlineClass,
996
947
  resolvedBorderMode ? getBorderRadiusClass(resolvedBorderMode) : "rounded-2xl",
997
948
  formControlFixedClass,
998
949
  formControlSizeStyles[size].control,
999
950
  "hover:bg-accent/50",
1000
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
1001
951
  className
1002
952
  ),
1003
953
  children: [
@@ -1973,7 +1923,7 @@ var LinkInput = ({
1973
1923
  placeholder: t("linkInput.placeholder"),
1974
1924
  "aria-invalid": Boolean(error),
1975
1925
  "aria-describedby": error ? errorId : void 0,
1976
- className: "flex-1 px-3 py-2 text-sm bg-muted/50 border-0 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary/20 aria-invalid:ring-2 aria-invalid:ring-destructive/40"
1926
+ className: `flex-1 rounded-lg bg-muted/50 px-3 py-2 text-sm ${formControlOutlineClass} aria-invalid:border-destructive`
1977
1927
  }
1978
1928
  ),
1979
1929
  /* @__PURE__ */ jsx4("button", { type: "submit", className: "p-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors", children: /* @__PURE__ */ jsx4(Check, { className: "w-4 h-4" }) }),
@@ -2008,7 +1958,7 @@ var ImageInput = ({ onSubmit, onCancel }) => {
2008
1958
  value: url,
2009
1959
  onChange: (e) => setUrl(e.target.value),
2010
1960
  placeholder: t("imageInput.urlPlaceholder"),
2011
- className: "w-full mt-1 px-3 py-2 text-sm bg-muted/50 border-0 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary/20"
1961
+ className: `mt-1 w-full rounded-lg bg-muted/50 px-3 py-2 text-sm ${formControlOutlineClass}`
2012
1962
  }
2013
1963
  )
2014
1964
  ] }),
@@ -2021,7 +1971,7 @@ var ImageInput = ({ onSubmit, onCancel }) => {
2021
1971
  value: alt,
2022
1972
  onChange: (e) => setAlt(e.target.value),
2023
1973
  placeholder: t("imageInput.altPlaceholder"),
2024
- className: "w-full mt-1 px-3 py-2 text-sm bg-muted/50 border-0 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary/20"
1974
+ className: `mt-1 w-full rounded-lg bg-muted/50 px-3 py-2 text-sm ${formControlOutlineClass}`
2025
1975
  }
2026
1976
  )
2027
1977
  ] }),
@@ -4495,10 +4445,6 @@ var UEDITOR_PROSEMIRROR_CLASS_NAME = cn(
4495
4445
  );
4496
4446
 
4497
4447
  export {
4498
- formControlSizeStyles,
4499
- formControlLabelClass,
4500
- formControlFixedClass,
4501
- formControlValueClass,
4502
4448
  getBorderRadiusClass,
4503
4449
  getPanelBorderRadiusClass,
4504
4450
  useUnderverseUIConfig,
@@ -4569,4 +4515,4 @@ export {
4569
4515
  EditorToolbar,
4570
4516
  UEDITOR_PROSEMIRROR_CLASS_NAME
4571
4517
  };
4572
- //# sourceMappingURL=chunk-TETMVVUP.js.map
4518
+ //# sourceMappingURL=chunk-VDIAFUIE.js.map