@rufous/ui 0.2.65 → 0.2.66
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/main.cjs +121 -100
- package/dist/main.css +7 -0
- package/dist/main.js +109 -88
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -2148,6 +2148,7 @@ var AddressLookup_default = AddressLookup;
|
|
|
2148
2148
|
|
|
2149
2149
|
// lib/TextFields/DateField.tsx
|
|
2150
2150
|
var import_react19 = __toESM(require("react"), 1);
|
|
2151
|
+
var import_react_dom = require("react-dom");
|
|
2151
2152
|
var WEEKDAYS = ["SU", "MO", "TU", "WE", "TH", "FR", "SA"];
|
|
2152
2153
|
var MONTHS = [
|
|
2153
2154
|
"January",
|
|
@@ -2589,7 +2590,10 @@ var DateField = ({
|
|
|
2589
2590
|
(0, import_react19.useEffect)(() => {
|
|
2590
2591
|
if (!open) return;
|
|
2591
2592
|
const handler = (e) => {
|
|
2592
|
-
|
|
2593
|
+
const target = e.target;
|
|
2594
|
+
if (containerRef.current?.contains(target)) return;
|
|
2595
|
+
if (pickerRef.current?.contains(target)) return;
|
|
2596
|
+
setOpen(false);
|
|
2593
2597
|
};
|
|
2594
2598
|
document.addEventListener("mousedown", handler);
|
|
2595
2599
|
return () => document.removeEventListener("mousedown", handler);
|
|
@@ -2790,80 +2794,97 @@ var DateField = ({
|
|
|
2790
2794
|
)),
|
|
2791
2795
|
label && /* @__PURE__ */ import_react19.default.createElement("label", { htmlFor: inputId, className: "rf-text-field__label" }, label, " ", required && /* @__PURE__ */ import_react19.default.createElement("span", { className: "rf-text-field__asterisk" }, "*")),
|
|
2792
2796
|
variant === "outlined" && /* @__PURE__ */ import_react19.default.createElement("fieldset", { className: "rf-text-field__notch" }, label && /* @__PURE__ */ import_react19.default.createElement("legend", { className: "rf-text-field__legend" }, /* @__PURE__ */ import_react19.default.createElement("span", null, label, required ? " *" : "")))
|
|
2793
|
-
), open && !disabled &&
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
ref: pickerRef,
|
|
2797
|
-
className: [
|
|
2798
|
-
"rf-date-picker",
|
|
2799
|
-
isSideVariant ? "rf-date-picker--side" : "",
|
|
2800
|
-
dropUp ? "rf-date-picker--drop-up" : ""
|
|
2801
|
-
].filter(Boolean).join(" "),
|
|
2802
|
-
onMouseDown: (e) => e.preventDefault()
|
|
2803
|
-
},
|
|
2804
|
-
/* @__PURE__ */ import_react19.default.createElement("div", { className: isSideVariant ? "rf-date-picker__cal-col" : void 0 }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2805
|
-
CalendarBody,
|
|
2806
|
-
{
|
|
2807
|
-
viewMonth,
|
|
2808
|
-
viewYear,
|
|
2809
|
-
selectedDate,
|
|
2810
|
-
todayDate,
|
|
2811
|
-
dayCells,
|
|
2812
|
-
onDayClick: handleDayClick,
|
|
2813
|
-
onPrev: prevMonth,
|
|
2814
|
-
onNext: nextMonth,
|
|
2815
|
-
onMonthSelect: setViewMonth,
|
|
2816
|
-
onYearSelect: setViewYear
|
|
2817
|
-
}
|
|
2818
|
-
), type === "datetime" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__time-section" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__time-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement(
|
|
2819
|
-
SpinnerPanel,
|
|
2820
|
-
{
|
|
2821
|
-
hour,
|
|
2822
|
-
minute,
|
|
2823
|
-
ampm,
|
|
2824
|
-
onHourChange: handleHourChange,
|
|
2825
|
-
onMinuteChange: handleMinuteChange,
|
|
2826
|
-
onHourInput: handleHourInput,
|
|
2827
|
-
onMinuteInput: handleMinuteInput,
|
|
2828
|
-
onAmpmToggle: handleAmpmToggle
|
|
2829
|
-
}
|
|
2830
|
-
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__divider" }), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__footer" }, /* @__PURE__ */ import_react19.default.createElement("button", { type: "button", className: "rf-date-picker__footer-btn", onClick: handleToday }, "Today"), /* @__PURE__ */ import_react19.default.createElement("button", { type: "button", className: "rf-date-picker__footer-btn rf-date-picker__footer-btn--clear", onClick: handleClear }, "Clear"))),
|
|
2831
|
-
type === "datetime-side" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-spinner" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2832
|
-
SpinnerPanel,
|
|
2833
|
-
{
|
|
2834
|
-
hour,
|
|
2835
|
-
minute,
|
|
2836
|
-
ampm,
|
|
2837
|
-
onHourChange: handleHourChange,
|
|
2838
|
-
onMinuteChange: handleMinuteChange,
|
|
2839
|
-
onHourInput: handleHourInput,
|
|
2840
|
-
onMinuteInput: handleMinuteInput,
|
|
2841
|
-
onAmpmToggle: handleAmpmToggle
|
|
2842
|
-
}
|
|
2843
|
-
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm)),
|
|
2844
|
-
type === "datetime-scroll" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-timescroll" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2845
|
-
ScrollColumn,
|
|
2846
|
-
{
|
|
2847
|
-
items: HOURS,
|
|
2848
|
-
selected: hour - 1,
|
|
2849
|
-
onSelect: handleScrollHour
|
|
2850
|
-
}
|
|
2851
|
-
), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-timescroll__colon" }, ":"), /* @__PURE__ */ import_react19.default.createElement(
|
|
2852
|
-
ScrollColumn,
|
|
2853
|
-
{
|
|
2854
|
-
items: MINUTES,
|
|
2855
|
-
selected: minute,
|
|
2856
|
-
onSelect: handleScrollMinute
|
|
2857
|
-
}
|
|
2858
|
-
), /* @__PURE__ */ import_react19.default.createElement(
|
|
2859
|
-
ScrollColumn,
|
|
2797
|
+
), open && !disabled && (0, import_react_dom.createPortal)(
|
|
2798
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
2799
|
+
"div",
|
|
2860
2800
|
{
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2801
|
+
ref: pickerRef,
|
|
2802
|
+
className: [
|
|
2803
|
+
"rf-date-picker",
|
|
2804
|
+
"rf-date-picker--portaled",
|
|
2805
|
+
isSideVariant ? "rf-date-picker--side" : "",
|
|
2806
|
+
dropUp ? "rf-date-picker--drop-up" : ""
|
|
2807
|
+
].filter(Boolean).join(" "),
|
|
2808
|
+
style: (() => {
|
|
2809
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
2810
|
+
if (!rect) return {};
|
|
2811
|
+
const top = rect.bottom + 6;
|
|
2812
|
+
const spaceBelow = window.innerHeight - rect.bottom - 6;
|
|
2813
|
+
const useDropUp = spaceBelow < 350 && rect.top > spaceBelow;
|
|
2814
|
+
return {
|
|
2815
|
+
position: "fixed",
|
|
2816
|
+
left: rect.left,
|
|
2817
|
+
...useDropUp ? { bottom: window.innerHeight - rect.top + 6 } : { top },
|
|
2818
|
+
zIndex: 99999
|
|
2819
|
+
};
|
|
2820
|
+
})(),
|
|
2821
|
+
onMouseDown: (e) => e.preventDefault()
|
|
2822
|
+
},
|
|
2823
|
+
/* @__PURE__ */ import_react19.default.createElement("div", { className: isSideVariant ? "rf-date-picker__cal-col" : void 0 }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2824
|
+
CalendarBody,
|
|
2825
|
+
{
|
|
2826
|
+
viewMonth,
|
|
2827
|
+
viewYear,
|
|
2828
|
+
selectedDate,
|
|
2829
|
+
todayDate,
|
|
2830
|
+
dayCells,
|
|
2831
|
+
onDayClick: handleDayClick,
|
|
2832
|
+
onPrev: prevMonth,
|
|
2833
|
+
onNext: nextMonth,
|
|
2834
|
+
onMonthSelect: setViewMonth,
|
|
2835
|
+
onYearSelect: setViewYear
|
|
2836
|
+
}
|
|
2837
|
+
), type === "datetime" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__time-section" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__time-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement(
|
|
2838
|
+
SpinnerPanel,
|
|
2839
|
+
{
|
|
2840
|
+
hour,
|
|
2841
|
+
minute,
|
|
2842
|
+
ampm,
|
|
2843
|
+
onHourChange: handleHourChange,
|
|
2844
|
+
onMinuteChange: handleMinuteChange,
|
|
2845
|
+
onHourInput: handleHourInput,
|
|
2846
|
+
onMinuteInput: handleMinuteInput,
|
|
2847
|
+
onAmpmToggle: handleAmpmToggle
|
|
2848
|
+
}
|
|
2849
|
+
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__divider" }), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__footer" }, /* @__PURE__ */ import_react19.default.createElement("button", { type: "button", className: "rf-date-picker__footer-btn", onClick: handleToday }, "Today"), /* @__PURE__ */ import_react19.default.createElement("button", { type: "button", className: "rf-date-picker__footer-btn rf-date-picker__footer-btn--clear", onClick: handleClear }, "Clear"))),
|
|
2850
|
+
type === "datetime-side" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-spinner" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2851
|
+
SpinnerPanel,
|
|
2852
|
+
{
|
|
2853
|
+
hour,
|
|
2854
|
+
minute,
|
|
2855
|
+
ampm,
|
|
2856
|
+
onHourChange: handleHourChange,
|
|
2857
|
+
onMinuteChange: handleMinuteChange,
|
|
2858
|
+
onHourInput: handleHourInput,
|
|
2859
|
+
onMinuteInput: handleMinuteInput,
|
|
2860
|
+
onAmpmToggle: handleAmpmToggle
|
|
2861
|
+
}
|
|
2862
|
+
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm)),
|
|
2863
|
+
type === "datetime-scroll" && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-timescroll" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
2864
|
+
ScrollColumn,
|
|
2865
|
+
{
|
|
2866
|
+
items: HOURS,
|
|
2867
|
+
selected: hour - 1,
|
|
2868
|
+
onSelect: handleScrollHour
|
|
2869
|
+
}
|
|
2870
|
+
), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-timescroll__colon" }, ":"), /* @__PURE__ */ import_react19.default.createElement(
|
|
2871
|
+
ScrollColumn,
|
|
2872
|
+
{
|
|
2873
|
+
items: MINUTES,
|
|
2874
|
+
selected: minute,
|
|
2875
|
+
onSelect: handleScrollMinute
|
|
2876
|
+
}
|
|
2877
|
+
), /* @__PURE__ */ import_react19.default.createElement(
|
|
2878
|
+
ScrollColumn,
|
|
2879
|
+
{
|
|
2880
|
+
items: AMPMS,
|
|
2881
|
+
selected: ampm === "AM" ? 0 : 1,
|
|
2882
|
+
onSelect: handleScrollAmpm,
|
|
2883
|
+
infinite: false
|
|
2884
|
+
}
|
|
2885
|
+
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm))
|
|
2886
|
+
),
|
|
2887
|
+
document.body
|
|
2867
2888
|
)), helperText && /* @__PURE__ */ import_react19.default.createElement("div", { className: "rf-text-field__helper-text" }, helperText));
|
|
2868
2889
|
};
|
|
2869
2890
|
DateField.displayName = "DateField";
|
|
@@ -5900,7 +5921,7 @@ Skeleton.displayName = "Skeleton";
|
|
|
5900
5921
|
|
|
5901
5922
|
// lib/Tooltip/Tooltip.tsx
|
|
5902
5923
|
var import_react35 = __toESM(require("react"), 1);
|
|
5903
|
-
var
|
|
5924
|
+
var import_react_dom2 = __toESM(require("react-dom"), 1);
|
|
5904
5925
|
var GAP = 8;
|
|
5905
5926
|
function computePosition(anchor, tooltip, placement) {
|
|
5906
5927
|
const { top: aTop, left: aLeft, width: aW, height: aH } = anchor;
|
|
@@ -6119,7 +6140,7 @@ var Tooltip = ({
|
|
|
6119
6140
|
...childProps
|
|
6120
6141
|
},
|
|
6121
6142
|
import_react35.default.cloneElement(children)
|
|
6122
|
-
),
|
|
6143
|
+
), import_react_dom2.default.createPortal(tooltipElement, document.body));
|
|
6123
6144
|
};
|
|
6124
6145
|
Tooltip.displayName = "Tooltip";
|
|
6125
6146
|
|
|
@@ -7006,7 +7027,7 @@ Stepper.displayName = "Stepper";
|
|
|
7006
7027
|
|
|
7007
7028
|
// lib/Menu/Menu.tsx
|
|
7008
7029
|
var import_react40 = __toESM(require("react"), 1);
|
|
7009
|
-
var
|
|
7030
|
+
var import_react_dom3 = __toESM(require("react-dom"), 1);
|
|
7010
7031
|
var MenuDivider = () => /* @__PURE__ */ import_react40.default.createElement("hr", { className: "rf-menu-divider", "aria-hidden": "true" });
|
|
7011
7032
|
MenuDivider.displayName = "MenuDivider";
|
|
7012
7033
|
var MenuItem = ({
|
|
@@ -7159,13 +7180,13 @@ var Menu = ({
|
|
|
7159
7180
|
},
|
|
7160
7181
|
children
|
|
7161
7182
|
));
|
|
7162
|
-
return
|
|
7183
|
+
return import_react_dom3.default.createPortal(portal, document.body);
|
|
7163
7184
|
};
|
|
7164
7185
|
Menu.displayName = "Menu";
|
|
7165
7186
|
|
|
7166
7187
|
// lib/Drawer/Drawer.tsx
|
|
7167
7188
|
var import_react41 = __toESM(require("react"), 1);
|
|
7168
|
-
var
|
|
7189
|
+
var import_react_dom4 = __toESM(require("react-dom"), 1);
|
|
7169
7190
|
var Drawer = ({
|
|
7170
7191
|
open,
|
|
7171
7192
|
onClose,
|
|
@@ -7265,7 +7286,7 @@ var Drawer = ({
|
|
|
7265
7286
|
},
|
|
7266
7287
|
children
|
|
7267
7288
|
));
|
|
7268
|
-
return
|
|
7289
|
+
return import_react_dom4.default.createPortal(
|
|
7269
7290
|
/* @__PURE__ */ import_react41.default.createElement("div", { className: rootClasses, style }, drawerContent),
|
|
7270
7291
|
document.body
|
|
7271
7292
|
);
|
|
@@ -7274,7 +7295,7 @@ Drawer.displayName = "Drawer";
|
|
|
7274
7295
|
|
|
7275
7296
|
// lib/Snackbar/Snackbar.tsx
|
|
7276
7297
|
var import_react42 = __toESM(require("react"), 1);
|
|
7277
|
-
var
|
|
7298
|
+
var import_react_dom5 = __toESM(require("react-dom"), 1);
|
|
7278
7299
|
var SEVERITY_ICONS = {
|
|
7279
7300
|
success: "\u2713",
|
|
7280
7301
|
error: "\u2715",
|
|
@@ -7379,7 +7400,7 @@ var Snackbar = ({
|
|
|
7379
7400
|
"\u2715"
|
|
7380
7401
|
)
|
|
7381
7402
|
));
|
|
7382
|
-
return
|
|
7403
|
+
return import_react_dom5.default.createPortal(snackbarEl, document.body);
|
|
7383
7404
|
};
|
|
7384
7405
|
Snackbar.displayName = "Snackbar";
|
|
7385
7406
|
|
|
@@ -7433,7 +7454,7 @@ Link.displayName = "Link";
|
|
|
7433
7454
|
|
|
7434
7455
|
// lib/Popper/Popper.tsx
|
|
7435
7456
|
var import_react44 = __toESM(require("react"), 1);
|
|
7436
|
-
var
|
|
7457
|
+
var import_react_dom6 = __toESM(require("react-dom"), 1);
|
|
7437
7458
|
function computePopperPosition(anchorRect, popperRect, placement, offset2 = [0, 8]) {
|
|
7438
7459
|
const [skid, dist] = offset2;
|
|
7439
7460
|
let top = 0;
|
|
@@ -7576,13 +7597,13 @@ var Popper = ({
|
|
|
7576
7597
|
if (disablePortal) {
|
|
7577
7598
|
return /* @__PURE__ */ import_react44.default.createElement(import_react44.default.Fragment, null, popper);
|
|
7578
7599
|
}
|
|
7579
|
-
return
|
|
7600
|
+
return import_react_dom6.default.createPortal(popper, document.body);
|
|
7580
7601
|
};
|
|
7581
7602
|
Popper.displayName = "Popper";
|
|
7582
7603
|
|
|
7583
7604
|
// lib/Popover/Popover.tsx
|
|
7584
7605
|
var import_react45 = __toESM(require("react"), 1);
|
|
7585
|
-
var
|
|
7606
|
+
var import_react_dom7 = __toESM(require("react-dom"), 1);
|
|
7586
7607
|
function getPoint(rect, v, h) {
|
|
7587
7608
|
const x = h === "left" ? rect.left : h === "center" ? rect.left + rect.width / 2 : rect.right;
|
|
7588
7609
|
const y = v === "top" ? rect.top : v === "center" ? rect.top + rect.height / 2 : rect.bottom;
|
|
@@ -7685,7 +7706,7 @@ var Popover = ({
|
|
|
7685
7706
|
if (disablePortal) {
|
|
7686
7707
|
return /* @__PURE__ */ import_react45.default.createElement("div", { className: `${rootClasses} rf-popover-inline`, style }, content);
|
|
7687
7708
|
}
|
|
7688
|
-
return
|
|
7709
|
+
return import_react_dom7.default.createPortal(
|
|
7689
7710
|
/* @__PURE__ */ import_react45.default.createElement("div", { className: rootClasses, style }, content),
|
|
7690
7711
|
document.body
|
|
7691
7712
|
);
|
|
@@ -8336,7 +8357,7 @@ PhoneField.displayName = "PhoneField";
|
|
|
8336
8357
|
|
|
8337
8358
|
// lib/RufousTextEditor/RufousTextEditor.tsx
|
|
8338
8359
|
var import_react58 = __toESM(require("react"), 1);
|
|
8339
|
-
var
|
|
8360
|
+
var import_react_dom13 = require("react-dom");
|
|
8340
8361
|
var import_react59 = require("@tiptap/react");
|
|
8341
8362
|
var import_starter_kit = __toESM(require("@tiptap/starter-kit"), 1);
|
|
8342
8363
|
var import_extension_placeholder = __toESM(require("@tiptap/extension-placeholder"), 1);
|
|
@@ -8458,7 +8479,7 @@ function createMentionSuggestion(users) {
|
|
|
8458
8479
|
|
|
8459
8480
|
// lib/RufousTextEditor/Toolbar.tsx
|
|
8460
8481
|
var import_react55 = __toESM(require("react"), 1);
|
|
8461
|
-
var
|
|
8482
|
+
var import_react_dom10 = require("react-dom");
|
|
8462
8483
|
|
|
8463
8484
|
// lib/RufousTextEditor/TextToSpeech.tsx
|
|
8464
8485
|
var import_react51 = __toESM(require("react"), 1);
|
|
@@ -8769,7 +8790,7 @@ var SpeechToText_default = SpeechToText;
|
|
|
8769
8790
|
|
|
8770
8791
|
// lib/RufousTextEditor/AICommands.tsx
|
|
8771
8792
|
var import_react53 = __toESM(require("react"), 1);
|
|
8772
|
-
var
|
|
8793
|
+
var import_react_dom8 = require("react-dom");
|
|
8773
8794
|
var AI_COMMANDS = [
|
|
8774
8795
|
{ id: "improve", label: "Improve writing", prompt: "Improve the following text to make it clearer, more engaging, and well-structured. Return only the improved text, no explanations." },
|
|
8775
8796
|
{ id: "shorter", label: "Make shorter", prompt: "Make the following text shorter and more concise while keeping the key points. Return only the shortened text, no explanations." },
|
|
@@ -8926,7 +8947,7 @@ var AICommands = ({ editor, onAICommand }) => {
|
|
|
8926
8947
|
onClick: () => handleCommandSelect(cmd)
|
|
8927
8948
|
},
|
|
8928
8949
|
cmd.label
|
|
8929
|
-
))), /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal && (0,
|
|
8950
|
+
))), /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal && (0, import_react_dom8.createPortal)(
|
|
8930
8951
|
/* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-modal-overlay", onMouseDown: handleCancel }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-modal", onMouseDown: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-modal-header" }, /* @__PURE__ */ import_react53.default.createElement("span", { className: "ai-modal-title" }, "AI Assistant"), /* @__PURE__ */ import_react53.default.createElement("button", { className: "ai-modal-close", onClick: handleCancel }, "\xD7")), /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-modal-prompt-section" }, /* @__PURE__ */ import_react53.default.createElement("label", { className: "ai-modal-label" }, "Prompt"), /* @__PURE__ */ import_react53.default.createElement("div", { className: "ai-modal-prompt-row" }, /* @__PURE__ */ import_react53.default.createElement(
|
|
8931
8952
|
"textarea",
|
|
8932
8953
|
{
|
|
@@ -8977,7 +8998,7 @@ var AICommands_default = AICommands;
|
|
|
8977
8998
|
|
|
8978
8999
|
// lib/RufousTextEditor/TranslateModal.tsx
|
|
8979
9000
|
var import_react54 = __toESM(require("react"), 1);
|
|
8980
|
-
var
|
|
9001
|
+
var import_react_dom9 = require("react-dom");
|
|
8981
9002
|
var LANGUAGES = [
|
|
8982
9003
|
{ code: "af", name: "Afrikaans" },
|
|
8983
9004
|
{ code: "sq", name: "Albanian" },
|
|
@@ -9168,7 +9189,7 @@ var TranslateModal = ({ editor, onClose, onTranslate, initialSource, initialTarg
|
|
|
9168
9189
|
setTranslating(false);
|
|
9169
9190
|
}
|
|
9170
9191
|
};
|
|
9171
|
-
return (0,
|
|
9192
|
+
return (0, import_react_dom9.createPortal)(
|
|
9172
9193
|
/* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-overlay", onClick: onClose }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-content translate-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-header" }, /* @__PURE__ */ import_react54.default.createElement("h3", null, "Translate options"), /* @__PURE__ */ import_react54.default.createElement("button", { className: "modal-close", onClick: onClose }, "\xD7")), /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-body" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "translate-columns" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "translate-col" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "translate-filter" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
9173
9194
|
"input",
|
|
9174
9195
|
{
|
|
@@ -10078,7 +10099,7 @@ var Dropdown = ({ trigger, children, className = "", keepOpen = false }) => {
|
|
|
10078
10099
|
},
|
|
10079
10100
|
trigger.label,
|
|
10080
10101
|
/* @__PURE__ */ import_react55.default.createElement("span", { className: "dropdown-arrow" }, "\u25BE")
|
|
10081
|
-
), open && (0,
|
|
10102
|
+
), open && (0, import_react_dom10.createPortal)(
|
|
10082
10103
|
/* @__PURE__ */ import_react55.default.createElement("div", { className: "rf-rte-wrapper rf-rte-dropdown-portal" }, /* @__PURE__ */ import_react55.default.createElement("div", { ref: menuRef, className: "dropdown-menu dropdown-menu-fixed", onClick: keepOpen ? void 0 : () => setOpen(false) }, typeof children === "function" ? children(() => setOpen(false)) : children)),
|
|
10083
10104
|
document.body
|
|
10084
10105
|
));
|
|
@@ -10980,7 +11001,7 @@ var Toolbar_default = Toolbar;
|
|
|
10980
11001
|
|
|
10981
11002
|
// lib/RufousTextEditor/ImageToolbar.tsx
|
|
10982
11003
|
var import_react56 = __toESM(require("react"), 1);
|
|
10983
|
-
var
|
|
11004
|
+
var import_react_dom11 = require("react-dom");
|
|
10984
11005
|
var ALIGNMENTS = [
|
|
10985
11006
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
10986
11007
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -11152,7 +11173,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
11152
11173
|
}, [editor]);
|
|
11153
11174
|
const node = editor?.state.selection.node;
|
|
11154
11175
|
const isImage = node && node.type.name === "image";
|
|
11155
|
-
if (!editor || !isImage || !pos) return showModal ? (0,
|
|
11176
|
+
if (!editor || !isImage || !pos) return showModal ? (0, import_react_dom11.createPortal)(
|
|
11156
11177
|
/* @__PURE__ */ import_react56.default.createElement(ImagePropertiesModal, { editor, node, onClose: () => setShowModal(false) }),
|
|
11157
11178
|
document.body
|
|
11158
11179
|
) : null;
|
|
@@ -11229,7 +11250,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
11229
11250
|
);
|
|
11230
11251
|
setShowVAlign(false);
|
|
11231
11252
|
};
|
|
11232
|
-
return (0,
|
|
11253
|
+
return (0, import_react_dom11.createPortal)(
|
|
11233
11254
|
/* @__PURE__ */ import_react56.default.createElement(import_react56.default.Fragment, null, /* @__PURE__ */ import_react56.default.createElement(
|
|
11234
11255
|
"div",
|
|
11235
11256
|
{
|
|
@@ -11260,7 +11281,7 @@ var ImageToolbar_default = ImageToolbar;
|
|
|
11260
11281
|
|
|
11261
11282
|
// lib/RufousTextEditor/VideoToolbar.tsx
|
|
11262
11283
|
var import_react57 = __toESM(require("react"), 1);
|
|
11263
|
-
var
|
|
11284
|
+
var import_react_dom12 = require("react-dom");
|
|
11264
11285
|
var ALIGNMENTS2 = [
|
|
11265
11286
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
11266
11287
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -11406,7 +11427,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
11406
11427
|
const node = editor?.state.selection.node;
|
|
11407
11428
|
const isVideo = node && VIDEO_TYPES.includes(node.type.name);
|
|
11408
11429
|
const nodeType = node?.type.name;
|
|
11409
|
-
if (!editor || !isVideo || !pos) return showModal ? (0,
|
|
11430
|
+
if (!editor || !isVideo || !pos) return showModal ? (0, import_react_dom12.createPortal)(
|
|
11410
11431
|
/* @__PURE__ */ import_react57.default.createElement(VideoPropertiesModal, { editor, node, nodeType, onClose: () => setShowModal(false) }),
|
|
11411
11432
|
document.body
|
|
11412
11433
|
) : null;
|
|
@@ -11453,7 +11474,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
11453
11474
|
})
|
|
11454
11475
|
);
|
|
11455
11476
|
};
|
|
11456
|
-
return (0,
|
|
11477
|
+
return (0, import_react_dom12.createPortal)(
|
|
11457
11478
|
/* @__PURE__ */ import_react57.default.createElement(import_react57.default.Fragment, null, /* @__PURE__ */ import_react57.default.createElement(
|
|
11458
11479
|
"div",
|
|
11459
11480
|
{
|
|
@@ -12072,7 +12093,7 @@ var RufousTextEditor = ({
|
|
|
12072
12093
|
},
|
|
12073
12094
|
"\u201C Quote"
|
|
12074
12095
|
)
|
|
12075
|
-
), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react58.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && (0,
|
|
12096
|
+
), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react58.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && (0, import_react_dom13.createPortal)(
|
|
12076
12097
|
/* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-overlay", onClick: handleLinkCancel }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-body" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-field" }, /* @__PURE__ */ import_react58.default.createElement("label", { className: "link-modal-label" }, "URL"), /* @__PURE__ */ import_react58.default.createElement(
|
|
12077
12098
|
"input",
|
|
12078
12099
|
{
|
package/dist/main.css
CHANGED
|
@@ -1125,6 +1125,12 @@ pre {
|
|
|
1125
1125
|
position: relative;
|
|
1126
1126
|
width: 100%;
|
|
1127
1127
|
}
|
|
1128
|
+
.rf-date-picker.rf-date-picker--portaled {
|
|
1129
|
+
position: fixed;
|
|
1130
|
+
top: auto;
|
|
1131
|
+
left: auto;
|
|
1132
|
+
z-index: 99999;
|
|
1133
|
+
}
|
|
1128
1134
|
.rf-date-picker {
|
|
1129
1135
|
position: absolute;
|
|
1130
1136
|
top: calc(100% + 6px);
|
|
@@ -5788,6 +5794,7 @@ pre {
|
|
|
5788
5794
|
text-transform: uppercase;
|
|
5789
5795
|
letter-spacing: 0.5px;
|
|
5790
5796
|
white-space: nowrap;
|
|
5797
|
+
height: 38px;
|
|
5791
5798
|
}
|
|
5792
5799
|
.add-btn,
|
|
5793
5800
|
.btn-add {
|
package/dist/main.js
CHANGED
|
@@ -1987,6 +1987,7 @@ import React70, {
|
|
|
1987
1987
|
useEffect as useEffect4,
|
|
1988
1988
|
useCallback
|
|
1989
1989
|
} from "react";
|
|
1990
|
+
import { createPortal } from "react-dom";
|
|
1990
1991
|
var WEEKDAYS = ["SU", "MO", "TU", "WE", "TH", "FR", "SA"];
|
|
1991
1992
|
var MONTHS = [
|
|
1992
1993
|
"January",
|
|
@@ -2428,7 +2429,10 @@ var DateField = ({
|
|
|
2428
2429
|
useEffect4(() => {
|
|
2429
2430
|
if (!open) return;
|
|
2430
2431
|
const handler = (e) => {
|
|
2431
|
-
|
|
2432
|
+
const target = e.target;
|
|
2433
|
+
if (containerRef.current?.contains(target)) return;
|
|
2434
|
+
if (pickerRef.current?.contains(target)) return;
|
|
2435
|
+
setOpen(false);
|
|
2432
2436
|
};
|
|
2433
2437
|
document.addEventListener("mousedown", handler);
|
|
2434
2438
|
return () => document.removeEventListener("mousedown", handler);
|
|
@@ -2629,80 +2633,97 @@ var DateField = ({
|
|
|
2629
2633
|
)),
|
|
2630
2634
|
label && /* @__PURE__ */ React70.createElement("label", { htmlFor: inputId, className: "rf-text-field__label" }, label, " ", required && /* @__PURE__ */ React70.createElement("span", { className: "rf-text-field__asterisk" }, "*")),
|
|
2631
2635
|
variant === "outlined" && /* @__PURE__ */ React70.createElement("fieldset", { className: "rf-text-field__notch" }, label && /* @__PURE__ */ React70.createElement("legend", { className: "rf-text-field__legend" }, /* @__PURE__ */ React70.createElement("span", null, label, required ? " *" : "")))
|
|
2632
|
-
), open && !disabled &&
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
ref: pickerRef,
|
|
2636
|
-
className: [
|
|
2637
|
-
"rf-date-picker",
|
|
2638
|
-
isSideVariant ? "rf-date-picker--side" : "",
|
|
2639
|
-
dropUp ? "rf-date-picker--drop-up" : ""
|
|
2640
|
-
].filter(Boolean).join(" "),
|
|
2641
|
-
onMouseDown: (e) => e.preventDefault()
|
|
2642
|
-
},
|
|
2643
|
-
/* @__PURE__ */ React70.createElement("div", { className: isSideVariant ? "rf-date-picker__cal-col" : void 0 }, /* @__PURE__ */ React70.createElement(
|
|
2644
|
-
CalendarBody,
|
|
2645
|
-
{
|
|
2646
|
-
viewMonth,
|
|
2647
|
-
viewYear,
|
|
2648
|
-
selectedDate,
|
|
2649
|
-
todayDate,
|
|
2650
|
-
dayCells,
|
|
2651
|
-
onDayClick: handleDayClick,
|
|
2652
|
-
onPrev: prevMonth,
|
|
2653
|
-
onNext: nextMonth,
|
|
2654
|
-
onMonthSelect: setViewMonth,
|
|
2655
|
-
onYearSelect: setViewYear
|
|
2656
|
-
}
|
|
2657
|
-
), type === "datetime" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__time-section" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__time-label" }, "Time"), /* @__PURE__ */ React70.createElement(
|
|
2658
|
-
SpinnerPanel,
|
|
2659
|
-
{
|
|
2660
|
-
hour,
|
|
2661
|
-
minute,
|
|
2662
|
-
ampm,
|
|
2663
|
-
onHourChange: handleHourChange,
|
|
2664
|
-
onMinuteChange: handleMinuteChange,
|
|
2665
|
-
onHourInput: handleHourInput,
|
|
2666
|
-
onMinuteInput: handleMinuteInput,
|
|
2667
|
-
onAmpmToggle: handleAmpmToggle
|
|
2668
|
-
}
|
|
2669
|
-
)), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__divider" }), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__footer" }, /* @__PURE__ */ React70.createElement("button", { type: "button", className: "rf-date-picker__footer-btn", onClick: handleToday }, "Today"), /* @__PURE__ */ React70.createElement("button", { type: "button", className: "rf-date-picker__footer-btn rf-date-picker__footer-btn--clear", onClick: handleClear }, "Clear"))),
|
|
2670
|
-
type === "datetime-side" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-spinner" }, /* @__PURE__ */ React70.createElement(
|
|
2671
|
-
SpinnerPanel,
|
|
2672
|
-
{
|
|
2673
|
-
hour,
|
|
2674
|
-
minute,
|
|
2675
|
-
ampm,
|
|
2676
|
-
onHourChange: handleHourChange,
|
|
2677
|
-
onMinuteChange: handleMinuteChange,
|
|
2678
|
-
onHourInput: handleHourInput,
|
|
2679
|
-
onMinuteInput: handleMinuteInput,
|
|
2680
|
-
onAmpmToggle: handleAmpmToggle
|
|
2681
|
-
}
|
|
2682
|
-
)), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm)),
|
|
2683
|
-
type === "datetime-scroll" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ React70.createElement("div", { className: "rf-timescroll" }, /* @__PURE__ */ React70.createElement(
|
|
2684
|
-
ScrollColumn,
|
|
2685
|
-
{
|
|
2686
|
-
items: HOURS,
|
|
2687
|
-
selected: hour - 1,
|
|
2688
|
-
onSelect: handleScrollHour
|
|
2689
|
-
}
|
|
2690
|
-
), /* @__PURE__ */ React70.createElement("div", { className: "rf-timescroll__colon" }, ":"), /* @__PURE__ */ React70.createElement(
|
|
2691
|
-
ScrollColumn,
|
|
2692
|
-
{
|
|
2693
|
-
items: MINUTES,
|
|
2694
|
-
selected: minute,
|
|
2695
|
-
onSelect: handleScrollMinute
|
|
2696
|
-
}
|
|
2697
|
-
), /* @__PURE__ */ React70.createElement(
|
|
2698
|
-
ScrollColumn,
|
|
2636
|
+
), open && !disabled && createPortal(
|
|
2637
|
+
/* @__PURE__ */ React70.createElement(
|
|
2638
|
+
"div",
|
|
2699
2639
|
{
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2640
|
+
ref: pickerRef,
|
|
2641
|
+
className: [
|
|
2642
|
+
"rf-date-picker",
|
|
2643
|
+
"rf-date-picker--portaled",
|
|
2644
|
+
isSideVariant ? "rf-date-picker--side" : "",
|
|
2645
|
+
dropUp ? "rf-date-picker--drop-up" : ""
|
|
2646
|
+
].filter(Boolean).join(" "),
|
|
2647
|
+
style: (() => {
|
|
2648
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
2649
|
+
if (!rect) return {};
|
|
2650
|
+
const top = rect.bottom + 6;
|
|
2651
|
+
const spaceBelow = window.innerHeight - rect.bottom - 6;
|
|
2652
|
+
const useDropUp = spaceBelow < 350 && rect.top > spaceBelow;
|
|
2653
|
+
return {
|
|
2654
|
+
position: "fixed",
|
|
2655
|
+
left: rect.left,
|
|
2656
|
+
...useDropUp ? { bottom: window.innerHeight - rect.top + 6 } : { top },
|
|
2657
|
+
zIndex: 99999
|
|
2658
|
+
};
|
|
2659
|
+
})(),
|
|
2660
|
+
onMouseDown: (e) => e.preventDefault()
|
|
2661
|
+
},
|
|
2662
|
+
/* @__PURE__ */ React70.createElement("div", { className: isSideVariant ? "rf-date-picker__cal-col" : void 0 }, /* @__PURE__ */ React70.createElement(
|
|
2663
|
+
CalendarBody,
|
|
2664
|
+
{
|
|
2665
|
+
viewMonth,
|
|
2666
|
+
viewYear,
|
|
2667
|
+
selectedDate,
|
|
2668
|
+
todayDate,
|
|
2669
|
+
dayCells,
|
|
2670
|
+
onDayClick: handleDayClick,
|
|
2671
|
+
onPrev: prevMonth,
|
|
2672
|
+
onNext: nextMonth,
|
|
2673
|
+
onMonthSelect: setViewMonth,
|
|
2674
|
+
onYearSelect: setViewYear
|
|
2675
|
+
}
|
|
2676
|
+
), type === "datetime" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__time-section" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__time-label" }, "Time"), /* @__PURE__ */ React70.createElement(
|
|
2677
|
+
SpinnerPanel,
|
|
2678
|
+
{
|
|
2679
|
+
hour,
|
|
2680
|
+
minute,
|
|
2681
|
+
ampm,
|
|
2682
|
+
onHourChange: handleHourChange,
|
|
2683
|
+
onMinuteChange: handleMinuteChange,
|
|
2684
|
+
onHourInput: handleHourInput,
|
|
2685
|
+
onMinuteInput: handleMinuteInput,
|
|
2686
|
+
onAmpmToggle: handleAmpmToggle
|
|
2687
|
+
}
|
|
2688
|
+
)), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__divider" }), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__footer" }, /* @__PURE__ */ React70.createElement("button", { type: "button", className: "rf-date-picker__footer-btn", onClick: handleToday }, "Today"), /* @__PURE__ */ React70.createElement("button", { type: "button", className: "rf-date-picker__footer-btn rf-date-picker__footer-btn--clear", onClick: handleClear }, "Clear"))),
|
|
2689
|
+
type === "datetime-side" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-spinner" }, /* @__PURE__ */ React70.createElement(
|
|
2690
|
+
SpinnerPanel,
|
|
2691
|
+
{
|
|
2692
|
+
hour,
|
|
2693
|
+
minute,
|
|
2694
|
+
ampm,
|
|
2695
|
+
onHourChange: handleHourChange,
|
|
2696
|
+
onMinuteChange: handleMinuteChange,
|
|
2697
|
+
onHourInput: handleHourInput,
|
|
2698
|
+
onMinuteInput: handleMinuteInput,
|
|
2699
|
+
onAmpmToggle: handleAmpmToggle
|
|
2700
|
+
}
|
|
2701
|
+
)), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm)),
|
|
2702
|
+
type === "datetime-scroll" && /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-panel" }, /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-label" }, "Time"), /* @__PURE__ */ React70.createElement("div", { className: "rf-timescroll" }, /* @__PURE__ */ React70.createElement(
|
|
2703
|
+
ScrollColumn,
|
|
2704
|
+
{
|
|
2705
|
+
items: HOURS,
|
|
2706
|
+
selected: hour - 1,
|
|
2707
|
+
onSelect: handleScrollHour
|
|
2708
|
+
}
|
|
2709
|
+
), /* @__PURE__ */ React70.createElement("div", { className: "rf-timescroll__colon" }, ":"), /* @__PURE__ */ React70.createElement(
|
|
2710
|
+
ScrollColumn,
|
|
2711
|
+
{
|
|
2712
|
+
items: MINUTES,
|
|
2713
|
+
selected: minute,
|
|
2714
|
+
onSelect: handleScrollMinute
|
|
2715
|
+
}
|
|
2716
|
+
), /* @__PURE__ */ React70.createElement(
|
|
2717
|
+
ScrollColumn,
|
|
2718
|
+
{
|
|
2719
|
+
items: AMPMS,
|
|
2720
|
+
selected: ampm === "AM" ? 0 : 1,
|
|
2721
|
+
onSelect: handleScrollAmpm,
|
|
2722
|
+
infinite: false
|
|
2723
|
+
}
|
|
2724
|
+
)), /* @__PURE__ */ React70.createElement("div", { className: "rf-date-picker__side-time-display" }, String(hour).padStart(2, "0"), ":", String(minute).padStart(2, "0"), " ", ampm))
|
|
2725
|
+
),
|
|
2726
|
+
document.body
|
|
2706
2727
|
)), helperText && /* @__PURE__ */ React70.createElement("div", { className: "rf-text-field__helper-text" }, helperText));
|
|
2707
2728
|
};
|
|
2708
2729
|
DateField.displayName = "DateField";
|
|
@@ -8270,7 +8291,7 @@ PhoneField.displayName = "PhoneField";
|
|
|
8270
8291
|
|
|
8271
8292
|
// lib/RufousTextEditor/RufousTextEditor.tsx
|
|
8272
8293
|
import React115, { useMemo as useMemo4, useCallback as useCallback13, useState as useState33, useRef as useRef29, useEffect as useEffect26 } from "react";
|
|
8273
|
-
import { createPortal as
|
|
8294
|
+
import { createPortal as createPortal7 } from "react-dom";
|
|
8274
8295
|
import { useEditor, EditorContent, EditorContext, FloatingMenu, BubbleMenu } from "@tiptap/react";
|
|
8275
8296
|
import StarterKit from "@tiptap/starter-kit";
|
|
8276
8297
|
import Placeholder from "@tiptap/extension-placeholder";
|
|
@@ -8392,7 +8413,7 @@ function createMentionSuggestion(users) {
|
|
|
8392
8413
|
|
|
8393
8414
|
// lib/RufousTextEditor/Toolbar.tsx
|
|
8394
8415
|
import React112, { useState as useState30, useRef as useRef26, useEffect as useEffect23, useCallback as useCallback12 } from "react";
|
|
8395
|
-
import { createPortal as
|
|
8416
|
+
import { createPortal as createPortal4 } from "react-dom";
|
|
8396
8417
|
|
|
8397
8418
|
// lib/RufousTextEditor/TextToSpeech.tsx
|
|
8398
8419
|
import React107, { useState as useState26, useEffect as useEffect20, useRef as useRef23, useCallback as useCallback9 } from "react";
|
|
@@ -8703,7 +8724,7 @@ var SpeechToText_default = SpeechToText;
|
|
|
8703
8724
|
|
|
8704
8725
|
// lib/RufousTextEditor/AICommands.tsx
|
|
8705
8726
|
import React109, { useState as useState28, useRef as useRef25, useEffect as useEffect22, useCallback as useCallback11 } from "react";
|
|
8706
|
-
import { createPortal } from "react-dom";
|
|
8727
|
+
import { createPortal as createPortal2 } from "react-dom";
|
|
8707
8728
|
var AI_COMMANDS = [
|
|
8708
8729
|
{ id: "improve", label: "Improve writing", prompt: "Improve the following text to make it clearer, more engaging, and well-structured. Return only the improved text, no explanations." },
|
|
8709
8730
|
{ id: "shorter", label: "Make shorter", prompt: "Make the following text shorter and more concise while keeping the key points. Return only the shortened text, no explanations." },
|
|
@@ -8860,7 +8881,7 @@ var AICommands = ({ editor, onAICommand }) => {
|
|
|
8860
8881
|
onClick: () => handleCommandSelect(cmd)
|
|
8861
8882
|
},
|
|
8862
8883
|
cmd.label
|
|
8863
|
-
))), /* @__PURE__ */ React109.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal &&
|
|
8884
|
+
))), /* @__PURE__ */ React109.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal && createPortal2(
|
|
8864
8885
|
/* @__PURE__ */ React109.createElement("div", { className: "ai-modal-overlay", onMouseDown: handleCancel }, /* @__PURE__ */ React109.createElement("div", { className: "ai-modal", onMouseDown: (e) => e.stopPropagation() }, /* @__PURE__ */ React109.createElement("div", { className: "ai-modal-header" }, /* @__PURE__ */ React109.createElement("span", { className: "ai-modal-title" }, "AI Assistant"), /* @__PURE__ */ React109.createElement("button", { className: "ai-modal-close", onClick: handleCancel }, "\xD7")), /* @__PURE__ */ React109.createElement("div", { className: "ai-modal-prompt-section" }, /* @__PURE__ */ React109.createElement("label", { className: "ai-modal-label" }, "Prompt"), /* @__PURE__ */ React109.createElement("div", { className: "ai-modal-prompt-row" }, /* @__PURE__ */ React109.createElement(
|
|
8865
8886
|
"textarea",
|
|
8866
8887
|
{
|
|
@@ -8911,7 +8932,7 @@ var AICommands_default = AICommands;
|
|
|
8911
8932
|
|
|
8912
8933
|
// lib/RufousTextEditor/TranslateModal.tsx
|
|
8913
8934
|
import React110, { useState as useState29, useMemo as useMemo3 } from "react";
|
|
8914
|
-
import { createPortal as
|
|
8935
|
+
import { createPortal as createPortal3 } from "react-dom";
|
|
8915
8936
|
var LANGUAGES = [
|
|
8916
8937
|
{ code: "af", name: "Afrikaans" },
|
|
8917
8938
|
{ code: "sq", name: "Albanian" },
|
|
@@ -9102,7 +9123,7 @@ var TranslateModal = ({ editor, onClose, onTranslate, initialSource, initialTarg
|
|
|
9102
9123
|
setTranslating(false);
|
|
9103
9124
|
}
|
|
9104
9125
|
};
|
|
9105
|
-
return
|
|
9126
|
+
return createPortal3(
|
|
9106
9127
|
/* @__PURE__ */ React110.createElement("div", { className: "modal-overlay", onClick: onClose }, /* @__PURE__ */ React110.createElement("div", { className: "modal-content translate-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React110.createElement("div", { className: "modal-header" }, /* @__PURE__ */ React110.createElement("h3", null, "Translate options"), /* @__PURE__ */ React110.createElement("button", { className: "modal-close", onClick: onClose }, "\xD7")), /* @__PURE__ */ React110.createElement("div", { className: "modal-body" }, /* @__PURE__ */ React110.createElement("div", { className: "translate-columns" }, /* @__PURE__ */ React110.createElement("div", { className: "translate-col" }, /* @__PURE__ */ React110.createElement("div", { className: "translate-filter" }, /* @__PURE__ */ React110.createElement(
|
|
9107
9128
|
"input",
|
|
9108
9129
|
{
|
|
@@ -10012,7 +10033,7 @@ var Dropdown = ({ trigger, children, className = "", keepOpen = false }) => {
|
|
|
10012
10033
|
},
|
|
10013
10034
|
trigger.label,
|
|
10014
10035
|
/* @__PURE__ */ React112.createElement("span", { className: "dropdown-arrow" }, "\u25BE")
|
|
10015
|
-
), open &&
|
|
10036
|
+
), open && createPortal4(
|
|
10016
10037
|
/* @__PURE__ */ React112.createElement("div", { className: "rf-rte-wrapper rf-rte-dropdown-portal" }, /* @__PURE__ */ React112.createElement("div", { ref: menuRef, className: "dropdown-menu dropdown-menu-fixed", onClick: keepOpen ? void 0 : () => setOpen(false) }, typeof children === "function" ? children(() => setOpen(false)) : children)),
|
|
10017
10038
|
document.body
|
|
10018
10039
|
));
|
|
@@ -10914,7 +10935,7 @@ var Toolbar_default = Toolbar;
|
|
|
10914
10935
|
|
|
10915
10936
|
// lib/RufousTextEditor/ImageToolbar.tsx
|
|
10916
10937
|
import React113, { useState as useState31, useEffect as useEffect24, useRef as useRef27 } from "react";
|
|
10917
|
-
import { createPortal as
|
|
10938
|
+
import { createPortal as createPortal5 } from "react-dom";
|
|
10918
10939
|
var ALIGNMENTS = [
|
|
10919
10940
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
10920
10941
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -11086,7 +11107,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
11086
11107
|
}, [editor]);
|
|
11087
11108
|
const node = editor?.state.selection.node;
|
|
11088
11109
|
const isImage = node && node.type.name === "image";
|
|
11089
|
-
if (!editor || !isImage || !pos) return showModal ?
|
|
11110
|
+
if (!editor || !isImage || !pos) return showModal ? createPortal5(
|
|
11090
11111
|
/* @__PURE__ */ React113.createElement(ImagePropertiesModal, { editor, node, onClose: () => setShowModal(false) }),
|
|
11091
11112
|
document.body
|
|
11092
11113
|
) : null;
|
|
@@ -11163,7 +11184,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
11163
11184
|
);
|
|
11164
11185
|
setShowVAlign(false);
|
|
11165
11186
|
};
|
|
11166
|
-
return
|
|
11187
|
+
return createPortal5(
|
|
11167
11188
|
/* @__PURE__ */ React113.createElement(React113.Fragment, null, /* @__PURE__ */ React113.createElement(
|
|
11168
11189
|
"div",
|
|
11169
11190
|
{
|
|
@@ -11194,7 +11215,7 @@ var ImageToolbar_default = ImageToolbar;
|
|
|
11194
11215
|
|
|
11195
11216
|
// lib/RufousTextEditor/VideoToolbar.tsx
|
|
11196
11217
|
import React114, { useState as useState32, useEffect as useEffect25, useRef as useRef28 } from "react";
|
|
11197
|
-
import { createPortal as
|
|
11218
|
+
import { createPortal as createPortal6 } from "react-dom";
|
|
11198
11219
|
var ALIGNMENTS2 = [
|
|
11199
11220
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
11200
11221
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -11340,7 +11361,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
11340
11361
|
const node = editor?.state.selection.node;
|
|
11341
11362
|
const isVideo = node && VIDEO_TYPES.includes(node.type.name);
|
|
11342
11363
|
const nodeType = node?.type.name;
|
|
11343
|
-
if (!editor || !isVideo || !pos) return showModal ?
|
|
11364
|
+
if (!editor || !isVideo || !pos) return showModal ? createPortal6(
|
|
11344
11365
|
/* @__PURE__ */ React114.createElement(VideoPropertiesModal, { editor, node, nodeType, onClose: () => setShowModal(false) }),
|
|
11345
11366
|
document.body
|
|
11346
11367
|
) : null;
|
|
@@ -11387,7 +11408,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
11387
11408
|
})
|
|
11388
11409
|
);
|
|
11389
11410
|
};
|
|
11390
|
-
return
|
|
11411
|
+
return createPortal6(
|
|
11391
11412
|
/* @__PURE__ */ React114.createElement(React114.Fragment, null, /* @__PURE__ */ React114.createElement(
|
|
11392
11413
|
"div",
|
|
11393
11414
|
{
|
|
@@ -12006,7 +12027,7 @@ var RufousTextEditor = ({
|
|
|
12006
12027
|
},
|
|
12007
12028
|
"\u201C Quote"
|
|
12008
12029
|
)
|
|
12009
|
-
), /* @__PURE__ */ React115.createElement("div", { className: "status-bar" }, /* @__PURE__ */ React115.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ React115.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ React115.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ React115.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ React115.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ React115.createElement(React115.Fragment, null, /* @__PURE__ */ React115.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ React115.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen &&
|
|
12030
|
+
), /* @__PURE__ */ React115.createElement("div", { className: "status-bar" }, /* @__PURE__ */ React115.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ React115.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ React115.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ React115.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ React115.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ React115.createElement(React115.Fragment, null, /* @__PURE__ */ React115.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ React115.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && createPortal7(
|
|
12010
12031
|
/* @__PURE__ */ React115.createElement("div", { className: "link-modal-overlay", onClick: handleLinkCancel }, /* @__PURE__ */ React115.createElement("div", { className: "link-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React115.createElement("div", { className: "link-modal-body" }, /* @__PURE__ */ React115.createElement("div", { className: "link-modal-field" }, /* @__PURE__ */ React115.createElement("label", { className: "link-modal-label" }, "URL"), /* @__PURE__ */ React115.createElement(
|
|
12011
12032
|
"input",
|
|
12012
12033
|
{
|