@haklex/rich-editor-ui 0.0.93 → 0.0.95

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 (53) hide show
  1. package/dist/components/action-button/index.d.ts +2 -1
  2. package/dist/components/action-button/index.d.ts.map +1 -1
  3. package/dist/components/action-button/styles.css.d.ts +11 -7
  4. package/dist/components/action-button/styles.css.d.ts.map +1 -1
  5. package/dist/components/alert/index.d.ts +9 -0
  6. package/dist/components/alert/index.d.ts.map +1 -0
  7. package/dist/components/alert/styles.css.d.ts +23 -0
  8. package/dist/components/alert/styles.css.d.ts.map +1 -0
  9. package/dist/components/auto-resize-textarea/index.d.ts +7 -0
  10. package/dist/components/auto-resize-textarea/index.d.ts.map +1 -0
  11. package/dist/components/auto-resize-textarea/styles.css.d.ts +3 -0
  12. package/dist/components/auto-resize-textarea/styles.css.d.ts.map +1 -0
  13. package/dist/components/badge/index.d.ts +9 -0
  14. package/dist/components/badge/index.d.ts.map +1 -0
  15. package/dist/components/badge/styles.css.d.ts +37 -0
  16. package/dist/components/badge/styles.css.d.ts.map +1 -0
  17. package/dist/components/code-block/CodeBlockCard.d.ts +13 -0
  18. package/dist/components/code-block/CodeBlockCard.d.ts.map +1 -0
  19. package/dist/components/code-block/constants.d.ts +4 -0
  20. package/dist/components/code-block/constants.d.ts.map +1 -0
  21. package/dist/components/code-block/index.d.ts +11 -0
  22. package/dist/components/code-block/index.d.ts.map +1 -0
  23. package/dist/components/code-block/shiki.d.ts +6 -0
  24. package/dist/components/code-block/shiki.d.ts.map +1 -0
  25. package/dist/components/code-block/styles.css.d.ts +12 -0
  26. package/dist/components/code-block/styles.css.d.ts.map +1 -0
  27. package/dist/components/collapsible/index.d.ts +16 -0
  28. package/dist/components/collapsible/index.d.ts.map +1 -0
  29. package/dist/components/collapsible/styles.css.d.ts +4 -0
  30. package/dist/components/collapsible/styles.css.d.ts.map +1 -0
  31. package/dist/components/combobox/index.d.ts +5 -1
  32. package/dist/components/combobox/index.d.ts.map +1 -1
  33. package/dist/components/scroll-area/index.d.ts +9 -0
  34. package/dist/components/scroll-area/index.d.ts.map +1 -0
  35. package/dist/components/scroll-area/styles.css.d.ts +2 -0
  36. package/dist/components/scroll-area/styles.css.d.ts.map +1 -0
  37. package/dist/components/select/index.d.ts +37 -0
  38. package/dist/components/select/index.d.ts.map +1 -0
  39. package/dist/components/select/styles.css.d.ts +11 -0
  40. package/dist/components/select/styles.css.d.ts.map +1 -0
  41. package/dist/components/spinner/index.d.ts +7 -0
  42. package/dist/components/spinner/index.d.ts.map +1 -0
  43. package/dist/components/spinner/styles.css.d.ts +13 -0
  44. package/dist/components/spinner/styles.css.d.ts.map +1 -0
  45. package/dist/components/status-dot/index.d.ts +9 -0
  46. package/dist/components/status-dot/index.d.ts.map +1 -0
  47. package/dist/components/status-dot/styles.css.d.ts +60 -0
  48. package/dist/components/status-dot/styles.css.d.ts.map +1 -0
  49. package/dist/index.d.ts +26 -8
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.mjs +507 -34
  52. package/dist/rich-editor-ui.css +1 -1
  53. package/package.json +9 -3
package/dist/index.mjs CHANGED
@@ -1,12 +1,14 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { useState, useRef, useCallback, useEffect, createContext, use, createElement, useSyncExternalStore } from "react";
3
- import { ChevronDown, Check, X } from "lucide-react";
2
+ import { AlertCircle, AlertTriangle, Info, Check, Copy, ChevronDown, ChevronRight, X, ChevronUp } from "lucide-react";
3
+ import { useState, useRef, useCallback, useEffect, forwardRef, useImperativeHandle, useMemo, createContext, use, createElement, useSyncExternalStore } from "react";
4
+ import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
4
5
  import { Popover as Popover$1 } from "@base-ui/react/popover";
5
6
  import { PortalThemeWrapper, PortalThemeProvider } from "@haklex/rich-style-token";
6
7
  import { PortalThemeProvider as PortalThemeProvider2, PortalThemeWrapper as PortalThemeWrapper2, usePortalTheme } from "@haklex/rich-style-token";
7
8
  import { Combobox as Combobox$1 } from "@base-ui/react/combobox";
8
9
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
9
10
  import { Menu } from "@base-ui/react/menu";
11
+ import { Select as Select$1 } from "@base-ui/react/select";
10
12
  import { Tooltip } from "@base-ui/react/tooltip";
11
13
  function toPrimitive(t, r) {
12
14
  if ("object" != typeof t || !t) return t;
@@ -114,7 +116,7 @@ var createRuntimeFn = (config) => {
114
116
  };
115
117
  var semanticClassNames = { actionBar: "re-ui-action-bar", actionButton: "re-ui-action-btn", actionButtonEnd: "re-ui-action-btn--end", actionButtonDanger: "re-ui-action-btn--danger", actionButtonIcon: "re-ui-action-btn--icon" };
116
118
  var actionBar = "_73ej2i0";
117
- var actionButton = createRuntimeFn({ defaultClassName: "_73ej2i1", variantClassNames: { variant: { ghost: "_73ej2i2", solid: "_73ej2i3", outline: "_73ej2i4", accent: "_73ej2i5" }, size: { sm: "_73ej2i6", md: "_73ej2i7", lg: "_73ej2i8" }, icon: { true: "_73ej2i9", false: "_73ej2ia" }, end: { true: "_73ej2ib", false: "_73ej2ic" }, danger: { true: "_73ej2id", false: "_73ej2ie" } }, defaultVariants: { variant: "ghost", size: "sm", icon: false, end: false, danger: false }, compoundVariants: [[{ icon: true, size: "sm" }, "_73ej2if"], [{ icon: true, size: "md" }, "_73ej2ig"], [{ icon: true, size: "lg" }, "_73ej2ih"], [{ danger: true }, "_73ej2ii"]] });
119
+ var actionButton = createRuntimeFn({ defaultClassName: "_73ej2i1", variantClassNames: { variant: { ghost: "_73ej2i2", solid: "_73ej2i3", outline: "_73ej2i4", accent: "_73ej2i5" }, size: { sm: "_73ej2i6", md: "_73ej2i7", lg: "_73ej2i8" }, icon: { true: "_73ej2i9", false: "_73ej2ia" }, end: { true: "_73ej2ib", false: "_73ej2ic" }, danger: { true: "_73ej2id", false: "_73ej2ie" }, rounded: { true: "_73ej2if", false: "_73ej2ig" } }, defaultVariants: { variant: "ghost", size: "sm", icon: false, end: false, danger: false, rounded: false }, compoundVariants: [[{ icon: true, size: "sm" }, "_73ej2ih"], [{ icon: true, size: "md" }, "_73ej2ii"], [{ icon: true, size: "lg" }, "_73ej2ij"], [{ rounded: true, icon: true }, "_73ej2ik"], [{ danger: true }, "_73ej2il"]] });
118
120
  function ActionBar({ className, gap, style, ...props }) {
119
121
  return /* @__PURE__ */ jsx(
120
122
  "div",
@@ -131,6 +133,7 @@ function ActionButton({
131
133
  end = false,
132
134
  danger = false,
133
135
  icon = false,
136
+ rounded = false,
134
137
  className,
135
138
  type = "button",
136
139
  ...props
@@ -139,7 +142,7 @@ function ActionButton({
139
142
  if (end) semanticParts.push(semanticClassNames.actionButtonEnd);
140
143
  if (danger) semanticParts.push(semanticClassNames.actionButtonDanger);
141
144
  if (icon) semanticParts.push(semanticClassNames.actionButtonIcon);
142
- const recipeClass = actionButton({ variant, size, end, danger, icon });
145
+ const recipeClass = actionButton({ variant, size, end, danger, icon, rounded });
143
146
  return /* @__PURE__ */ jsx(
144
147
  "button",
145
148
  {
@@ -152,6 +155,23 @@ function ActionButton({
152
155
  function getActionButtonClassName(options) {
153
156
  return `${actionButton(options)} ${semanticClassNames.actionButton}`;
154
157
  }
158
+ var alert = createRuntimeFn({ defaultClassName: "_15r7gwx0", variantClassNames: { variant: { info: "_15r7gwx1", warning: "_15r7gwx2", error: "_15r7gwx3" } }, defaultVariants: { variant: "info" }, compoundVariants: [] });
159
+ var alertContent = "_15r7gwx4";
160
+ var alertIcon = "_15r7gwx5";
161
+ var alertAction = "_15r7gwx6";
162
+ const icons = {
163
+ info: Info,
164
+ warning: AlertTriangle,
165
+ error: AlertCircle
166
+ };
167
+ function Alert({ variant, children, action, className }) {
168
+ const IconComponent = icons[variant];
169
+ return /* @__PURE__ */ jsxs("div", { className: `${alert({ variant })}${className ? ` ${className}` : ""}`, role: "alert", children: [
170
+ /* @__PURE__ */ jsx(IconComponent, { className: alertIcon }),
171
+ /* @__PURE__ */ jsx("div", { className: alertContent, children }),
172
+ action && /* @__PURE__ */ jsx("div", { className: alertAction, children: action })
173
+ ] });
174
+ }
155
175
  var root$1 = "iryuae0";
156
176
  var tablist = "iryuae1";
157
177
  var tab = "iryuae2";
@@ -230,6 +250,49 @@ function AnimatedTabs({ tabs, defaultTab, value, onChange, className }) {
230
250
  )
231
251
  ] });
232
252
  }
253
+ var textarea = "_1b25hgb0";
254
+ var overflowing = "_1b25hgb1";
255
+ const AutoResizeTextArea = forwardRef(
256
+ function AutoResizeTextArea2({ maxRows = 6, minRows = 1, className, onInput, ...props }, ref) {
257
+ const innerRef = useRef(null);
258
+ useImperativeHandle(ref, () => innerRef.current);
259
+ const resize = useCallback(() => {
260
+ const el = innerRef.current;
261
+ if (!el) return;
262
+ el.style.height = "auto";
263
+ const lineHeight = Number.parseFloat(getComputedStyle(el).lineHeight) || 21;
264
+ const maxHeight = lineHeight * maxRows + 16;
265
+ const scrollHeight = el.scrollHeight;
266
+ if (scrollHeight > maxHeight) {
267
+ el.style.height = `${maxHeight}px`;
268
+ el.classList.add(overflowing);
269
+ } else {
270
+ el.style.height = `${scrollHeight}px`;
271
+ el.classList.remove(overflowing);
272
+ }
273
+ }, [maxRows]);
274
+ useEffect(() => {
275
+ resize();
276
+ }, [resize, props.value]);
277
+ return /* @__PURE__ */ jsx(
278
+ "textarea",
279
+ {
280
+ className: `${textarea}${className ? ` ${className}` : ""}`,
281
+ ref: innerRef,
282
+ rows: minRows,
283
+ onInput: (e) => {
284
+ resize();
285
+ onInput?.(e);
286
+ },
287
+ ...props
288
+ }
289
+ );
290
+ }
291
+ );
292
+ var badge = createRuntimeFn({ defaultClassName: "_1vt0sm10", variantClassNames: { variant: { neutral: "_1vt0sm11", success: "_1vt0sm12", error: "_1vt0sm13", warning: "_1vt0sm14", info: "_1vt0sm15" }, size: { sm: "_1vt0sm16", md: "_1vt0sm17" } }, defaultVariants: { variant: "neutral", size: "sm" }, compoundVariants: [] });
293
+ function Badge({ variant, size, children, className }) {
294
+ return /* @__PURE__ */ jsx("span", { className: `${badge({ variant, size })}${className ? ` ${className}` : ""}`, children });
295
+ }
233
296
  var root = "_10muorc2";
234
297
  var rootDisabled = "_10muorc3";
235
298
  var box = "_10muorc4";
@@ -334,6 +397,255 @@ function AnimatedCheckbox({
334
397
  }
335
398
  );
336
399
  }
400
+ const languageToColorMap = {
401
+ javascript: "#f7df1e",
402
+ js: "#f7df1e",
403
+ typescript: "#3178c6",
404
+ ts: "#3178c6",
405
+ jsx: "#61dafb",
406
+ tsx: "#61dafb",
407
+ html: "#e34f26",
408
+ css: "#1572b6",
409
+ scss: "#cc6699",
410
+ json: "#f59e0b",
411
+ markdown: "#737373",
412
+ md: "#737373",
413
+ bash: "#4eaa25",
414
+ sh: "#4eaa25",
415
+ shell: "#4eaa25",
416
+ zsh: "#4eaa25",
417
+ python: "#3776ab",
418
+ py: "#3776ab",
419
+ rust: "#dea584",
420
+ go: "#00add8",
421
+ java: "#b07219",
422
+ c: "#a8b9cc",
423
+ cpp: "#00599c",
424
+ "c++": "#00599c",
425
+ swift: "#fa7343",
426
+ kotlin: "#7f52ff",
427
+ yaml: "#cb171e",
428
+ yml: "#cb171e",
429
+ sql: "#e38c00"
430
+ };
431
+ function normalizeLanguage(lang2) {
432
+ if (!lang2) return "text";
433
+ return lang2.trim().toLowerCase() || "text";
434
+ }
435
+ function getLanguageDisplayName(lang2) {
436
+ if (lang2 === "text") return "TEXT";
437
+ return lang2.toUpperCase();
438
+ }
439
+ var card = "_1gq8hf90";
440
+ var lang = "_1gq8hf91";
441
+ var copyButton = "_1gq8hf92";
442
+ var bodyBackground = "_1gq8hf93";
443
+ var bodyBackgroundStatic = "_1gq8hf94 _1gq8hf93";
444
+ var scroll = "_1gq8hf95";
445
+ var scrollCollapsed = "_1gq8hf96";
446
+ var expandWrap = "_1gq8hf97";
447
+ var expandButton = "_1gq8hf98";
448
+ var lined = "_1gq8hf99";
449
+ var linedWithNumbers = "_1gq8hf9a";
450
+ const CopyIcon = /* @__PURE__ */ jsx(Copy, { size: 16 });
451
+ const CheckIcon$1 = /* @__PURE__ */ jsx(Check, { size: 16 });
452
+ const ExpandIcon = /* @__PURE__ */ jsx(ChevronDown, { size: 14 });
453
+ function CodeBlockCard({
454
+ children,
455
+ className,
456
+ code,
457
+ collapsible = true,
458
+ language,
459
+ showCopyButton = true,
460
+ static: staticMode = false
461
+ }) {
462
+ const normalizedLanguage = normalizeLanguage(language);
463
+ const languageLabel = getLanguageDisplayName(normalizedLanguage);
464
+ const accent = languageToColorMap[normalizedLanguage] || "#737373";
465
+ const [copied, setCopied] = useState(false);
466
+ const copyTimerRef = useRef(void 0);
467
+ const [isCollapsed, setIsCollapsed] = useState(true);
468
+ const [isOverflow, setIsOverflow] = useState(false);
469
+ const scrollRef = useRef(null);
470
+ useEffect(() => {
471
+ if (!collapsible) {
472
+ setIsOverflow(false);
473
+ return;
474
+ }
475
+ const el = scrollRef.current;
476
+ if (!el) return;
477
+ const check = () => {
478
+ const halfVh = window.innerHeight / 2;
479
+ setIsOverflow(el.scrollHeight >= halfVh);
480
+ };
481
+ const raf = requestAnimationFrame(check);
482
+ return () => cancelAnimationFrame(raf);
483
+ }, [children, code, collapsible]);
484
+ useEffect(() => () => clearTimeout(copyTimerRef.current), []);
485
+ const handleCopy = useCallback(() => {
486
+ navigator.clipboard.writeText(code).then(() => {
487
+ setCopied(true);
488
+ clearTimeout(copyTimerRef.current);
489
+ copyTimerRef.current = setTimeout(() => setCopied(false), 2e3);
490
+ }).catch(() => {
491
+ });
492
+ }, [code]);
493
+ const cardStyle = useMemo(() => ({ "--rr-code-accent": accent }), [accent]);
494
+ const scrollClassName = [
495
+ scroll,
496
+ collapsible && isCollapsed && isOverflow && scrollCollapsed
497
+ ].filter(Boolean).join(" ");
498
+ return /* @__PURE__ */ jsxs(
499
+ "div",
500
+ {
501
+ className: `${card}${className ? ` ${className}` : ""}`,
502
+ style: cardStyle,
503
+ children: [
504
+ language && normalizedLanguage !== "text" && /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: lang, children: /* @__PURE__ */ jsx("span", { children: languageLabel }) }),
505
+ showCopyButton && /* @__PURE__ */ jsx(
506
+ "button",
507
+ {
508
+ "aria-label": copied ? "Copied" : "Copy code",
509
+ className: copyButton,
510
+ type: "button",
511
+ onClick: handleCopy,
512
+ children: copied ? CheckIcon$1 : CopyIcon
513
+ }
514
+ ),
515
+ /* @__PURE__ */ jsxs("div", { className: staticMode ? bodyBackgroundStatic : bodyBackground, children: [
516
+ /* @__PURE__ */ jsx("div", { className: scrollClassName, ref: scrollRef, children }),
517
+ collapsible && isOverflow && isCollapsed && /* @__PURE__ */ jsx("div", { className: expandWrap, children: /* @__PURE__ */ jsxs(
518
+ "button",
519
+ {
520
+ className: expandButton,
521
+ type: "button",
522
+ onClick: () => setIsCollapsed(false),
523
+ children: [
524
+ ExpandIcon,
525
+ /* @__PURE__ */ jsx("span", { children: "Expand" })
526
+ ]
527
+ }
528
+ ) })
529
+ ] })
530
+ ]
531
+ }
532
+ );
533
+ }
534
+ let highlighterPromise = null;
535
+ function getHighlighter() {
536
+ if (!highlighterPromise) {
537
+ highlighterPromise = import("shiki/bundle/web").then(
538
+ (mod) => mod.createHighlighter({
539
+ langs: [],
540
+ themes: ["github-light", "github-dark"]
541
+ })
542
+ );
543
+ }
544
+ return highlighterPromise;
545
+ }
546
+ async function getHighlighterWithLang(language) {
547
+ const highlighter = await getHighlighter();
548
+ if (language && language !== "text" && language !== "plaintext") {
549
+ const loaded = highlighter.getLoadedLanguages();
550
+ if (!loaded.includes(language)) {
551
+ try {
552
+ await highlighter.loadLanguage(language);
553
+ } catch {
554
+ }
555
+ }
556
+ }
557
+ return highlighter;
558
+ }
559
+ const SHIKI_DUAL_THEMES = {
560
+ light: "github-light",
561
+ dark: "github-dark"
562
+ };
563
+ function CodeBlock({
564
+ className,
565
+ collapsible = true,
566
+ code,
567
+ language,
568
+ showCopyButton = true,
569
+ showLineNumbers = false
570
+ }) {
571
+ const normalizedLanguage = normalizeLanguage(language);
572
+ const [html, setHtml] = useState(null);
573
+ useEffect(() => {
574
+ let cancelled = false;
575
+ setHtml(null);
576
+ (async () => {
577
+ const highlighter = await getHighlighterWithLang(normalizedLanguage);
578
+ if (cancelled) return;
579
+ const loaded = highlighter.getLoadedLanguages();
580
+ const lang2 = loaded.includes(normalizedLanguage) ? normalizedLanguage : "text";
581
+ const result = highlighter.codeToHtml(code, {
582
+ lang: lang2,
583
+ themes: SHIKI_DUAL_THEMES
584
+ });
585
+ if (!cancelled) {
586
+ setHtml(result);
587
+ }
588
+ })();
589
+ return () => {
590
+ cancelled = true;
591
+ };
592
+ }, [code, normalizedLanguage]);
593
+ const fallbackLines = useMemo(() => code.split("\n"), [code]);
594
+ const linedClassName = [
595
+ showLineNumbers && lined,
596
+ showLineNumbers && linedWithNumbers
597
+ ].filter(Boolean).join(" ");
598
+ return /* @__PURE__ */ jsx(
599
+ CodeBlockCard,
600
+ {
601
+ className,
602
+ code,
603
+ collapsible,
604
+ language,
605
+ showCopyButton,
606
+ static: true,
607
+ children: html ? /* @__PURE__ */ jsx("div", { className: linedClassName, dangerouslySetInnerHTML: { __html: html } }) : /* @__PURE__ */ jsx("pre", { className: linedClassName, children: /* @__PURE__ */ jsx("code", { children: fallbackLines.map((line, i) => /* @__PURE__ */ jsx("span", { className: "line", children: line }, i)) }) })
608
+ }
609
+ );
610
+ }
611
+ var trigger$1 = "_1hdi6a90";
612
+ var chevron = "_1hdi6a91";
613
+ var panel$1 = "_1hdi6a92";
614
+ function Collapsible(props) {
615
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, { ...props });
616
+ }
617
+ function CollapsibleTrigger({
618
+ children,
619
+ className,
620
+ hideChevron,
621
+ ...props
622
+ }) {
623
+ return /* @__PURE__ */ jsxs(
624
+ Collapsible$1.Trigger,
625
+ {
626
+ ...props,
627
+ className: `${trigger$1}${className ? ` ${className}` : ""}`,
628
+ children: [
629
+ !hideChevron && /* @__PURE__ */ jsx(ChevronRight, { className: chevron }),
630
+ children
631
+ ]
632
+ }
633
+ );
634
+ }
635
+ function CollapsiblePanel({
636
+ children,
637
+ className,
638
+ ...props
639
+ }) {
640
+ return /* @__PURE__ */ jsx(
641
+ Collapsible$1.Panel,
642
+ {
643
+ ...props,
644
+ className: `${panel$1}${className ? ` ${className}` : ""}`,
645
+ children
646
+ }
647
+ );
648
+ }
337
649
  function getStrictContext(name) {
338
650
  const Context = createContext(void 0);
339
651
  const Provider = ({
@@ -349,7 +661,7 @@ function getStrictContext(name) {
349
661
  };
350
662
  return [Provider, useSafeContext];
351
663
  }
352
- var popup$4 = "f2q44l2";
664
+ var popup$5 = "f2q44l2";
353
665
  var arrow = "f2q44l3";
354
666
  var title$1 = "f2q44l4";
355
667
  var description$1 = "f2q44l5";
@@ -382,7 +694,7 @@ function PopoverPopup({
382
694
  return /* @__PURE__ */ jsx(
383
695
  Popover$1.Popup,
384
696
  {
385
- className: `${popup$4}${className ? ` ${className}` : ""}`,
697
+ className: `${popup$5}${className ? ` ${className}` : ""}`,
386
698
  ...props,
387
699
  children
388
700
  }
@@ -497,12 +809,15 @@ function ColorPicker({ currentColor, onSelect, className }) {
497
809
  )) }) })
498
810
  ] });
499
811
  }
500
- var popup$3 = "_2buwsh0";
501
- var item$2 = "_2buwsh1";
812
+ var popup$4 = "_2buwsh0";
813
+ var item$3 = "_2buwsh1";
502
814
  var empty = "_2buwsh2";
503
815
  function Combobox(props) {
504
816
  return /* @__PURE__ */ jsx(Combobox$1.Root, { ...props });
505
817
  }
818
+ function ComboboxTrigger({ className, ...props }) {
819
+ return /* @__PURE__ */ jsx(Combobox$1.Trigger, { className, ...props });
820
+ }
506
821
  function ComboboxInput({ className, ...props }) {
507
822
  return /* @__PURE__ */ jsx(Combobox$1.Input, { className, ...props });
508
823
  }
@@ -531,7 +846,7 @@ function ComboboxContent({
531
846
  children: /* @__PURE__ */ jsx(
532
847
  Combobox$1.Popup,
533
848
  {
534
- className: `${popup$3}${className ? ` ${className}` : ""}`,
849
+ className: `${popup$4}${className ? ` ${className}` : ""}`,
535
850
  ...popupProps,
536
851
  children
537
852
  }
@@ -546,7 +861,7 @@ function ComboboxItem({ className, ...props }) {
546
861
  return /* @__PURE__ */ jsx(
547
862
  Combobox$1.Item,
548
863
  {
549
- className: `${item$2}${className ? ` ${className}` : ""}`,
864
+ className: `${item$3}${className ? ` ${className}` : ""}`,
550
865
  ...props
551
866
  }
552
867
  );
@@ -570,7 +885,7 @@ function ComboboxGroupLabel(props) {
570
885
  return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, { ...props });
571
886
  }
572
887
  var backdrop = "vwlngv4";
573
- var popup$2 = "vwlngv5";
888
+ var popup$3 = "vwlngv5";
574
889
  var closeButton = "vwlngv6";
575
890
  var header = "vwlngv7";
576
891
  var headerContent = "vwlngv8";
@@ -613,7 +928,7 @@ function DialogPopup({
613
928
  /* @__PURE__ */ jsxs(
614
929
  Dialog$1.Popup,
615
930
  {
616
- className: `${popup$2}${className ? ` ${className}` : ""}`,
931
+ className: `${popup$3}${className ? ` ${className}` : ""}`,
617
932
  ...props,
618
933
  children: [
619
934
  children,
@@ -876,7 +1191,7 @@ const DialogStackEntry = ({ item: item2, index }) => {
876
1191
  Dialog$1.Popup,
877
1192
  {
878
1193
  suppressHydrationWarning: true,
879
- className: `${popup$2}${className ? ` ${className}` : ""}`,
1194
+ className: `${popup$3}${className ? ` ${className}` : ""}`,
880
1195
  "data-theme": theme,
881
1196
  style: { zIndex: zIndex + 1 },
882
1197
  children: [
@@ -905,10 +1220,10 @@ const DialogStackProvider = ({ children }) => {
905
1220
  )
906
1221
  ] });
907
1222
  };
908
- var popup$1 = "oih0op0";
909
- var positioner$1 = "oih0op1";
910
- var item$1 = "oih0op2";
911
- var separator = "_1sxaacb2";
1223
+ var popup$2 = "oih0op0";
1224
+ var positioner$2 = "oih0op1";
1225
+ var item$2 = "oih0op2";
1226
+ var separator$1 = "_1sxaacb2";
912
1227
  var label = "_1sxaacb3";
913
1228
  var checkboxItem = "oih0op3";
914
1229
  var radioItem = "oih0op3";
@@ -938,7 +1253,7 @@ function DropdownMenuContent({
938
1253
  {
939
1254
  align,
940
1255
  alignOffset,
941
- className: positioner$1,
1256
+ className: positioner$2,
942
1257
  "data-slot": "dropdown-menu-positioner",
943
1258
  positionMethod,
944
1259
  side,
@@ -947,7 +1262,7 @@ function DropdownMenuContent({
947
1262
  children: /* @__PURE__ */ jsx(
948
1263
  Menu.Popup,
949
1264
  {
950
- className: `${popup$1}${className ? ` ${className}` : ""}`,
1265
+ className: `${popup$2}${className ? ` ${className}` : ""}`,
951
1266
  "data-slot": "dropdown-menu-content",
952
1267
  ...popupProps,
953
1268
  children
@@ -973,7 +1288,7 @@ function DropdownMenuItem({ className, ...props }) {
973
1288
  return /* @__PURE__ */ jsx(
974
1289
  Menu.Item,
975
1290
  {
976
- className: `${item$1}${className ? ` ${className}` : ""}`,
1291
+ className: `${item$2}${className ? ` ${className}` : ""}`,
977
1292
  "data-slot": "dropdown-menu-item",
978
1293
  ...props
979
1294
  }
@@ -983,7 +1298,7 @@ function DropdownMenuSeparator({ className, ...props }) {
983
1298
  return /* @__PURE__ */ jsx(
984
1299
  Menu.Separator,
985
1300
  {
986
- className: `${separator}${className ? ` ${className}` : ""}`,
1301
+ className: `${separator$1}${className ? ` ${className}` : ""}`,
987
1302
  "data-slot": "dropdown-menu-separator",
988
1303
  ...props
989
1304
  }
@@ -1000,7 +1315,7 @@ function DropdownMenuRadioItem({
1000
1315
  return /* @__PURE__ */ jsxs(
1001
1316
  Menu.RadioItem,
1002
1317
  {
1003
- className: `${item$1} ${radioItem}${className ? ` ${className}` : ""}`,
1318
+ className: `${item$2} ${radioItem}${className ? ` ${className}` : ""}`,
1004
1319
  "data-slot": "dropdown-menu-radio-item",
1005
1320
  ...props,
1006
1321
  children: [
@@ -1025,7 +1340,7 @@ function DropdownMenuCheckboxItem({
1025
1340
  return /* @__PURE__ */ jsxs(
1026
1341
  Menu.CheckboxItem,
1027
1342
  {
1028
- className: `${item$1} ${checkboxItem}${className ? ` ${className}` : ""}`,
1343
+ className: `${item$2} ${checkboxItem}${className ? ` ${className}` : ""}`,
1029
1344
  "data-slot": "dropdown-menu-checkbox-item",
1030
1345
  ...props,
1031
1346
  children: [
@@ -1045,9 +1360,41 @@ function DropdownMenuCheckboxItem({
1045
1360
  function CheckIcon() {
1046
1361
  return /* @__PURE__ */ jsx(Check, { size: 16 });
1047
1362
  }
1363
+ var scrollArea = "_1y5k2ih0";
1364
+ function ScrollArea({
1365
+ children,
1366
+ className,
1367
+ autoScrollToBottom = false,
1368
+ scrollRef
1369
+ }) {
1370
+ const innerRef = useRef(null);
1371
+ const ref = scrollRef ?? innerRef;
1372
+ const isAtBottomRef = useRef(true);
1373
+ const handleScroll = useCallback(() => {
1374
+ const el = ref.current;
1375
+ if (!el) return;
1376
+ const threshold = 40;
1377
+ isAtBottomRef.current = el.scrollHeight - el.scrollTop - el.clientHeight < threshold;
1378
+ }, [ref]);
1379
+ useEffect(() => {
1380
+ if (!autoScrollToBottom) return;
1381
+ const el = ref.current;
1382
+ if (!el || !isAtBottomRef.current) return;
1383
+ el.scrollTo({ top: el.scrollHeight, behavior: "smooth" });
1384
+ });
1385
+ return /* @__PURE__ */ jsx(
1386
+ "div",
1387
+ {
1388
+ className: `${scrollArea}${className ? ` ${className}` : ""}`,
1389
+ ref,
1390
+ onScroll: autoScrollToBottom ? handleScroll : void 0,
1391
+ children
1392
+ }
1393
+ );
1394
+ }
1048
1395
  var container = createRuntimeFn({ defaultClassName: "_6d8tz20", variantClassNames: { size: { sm: "_6d8tz21", md: "_6d8tz22" }, fullWidth: { true: "_6d8tz23", false: "_6d8tz24" } }, defaultVariants: { size: "sm", fullWidth: false }, compoundVariants: [] });
1049
1396
  var indicator = createRuntimeFn({ defaultClassName: "_6d8tz25", variantClassNames: { ready: { true: "_6d8tz26", false: "_6d8tz27" } }, defaultVariants: { ready: true }, compoundVariants: [] });
1050
- var item = createRuntimeFn({ defaultClassName: "_6d8tz28", variantClassNames: { size: { sm: "_6d8tz29", md: "_6d8tz2a" }, active: { true: "_6d8tz2b", false: "_6d8tz2c" }, disabled: { true: "_6d8tz2d", false: "_6d8tz2e" }, fullWidth: { true: "_6d8tz2f", false: "_6d8tz2g" } }, defaultVariants: { size: "sm", active: false, disabled: false, fullWidth: false }, compoundVariants: [] });
1397
+ var item$1 = createRuntimeFn({ defaultClassName: "_6d8tz28", variantClassNames: { size: { sm: "_6d8tz29", md: "_6d8tz2a" }, active: { true: "_6d8tz2b", false: "_6d8tz2c" }, disabled: { true: "_6d8tz2d", false: "_6d8tz2e" }, fullWidth: { true: "_6d8tz2f", false: "_6d8tz2g" } }, defaultVariants: { size: "sm", active: false, disabled: false, fullWidth: false }, compoundVariants: [] });
1051
1398
  function SegmentedControl({
1052
1399
  items,
1053
1400
  value,
@@ -1138,37 +1485,144 @@ function SegmentedControl({
1138
1485
  }
1139
1486
  }
1140
1487
  ),
1141
- items.map((item$12) => {
1142
- const isActive = item$12.value === value;
1488
+ items.map((item2) => {
1489
+ const isActive = item2.value === value;
1143
1490
  return /* @__PURE__ */ jsx(
1144
1491
  "button",
1145
1492
  {
1146
1493
  "aria-selected": isActive,
1147
1494
  "data-active": isActive || void 0,
1148
- disabled: item$12.disabled,
1495
+ disabled: item2.disabled,
1149
1496
  role: "tab",
1150
1497
  tabIndex: isActive ? 0 : -1,
1151
1498
  type: "button",
1152
- className: item({
1499
+ className: item$1({
1153
1500
  size,
1154
1501
  active: isActive,
1155
- disabled: Boolean(item$12.disabled),
1502
+ disabled: Boolean(item2.disabled),
1156
1503
  fullWidth
1157
1504
  }),
1158
1505
  ref: (el) => {
1159
- if (el) itemElementsRef.current.set(item$12.value, el);
1160
- else itemElementsRef.current.delete(item$12.value);
1506
+ if (el) itemElementsRef.current.set(item2.value, el);
1507
+ else itemElementsRef.current.delete(item2.value);
1161
1508
  },
1162
- onClick: () => onChange(item$12.value),
1163
- children: item$12.label
1509
+ onClick: () => onChange(item2.value),
1510
+ children: item2.label
1164
1511
  },
1165
- item$12.value
1512
+ item2.value
1166
1513
  );
1167
1514
  })
1168
1515
  ]
1169
1516
  }
1170
1517
  );
1171
1518
  }
1519
+ var triggerButton = "p74a622";
1520
+ var triggerIcon = "p74a623";
1521
+ var positioner$1 = "p74a624";
1522
+ var popup$1 = "p74a625";
1523
+ var group = "p74a626";
1524
+ var item = "p74a627";
1525
+ var itemIndicator = "p74a628";
1526
+ var groupLabel = "p74a629";
1527
+ var separator = "p74a62a";
1528
+ var scrollButton = "p74a62b";
1529
+ function Select(props) {
1530
+ return /* @__PURE__ */ jsx(Select$1.Root, { ...props });
1531
+ }
1532
+ function SelectTrigger({ children, className, ...props }) {
1533
+ return /* @__PURE__ */ jsxs(
1534
+ Select$1.Trigger,
1535
+ {
1536
+ ...props,
1537
+ className: `${triggerButton}${className ? ` ${className}` : ""}`,
1538
+ children: [
1539
+ children,
1540
+ /* @__PURE__ */ jsx(Select$1.Icon, { className: triggerIcon, children: /* @__PURE__ */ jsx(ChevronDown, { size: 16 }) })
1541
+ ]
1542
+ }
1543
+ );
1544
+ }
1545
+ function SelectValue(props) {
1546
+ return /* @__PURE__ */ jsx(Select$1.Value, { ...props });
1547
+ }
1548
+ function SelectContent({
1549
+ children,
1550
+ className,
1551
+ align = "center",
1552
+ alignItemWithTrigger = true,
1553
+ side = "bottom",
1554
+ sideOffset = 4,
1555
+ ...props
1556
+ }) {
1557
+ return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(PortalThemeWrapper, { children: /* @__PURE__ */ jsx(
1558
+ Select$1.Positioner,
1559
+ {
1560
+ align,
1561
+ alignItemWithTrigger,
1562
+ className: positioner$1,
1563
+ side,
1564
+ sideOffset,
1565
+ children: /* @__PURE__ */ jsxs(
1566
+ Select$1.Popup,
1567
+ {
1568
+ ...props,
1569
+ className: `${popup$1}${className ? ` ${className}` : ""}`,
1570
+ children: [
1571
+ /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, { className: scrollButton, children: /* @__PURE__ */ jsx(ChevronUp, { size: 16 }) }),
1572
+ /* @__PURE__ */ jsx(Select$1.List, { children }),
1573
+ /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, { className: scrollButton, children: /* @__PURE__ */ jsx(ChevronDown, { size: 16 }) })
1574
+ ]
1575
+ }
1576
+ )
1577
+ }
1578
+ ) }) });
1579
+ }
1580
+ function SelectItem({ className, children, ...props }) {
1581
+ return /* @__PURE__ */ jsxs(Select$1.Item, { ...props, className: `${item}${className ? ` ${className}` : ""}`, children: [
1582
+ /* @__PURE__ */ jsx(Select$1.ItemText, { children }),
1583
+ /* @__PURE__ */ jsx(Select$1.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ jsx(Check, { size: 16 }) })
1584
+ ] });
1585
+ }
1586
+ function SelectGroup({ className, ...props }) {
1587
+ return /* @__PURE__ */ jsx(Select$1.Group, { ...props, className: `${group}${className ? ` ${className}` : ""}` });
1588
+ }
1589
+ function SelectGroupLabel({ className, ...props }) {
1590
+ return /* @__PURE__ */ jsx(
1591
+ Select$1.GroupLabel,
1592
+ {
1593
+ ...props,
1594
+ className: `${groupLabel}${className ? ` ${className}` : ""}`
1595
+ }
1596
+ );
1597
+ }
1598
+ function SelectSeparator({ className }) {
1599
+ return /* @__PURE__ */ jsx("div", { className: `${separator}${className ? ` ${className}` : ""}` });
1600
+ }
1601
+ var spinner = createRuntimeFn({ defaultClassName: "_131cfek1", variantClassNames: { size: { sm: "_131cfek2", md: "_131cfek3" } }, defaultVariants: { size: "sm" }, compoundVariants: [] });
1602
+ function Spinner({ size, className }) {
1603
+ return /* @__PURE__ */ jsx(
1604
+ "span",
1605
+ {
1606
+ "aria-hidden": "true",
1607
+ className: `${spinner({ size })}${className ? ` ${className}` : ""}`,
1608
+ role: "status"
1609
+ }
1610
+ );
1611
+ }
1612
+ var statusDotWrapper = "_73cmpa1";
1613
+ var dot = createRuntimeFn({ defaultClassName: "_73cmpa2", variantClassNames: { status: { idle: "_73cmpa3", active: "_73cmpa4", success: "_73cmpa5", error: "_73cmpa6", warning: "_73cmpa7" }, size: { sm: "_73cmpa8", md: "_73cmpa9" } }, defaultVariants: { status: "idle", size: "sm" }, compoundVariants: [] });
1614
+ var pulseRing = createRuntimeFn({ defaultClassName: "_73cmpaa", variantClassNames: { status: { idle: "_73cmpab", active: "_73cmpac", success: "_73cmpad", error: "_73cmpae", warning: "_73cmpaf" }, size: { sm: "_73cmpag", md: "_73cmpah" } }, defaultVariants: { status: "idle", size: "sm" }, compoundVariants: [] });
1615
+ function StatusDot({
1616
+ status,
1617
+ pulse: showPulse,
1618
+ size,
1619
+ className
1620
+ }) {
1621
+ return /* @__PURE__ */ jsxs("span", { className: `${statusDotWrapper}${className ? ` ${className}` : ""}`, children: [
1622
+ showPulse && /* @__PURE__ */ jsx("span", { className: pulseRing({ status, size }) }),
1623
+ /* @__PURE__ */ jsx("span", { className: dot({ status, size }) })
1624
+ ] });
1625
+ }
1172
1626
  var positioner = "_1cspf2m2";
1173
1627
  var popup = "_1cspf2m3";
1174
1628
  function TooltipProvider(props) {
@@ -1245,8 +1699,15 @@ function ViewportGate({
1245
1699
  export {
1246
1700
  ActionBar,
1247
1701
  ActionButton,
1702
+ Alert,
1248
1703
  AnimatedCheckbox,
1249
1704
  AnimatedTabs,
1705
+ AutoResizeTextArea,
1706
+ Badge,
1707
+ CodeBlock,
1708
+ Collapsible,
1709
+ CollapsiblePanel,
1710
+ CollapsibleTrigger,
1250
1711
  ColorPicker,
1251
1712
  Combobox,
1252
1713
  ComboboxContent,
@@ -1257,6 +1718,7 @@ export {
1257
1718
  ComboboxItem,
1258
1719
  ComboboxItemIndicator,
1259
1720
  ComboboxList,
1721
+ ComboboxTrigger,
1260
1722
  Dialog,
1261
1723
  DialogBackdrop,
1262
1724
  DialogClose,
@@ -1290,7 +1752,18 @@ export {
1290
1752
  PopoverTrigger,
1291
1753
  PortalThemeProvider2 as PortalThemeProvider,
1292
1754
  PortalThemeWrapper2 as PortalThemeWrapper,
1755
+ ScrollArea,
1293
1756
  SegmentedControl,
1757
+ Select,
1758
+ SelectContent,
1759
+ SelectGroup,
1760
+ SelectGroupLabel,
1761
+ SelectItem,
1762
+ SelectSeparator,
1763
+ SelectTrigger,
1764
+ SelectValue,
1765
+ Spinner,
1766
+ StatusDot,
1294
1767
  TooltipContent,
1295
1768
  TooltipPopup,
1296
1769
  TooltipPortal,