@refraction-ui/react 0.15.0 → 0.16.1

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/dist/index.cjs CHANGED
@@ -28,8 +28,13 @@ var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM);
28
28
 
29
29
  var __defProp = Object.defineProperty;
30
30
  var __getOwnPropNames = Object.getOwnPropertyNames;
31
- var __esm = (fn2, res) => function __init() {
32
- return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res;
31
+ var __esm = (fn2, res, err) => function __init() {
32
+ if (err) throw err[0];
33
+ try {
34
+ return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res;
35
+ } catch (e2) {
36
+ throw err = [e2], e2;
37
+ }
33
38
  };
34
39
  var __export = (target, all) => {
35
40
  for (var name in all)
@@ -36492,6 +36497,360 @@ var InstallPrompt = React11__namespace.forwardRef(
36492
36497
  );
36493
36498
  InstallPrompt.displayName = "InstallPrompt";
36494
36499
 
36500
+ // ../mascot/dist/index.js
36501
+ function getMascotMoodStyles(mood) {
36502
+ switch (mood) {
36503
+ case "happy":
36504
+ return {
36505
+ "--rfr-mascot-shell": "var(--primary, 138 60% 51%)",
36506
+ "--rfr-mascot-shell-rim": "var(--primary-700, 138 58% 36%)",
36507
+ "--rfr-mascot-belly": "var(--primary-200, 138 60% 83%)",
36508
+ "--rfr-mascot-skin": "var(--primary-400, 138 59% 63%)",
36509
+ "--rfr-mascot-skin-d": "var(--primary-600, 138 58% 43%)",
36510
+ "--rfr-mascot-scute": "var(--sunshine, 42 100% 62%)",
36511
+ "--rfr-mascot-scute-alt": "var(--primary-300, 138 59% 74%)",
36512
+ "--rfr-mascot-cheek": "var(--accent-solid, 26 100% 67%)"
36513
+ };
36514
+ case "think":
36515
+ return {
36516
+ // Indigo / purple tones
36517
+ "--rfr-mascot-shell": "250 65% 55%",
36518
+ "--rfr-mascot-shell-rim": "250 65% 40%",
36519
+ "--rfr-mascot-belly": "250 65% 85%",
36520
+ "--rfr-mascot-skin": "250 65% 72%",
36521
+ "--rfr-mascot-skin-d": "250 65% 62%",
36522
+ "--rfr-mascot-scute": "280 65% 60%",
36523
+ "--rfr-mascot-scute-alt": "280 65% 50%",
36524
+ "--rfr-mascot-cheek": "320 80% 65%"
36525
+ };
36526
+ case "wave":
36527
+ return {
36528
+ // Orange / warm tones
36529
+ "--rfr-mascot-shell": "24 85% 50%",
36530
+ "--rfr-mascot-shell-rim": "24 85% 40%",
36531
+ "--rfr-mascot-belly": "24 85% 85%",
36532
+ "--rfr-mascot-skin": "24 85% 68%",
36533
+ "--rfr-mascot-skin-d": "24 85% 58%",
36534
+ "--rfr-mascot-scute": "160 60% 45%",
36535
+ "--rfr-mascot-scute-alt": "160 60% 35%",
36536
+ "--rfr-mascot-cheek": "15 90% 65%"
36537
+ };
36538
+ }
36539
+ }
36540
+ function startMascotBlinkInterval(onBlinkChange, intervalMs = 4e3, durationMs = 150) {
36541
+ const timer = setInterval(() => {
36542
+ onBlinkChange(true);
36543
+ setTimeout(() => {
36544
+ onBlinkChange(false);
36545
+ }, durationMs);
36546
+ }, intervalMs);
36547
+ return () => {
36548
+ clearInterval(timer);
36549
+ };
36550
+ }
36551
+ function createMascot(props = {}) {
36552
+ const { mood = "happy", animation = "none", size = "md", animate = true } = props;
36553
+ const ariaProps = {
36554
+ role: "img",
36555
+ "aria-label": `Tobi the Tortoise feeling ${mood}`
36556
+ };
36557
+ const dataAttributes = {
36558
+ "data-slot": "mascot",
36559
+ "data-mood": mood,
36560
+ "data-animation": animation,
36561
+ "data-size": size,
36562
+ "data-animate": animate ? "true" : "false"
36563
+ };
36564
+ return {
36565
+ ariaProps,
36566
+ dataAttributes,
36567
+ state: {
36568
+ mood,
36569
+ animation,
36570
+ size,
36571
+ animate
36572
+ },
36573
+ style: getMascotMoodStyles(mood)
36574
+ };
36575
+ }
36576
+ var mascotVariants = cva({
36577
+ base: "inline-block select-none transition-all duration-300",
36578
+ variants: {
36579
+ size: {
36580
+ sm: "w-24 h-auto",
36581
+ md: "w-36 h-auto",
36582
+ lg: "w-48 h-auto",
36583
+ xl: "w-64 h-auto"
36584
+ },
36585
+ animation: {
36586
+ none: "",
36587
+ bounce: "motion-safe:animate-bounce",
36588
+ float: "rfr-mascot-float"
36589
+ }
36590
+ },
36591
+ defaultVariants: {
36592
+ size: "md",
36593
+ animation: "none"
36594
+ }
36595
+ });
36596
+ var Mascot = React11__namespace.forwardRef(
36597
+ ({
36598
+ mood = "happy",
36599
+ animation = "none",
36600
+ size = "md",
36601
+ animate = true,
36602
+ animateBobbing,
36603
+ animateBlinking,
36604
+ animateSprout,
36605
+ className,
36606
+ style,
36607
+ ...props
36608
+ }, ref) => {
36609
+ const [isBlinking, setIsBlinking] = React11__namespace.useState(false);
36610
+ const shouldBob = animateBobbing ?? animate;
36611
+ const shouldSway = animateSprout ?? animate;
36612
+ const shouldBlink = animateBlinking ?? animate;
36613
+ React11__namespace.useEffect(() => {
36614
+ if (!shouldBlink) {
36615
+ setIsBlinking(false);
36616
+ return;
36617
+ }
36618
+ const cleanup = startMascotBlinkInterval(setIsBlinking);
36619
+ return cleanup;
36620
+ }, [shouldBlink]);
36621
+ const api = createMascot({ mood, animation, size, animate });
36622
+ const combinedStyle = {
36623
+ ...api.style,
36624
+ ...style
36625
+ };
36626
+ return /* @__PURE__ */ jsxRuntime.jsxs(
36627
+ "svg",
36628
+ {
36629
+ ref,
36630
+ className: cn("mascot", mascotVariants({ size, animation }), className),
36631
+ viewBox: "0 0 340 300",
36632
+ xmlns: "http://www.w3.org/2000/svg",
36633
+ style: combinedStyle,
36634
+ ...api.ariaProps,
36635
+ ...api.dataAttributes,
36636
+ "data-blinking": isBlinking ? "true" : "false",
36637
+ "data-bobbing": shouldBob ? "true" : "false",
36638
+ "data-sprout": shouldSway ? "true" : "false",
36639
+ "data-waving": animate ? "true" : "false",
36640
+ ...props,
36641
+ children: [
36642
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
36643
+ /* Base styles and fallback HSL values */
36644
+ svg.mascot {
36645
+ --primary: 138 60% 51%;
36646
+ --primary-200: 138 60% 83%;
36647
+ --primary-300: 138 59% 74%;
36648
+ --primary-400: 138 59% 63%;
36649
+ --primary-600: 138 58% 43%;
36650
+ --primary-700: 138 58% 36%;
36651
+ --primary-800: 138 58% 29%;
36652
+ --primary-900: 138 58% 22%;
36653
+ --primary-950: 139 59% 16%;
36654
+ --sunshine: 42 100% 62%;
36655
+ --accent-solid: 26 100% 67%;
36656
+
36657
+ fill: none;
36658
+ stroke-linecap: round;
36659
+ stroke-linejoin: round;
36660
+ }
36661
+
36662
+ /* Mapping elements to tokens */
36663
+ svg.mascot .shadow {
36664
+ fill: hsl(var(--primary-900) / 0.15);
36665
+ }
36666
+ svg.mascot .stem {
36667
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36668
+ stroke-width: 3px;
36669
+ fill: none;
36670
+ }
36671
+ svg.mascot .leaf {
36672
+ fill: hsl(var(--rfr-mascot-leaf, var(--primary-400)));
36673
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36674
+ stroke-width: 3px;
36675
+ }
36676
+ svg.mascot .skin-d {
36677
+ fill: hsl(var(--rfr-mascot-skin-d, var(--primary-400)));
36678
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36679
+ stroke-width: 3px;
36680
+ }
36681
+ svg.mascot .skin {
36682
+ fill: hsl(var(--rfr-mascot-skin, var(--primary-300)));
36683
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36684
+ stroke-width: 3px;
36685
+ }
36686
+ svg.mascot .shell-rim {
36687
+ fill: hsl(var(--rfr-mascot-shell-rim, var(--primary-800)));
36688
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36689
+ stroke-width: 3px;
36690
+ }
36691
+ svg.mascot .shell {
36692
+ fill: hsl(var(--rfr-mascot-shell, var(--primary-600)));
36693
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36694
+ stroke-width: 3px;
36695
+ }
36696
+ svg.mascot .belly {
36697
+ fill: hsl(var(--rfr-mascot-belly, var(--primary-200)));
36698
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36699
+ stroke-width: 3px;
36700
+ }
36701
+ svg.mascot .scute {
36702
+ fill: hsl(var(--rfr-mascot-scute, var(--primary-700)));
36703
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36704
+ stroke-width: 2.5px;
36705
+ }
36706
+ svg.mascot .scute.alt {
36707
+ fill: hsl(var(--rfr-mascot-scute-alt, var(--primary-800)));
36708
+ }
36709
+ svg.mascot .ln {
36710
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36711
+ stroke-width: 3px;
36712
+ fill: none;
36713
+ }
36714
+ svg.mascot .eye-w {
36715
+ fill: #ffffff;
36716
+ stroke: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36717
+ stroke-width: 3px;
36718
+ }
36719
+ svg.mascot .pupil {
36720
+ fill: hsl(var(--rfr-mascot-stroke, var(--primary-950)));
36721
+ }
36722
+ svg.mascot .glint {
36723
+ fill: #ffffff;
36724
+ }
36725
+ svg.mascot .cheek {
36726
+ fill: hsl(var(--rfr-mascot-cheek, var(--accent-solid)));
36727
+ }
36728
+
36729
+ /* Float Animation keyframes */
36730
+ @keyframes rfrMascotFloat {
36731
+ 0%, 100% {
36732
+ transform: translateY(0);
36733
+ }
36734
+ 50% {
36735
+ transform: translateY(-8px);
36736
+ }
36737
+ }
36738
+
36739
+ /* Sway/antenna animation keyframes */
36740
+ @keyframes rfrMascotSway {
36741
+ 0%, 100% {
36742
+ transform: rotate(0deg);
36743
+ }
36744
+ 50% {
36745
+ transform: rotate(4deg);
36746
+ }
36747
+ }
36748
+
36749
+ /* Waving animation keyframes */
36750
+ @keyframes rfrMascotWave {
36751
+ 0%, 100% {
36752
+ transform: rotate(0deg);
36753
+ }
36754
+ 50% {
36755
+ transform: rotate(-18deg);
36756
+ }
36757
+ }
36758
+
36759
+ /* Bounce animation keyframes */
36760
+ @keyframes rfrMascotBounce {
36761
+ 0%, 100% {
36762
+ transform: translateY(0) scaleY(1);
36763
+ }
36764
+ 50% {
36765
+ transform: translateY(-16px) scaleY(0.96);
36766
+ }
36767
+ }
36768
+
36769
+ /* Animation hook connections */
36770
+ .rfr-mascot-float[data-bobbing="true"] .m-bob {
36771
+ animation: rfrMascotFloat 3s ease-in-out infinite;
36772
+ }
36773
+ .rfr-mascot-float[data-sprout="true"] .m-sprout {
36774
+ animation: rfrMascotSway 3s ease-in-out infinite;
36775
+ transform-origin: 158px 92px;
36776
+ }
36777
+ .rfr-mascot-float[data-waving="true"] .m-wave {
36778
+ animation: rfrMascotWave 1.2s ease-in-out infinite;
36779
+ transform-origin: 250px 120px;
36780
+ }
36781
+
36782
+ .motion-safe\\:animate-bounce[data-bobbing="true"] .m-bob {
36783
+ animation: rfrMascotBounce 1.2s ease-in-out infinite;
36784
+ }
36785
+ .motion-safe\\:animate-bounce[data-sprout="true"] .m-sprout {
36786
+ animation: rfrMascotSway 1.2s ease-in-out infinite;
36787
+ transform-origin: 158px 92px;
36788
+ }
36789
+
36790
+ /* Stationary wave arm if not floating */
36791
+ .mascot:not(.rfr-mascot-float)[data-waving="true"] .m-wave {
36792
+ animation: rfrMascotWave 1.2s ease-in-out infinite;
36793
+ transform-origin: 250px 120px;
36794
+ }
36795
+ ` }) }),
36796
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "shadow", cx: "166", cy: "280", rx: "116", ry: "16" }),
36797
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "m-bob", children: [
36798
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "m-sprout", children: [
36799
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "stem", d: "M158 92 C158 70 158 58 158 44" }),
36800
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "leaf", d: "M158 56 C140 50 126 58 128 74 C146 76 158 70 158 56 Z" }),
36801
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "leaf", d: "M158 50 C176 42 192 50 190 66 C172 70 158 64 158 50 Z" })
36802
+ ] }),
36803
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin-d", cx: "96", cy: "222", rx: "27", ry: "32" }),
36804
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin-d", cx: "214", cy: "224", rx: "27", ry: "32" }),
36805
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "skin-d", d: "M58 176 C40 178 28 190 26 204 C44 206 60 196 66 182 Z" }),
36806
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "shell-rim", d: "M36 196 C30 86 92 70 162 70 C232 70 294 86 288 196 C288 210 252 220 162 220 C72 220 36 210 36 196 Z" }),
36807
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "shell", d: "M44 190 C40 92 96 78 162 78 C228 78 284 92 280 190 C280 200 246 206 162 206 C78 206 44 200 44 190 Z" }),
36808
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "belly", d: "M50 192 C92 206 232 206 274 192 C274 202 240 210 162 210 C84 210 50 202 50 192 Z" }),
36809
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute", points: "162,86 190,102 190,134 162,150 134,134 134,102" }),
36810
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute alt", points: "162,150 186,162 186,184 162,196 138,184 138,162" }),
36811
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute alt", points: "104,108 126,120 126,148 104,160 82,148 82,120" }),
36812
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute alt", points: "220,108 242,120 242,148 220,160 198,148 198,120" }),
36813
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute", points: "108,162 126,172 126,190 108,200 90,190 90,172" }),
36814
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { className: "scute", points: "216,162 234,172 234,190 216,200 198,190 198,172" }),
36815
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin", cx: "116", cy: "232", rx: "25", ry: "31" }),
36816
+ mood !== "wave" && /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin", cx: "236", cy: "234", rx: "25", ry: "31" }),
36817
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: mood === "wave" ? "M104 250 H128" : "M104 250 H128 M224 252 H248", opacity: 0.4 }),
36818
+ mood === "wave" && /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "m-wave", children: [
36819
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin", cx: "250", cy: "120", rx: "15", ry: "22" }),
36820
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M244 104 Q250 96 256 104", opacity: 0.4 })
36821
+ ] }),
36822
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "skin", d: "M262 150 C276 142 296 142 310 150 L312 176 C300 188 274 188 262 178 Z" }),
36823
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "skin", cx: "296", cy: "156", rx: "40", ry: "36" }),
36824
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "cheek", cx: "280", cy: "174", rx: "11", ry: "8" }),
36825
+ isBlinking ? /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "mascot-face-blinking", children: [
36826
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M275 150 C280 155 292 155 297 150" }),
36827
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M304 152 C309 157 319 157 324 152" }),
36828
+ mood === "think" ? /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M280 174 Q290 169 298 175" }) : /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M286 172 C294 180 306 180 314 171" })
36829
+ ] }) : mood === "think" ? /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "mascot-face-think", children: [
36830
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "eye-w", cx: "286", cy: "150", rx: "11", ry: "13" }),
36831
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "eye-w", cx: "314", cy: "152", rx: "10", ry: "12" }),
36832
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "pupil", cx: "288", cy: "146", r: 5.5 }),
36833
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "pupil", cx: "315", cy: "148", r: 5 }),
36834
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "glint", cx: "290", cy: "143", r: 1.9 }),
36835
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "glint", cx: "317", cy: "145", r: 1.7 }),
36836
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M280 174 Q290 169 298 175" })
36837
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "mascot-face-happy", children: [
36838
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "eye-w", cx: "286", cy: "150", rx: "11", ry: "13" }),
36839
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { className: "eye-w", cx: "314", cy: "152", rx: "10", ry: "12" }),
36840
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "pupil", cx: "289", cy: "152", r: 5.5 }),
36841
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "pupil", cx: "316", cy: "154", r: 5 }),
36842
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "glint", cx: "291", cy: "149", r: 1.9 }),
36843
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "glint", cx: "318", cy: "151", r: 1.7 }),
36844
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "ln", d: "M286 172 C294 180 306 180 314 171" })
36845
+ ] })
36846
+ ] })
36847
+ ]
36848
+ }
36849
+ );
36850
+ }
36851
+ );
36852
+ Mascot.displayName = "Mascot";
36853
+
36495
36854
  // ../mobile-nav/dist/index.js
36496
36855
  function createMobileNav(props = {}) {
36497
36856
  const isOpen = props.open ?? false;
@@ -41329,7 +41688,11 @@ var Avatar2 = React11__namespace.forwardRef(
41329
41688
  Avatar2.displayName = "Avatar";
41330
41689
  var AvatarImage = React11__namespace.forwardRef(
41331
41690
  ({ className, src, alt = "", onLoad, onError, ...props }, ref) => {
41332
- const { setImageLoaded, setImageError } = React11__namespace.useContext(AvatarContext);
41691
+ const { imageError, setImageLoaded, setImageError } = React11__namespace.useContext(AvatarContext);
41692
+ React11__namespace.useEffect(() => {
41693
+ setImageLoaded(false);
41694
+ setImageError(false);
41695
+ }, [src, setImageLoaded, setImageError]);
41333
41696
  const handleLoad = (e2) => {
41334
41697
  setImageLoaded(true);
41335
41698
  onLoad?.(e2);
@@ -41338,6 +41701,7 @@ var AvatarImage = React11__namespace.forwardRef(
41338
41701
  setImageError(true);
41339
41702
  onError?.(e2);
41340
41703
  };
41704
+ if (imageError) return null;
41341
41705
  return /* @__PURE__ */ jsxRuntime.jsx(
41342
41706
  "img",
41343
41707
  {
@@ -41355,7 +41719,8 @@ var AvatarImage = React11__namespace.forwardRef(
41355
41719
  AvatarImage.displayName = "AvatarImage";
41356
41720
  var AvatarFallback = React11__namespace.forwardRef(
41357
41721
  ({ className, children, ...props }, ref) => {
41358
- const { size } = React11__namespace.useContext(AvatarContext);
41722
+ const { size, imageLoaded, imageError } = React11__namespace.useContext(AvatarContext);
41723
+ if (imageLoaded && !imageError) return null;
41359
41724
  return /* @__PURE__ */ jsxRuntime.jsx(
41360
41725
  "span",
41361
41726
  {
@@ -44755,6 +45120,20 @@ var CarouselContent = React11__namespace.forwardRef(
44755
45120
  }
44756
45121
  );
44757
45122
  CarouselContent.displayName = "CarouselContent";
45123
+ var Slider = React11__namespace.forwardRef(
45124
+ ({ className, variant, ...props }, ref) => {
45125
+ return /* @__PURE__ */ jsxRuntime.jsx(
45126
+ "input",
45127
+ {
45128
+ type: "range",
45129
+ ref,
45130
+ className: `w-full ${className || ""}`,
45131
+ ...props
45132
+ }
45133
+ );
45134
+ }
45135
+ );
45136
+ Slider.displayName = "Slider";
44758
45137
  var Pagination = React11__namespace.forwardRef(
44759
45138
  ({ className, ...props }, ref) => {
44760
45139
  return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("", className), ...props });
@@ -51926,6 +52305,552 @@ var AudienceFeatureCard = React11__namespace.forwardRef(({ kicker, title, body,
51926
52305
  );
51927
52306
  });
51928
52307
  AudienceFeatureCard.displayName = "AudienceFeatureCard";
52308
+
52309
+ // ../sortable-list/dist/index.js
52310
+ function reorder(items, from, to2) {
52311
+ const len = items.length;
52312
+ if (len === 0 || from < 0 || from >= len || to2 < 0 || to2 >= len || from === to2) {
52313
+ return [...items];
52314
+ }
52315
+ const result = [...items];
52316
+ const [moved] = result.splice(from, 1);
52317
+ result.splice(to2, 0, moved);
52318
+ return result;
52319
+ }
52320
+ function getNextOrderIndex(current, key, count) {
52321
+ if (count <= 0) return current;
52322
+ const clamped = Math.max(0, Math.min(current, count - 1));
52323
+ switch (key) {
52324
+ case "ArrowUp":
52325
+ case "ArrowLeft":
52326
+ return Math.max(0, clamped - 1);
52327
+ case "ArrowDown":
52328
+ case "ArrowRight":
52329
+ return Math.min(count - 1, clamped + 1);
52330
+ case "Home":
52331
+ return 0;
52332
+ case "End":
52333
+ return count - 1;
52334
+ default:
52335
+ return clamped;
52336
+ }
52337
+ }
52338
+ function createSortableList() {
52339
+ return {
52340
+ ariaProps: {
52341
+ role: "list"
52342
+ },
52343
+ dataAttributes: {
52344
+ "data-component": "sortable-list"
52345
+ }
52346
+ };
52347
+ }
52348
+ var sortableListVariants = cva({
52349
+ base: "flex flex-col gap-1 w-full",
52350
+ variants: {
52351
+ disabled: {
52352
+ true: "opacity-50 pointer-events-none",
52353
+ false: ""
52354
+ }
52355
+ },
52356
+ defaultVariants: {
52357
+ disabled: "false"
52358
+ }
52359
+ });
52360
+ var sortableListRowVariants = cva({
52361
+ base: [
52362
+ "flex items-center gap-3 rounded-md border border-border bg-card px-3 py-2",
52363
+ "transition-opacity"
52364
+ ].join(" "),
52365
+ variants: {
52366
+ dragging: {
52367
+ true: "opacity-50 ring-2 ring-ring",
52368
+ false: ""
52369
+ }
52370
+ },
52371
+ defaultVariants: {
52372
+ dragging: "false"
52373
+ }
52374
+ });
52375
+ var sortableListGripClass = "cursor-grab text-muted-foreground shrink-0 flex items-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded";
52376
+ var sortableListContentClass = "flex-1 min-w-0";
52377
+ function SortableListInner({
52378
+ items,
52379
+ getKey,
52380
+ renderItem,
52381
+ onReorder,
52382
+ disabled = false,
52383
+ className,
52384
+ ...props
52385
+ }, ref) {
52386
+ const dragFromRef = React11__namespace.useRef(null);
52387
+ const [draggingIndex, setDraggingIndex] = React11__namespace.useState(null);
52388
+ const { ariaProps, dataAttributes } = createSortableList();
52389
+ const handleDragStart = (index) => (event) => {
52390
+ if (disabled) {
52391
+ event.preventDefault();
52392
+ return;
52393
+ }
52394
+ dragFromRef.current = index;
52395
+ setDraggingIndex(index);
52396
+ event.dataTransfer.effectAllowed = "move";
52397
+ event.dataTransfer.setData("text/plain", String(index));
52398
+ };
52399
+ const handleDragOver = (event) => {
52400
+ event.preventDefault();
52401
+ event.dataTransfer.dropEffect = "move";
52402
+ };
52403
+ const handleDragEnter = (toIndex) => (event) => {
52404
+ event.preventDefault();
52405
+ if (disabled || dragFromRef.current === null || dragFromRef.current === toIndex) return;
52406
+ const next = reorder(items, dragFromRef.current, toIndex);
52407
+ dragFromRef.current = toIndex;
52408
+ setDraggingIndex(toIndex);
52409
+ onReorder?.(next);
52410
+ };
52411
+ const handleDrop = (event) => {
52412
+ event.preventDefault();
52413
+ };
52414
+ const handleDragEnd = () => {
52415
+ dragFromRef.current = null;
52416
+ setDraggingIndex(null);
52417
+ };
52418
+ const handleGripKeyDown = (index) => (event) => {
52419
+ if (disabled) return;
52420
+ const next = getNextOrderIndex(index, event.key, items.length);
52421
+ if (next !== index) {
52422
+ event.preventDefault();
52423
+ onReorder?.(reorder(items, index, next));
52424
+ }
52425
+ };
52426
+ return /* @__PURE__ */ jsxRuntime.jsx(
52427
+ "div",
52428
+ {
52429
+ ref,
52430
+ className: cn(sortableListVariants({ disabled: disabled ? "true" : "false" }), className),
52431
+ ...ariaProps,
52432
+ ...dataAttributes,
52433
+ ...props,
52434
+ children: items.map((item, index) => {
52435
+ const key = getKey(item, index);
52436
+ const isDragging = draggingIndex === index;
52437
+ const dragHandleProps = {
52438
+ "aria-label": "Reorder item",
52439
+ role: "button",
52440
+ tabIndex: 0,
52441
+ onKeyDown: handleGripKeyDown(index),
52442
+ onDragStart: handleDragStart(index)
52443
+ };
52444
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52445
+ "div",
52446
+ {
52447
+ role: "listitem",
52448
+ draggable: !disabled,
52449
+ className: sortableListRowVariants({ dragging: isDragging ? "true" : "false" }),
52450
+ onDragOver: handleDragOver,
52451
+ onDragEnter: handleDragEnter(index),
52452
+ onDrop: handleDrop,
52453
+ onDragEnd: handleDragEnd,
52454
+ children: [
52455
+ /* @__PURE__ */ jsxRuntime.jsx(
52456
+ "button",
52457
+ {
52458
+ type: "button",
52459
+ "aria-label": dragHandleProps["aria-label"],
52460
+ role: dragHandleProps.role,
52461
+ tabIndex: dragHandleProps.tabIndex,
52462
+ onKeyDown: dragHandleProps.onKeyDown,
52463
+ onDragStart: dragHandleProps.onDragStart,
52464
+ className: sortableListGripClass,
52465
+ draggable: !disabled,
52466
+ disabled,
52467
+ children: /* @__PURE__ */ jsxRuntime.jsx(
52468
+ "svg",
52469
+ {
52470
+ width: "16",
52471
+ height: "16",
52472
+ viewBox: "0 0 16 16",
52473
+ fill: "none",
52474
+ "aria-hidden": "true",
52475
+ children: /* @__PURE__ */ jsxRuntime.jsx(
52476
+ "path",
52477
+ {
52478
+ d: `M2 4h12M2 8h12M2 12h12`,
52479
+ stroke: "currentColor",
52480
+ strokeWidth: "1.5",
52481
+ strokeLinecap: "round"
52482
+ }
52483
+ )
52484
+ }
52485
+ )
52486
+ }
52487
+ ),
52488
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: sortableListContentClass, children: renderItem(item, { index, dragHandleProps }) })
52489
+ ]
52490
+ },
52491
+ key
52492
+ );
52493
+ })
52494
+ }
52495
+ );
52496
+ }
52497
+ var SortableList = React11__namespace.forwardRef(SortableListInner);
52498
+ SortableList.displayName = "SortableList";
52499
+
52500
+ // ../kanban-board/dist/index.js
52501
+ function createKanbanBoard() {
52502
+ return {
52503
+ ariaProps: {
52504
+ role: "group",
52505
+ "aria-label": "Board"
52506
+ },
52507
+ dataAttributes: {
52508
+ "data-component": "kanban-board"
52509
+ }
52510
+ };
52511
+ }
52512
+ function cardsByColumn(cards, getColumnId, columns) {
52513
+ const map = /* @__PURE__ */ new Map();
52514
+ for (const col of columns) {
52515
+ map.set(col.id, []);
52516
+ }
52517
+ for (const card of cards) {
52518
+ const colId = getColumnId(card);
52519
+ const bucket = map.get(colId);
52520
+ if (bucket !== void 0) {
52521
+ bucket.push(card);
52522
+ }
52523
+ }
52524
+ return map;
52525
+ }
52526
+ function visibleAndOverflow(cards, cap = 5) {
52527
+ if (cards.length <= cap) {
52528
+ return { visible: cards, overflow: 0 };
52529
+ }
52530
+ return { visible: cards.slice(0, cap), overflow: cards.length - cap };
52531
+ }
52532
+ var kanbanBoardVariants = cva({
52533
+ base: "flex flex-row gap-4 overflow-x-auto pb-4",
52534
+ variants: {},
52535
+ defaultVariants: {}
52536
+ });
52537
+ var kanbanColumnVariants = cva({
52538
+ base: "flex flex-col min-w-[260px] max-w-[300px] flex-shrink-0 rounded-xl bg-muted/40",
52539
+ variants: {},
52540
+ defaultVariants: {}
52541
+ });
52542
+ var kanbanColumnHeaderClass = "flex items-center gap-2 px-4 pt-4 pb-2";
52543
+ var kanbanColumnTitleClass = "flex-1 text-sm font-semibold text-foreground truncate";
52544
+ var kanbanColumnCountClass = "ml-auto inline-flex items-center justify-center rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground";
52545
+ var kanbanAccentBarClass = "h-0.5 w-full";
52546
+ var kanbanNoteBarClass = "mx-4 mb-2 rounded-md bg-muted px-3 py-1.5 text-xs text-muted-foreground";
52547
+ var kanbanColumnBodyClass = "flex flex-col gap-2 px-3 pb-3";
52548
+ var kanbanOverflowButtonClass = [
52549
+ "mt-1 w-full rounded-lg border border-dashed border-border",
52550
+ "py-1.5 text-center text-xs text-muted-foreground",
52551
+ "transition-colors hover:bg-muted hover:text-foreground",
52552
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
52553
+ ].join(" ");
52554
+ var kanbanCardVariants = cva({
52555
+ base: "rounded-lg border border-border bg-card p-3 text-sm text-foreground",
52556
+ variants: {
52557
+ clickable: {
52558
+ true: "cursor-pointer transition-colors hover:bg-muted/60",
52559
+ false: ""
52560
+ }
52561
+ },
52562
+ defaultVariants: {
52563
+ clickable: "false"
52564
+ }
52565
+ });
52566
+ var KanbanCard = React11__namespace.forwardRef(
52567
+ ({ accent, clickable = false, className, style, children, ...props }, ref) => {
52568
+ const accentStyle = accent ? { borderTopColor: accent, borderTopWidth: "2px", ...style } : style ?? {};
52569
+ return /* @__PURE__ */ jsxRuntime.jsx(
52570
+ "div",
52571
+ {
52572
+ ref,
52573
+ className: cn(
52574
+ kanbanCardVariants({ clickable: clickable ? "true" : "false" }),
52575
+ className
52576
+ ),
52577
+ style: accentStyle,
52578
+ ...props,
52579
+ children
52580
+ }
52581
+ );
52582
+ }
52583
+ );
52584
+ KanbanCard.displayName = "KanbanCard";
52585
+ var KanbanColumn = React11__namespace.forwardRef(
52586
+ ({ def, count, className, children, style, ...props }, ref) => {
52587
+ const derivedCount = count !== void 0 ? count : React11__namespace.Children.count(children);
52588
+ const colStyle = def.accent ? { "--kanban-accent": def.accent, ...style } : style ?? {};
52589
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52590
+ "div",
52591
+ {
52592
+ ref,
52593
+ className: cn(kanbanColumnVariants(), className),
52594
+ style: colStyle,
52595
+ ...props,
52596
+ children: [
52597
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: kanbanColumnHeaderClass, children: [
52598
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: kanbanColumnTitleClass, children: def.title }),
52599
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: kanbanColumnCountClass, children: derivedCount })
52600
+ ] }),
52601
+ /* @__PURE__ */ jsxRuntime.jsx(
52602
+ "div",
52603
+ {
52604
+ className: kanbanAccentBarClass,
52605
+ style: def.accent ? { backgroundColor: "var(--kanban-accent)" } : { backgroundColor: "transparent" },
52606
+ "aria-hidden": "true"
52607
+ }
52608
+ ),
52609
+ def.note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: kanbanNoteBarClass, children: def.note }),
52610
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: kanbanColumnBodyClass, children })
52611
+ ]
52612
+ }
52613
+ );
52614
+ }
52615
+ );
52616
+ KanbanColumn.displayName = "KanbanColumn";
52617
+ function KanbanBoard({
52618
+ columns,
52619
+ cards,
52620
+ getCardColumnId,
52621
+ getCardKey,
52622
+ renderCard,
52623
+ cardCap = 5,
52624
+ onCardClick: _onCardClick,
52625
+ columnHeader,
52626
+ onShowMore,
52627
+ className,
52628
+ ...props
52629
+ }) {
52630
+ const { ariaProps, dataAttributes } = createKanbanBoard();
52631
+ const buckets = cardsByColumn(cards, getCardColumnId, columns);
52632
+ return /* @__PURE__ */ jsxRuntime.jsx(
52633
+ "div",
52634
+ {
52635
+ className: cn(kanbanBoardVariants(), className),
52636
+ ...ariaProps,
52637
+ ...dataAttributes,
52638
+ ...props,
52639
+ children: columns.map((def) => {
52640
+ const colCards = buckets.get(def.id) ?? [];
52641
+ const { visible, overflow } = visibleAndOverflow(colCards, cardCap);
52642
+ const count = colCards.length;
52643
+ const header = columnHeader ? columnHeader(def, count) : null;
52644
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52645
+ "div",
52646
+ {
52647
+ className: kanbanColumnVariants(),
52648
+ style: def.accent ? { "--kanban-accent": def.accent } : void 0,
52649
+ children: [
52650
+ header ?? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: kanbanColumnHeaderClass, children: [
52651
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: kanbanColumnTitleClass, children: def.title }),
52652
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: kanbanColumnCountClass, children: count })
52653
+ ] }),
52654
+ /* @__PURE__ */ jsxRuntime.jsx(
52655
+ "div",
52656
+ {
52657
+ className: kanbanAccentBarClass,
52658
+ style: def.accent ? { backgroundColor: "var(--kanban-accent)" } : { backgroundColor: "transparent" },
52659
+ "aria-hidden": "true"
52660
+ }
52661
+ ),
52662
+ def.note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: kanbanNoteBarClass, children: def.note }),
52663
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: kanbanColumnBodyClass, children: [
52664
+ visible.map((card) => /* @__PURE__ */ jsxRuntime.jsx(React11__namespace.Fragment, { children: renderCard(card, def) }, getCardKey(card))),
52665
+ overflow > 0 && /* @__PURE__ */ jsxRuntime.jsx(
52666
+ "button",
52667
+ {
52668
+ type: "button",
52669
+ className: kanbanOverflowButtonClass,
52670
+ onClick: () => onShowMore?.(def.id),
52671
+ children: `+${overflow} more`
52672
+ }
52673
+ )
52674
+ ] })
52675
+ ]
52676
+ },
52677
+ def.id
52678
+ );
52679
+ })
52680
+ }
52681
+ );
52682
+ }
52683
+
52684
+ // ../slot-picker/dist/index.js
52685
+ function slotsForDay(slotsByDay, dayId) {
52686
+ return slotsByDay[dayId] ?? [];
52687
+ }
52688
+ function isSlotSelected(value, dayId, slot) {
52689
+ return value?.dayId === dayId && value?.slot === slot;
52690
+ }
52691
+ function createSlotPicker() {
52692
+ return {
52693
+ ariaProps: {
52694
+ role: "group",
52695
+ "aria-label": "Pick a time"
52696
+ },
52697
+ dataAttributes: {
52698
+ "data-component": "slot-picker"
52699
+ }
52700
+ };
52701
+ }
52702
+ var slotPickerVariants = cva({
52703
+ base: "flex flex-col gap-4",
52704
+ variants: {},
52705
+ defaultVariants: {}
52706
+ });
52707
+ var slotPickerDayRowClass = "flex items-center gap-2 overflow-x-auto pb-1";
52708
+ var slotPickerDayVariants = cva({
52709
+ base: [
52710
+ "inline-flex flex-col items-center justify-center rounded-lg px-3 py-2 min-w-[3.5rem]",
52711
+ "text-sm font-medium cursor-pointer transition-colors",
52712
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
52713
+ "disabled:pointer-events-none disabled:opacity-50"
52714
+ ].join(" "),
52715
+ variants: {
52716
+ selected: {
52717
+ true: "bg-primary text-primary-foreground",
52718
+ false: "bg-card border border-input text-foreground hover:bg-muted"
52719
+ }
52720
+ },
52721
+ defaultVariants: {
52722
+ selected: "false"
52723
+ }
52724
+ });
52725
+ var slotPickerGridClass = "grid grid-cols-3 gap-2 sm:grid-cols-4";
52726
+ var slotPickerSlotVariants = cva({
52727
+ base: [
52728
+ "inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-medium",
52729
+ "transition-colors cursor-pointer",
52730
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
52731
+ ].join(" "),
52732
+ variants: {
52733
+ selected: {
52734
+ true: "bg-primary text-primary-foreground border-primary",
52735
+ false: "bg-card border-input text-foreground hover:bg-muted"
52736
+ },
52737
+ disabled: {
52738
+ true: "opacity-40 pointer-events-none",
52739
+ false: ""
52740
+ }
52741
+ },
52742
+ defaultVariants: {
52743
+ selected: "false",
52744
+ disabled: "false"
52745
+ }
52746
+ });
52747
+ var slotPickerSectionLabelClass = "text-sm font-semibold text-foreground";
52748
+ var slotPickerTimezoneClass = "text-xs text-muted-foreground ml-2";
52749
+ var SlotPicker = React11__namespace.forwardRef(
52750
+ ({
52751
+ days,
52752
+ slotsByDay,
52753
+ value: valueProp,
52754
+ defaultValue,
52755
+ onChange,
52756
+ timezoneLabel,
52757
+ disabledSlots = [],
52758
+ className,
52759
+ ...props
52760
+ }, ref) => {
52761
+ const isControlled = valueProp !== void 0;
52762
+ const [internal, setInternal] = React11__namespace.useState(
52763
+ defaultValue
52764
+ );
52765
+ const value = isControlled ? valueProp : internal;
52766
+ const selectedDayId = value?.dayId;
52767
+ const handleDaySelect = React11__namespace.useCallback(
52768
+ (dayId) => {
52769
+ const slots = slotsForDay(slotsByDay, dayId);
52770
+ const keepSlot = value?.slot && slots.includes(value.slot) ? value.slot : void 0;
52771
+ const next = keepSlot ? { dayId, slot: keepSlot } : void 0;
52772
+ if (!isControlled) setInternal(next);
52773
+ if (next) onChange?.(next);
52774
+ },
52775
+ [isControlled, onChange, slotsByDay, value]
52776
+ );
52777
+ const handleSlotSelect = React11__namespace.useCallback(
52778
+ (slot) => {
52779
+ if (!selectedDayId) return;
52780
+ const next = { dayId: selectedDayId, slot };
52781
+ if (!isControlled) setInternal(next);
52782
+ onChange?.(next);
52783
+ },
52784
+ [isControlled, onChange, selectedDayId]
52785
+ );
52786
+ const api = createSlotPicker();
52787
+ const currentSlots = selectedDayId ? slotsForDay(slotsByDay, selectedDayId) : [];
52788
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52789
+ "div",
52790
+ {
52791
+ ref,
52792
+ className: cn(slotPickerVariants(), className),
52793
+ ...api.ariaProps,
52794
+ ...api.dataAttributes,
52795
+ ...props,
52796
+ children: [
52797
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
52798
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: slotPickerSectionLabelClass, children: "Pick a day" }),
52799
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "radiogroup", "aria-label": "Pick a day", className: cn(slotPickerDayRowClass, "mt-2"), children: days.map((day) => {
52800
+ const isSelected = selectedDayId === day.id;
52801
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52802
+ "button",
52803
+ {
52804
+ type: "button",
52805
+ role: "radio",
52806
+ "aria-checked": isSelected,
52807
+ "data-state": isSelected ? "checked" : "unchecked",
52808
+ className: slotPickerDayVariants({
52809
+ selected: isSelected ? "true" : "false"
52810
+ }),
52811
+ onClick: () => handleDaySelect(day.id),
52812
+ children: [
52813
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: day.weekday }),
52814
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-bold leading-none", children: day.dayNum })
52815
+ ]
52816
+ },
52817
+ day.id
52818
+ );
52819
+ }) })
52820
+ ] }),
52821
+ selectedDayId && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
52822
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: slotPickerSectionLabelClass, children: [
52823
+ "Pick a time",
52824
+ timezoneLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: slotPickerTimezoneClass, children: timezoneLabel })
52825
+ ] }),
52826
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "radiogroup", "aria-label": "Pick a time", className: cn(slotPickerGridClass, "mt-2"), children: currentSlots.map((slot) => {
52827
+ const isSelected = isSlotSelected(value, selectedDayId, slot);
52828
+ const isDisabled = disabledSlots.includes(slot);
52829
+ return /* @__PURE__ */ jsxRuntime.jsx(
52830
+ "button",
52831
+ {
52832
+ type: "button",
52833
+ role: "radio",
52834
+ "aria-checked": isSelected,
52835
+ "aria-disabled": isDisabled || void 0,
52836
+ "data-state": isSelected ? "checked" : "unchecked",
52837
+ className: slotPickerSlotVariants({
52838
+ selected: isSelected ? "true" : "false",
52839
+ disabled: isDisabled ? "true" : "false"
52840
+ }),
52841
+ onClick: () => !isDisabled && handleSlotSelect(slot),
52842
+ children: slot
52843
+ },
52844
+ slot
52845
+ );
52846
+ }) })
52847
+ ] })
52848
+ ]
52849
+ }
52850
+ );
52851
+ }
52852
+ );
52853
+ SlotPicker.displayName = "SlotPicker";
51929
52854
  /*! Bundled license information:
51930
52855
 
51931
52856
  @nevware21/ts-utils/dist/es5/mod/ts-utils.js:
@@ -52063,6 +52988,9 @@ exports.InputGroupAddon = InputGroupAddon;
52063
52988
  exports.InputGroupButton = InputGroupButton;
52064
52989
  exports.InputGroupText = InputGroupText;
52065
52990
  exports.InstallPrompt = InstallPrompt;
52991
+ exports.KanbanBoard = KanbanBoard;
52992
+ exports.KanbanCard = KanbanCard;
52993
+ exports.KanbanColumn = KanbanColumn;
52066
52994
  exports.KeyboardShortcut = KeyboardShortcut;
52067
52995
  exports.LanguageSelector = LanguageSelector;
52068
52996
  exports.LinkCard = LinkCard;
@@ -52071,6 +52999,7 @@ exports.LiveCursors = LiveCursors;
52071
52999
  exports.LiveTranscript = LiveTranscript;
52072
53000
  exports.MarkdownRenderer = MarkdownRenderer;
52073
53001
  exports.MarqueeStrip = MarqueeStrip;
53002
+ exports.Mascot = Mascot;
52074
53003
  exports.MasteryBar = MasteryBar;
52075
53004
  exports.MiniMap = MiniMap;
52076
53005
  exports.MobileNav = MobileNav;
@@ -52136,8 +53065,11 @@ exports.Skeleton = Skeleton;
52136
53065
  exports.SkeletonText = SkeletonText;
52137
53066
  exports.SkipToContent = SkipToContent;
52138
53067
  exports.SlideViewer = SlideViewer;
53068
+ exports.Slider = Slider;
53069
+ exports.SlotPicker = SlotPicker;
52139
53070
  exports.SocialAuthButton = SocialAuthButton;
52140
53071
  exports.SocialAuthRow = SocialAuthRow;
53072
+ exports.SortableList = SortableList;
52141
53073
  exports.SpeakingOrb = SpeakingOrb;
52142
53074
  exports.StatGrid = StatGrid;
52143
53075
  exports.StatsGrid = StatsGrid;