remoraid 3.1.1 → 3.3.2

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.
@@ -5756,6 +5756,8 @@ var isIcon = (value) => {
5756
5756
  import { px, rgba, useMantineTheme } from "@mantine/core";
5757
5757
  import {
5758
5758
  IconAlertCircle,
5759
+ IconArrowLeft,
5760
+ IconArrowRight,
5759
5761
  IconCircleCheck,
5760
5762
  IconInfoCircle
5761
5763
  } from "@tabler/icons-react";
@@ -5866,6 +5868,18 @@ var createRemoraidTheme = (customTheme, dependencies) => {
5866
5868
  ["medium" /* Medium */]: { size: 24, stroke: 1.7 },
5867
5869
  ["large" /* Large */]: { size: 28, stroke: 1.7 },
5868
5870
  ["huge" /* Huge */]: { size: 44, stroke: 1.7 }
5871
+ },
5872
+ Scroller: {
5873
+ edgeGradientColor: "transparent",
5874
+ className: "remoraid-masked-scroller",
5875
+ startControlIcon: /* @__PURE__ */ jsx3(IconArrowLeft, {
5876
+ size: "var(--remoraid-icon-size-extraSmall)",
5877
+ stroke: "var(--remoraid-icon-stroke-extraSmall)"
5878
+ }),
5879
+ endControlIcon: /* @__PURE__ */ jsx3(IconArrowRight, {
5880
+ size: "var(--remoraid-icon-size-extraSmall)",
5881
+ stroke: "var(--remoraid-icon-stroke-extraSmall)"
5882
+ })
5869
5883
  }
5870
5884
  }
5871
5885
  };
@@ -5877,7 +5891,8 @@ var getCssVars = (theme) => {
5877
5891
  transitionDurations,
5878
5892
  primaryGutter,
5879
5893
  containerSize,
5880
- transparentBackground
5894
+ transparentBackground,
5895
+ componentsProps: { icons }
5881
5896
  } = theme;
5882
5897
  return {
5883
5898
  "--mantine-color-body": bodyColor,
@@ -5889,6 +5904,11 @@ var getCssVars = (theme) => {
5889
5904
  ...Object.entries(transitionDurations).reduce((t, [key, value]) => ({
5890
5905
  ...t,
5891
5906
  [`--remoraid-transition-duration-${key}`]: `${value}ms`
5907
+ }), {}),
5908
+ ...Object.entries(icons).reduce((t, [key, { size, stroke }]) => ({
5909
+ ...t,
5910
+ [`--remoraid-icon-size-${key}`]: typeof size === "number" ? `${size}px` : size,
5911
+ [`--remoraid-icon-stroke-${key}`]: `${stroke}`
5892
5912
  }), {})
5893
5913
  };
5894
5914
  };
@@ -7446,25 +7466,30 @@ import { useEffect as useEffect6, useRef as useRef3, useState as useState8 } fro
7446
7466
  import {
7447
7467
  Chip,
7448
7468
  Flex,
7449
- ScrollArea as ScrollArea3
7469
+ Scroller
7450
7470
  } from "@mantine/core";
7471
+ var import_lodash14 = __toESM(require_lodash(), 1);
7451
7472
  import { jsx as jsx26 } from "react/jsx-runtime";
7452
7473
  function ScrollableChipGroup({
7453
7474
  value,
7454
- ref,
7455
7475
  onChange,
7456
7476
  gap = "xs",
7457
7477
  componentsProps,
7458
7478
  children
7459
7479
  }) {
7460
- return /* @__PURE__ */ jsx26(ScrollArea3, {
7461
- ref,
7462
- ...componentsProps?.ScrollArea,
7463
- style: { contain: "inline-size", ...componentsProps?.ScrollArea?.style },
7480
+ const theme = useRemoraidTheme();
7481
+ return /* @__PURE__ */ jsx26(Scroller, {
7482
+ ...theme.componentsProps?.Scroller,
7483
+ ...componentsProps?.Scroller,
7484
+ className: clsx_default("remoraid-masked-scroller", theme.componentsProps?.Scroller?.className, componentsProps?.Scroller?.className),
7485
+ style: import_lodash14.merge({ contain: "inline-size" }, theme.componentsProps?.Scroller?.style, componentsProps?.Scroller?.style),
7486
+ attributes: import_lodash14.merge({
7487
+ container: { "data-remoraid-scroller-container": true }
7488
+ }, theme.componentsProps?.Scroller?.attributes, componentsProps?.Scroller?.attributes),
7464
7489
  children: /* @__PURE__ */ jsx26(Chip.Group, {
7465
7490
  value,
7466
7491
  onChange,
7467
- ...componentsProps?.chipGroup,
7492
+ ...componentsProps?.ChipGroup,
7468
7493
  multiple: true,
7469
7494
  children: /* @__PURE__ */ jsx26(Flex, {
7470
7495
  justify: "flex-start",
@@ -7479,12 +7504,12 @@ function ScrollableChipGroup({
7479
7504
  }
7480
7505
 
7481
7506
  // src/core/components/WidgetSelectionHeader/index.tsx
7482
- var import_lodash14 = __toESM(require_lodash(), 1);
7507
+ var import_lodash15 = __toESM(require_lodash(), 1);
7483
7508
  import { jsx as jsx27, jsxs as jsxs8 } from "react/jsx-runtime";
7484
7509
  function WidgetSelectionHeader({
7485
7510
  title,
7486
7511
  pinnableSection = "top" /* Top */,
7487
- initiallyPinned = true,
7512
+ initiallyPinned: initiallyPinnedProp,
7488
7513
  disabledWidgets,
7489
7514
  componentsProps
7490
7515
  }) {
@@ -7500,6 +7525,7 @@ function WidgetSelectionHeader({
7500
7525
  if (!page) {
7501
7526
  throw new InvalidComponentUsageError("WidgetSelectionHeader", "must be used as child of 'Page'.");
7502
7527
  }
7528
+ const initiallyPinned = pinnableSection ? initiallyPinnedProp ?? true : false;
7503
7529
  const [hover, setHover] = useState8(false);
7504
7530
  const [isPinned, setIsPinned] = useState8(initiallyPinned);
7505
7531
  const handleEnter = () => {
@@ -7508,7 +7534,7 @@ function WidgetSelectionHeader({
7508
7534
  const handleLeave = () => {
7509
7535
  setHover(false);
7510
7536
  };
7511
- const scrollAreaRef = useRef3(null);
7537
+ const containerRef = useRef3(null);
7512
7538
  const widgets = widgetsContext2.widgets[page.pageId] ?? {};
7513
7539
  const selectedWidgets = Object.entries(widgets).reduce((t, [widgetId, widget]) => widget?.selected ? [...t, widgetId] : t, []);
7514
7540
  const element = /* @__PURE__ */ jsxs8(Flex2, {
@@ -7516,6 +7542,7 @@ function WidgetSelectionHeader({
7516
7542
  align: "center",
7517
7543
  gap: "md",
7518
7544
  ...componentsProps?.container,
7545
+ ref: containerRef,
7519
7546
  onMouseEnter: (e) => {
7520
7547
  if (!pinnableSection) {
7521
7548
  handleEnter();
@@ -7526,13 +7553,14 @@ function WidgetSelectionHeader({
7526
7553
  if (!pinnableSection) {
7527
7554
  handleLeave();
7528
7555
  }
7529
- componentsProps?.container?.onMouseEnter?.(e);
7556
+ componentsProps?.container?.onMouseLeave?.(e);
7530
7557
  },
7531
7558
  className: clsx_default(!pinnableSection ? "remoraid-non-widget-segment" : undefined, !pinnableSection ? "remoraid-segment" : undefined, componentsProps?.container?.className),
7532
7559
  children: [
7533
7560
  /* @__PURE__ */ jsx27(Text, {
7534
7561
  size: "md",
7535
7562
  ...componentsProps?.title,
7563
+ style: { whiteSpace: "nowrap", ...componentsProps?.title?.style },
7536
7564
  children: title ?? page.name
7537
7565
  }),
7538
7566
  /* @__PURE__ */ jsx27(Divider, {
@@ -7541,13 +7569,17 @@ function WidgetSelectionHeader({
7541
7569
  }),
7542
7570
  isPageRegistered(page.pageId) && /* @__PURE__ */ jsx27(ScrollableChipGroup, {
7543
7571
  value: selectedWidgets,
7544
- ref: scrollAreaRef,
7545
7572
  ...componentsProps?.ScrollableChipGroup,
7546
7573
  onChange: (value) => {
7547
7574
  updateWidgetSelectionBulk(page.pageId, value);
7548
7575
  componentsProps?.ScrollableChipGroup?.onChange?.(value);
7549
7576
  },
7550
- componentsProps: import_lodash14.merge({ ScrollArea: { flex: 1 } }, componentsProps?.ScrollableChipGroup?.componentsProps),
7577
+ componentsProps: import_lodash15.merge({
7578
+ Scroller: {
7579
+ flex: 1,
7580
+ miw: 0
7581
+ }
7582
+ }, componentsProps?.ScrollableChipGroup?.componentsProps),
7551
7583
  children: Object.entries(widgets).map(([widgetId, widget]) => {
7552
7584
  if (!widget) {
7553
7585
  return;
@@ -7568,12 +7600,15 @@ function WidgetSelectionHeader({
7568
7600
  ...theme.componentsProps.icons.extraSmall
7569
7601
  }),
7570
7602
  ...componentsProps?.Chip,
7571
- styles: import_lodash14.merge({
7603
+ styles: import_lodash15.merge({
7572
7604
  label: {
7573
7605
  transition: "background-color var(--remoraid-transition-duration-short)"
7574
7606
  }
7575
7607
  }, componentsProps?.Chip?.styles),
7576
- id: `remoraid-widget-selection-header-chip-${widgetId}`,
7608
+ wrapperProps: {
7609
+ ...componentsProps?.Chip?.wrapperProps,
7610
+ id: `remoraid-widget-selection-header-chip-${widgetId}`
7611
+ },
7577
7612
  children: widget.name
7578
7613
  })
7579
7614
  })
@@ -7614,19 +7649,20 @@ function WidgetSelectionHeader({
7614
7649
  if (!activeWidget) {
7615
7650
  return;
7616
7651
  }
7617
- if (!isPinned) {
7652
+ if (!containerRef?.current) {
7618
7653
  return;
7619
7654
  }
7620
- if (!scrollAreaRef?.current) {
7655
+ const activeWidgetChipElement = containerRef.current.querySelector(`#remoraid-widget-selection-header-chip-${activeWidget}`);
7656
+ if (!activeWidgetChipElement) {
7621
7657
  return;
7622
7658
  }
7623
- const activeWidgetChipElement = scrollAreaRef.current.querySelector(`#remoraid-widget-selection-header-chip-${activeWidget}`);
7624
- if (!activeWidgetChipElement) {
7659
+ const scrollContainerElement = activeWidgetChipElement.closest("[data-remoraid-scroller-container]");
7660
+ if (!scrollContainerElement) {
7625
7661
  return;
7626
7662
  }
7627
- activeWidgetChipElement.scrollIntoView({
7628
- behavior: "smooth",
7629
- inline: "center"
7663
+ scrollContainerElement.scrollTo({
7664
+ left: activeWidgetChipElement.offsetLeft - scrollContainerElement.clientWidth / 2 + activeWidgetChipElement.clientWidth / 2,
7665
+ behavior: "smooth"
7630
7666
  });
7631
7667
  }, [activeWidget]);
7632
7668
  if (pinnableSection) {
@@ -7720,7 +7756,7 @@ function BadgeMinimal({
7720
7756
  }
7721
7757
 
7722
7758
  // src/core/components/BadgeGroup/index.tsx
7723
- var import_lodash15 = __toESM(require_lodash(), 1);
7759
+ var import_lodash16 = __toESM(require_lodash(), 1);
7724
7760
  import { jsx as jsx29, jsxs as jsxs9, Fragment as Fragment2 } from "react/jsx-runtime";
7725
7761
  import { createElement } from "react";
7726
7762
  function BadgeGroup({
@@ -7768,7 +7804,7 @@ function BadgeGroup({
7768
7804
  ...componentsProps?.cumulativeBadge,
7769
7805
  style: {
7770
7806
  cursor: "pointer",
7771
- ...import_lodash15.merge(transitionStyle, componentsProps?.cumulativeBadge?.style)
7807
+ ...import_lodash16.merge(transitionStyle, componentsProps?.cumulativeBadge?.style)
7772
7808
  },
7773
7809
  children: [
7774
7810
  numVisibleBadges,
@@ -7792,7 +7828,7 @@ function BadgeGroup({
7792
7828
  }
7793
7829
  // src/core/components/AlertMinimal/index.tsx
7794
7830
  import { Alert, Transition as Transition7 } from "@mantine/core";
7795
- var import_lodash16 = __toESM(require_lodash(), 1);
7831
+ var import_lodash17 = __toESM(require_lodash(), 1);
7796
7832
  import { jsx as jsx30, jsxs as jsxs10 } from "react/jsx-runtime";
7797
7833
  function AlertMinimal({
7798
7834
  category,
@@ -7809,7 +7845,7 @@ function AlertMinimal({
7809
7845
  icon: Icon4,
7810
7846
  iconSize = "small" /* Small */,
7811
7847
  componentsProps
7812
- } = import_lodash16.merge({}, theme.componentsProps.alerts[category], props);
7848
+ } = import_lodash17.merge({}, theme.componentsProps.alerts[category], props);
7813
7849
  return /* @__PURE__ */ jsx30(Transition7, {
7814
7850
  mounted,
7815
7851
  transition: "fade",
@@ -7823,10 +7859,10 @@ function AlertMinimal({
7823
7859
  onClose,
7824
7860
  withCloseButton: onClose !== undefined,
7825
7861
  icon: Icon4 ? /* @__PURE__ */ jsx30(Icon4, {
7826
- ...import_lodash16.merge({}, theme.componentsProps.icons[iconSize], componentsProps?.icon)
7862
+ ...import_lodash17.merge({}, theme.componentsProps.icons[iconSize], componentsProps?.icon)
7827
7863
  }) : undefined,
7828
7864
  ...componentsProps?.alert,
7829
- style: import_lodash16.merge(transitionStyle, componentsProps?.alert?.style),
7865
+ style: import_lodash17.merge(transitionStyle, componentsProps?.alert?.style),
7830
7866
  children: [
7831
7867
  text,
7832
7868
  children
@@ -7843,7 +7879,7 @@ import {
7843
7879
  useState as useState9
7844
7880
  } from "react";
7845
7881
  import { IconX } from "@tabler/icons-react";
7846
- var import_lodash17 = __toESM(require_lodash(), 1);
7882
+ var import_lodash18 = __toESM(require_lodash(), 1);
7847
7883
  import { jsx as jsx31, jsxs as jsxs11 } from "react/jsx-runtime";
7848
7884
  function WidgetWrapper({
7849
7885
  config,
@@ -7914,7 +7950,7 @@ function WidgetWrapper({
7914
7950
  handleLeave(e);
7915
7951
  componentsProps?.container?.onMouseLeave?.(e);
7916
7952
  },
7917
- style: import_lodash17.merge(transitionStyle, { flexDirection: "column" }, componentsProps?.container?.style),
7953
+ style: import_lodash18.merge(transitionStyle, { flexDirection: "column" }, componentsProps?.container?.style),
7918
7954
  className: clsx_default("remoraid-segment", componentsProps?.container?.className),
7919
7955
  id: config.widgetId,
7920
7956
  children: [
@@ -7994,12 +8030,12 @@ import {
7994
8030
  Title,
7995
8031
  Stack as Stack5,
7996
8032
  Box as Box7,
7997
- ScrollArea as ScrollArea4,
8033
+ ScrollArea as ScrollArea3,
7998
8034
  Transition as Transition9,
7999
8035
  Text as Text2
8000
8036
  } from "@mantine/core";
8001
8037
  import { Children } from "react";
8002
- var import_lodash18 = __toESM(require_lodash(), 1);
8038
+ var import_lodash19 = __toESM(require_lodash(), 1);
8003
8039
  import { jsx as jsx32, jsxs as jsxs12 } from "react/jsx-runtime";
8004
8040
  import { createElement as createElement2 } from "react";
8005
8041
  function Widget({
@@ -8071,7 +8107,7 @@ function Widget({
8071
8107
  size: "sm",
8072
8108
  c: "dimmed",
8073
8109
  ...componentsProps?.description,
8074
- style: import_lodash18.merge(transitionStyle, componentsProps?.description?.style),
8110
+ style: import_lodash19.merge(transitionStyle, componentsProps?.description?.style),
8075
8111
  children: description
8076
8112
  })
8077
8113
  })
@@ -8112,7 +8148,7 @@ function Widget({
8112
8148
  });
8113
8149
  })
8114
8150
  }),
8115
- (loading || Children.toArray(children).length > 0) && /* @__PURE__ */ jsx32(ScrollArea4.Autosize, {
8151
+ (loading || Children.toArray(children).length > 0) && /* @__PURE__ */ jsx32(ScrollArea3.Autosize, {
8116
8152
  flex: 1,
8117
8153
  ...componentsProps?.childrenContainer,
8118
8154
  className: clsx_default("remoraid-widget-children-container", componentsProps?.childrenContainer?.className),
@@ -8342,7 +8378,7 @@ var SettingsTable_default = Object.assign(SettingsTable, {
8342
8378
  Row
8343
8379
  });
8344
8380
  // src/core/components/NavbarSettingsWidget/index.tsx
8345
- var import_lodash19 = __toESM(require_lodash(), 1);
8381
+ var import_lodash20 = __toESM(require_lodash(), 1);
8346
8382
  import { Select } from "@mantine/core";
8347
8383
  import { jsx as jsx39, jsxs as jsxs15 } from "react/jsx-runtime";
8348
8384
  var defaultNavbarSettingsWidgetId = "navbar-settings";
@@ -8378,7 +8414,7 @@ function NavbarSettingsWidget({
8378
8414
  navbar: initialUserExperience.navbar
8379
8415
  }));
8380
8416
  },
8381
- custom: !import_lodash19.isEqual(userExperience.navbar, initialUserExperience.navbar),
8417
+ custom: !import_lodash20.isEqual(userExperience.navbar, initialUserExperience.navbar),
8382
8418
  children: /* @__PURE__ */ jsxs15(SettingsTable_default, {
8383
8419
  ...componentsProps?.table,
8384
8420
  children: [
@@ -8436,7 +8472,7 @@ function NavbarSettingsWidget({
8436
8472
  });
8437
8473
  }
8438
8474
  // src/core/components/FooterSettingsWidget/index.tsx
8439
- var import_lodash20 = __toESM(require_lodash(), 1);
8475
+ var import_lodash21 = __toESM(require_lodash(), 1);
8440
8476
  import { Select as Select2 } from "@mantine/core";
8441
8477
  import { jsx as jsx40, jsxs as jsxs16 } from "react/jsx-runtime";
8442
8478
  var defaultFooterSettingsWidgetId = "footer-settings";
@@ -8467,7 +8503,7 @@ function FooterSettingsWidget({
8467
8503
  footer: initialUserExperience.footer
8468
8504
  }));
8469
8505
  },
8470
- custom: !import_lodash20.isEqual(userExperience.footer, initialUserExperience.footer),
8506
+ custom: !import_lodash21.isEqual(userExperience.footer, initialUserExperience.footer),
8471
8507
  children: /* @__PURE__ */ jsxs16(SettingsTable_default, {
8472
8508
  ...componentsProps?.table,
8473
8509
  children: [
@@ -8552,7 +8588,7 @@ import {
8552
8588
  Box as Box8,
8553
8589
  Input,
8554
8590
  Paper as Paper4,
8555
- ScrollArea as ScrollArea5
8591
+ ScrollArea as ScrollArea4
8556
8592
  } from "@mantine/core";
8557
8593
  import { useState as useState10 } from "react";
8558
8594
  import { jsx as jsx42 } from "react/jsx-runtime";
@@ -8586,7 +8622,7 @@ function InputWrapperScrollArea({
8586
8622
  transition: "border-color .1s",
8587
8623
  borderColor: error ? "var(--mantine-color-error)" : isHovering ? "var(--mantine-primary-color-filled)" : undefined
8588
8624
  },
8589
- children: /* @__PURE__ */ jsx42(ScrollArea5, {
8625
+ children: /* @__PURE__ */ jsx42(ScrollArea4, {
8590
8626
  mah,
8591
8627
  px: "md",
8592
8628
  flex: 1,
@@ -26,17 +26,17 @@
26
26
  --remoraid-frame-layout-gutter
27
27
  );
28
28
  &:has(
29
- > .remoraid-frame-layout-vertical-container
30
- > .remoraid-frame-layout-top-section
31
- > :not([data-hidden="true"], style)
32
- ) {
29
+ > .remoraid-frame-layout-vertical-container
30
+ > .remoraid-frame-layout-top-section
31
+ > :not([data-hidden="true"], style)
32
+ ) {
33
33
  --remoraid-frame-layout-content-section-padding-top: 0;
34
34
  }
35
35
  &:has(
36
- > .remoraid-frame-layout-vertical-container
37
- > .remoraid-frame-layout-bottom-section
38
- > :not([data-hidden="true"], style)
39
- ) {
36
+ > .remoraid-frame-layout-vertical-container
37
+ > .remoraid-frame-layout-bottom-section
38
+ > :not([data-hidden="true"], style)
39
+ ) {
40
40
  --remoraid-frame-layout-content-section-padding-bottom: 0;
41
41
  }
42
42
  }
@@ -79,14 +79,14 @@
79
79
  }
80
80
  .remoraid-widget-children-container {
81
81
  &:not(
82
- :has(
83
- > div
84
- > .mantine-ScrollArea-root
85
- > .mantine-ScrollArea-viewport
86
- > div
87
- :not([data-hidden="true"], style)
88
- )
89
- ) {
82
+ :has(
83
+ > div
84
+ > .mantine-ScrollArea-root
85
+ > .mantine-ScrollArea-viewport
86
+ > div
87
+ :not([data-hidden="true"], style)
88
+ )
89
+ ) {
90
90
  display: none !important;
91
91
  }
92
92
  }
@@ -120,3 +120,60 @@
120
120
  transform: none !important;
121
121
  }
122
122
  }
123
+ .remoraid-masked-scroller > .mantine-Scroller-container {
124
+ mask-image: none;
125
+ -webkit-mask-image: none;
126
+ }
127
+ .remoraid-masked-scroller:has(
128
+ > .mantine-Scroller-control[data-position="start"]:not([data-hidden])
129
+ )
130
+ > .mantine-Scroller-container {
131
+ mask-image: linear-gradient(
132
+ to right,
133
+ transparent,
134
+ black var(--scroller-control-size),
135
+ black 100%
136
+ );
137
+ -webkit-mask-image: linear-gradient(
138
+ to right,
139
+ transparent,
140
+ black var(--scroller-control-size),
141
+ black 100%
142
+ );
143
+ }
144
+ .remoraid-masked-scroller:has(
145
+ > .mantine-Scroller-control[data-position="end"]:not([data-hidden])
146
+ )
147
+ > .mantine-Scroller-container {
148
+ mask-image: linear-gradient(
149
+ to right,
150
+ black 0,
151
+ black calc(100% - var(--scroller-control-size)),
152
+ transparent
153
+ );
154
+ -webkit-mask-image: linear-gradient(
155
+ to right,
156
+ black 0,
157
+ black calc(100% - var(--scroller-control-size)),
158
+ transparent
159
+ );
160
+ }
161
+ .remoraid-masked-scroller:has(
162
+ > .mantine-Scroller-control[data-position="start"]:not([data-hidden])
163
+ ):has(> .mantine-Scroller-control[data-position="end"]:not([data-hidden]))
164
+ > .mantine-Scroller-container {
165
+ mask-image: linear-gradient(
166
+ to right,
167
+ transparent,
168
+ black var(--scroller-control-size),
169
+ black calc(100% - var(--scroller-control-size)),
170
+ transparent
171
+ );
172
+ -webkit-mask-image: linear-gradient(
173
+ to right,
174
+ transparent,
175
+ black var(--scroller-control-size),
176
+ black calc(100% - var(--scroller-control-size)),
177
+ transparent
178
+ );
179
+ }