@lumiastream/ui 0.5.4 → 0.5.6
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/LSColorPicker.js +17 -30
- package/dist/LSDatePicker.js +17 -30
- package/dist/LSFontPicker.js +10 -19
- package/dist/LSInput.d.ts +0 -4
- package/dist/LSInput.js +17 -30
- package/dist/LSMultiSelect.js +20 -38
- package/dist/LSSelect.js +10 -22
- package/dist/LSSliderInput.js +26 -39
- package/dist/LSTextField.d.ts +4 -5
- package/dist/LSTextField.js +4 -12
- package/dist/LSVariableInputField.js +46 -73
- package/dist/components.d.ts +1 -0
- package/dist/components.js +85 -139
- package/dist/index.d.ts +1 -0
- package/dist/index.js +134 -166
- package/dist/se-import.js +124 -150
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -93,9 +93,6 @@ var LSInput = forwardRef(
|
|
|
93
93
|
inputAfterText,
|
|
94
94
|
maxWidth,
|
|
95
95
|
className = "",
|
|
96
|
-
InputProps: inputPropsProp,
|
|
97
|
-
InputLabelProps: inputLabelPropsProp,
|
|
98
|
-
inputProps: htmlInputPropsProp,
|
|
99
96
|
slotProps: slotPropsProp,
|
|
100
97
|
onChange,
|
|
101
98
|
onChangeStart,
|
|
@@ -130,25 +127,11 @@ var LSInput = forwardRef(
|
|
|
130
127
|
onChange?.(event, sanitizedValue);
|
|
131
128
|
onChangeEnd?.(event, sanitizedValue);
|
|
132
129
|
};
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
endAdornment: resolvedEndAdornment,
|
|
139
|
-
readOnly: rest.readOnly ?? inputPropsProp?.readOnly,
|
|
140
|
-
sx: {
|
|
141
|
-
...inputPropsProp?.sx ?? {},
|
|
142
|
-
"& input, & textarea": {
|
|
143
|
-
textAlign: centerText ? "center" : void 0,
|
|
144
|
-
color: textColor ?? void 0
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
const inputLabelProps = {
|
|
149
|
-
shrink: true,
|
|
150
|
-
...inputLabelPropsProp
|
|
151
|
-
};
|
|
130
|
+
const callerInputSlot = slotPropsProp?.input ?? {};
|
|
131
|
+
const callerHtmlInputSlot = slotPropsProp?.htmlInput ?? {};
|
|
132
|
+
const callerInputLabelSlot = slotPropsProp?.inputLabel ?? {};
|
|
133
|
+
const resolvedStartAdornment = callerInputSlot.startAdornment ?? (startAdornment ? /* @__PURE__ */ jsx2(InputAdornment, { position: "start", children: startAdornment }) : inputBeforeText ? /* @__PURE__ */ jsx2(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx2("span", { className: "mui-ls-input-affix", children: inputBeforeText }) }) : void 0);
|
|
134
|
+
const resolvedEndAdornment = callerInputSlot.endAdornment ?? (endAdornment ? /* @__PURE__ */ jsx2(InputAdornment, { position: "end", children: endAdornment }) : inputAfterText ? /* @__PURE__ */ jsx2(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx2("span", { className: "mui-ls-input-affix", children: inputAfterText }) }) : void 0);
|
|
152
135
|
const helperContent = helperText ?? (typeof error === "string" ? error : "");
|
|
153
136
|
const hasError = typeof error === "string" ? true : Boolean(error);
|
|
154
137
|
const resolvedMaxWidth = maxWidth ?? style?.maxWidth;
|
|
@@ -156,20 +139,24 @@ var LSInput = forwardRef(
|
|
|
156
139
|
const slotProps = {
|
|
157
140
|
...slotPropsProp ?? {},
|
|
158
141
|
input: {
|
|
159
|
-
...
|
|
160
|
-
|
|
142
|
+
...callerInputSlot,
|
|
143
|
+
startAdornment: resolvedStartAdornment,
|
|
144
|
+
endAdornment: resolvedEndAdornment,
|
|
145
|
+
readOnly: rest.readOnly ?? callerInputSlot.readOnly,
|
|
161
146
|
sx: {
|
|
162
|
-
...
|
|
163
|
-
|
|
147
|
+
...callerInputSlot.sx ?? {},
|
|
148
|
+
"& input, & textarea": {
|
|
149
|
+
textAlign: centerText ? "center" : void 0,
|
|
150
|
+
color: textColor ?? void 0
|
|
151
|
+
}
|
|
164
152
|
}
|
|
165
153
|
},
|
|
166
154
|
inputLabel: {
|
|
167
|
-
|
|
168
|
-
...
|
|
155
|
+
shrink: true,
|
|
156
|
+
...callerInputLabelSlot
|
|
169
157
|
},
|
|
170
158
|
htmlInput: {
|
|
171
|
-
...
|
|
172
|
-
...htmlInputPropsProp ?? {}
|
|
159
|
+
...callerHtmlInputSlot
|
|
173
160
|
}
|
|
174
161
|
};
|
|
175
162
|
const TextFieldComponent = TextField;
|
|
@@ -359,15 +346,15 @@ var LSSliderInput = ({
|
|
|
359
346
|
onChange: (_event, nextValue) => handleInputChange({ target: { value: nextValue ?? "" } }),
|
|
360
347
|
value: displayValue ?? "",
|
|
361
348
|
inputAfterText,
|
|
362
|
-
|
|
363
|
-
...inputProps?.
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
349
|
+
slotProps: {
|
|
350
|
+
...inputProps?.slotProps ?? {},
|
|
351
|
+
htmlInput: {
|
|
352
|
+
...inputProps?.slotProps?.htmlInput ?? {},
|
|
353
|
+
min: displayMinimum,
|
|
354
|
+
max: displayMaximum,
|
|
355
|
+
step: displayStep,
|
|
356
|
+
inputMode: stepPrecision > 0 ? "decimal" : "numeric"
|
|
357
|
+
}
|
|
371
358
|
},
|
|
372
359
|
fullWidth: hideSlider ? fullWidth : false,
|
|
373
360
|
$noMinHeight: false,
|
|
@@ -431,6 +418,16 @@ var LSSelect = ({
|
|
|
431
418
|
border: "1px solid var(--neutralDark4)",
|
|
432
419
|
borderRadius: "var(--radius, 1rem)",
|
|
433
420
|
boxShadow: "0 16px 32px rgba(0, 0, 0, 0.32)",
|
|
421
|
+
"& .MuiList-root": {
|
|
422
|
+
backgroundColor: "var(--neutralDark2)"
|
|
423
|
+
},
|
|
424
|
+
"& .MuiListSubheader-root": {
|
|
425
|
+
backgroundColor: "var(--neutralDark1)",
|
|
426
|
+
color: "var(--neutralLight2)"
|
|
427
|
+
},
|
|
428
|
+
"& .MuiMenuItem-root": {
|
|
429
|
+
color: "var(--neutralLight1)"
|
|
430
|
+
},
|
|
434
431
|
...MenuProps?.slotProps?.paper?.sx
|
|
435
432
|
}
|
|
436
433
|
},
|
|
@@ -442,28 +439,6 @@ var LSSelect = ({
|
|
|
442
439
|
...MenuProps?.slotProps?.list?.sx
|
|
443
440
|
}
|
|
444
441
|
}
|
|
445
|
-
},
|
|
446
|
-
PaperProps: {
|
|
447
|
-
...MenuProps?.PaperProps ?? {},
|
|
448
|
-
sx: {
|
|
449
|
-
background: "var(--neutralDark2) !important",
|
|
450
|
-
backgroundColor: "var(--neutralDark2)",
|
|
451
|
-
color: "var(--neutralLight1)",
|
|
452
|
-
border: "1px solid var(--neutralDark4)",
|
|
453
|
-
borderRadius: "var(--radius, 1rem)",
|
|
454
|
-
boxShadow: "0 16px 32px rgba(0, 0, 0, 0.32)",
|
|
455
|
-
"& .MuiList-root": {
|
|
456
|
-
backgroundColor: "var(--neutralDark2)"
|
|
457
|
-
},
|
|
458
|
-
"& .MuiListSubheader-root": {
|
|
459
|
-
backgroundColor: "var(--neutralDark1)",
|
|
460
|
-
color: "var(--neutralLight2)"
|
|
461
|
-
},
|
|
462
|
-
"& .MuiMenuItem-root": {
|
|
463
|
-
color: "var(--neutralLight1)"
|
|
464
|
-
},
|
|
465
|
-
...MenuProps?.PaperProps?.sx
|
|
466
|
-
}
|
|
467
442
|
}
|
|
468
443
|
};
|
|
469
444
|
return /* @__PURE__ */ jsxs2(
|
|
@@ -783,14 +758,7 @@ LSDatePicker.displayName = "LSDatePicker";
|
|
|
783
758
|
import { KeyboardArrowDown } from "@mui/icons-material";
|
|
784
759
|
import Autocomplete from "@mui/material/Autocomplete";
|
|
785
760
|
import TextField2 from "@mui/material/TextField";
|
|
786
|
-
import {
|
|
787
|
-
memo,
|
|
788
|
-
startTransition,
|
|
789
|
-
useEffect as useEffect3,
|
|
790
|
-
useMemo as useMemo2,
|
|
791
|
-
useRef as useRef2,
|
|
792
|
-
useState as useState3
|
|
793
|
-
} from "react";
|
|
761
|
+
import { memo, startTransition, useEffect as useEffect3, useMemo as useMemo2, useRef as useRef2, useState as useState3 } from "react";
|
|
794
762
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
795
763
|
var LSFontPicker = memo(function LSFontPicker2({
|
|
796
764
|
value,
|
|
@@ -848,9 +816,7 @@ var LSFontPicker = memo(function LSFontPicker2({
|
|
|
848
816
|
popupIcon: /* @__PURE__ */ jsx8(KeyboardArrowDown, {}),
|
|
849
817
|
isOptionEqualToValue: (option, selectedValue) => option === selectedValue,
|
|
850
818
|
onChange: (_event, newValue) => {
|
|
851
|
-
handleValueChange(
|
|
852
|
-
typeof newValue === "string" ? newValue : `${newValue ?? ""}`
|
|
853
|
-
);
|
|
819
|
+
handleValueChange(typeof newValue === "string" ? newValue : `${newValue ?? ""}`);
|
|
854
820
|
},
|
|
855
821
|
onInputChange: (_event, newInputValue, reason) => {
|
|
856
822
|
if (reason === "input" || reason === "clear") {
|
|
@@ -907,11 +873,7 @@ var LSFontPicker = memo(function LSFontPicker2({
|
|
|
907
873
|
);
|
|
908
874
|
},
|
|
909
875
|
renderInput: (params) => {
|
|
910
|
-
const {
|
|
911
|
-
InputLabelProps: paramsInputLabelProps,
|
|
912
|
-
InputProps: paramsInputProps,
|
|
913
|
-
...restParams
|
|
914
|
-
} = params;
|
|
876
|
+
const { slotProps: paramsSlotProps = {}, ...restParams } = params;
|
|
915
877
|
return /* @__PURE__ */ jsx8(
|
|
916
878
|
TextFieldComponent,
|
|
917
879
|
{
|
|
@@ -928,12 +890,16 @@ var LSFontPicker = memo(function LSFontPicker2({
|
|
|
928
890
|
}
|
|
929
891
|
},
|
|
930
892
|
slotProps: {
|
|
893
|
+
...paramsSlotProps,
|
|
931
894
|
inputLabel: {
|
|
932
|
-
|
|
933
|
-
|
|
895
|
+
...paramsSlotProps.inputLabel ?? {},
|
|
896
|
+
shrink: true
|
|
934
897
|
},
|
|
935
898
|
input: {
|
|
936
|
-
...
|
|
899
|
+
...paramsSlotProps.input ?? {}
|
|
900
|
+
},
|
|
901
|
+
htmlInput: {
|
|
902
|
+
...paramsSlotProps.htmlInput ?? {}
|
|
937
903
|
}
|
|
938
904
|
}
|
|
939
905
|
}
|
|
@@ -976,6 +942,12 @@ var LSMultiSelect = ({
|
|
|
976
942
|
/* @__PURE__ */ jsx9("div", { className: "ls-multi-select-value__count", children: `(${selected.length})` })
|
|
977
943
|
] }),
|
|
978
944
|
MenuProps: {
|
|
945
|
+
// The previous version of this also set `PaperProps` here — that
|
|
946
|
+
// prop was removed from Menu in @mui/material v9 and React warns
|
|
947
|
+
// "does not recognize the `PaperProps` prop on a DOM element"
|
|
948
|
+
// when Menu spreads it through. Folded the one unique selector
|
|
949
|
+
// (`& .MuiList-root`) into `slotProps.paper.sx` below; everything
|
|
950
|
+
// else was already duplicated there.
|
|
979
951
|
slotProps: {
|
|
980
952
|
paper: {
|
|
981
953
|
sx: {
|
|
@@ -987,7 +959,10 @@ var LSMultiSelect = ({
|
|
|
987
959
|
boxShadow: "0 16px 32px rgba(0, 0, 0, 0.32)",
|
|
988
960
|
backdropFilter: "none",
|
|
989
961
|
opacity: 1,
|
|
990
|
-
maxHeight: "280px !important"
|
|
962
|
+
maxHeight: "280px !important",
|
|
963
|
+
"& .MuiList-root": {
|
|
964
|
+
backgroundColor: "var(--neutralDark2)"
|
|
965
|
+
}
|
|
991
966
|
}
|
|
992
967
|
},
|
|
993
968
|
list: {
|
|
@@ -996,21 +971,6 @@ var LSMultiSelect = ({
|
|
|
996
971
|
color: "var(--neutralLight1)"
|
|
997
972
|
}
|
|
998
973
|
}
|
|
999
|
-
},
|
|
1000
|
-
PaperProps: {
|
|
1001
|
-
sx: {
|
|
1002
|
-
background: "var(--neutralDark2) !important",
|
|
1003
|
-
backgroundColor: "var(--neutralDark2)",
|
|
1004
|
-
color: "var(--neutralLight1)",
|
|
1005
|
-
backdropFilter: "none",
|
|
1006
|
-
opacity: 1,
|
|
1007
|
-
maxHeight: "280px !important",
|
|
1008
|
-
border: "1px solid var(--neutralDark4)",
|
|
1009
|
-
borderRadius: "var(--radius, 1rem)",
|
|
1010
|
-
"& .MuiList-root": {
|
|
1011
|
-
backgroundColor: "var(--neutralDark2)"
|
|
1012
|
-
}
|
|
1013
|
-
}
|
|
1014
974
|
}
|
|
1015
975
|
},
|
|
1016
976
|
children: options.map((option) => /* @__PURE__ */ jsxs4(
|
|
@@ -1077,7 +1037,8 @@ import { forwardRef as forwardRef4 } from "react";
|
|
|
1077
1037
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1078
1038
|
var LSTextField = forwardRef4(
|
|
1079
1039
|
(props, ref) => {
|
|
1080
|
-
const {
|
|
1040
|
+
const { slotProps, ...rest } = props;
|
|
1041
|
+
const paramsInputLabel = slotProps?.inputLabel ?? {};
|
|
1081
1042
|
return /* @__PURE__ */ jsx11(
|
|
1082
1043
|
TextField3,
|
|
1083
1044
|
{
|
|
@@ -1086,18 +1047,9 @@ var LSTextField = forwardRef4(
|
|
|
1086
1047
|
className: "mui-ls-input",
|
|
1087
1048
|
slotProps: {
|
|
1088
1049
|
...slotProps ?? {},
|
|
1089
|
-
input: {
|
|
1090
|
-
...slotProps?.input ?? {},
|
|
1091
|
-
...InputProps ?? {},
|
|
1092
|
-
sx: {
|
|
1093
|
-
...slotProps?.input?.sx ?? {},
|
|
1094
|
-
...InputProps?.sx ?? {}
|
|
1095
|
-
}
|
|
1096
|
-
},
|
|
1097
1050
|
inputLabel: {
|
|
1098
|
-
...
|
|
1099
|
-
shrink: true
|
|
1100
|
-
...InputLabelProps ?? {}
|
|
1051
|
+
...paramsInputLabel,
|
|
1052
|
+
shrink: true
|
|
1101
1053
|
}
|
|
1102
1054
|
},
|
|
1103
1055
|
ref
|
|
@@ -2256,14 +2208,12 @@ var VariableInputTextField = forwardRef5(
|
|
|
2256
2208
|
containerRef,
|
|
2257
2209
|
showVariableIcon
|
|
2258
2210
|
}, ref) => {
|
|
2259
|
-
const
|
|
2260
|
-
const
|
|
2261
|
-
const inputPropsSlotInputProps = inputProps?.slotProps?.input ?? {};
|
|
2262
|
-
const paramsSlotInputProps = params?.slotProps?.input ?? {};
|
|
2211
|
+
const inputPropsSlotInput = inputProps?.slotProps?.input ?? {};
|
|
2212
|
+
const paramsSlotInput = params?.slotProps?.input ?? {};
|
|
2263
2213
|
const explicitStartAdornment = inputProps?.startAdornment;
|
|
2264
2214
|
const resolvedExplicitStartAdornment = explicitStartAdornment ? /* @__PURE__ */ jsx12(InputAdornment2, { position: "start", children: explicitStartAdornment }) : void 0;
|
|
2265
|
-
const startAdornment =
|
|
2266
|
-
const endAdornment =
|
|
2215
|
+
const startAdornment = paramsSlotInput.startAdornment ?? inputPropsSlotInput.startAdornment ?? resolvedExplicitStartAdornment;
|
|
2216
|
+
const endAdornment = paramsSlotInput.endAdornment ?? inputPropsSlotInput.endAdornment;
|
|
2267
2217
|
return /* @__PURE__ */ jsx12(
|
|
2268
2218
|
LSTextField,
|
|
2269
2219
|
{
|
|
@@ -2285,31 +2235,27 @@ var VariableInputTextField = forwardRef5(
|
|
|
2285
2235
|
onChange: onChange ? (e) => onChange(e.target.value) : void 0,
|
|
2286
2236
|
...inputProps,
|
|
2287
2237
|
...params,
|
|
2288
|
-
|
|
2289
|
-
...
|
|
2290
|
-
...
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
endAdornment
|
|
2296
|
-
|
|
2297
|
-
Tooltip,
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
)
|
|
2310
|
-
}
|
|
2311
|
-
) : null
|
|
2312
|
-
] })
|
|
2238
|
+
slotProps: {
|
|
2239
|
+
...inputProps?.slotProps ?? {},
|
|
2240
|
+
...params?.slotProps ?? {},
|
|
2241
|
+
input: {
|
|
2242
|
+
...inputPropsSlotInput,
|
|
2243
|
+
...paramsSlotInput,
|
|
2244
|
+
startAdornment,
|
|
2245
|
+
endAdornment: /* @__PURE__ */ jsxs5(Fragment3, { children: [
|
|
2246
|
+
endAdornment ?? null,
|
|
2247
|
+
showVariableIcon ? /* @__PURE__ */ jsx12(Tooltip, { title: t("chatbot.allowed-variables", "Allowed Variables"), children: /* @__PURE__ */ jsx12(
|
|
2248
|
+
InputAdornment2,
|
|
2249
|
+
{
|
|
2250
|
+
position: "end",
|
|
2251
|
+
onClick: clickedVariableIcon,
|
|
2252
|
+
ref: containerRef,
|
|
2253
|
+
className: "ls-variable-input-adornment",
|
|
2254
|
+
children: "{}"
|
|
2255
|
+
}
|
|
2256
|
+
) }) : null
|
|
2257
|
+
] })
|
|
2258
|
+
}
|
|
2313
2259
|
},
|
|
2314
2260
|
inputRef: ref
|
|
2315
2261
|
}
|
|
@@ -4145,13 +4091,15 @@ function seExtraTextCss(seCss, scrolling) {
|
|
|
4145
4091
|
extra.WebkitTextStrokeWidth = seCss["-webkit-text-stroke-width"];
|
|
4146
4092
|
if (seCss["letter-spacing"] != null) extra.letterSpacing = seCss["letter-spacing"];
|
|
4147
4093
|
if (seCss["word-spacing"] != null) extra.wordSpacing = seCss["word-spacing"];
|
|
4148
|
-
if (scrolling?.enabled)
|
|
4149
|
-
extra.scroll = true;
|
|
4150
|
-
const speed = Number(scrolling.speed);
|
|
4151
|
-
if (Number.isFinite(speed) && speed > 0) extra.scrollSpeed = speed * 600;
|
|
4152
|
-
}
|
|
4094
|
+
if (scrolling?.enabled) extra.scroll = true;
|
|
4153
4095
|
return extra;
|
|
4154
4096
|
}
|
|
4097
|
+
function seMarqueeSpeedPxPerSec(scrolling) {
|
|
4098
|
+
if (!scrolling?.enabled) return void 0;
|
|
4099
|
+
const speed = Number(scrolling.speed);
|
|
4100
|
+
if (!Number.isFinite(speed) || speed <= 0) return void 0;
|
|
4101
|
+
return speed * 12;
|
|
4102
|
+
}
|
|
4155
4103
|
function mapText(widget, ctx) {
|
|
4156
4104
|
const value = translateSeText(
|
|
4157
4105
|
widget.text?.value ?? "",
|
|
@@ -4161,13 +4109,15 @@ function mapText(widget, ctx) {
|
|
|
4161
4109
|
{ context: "static" }
|
|
4162
4110
|
);
|
|
4163
4111
|
const seCss = widget.text?.css ?? {};
|
|
4112
|
+
const marqueeSpeed = seMarqueeSpeedPxPerSec(widget.text?.scrolling);
|
|
4164
4113
|
return buildUnit(
|
|
4165
4114
|
widget,
|
|
4166
4115
|
"text",
|
|
4167
4116
|
{
|
|
4168
4117
|
content: {
|
|
4169
4118
|
value,
|
|
4170
|
-
highlightColor: "inherit"
|
|
4119
|
+
highlightColor: "inherit",
|
|
4120
|
+
...marqueeSpeed != null ? { marqueeSpeed } : {}
|
|
4171
4121
|
},
|
|
4172
4122
|
css: {
|
|
4173
4123
|
fontSize: seCss["font-size"] ?? 24,
|
|
@@ -4184,25 +4134,41 @@ function mapText(widget, ctx) {
|
|
|
4184
4134
|
ctx
|
|
4185
4135
|
);
|
|
4186
4136
|
}
|
|
4137
|
+
function seInnerAutoFit(widget, innerCss, mode) {
|
|
4138
|
+
const isInnerAutoWidth = innerCss?.width === "auto";
|
|
4139
|
+
const isInnerAutoHeight = innerCss?.height === "auto";
|
|
4140
|
+
if (mode === "width-drives-both") {
|
|
4141
|
+
if (!isInnerAutoWidth) return {};
|
|
4142
|
+
return { objectFit: "contain", autoWidth: true, autoHeight: true };
|
|
4143
|
+
}
|
|
4144
|
+
if (!isInnerAutoWidth && !isInnerAutoHeight) return {};
|
|
4145
|
+
const result = { objectFit: "contain" };
|
|
4146
|
+
if (isInnerAutoWidth && !isExplicitPxSize(widget.css?.width))
|
|
4147
|
+
result.autoWidth = true;
|
|
4148
|
+
if (isInnerAutoHeight && !isExplicitPxSize(widget.css?.height))
|
|
4149
|
+
result.autoHeight = true;
|
|
4150
|
+
return result;
|
|
4151
|
+
}
|
|
4152
|
+
function applySeAutoFitBounds(unit, fit) {
|
|
4153
|
+
const bounds = unit.layer.bounds;
|
|
4154
|
+
if (fit.autoWidth) bounds.autoWidth = true;
|
|
4155
|
+
if (fit.autoHeight) bounds.autoHeight = true;
|
|
4156
|
+
}
|
|
4187
4157
|
function mapImage(widget, ctx) {
|
|
4158
|
+
const fit = seInnerAutoFit(widget, widget.image?.css, "inner-axis-gated");
|
|
4188
4159
|
const unit = buildUnit(
|
|
4189
4160
|
widget,
|
|
4190
4161
|
"image",
|
|
4191
4162
|
{
|
|
4192
4163
|
content: {
|
|
4193
4164
|
src: widget.image?.src ?? "",
|
|
4194
|
-
loop: true
|
|
4165
|
+
loop: true,
|
|
4166
|
+
...fit.objectFit ? { objectFit: fit.objectFit } : {}
|
|
4195
4167
|
}
|
|
4196
4168
|
},
|
|
4197
4169
|
ctx
|
|
4198
4170
|
);
|
|
4199
|
-
|
|
4200
|
-
const innerHeight = widget.image?.css?.height;
|
|
4201
|
-
const outerWidthExplicit = isExplicitPxSize(widget.css?.width);
|
|
4202
|
-
const outerHeightExplicit = isExplicitPxSize(widget.css?.height);
|
|
4203
|
-
const bounds = unit.layer.bounds;
|
|
4204
|
-
if (innerWidth === "auto" && !outerWidthExplicit) bounds.autoWidth = true;
|
|
4205
|
-
if (innerHeight === "auto" && !outerHeightExplicit) bounds.autoHeight = true;
|
|
4171
|
+
applySeAutoFitBounds(unit, fit);
|
|
4206
4172
|
return unit;
|
|
4207
4173
|
}
|
|
4208
4174
|
function isExplicitPxSize(value) {
|
|
@@ -4216,8 +4182,7 @@ function isExplicitPxSize(value) {
|
|
|
4216
4182
|
return Number.isFinite(parsed) && parsed > 0;
|
|
4217
4183
|
}
|
|
4218
4184
|
function mapVideo(widget, ctx) {
|
|
4219
|
-
const
|
|
4220
|
-
const isInnerAutoWidth = innerWidth === "auto";
|
|
4185
|
+
const fit = seInnerAutoFit(widget, widget.video?.css, "width-drives-both");
|
|
4221
4186
|
const unit = buildUnit(
|
|
4222
4187
|
widget,
|
|
4223
4188
|
"video",
|
|
@@ -4226,19 +4191,13 @@ function mapVideo(widget, ctx) {
|
|
|
4226
4191
|
src: widget.video?.src ?? "",
|
|
4227
4192
|
volume: widget.video?.volume ?? 0.5,
|
|
4228
4193
|
loop: true,
|
|
4229
|
-
muted: false
|
|
4230
|
-
...isInnerAutoWidth ? { objectFit: "contain" } : {}
|
|
4194
|
+
muted: false
|
|
4231
4195
|
}
|
|
4232
4196
|
},
|
|
4233
4197
|
ctx
|
|
4234
4198
|
);
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
bounds.autoWidth = true;
|
|
4238
|
-
bounds.autoHeight = true;
|
|
4239
|
-
} else {
|
|
4240
|
-
bounds.autoHeight = true;
|
|
4241
|
-
}
|
|
4199
|
+
applySeAutoFitBounds(unit, fit);
|
|
4200
|
+
unit.layer.bounds.autoHeight = true;
|
|
4242
4201
|
return unit;
|
|
4243
4202
|
}
|
|
4244
4203
|
var LUMIA_SNOW_WEBM = "https://storage.lumiastream.com/overlays/global/seasonal/snow.webm";
|
|
@@ -4269,11 +4228,16 @@ function mapReadout(widget, fallbackVar, ctx) {
|
|
|
4269
4228
|
context: "static"
|
|
4270
4229
|
}) : `{{${variable}}}`;
|
|
4271
4230
|
const seCss = widget.text?.css ?? {};
|
|
4231
|
+
const marqueeSpeed = seMarqueeSpeedPxPerSec(widget.text?.scrolling);
|
|
4272
4232
|
return buildUnit(
|
|
4273
4233
|
widget,
|
|
4274
4234
|
"text",
|
|
4275
4235
|
{
|
|
4276
|
-
content: {
|
|
4236
|
+
content: {
|
|
4237
|
+
value,
|
|
4238
|
+
highlightColor: "inherit",
|
|
4239
|
+
...marqueeSpeed != null ? { marqueeSpeed } : {}
|
|
4240
|
+
},
|
|
4277
4241
|
css: {
|
|
4278
4242
|
fontSize: seCss["font-size"] ?? 28,
|
|
4279
4243
|
textAlign: seCss["text-align"] ?? "center",
|
|
@@ -5437,7 +5401,11 @@ function mapEventList(widget, ctx) {
|
|
|
5437
5401
|
...isMarquee ? { marqueeItemGap: 24 } : {},
|
|
5438
5402
|
showAlertIcon: !isMarquee,
|
|
5439
5403
|
showSiteIcon: !isMarquee,
|
|
5440
|
-
|
|
5404
|
+
// SE event lists are text-only (`{name}: {amount}` rows for tip-recent,
|
|
5405
|
+
// follower-recent, etc.) — no avatar column. Mirror that on import so
|
|
5406
|
+
// the streamer's layout matches what they had in SE; they can re-enable
|
|
5407
|
+
// avatars from the Eventlist settings panel if they want.
|
|
5408
|
+
showUserAvatar: false,
|
|
5441
5409
|
showDetailedText: false,
|
|
5442
5410
|
hideAlertMessage: false
|
|
5443
5411
|
}
|