@lumiastream/ui 0.5.4 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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 resolvedStartAdornment = inputPropsProp?.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 = inputPropsProp?.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);
135
- const inputSlotProps = {
136
- ...inputPropsProp,
137
- startAdornment: resolvedStartAdornment,
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
- ...slotPropsProp?.input ?? {},
160
- ...inputSlotProps,
142
+ ...callerInputSlot,
143
+ startAdornment: resolvedStartAdornment,
144
+ endAdornment: resolvedEndAdornment,
145
+ readOnly: rest.readOnly ?? callerInputSlot.readOnly,
161
146
  sx: {
162
- ...slotPropsProp?.input?.sx ?? {},
163
- ...inputSlotProps.sx
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
- ...slotPropsProp?.inputLabel ?? {},
168
- ...inputLabelProps
155
+ shrink: true,
156
+ ...callerInputLabelSlot
169
157
  },
170
158
  htmlInput: {
171
- ...slotPropsProp?.htmlInput ?? {},
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
- InputProps: {
363
- ...inputProps?.InputProps ?? {},
364
- name,
365
- type: "number",
366
- value: displayValue,
367
- min: displayMinimum,
368
- max: displayMaximum,
369
- step: displayStep,
370
- inputMode: stepPrecision > 0 ? "decimal" : "numeric"
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
- shrink: true,
933
- ...paramsInputLabelProps ?? {}
895
+ ...paramsSlotProps.inputLabel ?? {},
896
+ shrink: true
934
897
  },
935
898
  input: {
936
- ...paramsInputProps ?? {}
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 { InputLabelProps, InputProps, slotProps, ...rest } = props;
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
- ...slotProps?.inputLabel ?? {},
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 inputPropsInputProps = inputProps?.InputProps ?? {};
2260
- const paramsInputProps = params?.InputProps ?? {};
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 = paramsInputProps.startAdornment ?? paramsSlotInputProps.startAdornment ?? inputPropsInputProps.startAdornment ?? inputPropsSlotInputProps.startAdornment ?? resolvedExplicitStartAdornment;
2266
- const endAdornment = paramsInputProps.endAdornment ?? paramsSlotInputProps.endAdornment ?? inputPropsInputProps.endAdornment ?? inputPropsSlotInputProps.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
- InputProps: {
2289
- ...inputPropsSlotInputProps,
2290
- ...inputPropsInputProps,
2291
- ...paramsSlotInputProps,
2292
- ...paramsInputProps,
2293
- startAdornment,
2294
- endAdornment: /* @__PURE__ */ jsxs5(Fragment3, { children: [
2295
- endAdornment ?? null,
2296
- showVariableIcon ? /* @__PURE__ */ jsx12(
2297
- Tooltip,
2298
- {
2299
- title: t("chatbot.allowed-variables", "Allowed Variables"),
2300
- children: /* @__PURE__ */ jsx12(
2301
- InputAdornment2,
2302
- {
2303
- position: "end",
2304
- onClick: clickedVariableIcon,
2305
- ref: containerRef,
2306
- className: "ls-variable-input-adornment",
2307
- children: "{}"
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
  }
@@ -4184,25 +4130,41 @@ function mapText(widget, ctx) {
4184
4130
  ctx
4185
4131
  );
4186
4132
  }
4133
+ function seInnerAutoFit(widget, innerCss, mode) {
4134
+ const isInnerAutoWidth = innerCss?.width === "auto";
4135
+ const isInnerAutoHeight = innerCss?.height === "auto";
4136
+ if (mode === "width-drives-both") {
4137
+ if (!isInnerAutoWidth) return {};
4138
+ return { objectFit: "contain", autoWidth: true, autoHeight: true };
4139
+ }
4140
+ if (!isInnerAutoWidth && !isInnerAutoHeight) return {};
4141
+ const result = { objectFit: "contain" };
4142
+ if (isInnerAutoWidth && !isExplicitPxSize(widget.css?.width))
4143
+ result.autoWidth = true;
4144
+ if (isInnerAutoHeight && !isExplicitPxSize(widget.css?.height))
4145
+ result.autoHeight = true;
4146
+ return result;
4147
+ }
4148
+ function applySeAutoFitBounds(unit, fit) {
4149
+ const bounds = unit.layer.bounds;
4150
+ if (fit.autoWidth) bounds.autoWidth = true;
4151
+ if (fit.autoHeight) bounds.autoHeight = true;
4152
+ }
4187
4153
  function mapImage(widget, ctx) {
4154
+ const fit = seInnerAutoFit(widget, widget.image?.css, "inner-axis-gated");
4188
4155
  const unit = buildUnit(
4189
4156
  widget,
4190
4157
  "image",
4191
4158
  {
4192
4159
  content: {
4193
4160
  src: widget.image?.src ?? "",
4194
- loop: true
4161
+ loop: true,
4162
+ ...fit.objectFit ? { objectFit: fit.objectFit } : {}
4195
4163
  }
4196
4164
  },
4197
4165
  ctx
4198
4166
  );
4199
- const innerWidth = widget.image?.css?.width;
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;
4167
+ applySeAutoFitBounds(unit, fit);
4206
4168
  return unit;
4207
4169
  }
4208
4170
  function isExplicitPxSize(value) {
@@ -4216,8 +4178,7 @@ function isExplicitPxSize(value) {
4216
4178
  return Number.isFinite(parsed) && parsed > 0;
4217
4179
  }
4218
4180
  function mapVideo(widget, ctx) {
4219
- const innerWidth = widget.video?.css?.width;
4220
- const isInnerAutoWidth = innerWidth === "auto";
4181
+ const fit = seInnerAutoFit(widget, widget.video?.css, "width-drives-both");
4221
4182
  const unit = buildUnit(
4222
4183
  widget,
4223
4184
  "video",
@@ -4226,19 +4187,13 @@ function mapVideo(widget, ctx) {
4226
4187
  src: widget.video?.src ?? "",
4227
4188
  volume: widget.video?.volume ?? 0.5,
4228
4189
  loop: true,
4229
- muted: false,
4230
- ...isInnerAutoWidth ? { objectFit: "contain" } : {}
4190
+ muted: false
4231
4191
  }
4232
4192
  },
4233
4193
  ctx
4234
4194
  );
4235
- const bounds = unit.layer.bounds;
4236
- if (isInnerAutoWidth) {
4237
- bounds.autoWidth = true;
4238
- bounds.autoHeight = true;
4239
- } else {
4240
- bounds.autoHeight = true;
4241
- }
4195
+ applySeAutoFitBounds(unit, fit);
4196
+ unit.layer.bounds.autoHeight = true;
4242
4197
  return unit;
4243
4198
  }
4244
4199
  var LUMIA_SNOW_WEBM = "https://storage.lumiastream.com/overlays/global/seasonal/snow.webm";
@@ -5437,7 +5392,11 @@ function mapEventList(widget, ctx) {
5437
5392
  ...isMarquee ? { marqueeItemGap: 24 } : {},
5438
5393
  showAlertIcon: !isMarquee,
5439
5394
  showSiteIcon: !isMarquee,
5440
- showUserAvatar: true,
5395
+ // SE event lists are text-only (`{name}: {amount}` rows for tip-recent,
5396
+ // follower-recent, etc.) — no avatar column. Mirror that on import so
5397
+ // the streamer's layout matches what they had in SE; they can re-enable
5398
+ // avatars from the Eventlist settings panel if they want.
5399
+ showUserAvatar: false,
5441
5400
  showDetailedText: false,
5442
5401
  hideAlertMessage: false
5443
5402
  }