@underverse-ui/underverse 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api-reference.json +1 -1
- package/dist/{EmojiPicker-34YATB7Z.js → EmojiPicker-RPB24XXJ.js} +4 -4
- package/dist/{chunk-JINSMREP.js → chunk-7V65PWQN.js} +3 -3
- package/dist/{chunk-PLHJWXCW.js → chunk-CKG2QLQL.js} +61 -1
- package/dist/chunk-CKG2QLQL.js.map +1 -0
- package/dist/{chunk-A7XL4RDV.js → chunk-K5PVUTXH.js} +7 -5
- package/dist/chunk-K5PVUTXH.js.map +1 -0
- package/dist/{chunk-KGNYK5YF.js → chunk-KKASHK7A.js} +2 -2
- package/dist/{chunk-TETMVVUP.js → chunk-VDIAFUIE.js} +11 -65
- package/dist/chunk-VDIAFUIE.js.map +1 -0
- package/dist/{chunk-XE3RJHVX.js → chunk-WNVGXH5Y.js} +12 -10
- package/dist/chunk-WNVGXH5Y.js.map +1 -0
- package/dist/index.cjs +96 -73
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +87 -71
- package/dist/index.js.map +1 -1
- package/dist/{menu-bar-NFEW4FOJ.js → menu-bar-R5ZFI2ST.js} +4 -4
- package/dist/ueditor.cjs +25 -9
- package/dist/ueditor.cjs.map +1 -1
- package/dist/ueditor.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-A7XL4RDV.js.map +0 -1
- package/dist/chunk-PLHJWXCW.js.map +0 -1
- package/dist/chunk-TETMVVUP.js.map +0 -1
- package/dist/chunk-XE3RJHVX.js.map +0 -1
- /package/dist/{EmojiPicker-34YATB7Z.js.map → EmojiPicker-RPB24XXJ.js.map} +0 -0
- /package/dist/{chunk-JINSMREP.js.map → chunk-7V65PWQN.js.map} +0 -0
- /package/dist/{chunk-KGNYK5YF.js.map → chunk-KKASHK7A.js.map} +0 -0
- /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-
|
|
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-
|
|
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
|
|
156
|
-
|
|
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-
|
|
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":";;;;;;;;;;;;;;AAEA,SAAgB,WAAW,SAAS,QAAQ,gBAAgB;AAC5D,SAAS,QAAQ,GAAG,OAAO,MAAM,UAAU,UAAU,WAAW,MAAM,YAAY;AA4H5E,SACE,KADF;AAtGN,IAAM,iBAA8E;AAAA,EAClF,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AACX,MAAM;AACJ,QAAM,IAAI,qBAAqB,SAAS;AACxC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,WAAW,CAAC,GAAG,MAAM,EAAE;AAC5E,QAAM,qBAAqB,OAAuB,IAAI;AACtD,QAAM,eAAe,OAA8C,CAAC,CAAC;AACrE,QAAM,kBAAkB,OAAO,KAAK;AAEpC,QAAM,4BAA4B,qBAAqB,EAAE,+BAA+B;AACxF,QAAM,oBAAoB,aAAa,EAAE,uBAAuB;AAChE,QAAM,oBAAoB,aAAa,EAAE,gCAAgC;AACzE,QAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC;AACvD,QAAM,aAAa,WAAW;AAE9B,QAAM,YAAY;AAAA,IAChB,qBAAqB,UAAU,eAAe;AAAA,EAChD;AAEA,QAAM,qBAAqB,QAAQ,MAAM;AACvC,QAAI,CAAC,OAAO,KAAK,EAAG,QAAO;AAE3B,UAAM,QAAQ,OAAO,YAAY;AACjC,WAAO,WAAW,IAAI,CAAC,cAAc;AAAA,MACnC,GAAG;AAAA,MACH,QAAQ,SAAS,OAAO,OAAO,CAAC,UAAU,MAAM,KAAK,YAAY,EAAE,SAAS,KAAK,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAAA,IACpH,EAAE,EAAE,OAAO,CAAC,aAAa,SAAS,OAAO,SAAS,CAAC;AAAA,EACrD,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,QAAI,OAAQ;AAEZ,UAAM,YAAY,mBAAmB;AACrC,QAAI,CAAC,UAAW;AAEhB,UAAM,eAAe,MAAM;AACzB,UAAI,CAAC,gBAAgB,QAAS;AAE9B,UAAI,gBAAgB;AACpB,UAAI,sBAAsB,WAAW,CAAC,GAAG,MAAM;AAE/C,iBAAW,QAAQ,CAAC,aAAa;AAC/B,cAAM,UAAU,aAAa,QAAQ,SAAS,EAAE;AAChD,YAAI,CAAC,QAAS;AAEd,cAAM,OAAO,QAAQ,sBAAsB;AAC3C,cAAM,gBAAgB,UAAU,sBAAsB;AACtD,cAAM,aAAa,KAAK,IAAI,KAAK,KAAK,cAAc,GAAG;AACvD,cAAM,gBAAgB,KAAK,IAAI,KAAK,QAAQ,cAAc,MAAM;AAChE,cAAM,gBAAgB,KAAK,IAAI,GAAG,gBAAgB,UAAU;AAE5D,YAAI,gBAAgB,eAAe;AACjC,0BAAgB;AAChB,gCAAsB,SAAS;AAAA,QACjC;AAAA,MACF,CAAC;AAED,UAAI,wBAAwB,gBAAgB;AAC1C,0BAAkB,mBAAmB;AAAA,MACvC;AAAA,IACF;AAEA,cAAU,iBAAiB,UAAU,YAAY;AACjD,WAAO,MAAM,UAAU,oBAAoB,UAAU,YAAY;AAAA,EACnE,GAAG,CAAC,gBAAgB,MAAM,CAAC;AAE3B,YAAU,MAAM;AACd,oBAAgB,UAAU;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,QAAM,sBAAsB,CAAC,UAAuC,YAAY,UAC9E;AAAA,IAAC;AAAA;AAAA,MAEC,KACE,YACI,CAAC,OAAO;AACN,qBAAa,QAAQ,SAAS,EAAE,IAAI;AAAA,MACtC,IACA;AAAA,MAEN,WAAU;AAAA,MAEV;AAAA,6BAAC,SAAI,WAAU,oNACb;AAAA,8BAAC,UAAK,WAAU,wDAAuD;AAAA,UACtE,SAAS;AAAA,WACZ;AAAA,QACA,oBAAC,SAAI,WAAU,oBAAmB,OAAO,WACtC,mBAAS,OAAO,IAAI,CAAC,UACpB;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO,MAAM;AAAA,YACb,MAAM,MAAM;AAAA,YACZ,SAAS,MAAM,iBAAiB,MAAM,KAAK;AAAA,YAC3C,WAAU;AAAA;AAAA,UAJL,MAAM;AAAA,QAKb,CACD,GACH;AAAA;AAAA;AAAA,IAxBK,SAAS;AAAA,EAyBhB;AAGF,QAAM,sBACJ,mBAAmB,SAAS,IAC1B,mBAAmB,IAAI,CAAC,aACtB,oBAAC,SAAsB,WAAU,wBAC9B,8BAAoB,QAAQ,KADrB,SAAS,EAEnB,CACD,IAED,qBAAC,SAAI,WAAU,sFACb;AAAA,wBAAC,SAAI,WAAU,gCAA+B,uBAAE;AAAA,IAChD,oBAAC,SAAI,WAAU,+CAA+C,6BAAkB;AAAA,IAChF,oBAAC,SAAI,WAAU,yCAAyC,6BAAkB;AAAA,KAC5E;AAGJ,QAAM,mBAAmB,CAAC,UAAkB;AAC1C,kBAAc,KAAK;AACnB,cAAU,EAAE;AAAA,EACd;AAEA,QAAM,sBAAsB,CAAC,eAAuB;AAClD,UAAM,UAAU,aAAa,QAAQ,UAAU;AAC/C,QAAI,CAAC,WAAW,CAAC,mBAAmB,QAAS;AAE7C,oBAAgB,UAAU;AAC1B,sBAAkB,UAAU;AAC5B,YAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,QAAQ,CAAC;AAE7D,WAAO,WAAW,MAAM;AACtB,sBAAgB,UAAU;AAAA,IAC5B,GAAG,GAAG;AAAA,EACR;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,aACI,mBACA;AAAA,QACJ;AAAA,MACF;AAAA,MAEC;AAAA,sBACC,oBAAC,SAAI,WAAU,uDACb,+BAAC,SAAI,WAAU,kBACb;AAAA,8BAAC,UAAO,WAAU,iIAAgI;AAAA,UAClJ;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,aAAa;AAAA,cACb,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK;AAAA,cACzC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,UACF;AAAA,UACC,UACC;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,UAAU,EAAE;AAAA,cAC3B,WAAU;AAAA,cAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,UACzB;AAAA,WAEJ,GACF;AAAA,QAIF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAU;AAAA,YACV,OAAO,EAAE,QAAQ,UAAU;AAAA,YAE1B,mBAAS,sBAAsB,oBAAC,SAAI,WAAU,aAAa,qBAAW,IAAI,CAAC,aAAa,oBAAoB,UAAU,IAAI,CAAC,GAAE;AAAA;AAAA,QAChI;AAAA,QAEC,CAAC,UAAU,mBACV,oBAAC,SAAI,WAAW,GAAG,2GAA2G,GAC3H,qBAAW,IAAI,CAAC,aAAa;AAC5B,gBAAM,gBAAgB,eAAe,SAAS,EAAE,KAAK;AACrD,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,MAAK;AAAA,cACL,SAAS,MAAM,oBAAoB,SAAS,EAAE;AAAA,cAC9C,WAAW;AAAA,gBACT;AAAA,gBACA,mBAAmB,SAAS,KACxB,oEACA;AAAA,cACN;AAAA,cAEA,8BAAC,WAAQ,WAAU,OAAM,SAAS,oBAAC,UAAK,WAAU,yBAAyB,mBAAS,MAAK,GACvF,8BAAC,UAAK,WAAU,eACd,8BAAC,iBAAc,WAAU,WAAU,GACrC,GACF;AAAA;AAAA,YAdK,SAAS;AAAA,UAehB;AAAA,QAEJ,CAAC,GACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,sBAAQ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cn
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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-
|
|
4518
|
+
//# sourceMappingURL=chunk-VDIAFUIE.js.map
|