@rolster/react-components 18.21.45 → 18.22.0

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.
Files changed (64) hide show
  1. package/dist/cjs/assets/{index-CaA_sxmM.css → index-PeMi6MeC.css} +197 -0
  2. package/dist/cjs/index.js +516 -76
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/es/assets/{index-CaA_sxmM.css → index-PeMi6MeC.css} +197 -0
  5. package/dist/es/index.js +512 -77
  6. package/dist/es/index.js.map +1 -1
  7. package/dist/esm/components/molecules/PickerDay/PickerDay.js +13 -13
  8. package/dist/esm/components/molecules/PickerDay/PickerDay.js.map +1 -1
  9. package/dist/esm/components/molecules/PickerDayRange/PickerDayRange.js +12 -12
  10. package/dist/esm/components/molecules/PickerDayRange/PickerDayRange.js.map +1 -1
  11. package/dist/esm/components/molecules/PickerMonth/PickerMonth.js +10 -10
  12. package/dist/esm/components/molecules/PickerMonth/PickerMonth.js.map +1 -1
  13. package/dist/esm/components/molecules/PickerYear/PickerYear.js +11 -11
  14. package/dist/esm/components/molecules/PickerYear/PickerYear.js.map +1 -1
  15. package/dist/esm/components/molecules/Slider/Slider.css +60 -0
  16. package/dist/esm/components/molecules/Slider/Slider.css.map +1 -0
  17. package/dist/esm/components/molecules/Slider/Slider.d.ts +14 -0
  18. package/dist/esm/components/molecules/Slider/Slider.js +60 -0
  19. package/dist/esm/components/molecules/Slider/Slider.js.map +1 -0
  20. package/dist/esm/components/molecules/index.d.ts +1 -0
  21. package/dist/esm/components/molecules/index.js +1 -0
  22. package/dist/esm/components/molecules/index.js.map +1 -1
  23. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocomplete.js +1 -1
  24. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteController.js +5 -2
  25. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteController.js.map +1 -1
  26. package/dist/esm/components/organisms/FieldSelect/FieldSelect.js +3 -3
  27. package/dist/esm/components/organisms/FieldSelect/FieldSelect.js.map +1 -1
  28. package/dist/esm/components/organisms/FieldSelect/FieldSelectController.js +7 -3
  29. package/dist/esm/components/organisms/FieldSelect/FieldSelectController.js.map +1 -1
  30. package/dist/esm/components/organisms/ImageChooser/ImageChooser.css +37 -0
  31. package/dist/esm/components/organisms/ImageChooser/ImageChooser.css.map +1 -0
  32. package/dist/esm/components/organisms/ImageChooser/ImageChooser.d.ts +11 -0
  33. package/dist/esm/components/organisms/ImageChooser/ImageChooser.js +62 -0
  34. package/dist/esm/components/organisms/ImageChooser/ImageChooser.js.map +1 -0
  35. package/dist/esm/components/organisms/ImageEditor/ImageEditor.css +97 -0
  36. package/dist/esm/components/organisms/ImageEditor/ImageEditor.css.map +1 -0
  37. package/dist/esm/components/organisms/ImageEditor/ImageEditor.d.ts +20 -0
  38. package/dist/esm/components/organisms/ImageEditor/ImageEditor.js +201 -0
  39. package/dist/esm/components/organisms/ImageEditor/ImageEditor.js.map +1 -0
  40. package/dist/esm/components/organisms/Modal/Modal.d.ts +2 -1
  41. package/dist/esm/components/organisms/Modal/Modal.js +5 -5
  42. package/dist/esm/components/organisms/Modal/Modal.js.map +1 -1
  43. package/dist/esm/components/organisms/PickerDate/PickerDate.js +1 -1
  44. package/dist/esm/components/organisms/PickerDate/PickerDate.js.map +1 -1
  45. package/dist/esm/components/organisms/index.d.ts +2 -0
  46. package/dist/esm/components/organisms/index.js +2 -0
  47. package/dist/esm/components/organisms/index.js.map +1 -1
  48. package/dist/esm/controllers/ListController.d.ts +3 -3
  49. package/dist/esm/controllers/ListController.js +16 -16
  50. package/dist/esm/controllers/ListController.js.map +1 -1
  51. package/dist/esm/controllers/RelocationOnComponentController.d.ts +8 -0
  52. package/dist/esm/controllers/RelocationOnComponentController.js +93 -0
  53. package/dist/esm/controllers/RelocationOnComponentController.js.map +1 -0
  54. package/dist/esm/controllers/ResizeController.d.ts +15 -0
  55. package/dist/esm/controllers/ResizeController.js +29 -0
  56. package/dist/esm/controllers/ResizeController.js.map +1 -0
  57. package/dist/esm/controllers/index.d.ts +2 -0
  58. package/dist/esm/controllers/index.js +2 -0
  59. package/dist/esm/controllers/index.js.map +1 -1
  60. package/dist/esm/definitions.d.ts +3 -3
  61. package/dist/esm/i18n.d.ts +3 -0
  62. package/dist/esm/i18n.js +6 -0
  63. package/dist/esm/i18n.js.map +1 -1
  64. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -1968,7 +1968,10 @@ function RlsPagination({ suggestions, count, filter, onPagination }) {
1968
1968
  }) }), jsxRuntimeExports.jsx("div", { className: "rls-pagination__description", children: template?.description }), jsxRuntimeExports.jsxs("div", { className: "rls-pagination__actions", children: [jsxRuntimeExports.jsx("button", { className: "rls-pagination__action", onClick: goNextPagination, disabled: template?.lastPage, children: jsxRuntimeExports.jsx(RlsIcon, { value: "arrow-ios-right" }) }), jsxRuntimeExports.jsx("button", { className: "rls-pagination__action", onClick: goLastPagination, disabled: template?.lastPage, children: jsxRuntimeExports.jsx(RlsIcon, { value: "arrowhead-right" }) })] })] }));
1969
1969
  }
1970
1970
 
1971
- function RlsPickerDayItem({ day, onSelect, disabled }) {
1971
+ function RlsPickerDayHeaders() {
1972
+ return (jsxRuntimeExports.jsx("div", { className: "rls-picker-day__header", children: dates.DAY_LABELS().map((title, index) => (jsxRuntimeExports.jsx("label", { className: "rls-picker-day__label", children: title }, index))) }));
1973
+ }
1974
+ function RlsPickerDayElement({ day, onSelect, disabled }) {
1972
1975
  const className = require$$0.useMemo(() => {
1973
1976
  return renderClassStatus('rls-picker-day__element', {
1974
1977
  disabled: day.disabled || disabled,
@@ -1990,23 +1993,27 @@ function RlsPickerDayItem({ day, onSelect, disabled }) {
1990
1993
  }, [day.value, day.disabled, disabled, onSelect]);
1991
1994
  return (jsxRuntimeExports.jsx("div", { className: className, onClick: onClick, children: jsxRuntimeExports.jsx("span", { className: "rls-picker-day__element__span", children: day.value || '??' }) }));
1992
1995
  }
1993
- function RlsPickerDayHeaders() {
1994
- return (jsxRuntimeExports.jsx("div", { className: "rls-picker-day__header", children: dates.DAY_LABELS().map((title, index) => (jsxRuntimeExports.jsx("label", { className: "rls-picker-day__label", children: title }, index))) }));
1995
- }
1996
1996
  function RlsPickerDay({ date: _date, disabled, formControl, maxDate, month, minDate, onValue, rlsTheme, year }) {
1997
1997
  const date = require$$0.useMemo(() => _date ?? new Date(), [_date]);
1998
1998
  const [weeks, setWeeks] = require$$0.useState([]);
1999
1999
  const [value, setValue] = require$$0.useState(formControl?.value || date.getDate());
2000
2000
  const [headers, setHeaders] = require$$0.useState(jsxRuntimeExports.jsx(RlsPickerDayHeaders, {}));
2001
2001
  const [component, setComponent] = require$$0.useState(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}));
2002
+ const setDayValue = require$$0.useCallback((value) => {
2003
+ formControl ? formControl.setValue(value) : setValue(value);
2004
+ }, [formControl]);
2005
+ const onSelect = require$$0.useCallback((value) => {
2006
+ setDayValue(value);
2007
+ onValue && onValue(value);
2008
+ }, [setDayValue, onValue]);
2002
2009
  require$$0.useEffect(() => {
2003
2010
  return i18n.i18nSubscribe(() => {
2004
2011
  setHeaders(jsxRuntimeExports.jsx(RlsPickerDayHeaders, {}));
2005
2012
  });
2006
2013
  }, []);
2007
2014
  require$$0.useEffect(() => {
2008
- setComponent(jsxRuntimeExports.jsx("div", { className: "rls-picker-day__component", children: weeks.map(({ days }, index) => (jsxRuntimeExports.jsx("div", { className: "rls-picker-day__week", children: days.map((day, index) => (jsxRuntimeExports.jsx(RlsPickerDayItem, { day: day, onSelect: onSelect, disabled: disabled }, index))) }, index))) }));
2009
- }, [weeks]);
2015
+ setComponent(jsxRuntimeExports.jsx("div", { className: "rls-picker-day__component", children: weeks.map(({ days }, index) => (jsxRuntimeExports.jsx("div", { className: "rls-picker-day__week", children: days.map((day, index) => (jsxRuntimeExports.jsx(RlsPickerDayElement, { day: day, onSelect: onSelect, disabled: disabled }, index))) }, index))) }));
2016
+ }, [weeks, onSelect, disabled]);
2010
2017
  require$$0.useEffect(() => {
2011
2018
  const options = createPickerOptions();
2012
2019
  const day = components.verifyDayPicker(options);
@@ -2028,13 +2035,6 @@ function RlsPickerDay({ date: _date, disabled, formControl, maxDate, month, minD
2028
2035
  maxDate
2029
2036
  };
2030
2037
  }, [date, formControl?.value, value, month, year, minDate, maxDate]);
2031
- const setDayValue = require$$0.useCallback((value) => {
2032
- formControl ? formControl.setValue(value) : setValue(value);
2033
- }, [formControl]);
2034
- const onSelect = require$$0.useCallback((value) => {
2035
- setDayValue(value);
2036
- onValue && onValue(value);
2037
- }, [setDayValue, onValue]);
2038
2038
  return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-day", "rls-theme": rlsTheme, children: [headers, component] }));
2039
2039
  }
2040
2040
 
@@ -2042,7 +2042,7 @@ const formatRange = '{dd}/{mx}/{aa}';
2042
2042
  function RlsPickerDayRangeHeaders() {
2043
2043
  return (jsxRuntimeExports.jsx("div", { className: "rls-picker-day__header", children: dates.DAY_LABELS().map((title, index) => (jsxRuntimeExports.jsx("label", { className: "rls-picker-day__label", children: title }, index))) }));
2044
2044
  }
2045
- function RlsPickerDayRangeItem({ day, onSelect, disabled }) {
2045
+ function RlsPickerDayRangeElement({ day, onSelect, disabled }) {
2046
2046
  const className = require$$0.useMemo(() => {
2047
2047
  return renderClassStatus('rls-picker-day-range__element', {
2048
2048
  disabled: day.disabled || disabled,
@@ -2069,14 +2069,23 @@ function RlsPickerDayRange({ date: _date, disabled, formControl, maxDate, minDat
2069
2069
  const [range, setRange] = require$$0.useState(_range);
2070
2070
  const [headers, setHeaders] = require$$0.useState(jsxRuntimeExports.jsx(RlsPickerDayRangeHeaders, {}));
2071
2071
  const [component, setComponent] = require$$0.useState(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}));
2072
+ const onSelect = require$$0.useCallback((value) => {
2073
+ const _date = dates.assignDayInDate(date, value);
2074
+ const range = dates.dateIsBefore(_date, sourceDate.current)
2075
+ ? new dates.DateRange(sourceDate.current, _date)
2076
+ : new dates.DateRange(_date, sourceDate.current);
2077
+ sourceDate.current = _date;
2078
+ setRange(range);
2079
+ formControl?.setValue(range);
2080
+ }, [date, sourceDate.current, formControl]);
2072
2081
  require$$0.useEffect(() => {
2073
2082
  return i18n.i18nSubscribe(() => {
2074
2083
  setHeaders(jsxRuntimeExports.jsx(RlsPickerDayRangeHeaders, {}));
2075
2084
  });
2076
2085
  }, []);
2077
2086
  require$$0.useEffect(() => {
2078
- setComponent(jsxRuntimeExports.jsx("div", { className: "rls-picker-day-range__component", children: weeks.map(({ days }, index) => (jsxRuntimeExports.jsx("div", { className: "rls-picker-day-range__week", children: days.map((day, index) => (jsxRuntimeExports.jsx(RlsPickerDayRangeItem, { day: day, onSelect: onSelect, disabled: disabled }, index))) }, index))) }));
2079
- }, [weeks]);
2087
+ setComponent(jsxRuntimeExports.jsx("div", { className: "rls-picker-day-range__component", children: weeks.map(({ days }, index) => (jsxRuntimeExports.jsx("div", { className: "rls-picker-day-range__week", children: days.map((day, index) => (jsxRuntimeExports.jsx(RlsPickerDayRangeElement, { day: day, onSelect: onSelect, disabled: disabled }, index))) }, index))) }));
2088
+ }, [weeks, onSelect, disabled]);
2080
2089
  require$$0.useEffect(() => {
2081
2090
  setWeeks(components.createDayRangePicker({
2082
2091
  date,
@@ -2089,19 +2098,10 @@ function RlsPickerDayRange({ date: _date, disabled, formControl, maxDate, minDat
2089
2098
  const title = require$$0.useMemo(() => {
2090
2099
  return (jsxRuntimeExports.jsx("div", { className: "rls-picker-day-range__title", children: dates.dateFormatTemplate(sourceDate.current, formatRange) }));
2091
2100
  }, [sourceDate.current]);
2092
- const onSelect = require$$0.useCallback((value) => {
2093
- const _date = dates.assignDayInDate(date, value);
2094
- const range = dates.dateIsBefore(_date, sourceDate.current)
2095
- ? new dates.DateRange(sourceDate.current, _date)
2096
- : new dates.DateRange(_date, sourceDate.current);
2097
- sourceDate.current = _date;
2098
- setRange(range);
2099
- formControl?.setValue(range);
2100
- }, [date, sourceDate.current, formControl]);
2101
2101
  return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-day-range", "rls-theme": rlsTheme, children: [title, headers, component] }));
2102
2102
  }
2103
2103
 
2104
- function RlsPickerMonthItem({ month, onSelect, disabled }) {
2104
+ function RlsPickerMonthElement({ month, onSelect, disabled }) {
2105
2105
  const [label, setLabel] = require$$0.useState(dates.MONTH_NAMES(month.value));
2106
2106
  require$$0.useEffect(() => {
2107
2107
  return i18n.i18nSubscribe(() => {
@@ -2128,9 +2128,16 @@ function RlsPickerMonth({ date: _date, disabled, formControl, maxDate, minDate,
2128
2128
  const [months, setMonths] = require$$0.useState([]);
2129
2129
  const [value, setValue] = require$$0.useState(formControl?.value ?? date.getMonth());
2130
2130
  const [component, setComponent] = require$$0.useState(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}));
2131
+ const setMonthValue = require$$0.useCallback((value) => {
2132
+ formControl ? formControl.setValue(value) : setValue(value);
2133
+ }, [formControl]);
2134
+ const onSelect = require$$0.useCallback((value) => {
2135
+ setMonthValue(value);
2136
+ onValue && onValue(value);
2137
+ }, [setMonthValue, onValue]);
2131
2138
  require$$0.useEffect(() => {
2132
- setComponent(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: months.map((month, index) => (jsxRuntimeExports.jsx(RlsPickerMonthItem, { month: month, onSelect: onSelect, disabled: disabled }, index))) }));
2133
- }, [months]);
2139
+ setComponent(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: months.map((month, index) => (jsxRuntimeExports.jsx(RlsPickerMonthElement, { month: month, onSelect: onSelect, disabled: disabled }, index))) }));
2140
+ }, [months, onSelect, disabled]);
2134
2141
  require$$0.useEffect(() => {
2135
2142
  const options = {
2136
2143
  date,
@@ -2156,13 +2163,6 @@ function RlsPickerMonth({ date: _date, disabled, formControl, maxDate, minDate,
2156
2163
  ? formControl?.setValue(month)
2157
2164
  : setValue(formControl?.value ?? date.getMonth());
2158
2165
  }, [formControl?.value]);
2159
- const setMonthValue = require$$0.useCallback((value) => {
2160
- formControl ? formControl.setValue(value) : setValue(value);
2161
- }, [formControl]);
2162
- const onSelect = require$$0.useCallback((value) => {
2163
- setMonthValue(value);
2164
- onValue && onValue(value);
2165
- }, [setMonthValue, onValue]);
2166
2166
  return (jsxRuntimeExports.jsx("div", { className: "rls-picker-month", "rls-theme": rlsTheme, children: component }));
2167
2167
  }
2168
2168
 
@@ -2223,7 +2223,7 @@ function RlsPickerSelectorTitle({ monthControl, type, yearControl, date, disable
2223
2223
  return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-selector-title", children: [jsxRuntimeExports.jsx(RlsButtonAction, { icon: "arrow-ios-left", onClick: onPrevious, disabled: limitPrevious || disabled }), jsxRuntimeExports.jsx("span", { onClick: onClick, children: label }), jsxRuntimeExports.jsx(RlsButtonAction, { icon: "arrow-ios-right", onClick: onNext, disabled: limitNext || disabled })] }));
2224
2224
  }
2225
2225
 
2226
- function RlsPickerYearItem({ onSelect, year, disabled }) {
2226
+ function RlsPickerYearElement({ onSelect, year, disabled }) {
2227
2227
  const className = require$$0.useMemo(() => {
2228
2228
  return renderClassStatus('rls-picker-year__element', {
2229
2229
  disabled: year.disabled || disabled,
@@ -2250,37 +2250,92 @@ function RlsPickerYear({ date: _date, disabled, formControl, maxDate, minDate, o
2250
2250
  };
2251
2251
  }, [date, year, minDate, maxDate]);
2252
2252
  const [template, setTemplate] = require$$0.useState(components.createYearPicker(createPickerOptions()));
2253
+ const setYearValue = require$$0.useCallback((value) => {
2254
+ formControl ? formControl.setValue(value) : setValue(value);
2255
+ setYear(value);
2256
+ }, [formControl]);
2257
+ const onSelect = require$$0.useCallback((value) => {
2258
+ setYearValue(value);
2259
+ onValue && onValue(value);
2260
+ }, [setYearValue, onValue]);
2253
2261
  require$$0.useEffect(() => {
2254
2262
  const options = createPickerOptions(); // YearPickerProps
2255
2263
  const year = components.verifyYearPicker(options);
2256
2264
  year ? setYearValue(year) : setTemplate(components.createYearPicker(options));
2257
2265
  }, [date, year, value, minDate, maxDate]);
2258
2266
  require$$0.useEffect(() => {
2259
- setComponent(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: template.years.map((year, index) => (jsxRuntimeExports.jsx(RlsPickerYearItem, { year: year, onSelect: onSelect, disabled: disabled }, index))) }));
2260
- }, [template.years]);
2267
+ setComponent(jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: template.years.map((year, index) => (jsxRuntimeExports.jsx(RlsPickerYearElement, { year: year, onSelect: onSelect, disabled: disabled }, index))) }));
2268
+ }, [template.years, onSelect, disabled]);
2261
2269
  require$$0.useEffect(() => {
2262
2270
  const year = components.verifyYearPicker(createPickerOptions());
2263
2271
  commons.itIsDefined(year)
2264
2272
  ? formControl?.setValue(year)
2265
2273
  : setValue(formControl?.value ?? date.getFullYear());
2266
2274
  }, [formControl?.value]);
2267
- const setYearValue = require$$0.useCallback((value) => {
2268
- formControl ? formControl.setValue(value) : setValue(value);
2269
- setYear(value);
2270
- }, [formControl]);
2271
2275
  const onClickPrev = require$$0.useCallback(() => {
2272
2276
  setYear((year) => year - 8);
2273
2277
  }, []);
2274
2278
  const onClickNext = require$$0.useCallback(() => {
2275
2279
  setYear((year) => year + 8);
2276
2280
  }, []);
2277
- const onSelect = require$$0.useCallback((value) => {
2278
- setYearValue(value);
2279
- onValue && onValue(value);
2280
- }, [setYearValue, onValue]);
2281
2281
  return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-year", "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("div", { className: "rls-picker-year__header", children: [jsxRuntimeExports.jsx("div", { className: "rls-picker-year__action rls-picker-year__action--prev", children: jsxRuntimeExports.jsx(RlsButtonAction, { icon: "arrow-ios-left", onClick: onClickPrev, disabled: !template.canPrevious || disabled }) }), jsxRuntimeExports.jsxs("label", { className: "rls-title-bold", children: [template.minRange, " - ", template.maxRange] }), jsxRuntimeExports.jsx("div", { className: "rls-picker-year__action rls-picker-year__action--next", children: jsxRuntimeExports.jsx(RlsButtonAction, { icon: "arrow-ios-right", onClick: onClickNext, disabled: !template.canNext || disabled }) })] }), jsxRuntimeExports.jsx("div", { className: "rls-picker-year__component", children: component })] }));
2282
2282
  }
2283
2283
 
2284
+ function calculateInitialValue(value, minValue, maxValue) {
2285
+ return minValue > value ? minValue : maxValue < value ? maxValue : value;
2286
+ }
2287
+ function calculateInitialRate(value, minValue, maxValue) {
2288
+ const rateMax = maxValue - minValue;
2289
+ const rateValue = value - minValue;
2290
+ return Math.ceil((rateValue / rateMax) * 100);
2291
+ }
2292
+ function RlsSlider(props) {
2293
+ const minValue = require$$0.useMemo(() => {
2294
+ return props.minValue ?? 0;
2295
+ }, [props.minValue]);
2296
+ const maxValue = require$$0.useMemo(() => {
2297
+ return props.maxValue ?? 100;
2298
+ }, [props.maxValue]);
2299
+ const [value, setValue] = require$$0.useState(calculateInitialValue(props.formControl?.value ?? props.value ?? 0, minValue, maxValue));
2300
+ const [rate, setRate] = require$$0.useState(calculateInitialRate(value, minValue, maxValue));
2301
+ const refComponent = require$$0.useRef(null);
2302
+ const refTrack = require$$0.useRef(null);
2303
+ const refTrackOn = require$$0.useRef(null);
2304
+ const refThumb = require$$0.useRef(null);
2305
+ const className = require$$0.useMemo(() => {
2306
+ return renderClassStatus('rls-slider', {
2307
+ complet: value === maxValue,
2308
+ disabled: props.disabled,
2309
+ empty: value === minValue
2310
+ });
2311
+ }, [value, minValue, maxValue, props.disabled]);
2312
+ require$$0.useEffect(() => {
2313
+ const valueInitial = props.formControl?.value ?? props.value ?? 0;
2314
+ refThumb.current.style.left = `${rate}%`;
2315
+ refTrackOn.current.style.width = `${rate}%`;
2316
+ if (valueInitial !== value) {
2317
+ props.formControl?.setValue(value);
2318
+ props.onValue && props.onValue(value);
2319
+ }
2320
+ }, []);
2321
+ const calculateValueWithRate = require$$0.useCallback((rate) => {
2322
+ const value = Math.ceil(((maxValue - minValue) * rate) / 100);
2323
+ refThumb.current.style.left = `${rate}%`;
2324
+ refTrackOn.current.style.width = `${rate}%`;
2325
+ const sliderValue = value + minValue;
2326
+ setRate(rate);
2327
+ setValue(sliderValue);
2328
+ props.formControl?.setValue(sliderValue);
2329
+ props.onValue && props.onValue(sliderValue);
2330
+ }, [minValue, maxValue, props.formControl, props.onValue]);
2331
+ const onClickTrack = require$$0.useCallback((event) => {
2332
+ const { left, width } = refTrack.current.getBoundingClientRect();
2333
+ const rate = Math.ceil(((event.clientX - left) / width) * 100);
2334
+ calculateValueWithRate(rate);
2335
+ }, [minValue, maxValue]);
2336
+ return (jsxRuntimeExports.jsxs("div", { className: className, children: [props.children && (jsxRuntimeExports.jsx("span", { className: "rls-slider__label", children: props.children })), jsxRuntimeExports.jsxs("div", { className: "rls-slider__body", children: [props.prefixIcon && jsxRuntimeExports.jsx(RlsIcon, { value: props.prefixIcon }), jsxRuntimeExports.jsxs("div", { ref: refComponent, className: "rls-slider__component", children: [jsxRuntimeExports.jsx("div", { ref: refTrack, className: "rls-slider__track", onClick: onClickTrack, children: jsxRuntimeExports.jsx("div", { ref: refTrackOn, className: "rls-slider__track__on" }) }), jsxRuntimeExports.jsxs("div", { ref: refThumb, className: "rls-slider__thumb", children: [rate, "%"] })] })] })] }));
2337
+ }
2338
+
2284
2339
  function RlsToolbar({ actions, children, subtitle }) {
2285
2340
  return (jsxRuntimeExports.jsxs("div", { className: "rls-toolbar", children: [jsxRuntimeExports.jsxs("div", { className: "rls-toolbar__description", children: [children && jsxRuntimeExports.jsx("label", { className: "rls-toolbar__title", children: children }), subtitle && (jsxRuntimeExports.jsx("label", { className: "rls-toolbar__subtitle smalltext-semibold", children: subtitle }))] }), actions && (jsxRuntimeExports.jsx("div", { className: "rls-toolbar__actions", children: actions.map((action, index) => (jsxRuntimeExports.jsx("div", { children: action }, index))) }))] }));
2286
2341
  }
@@ -2298,6 +2353,9 @@ const reactI18n = i18n.i18n({
2298
2353
  dateActionCancel: 'Cancelar',
2299
2354
  dateActionSelect: 'Establecer',
2300
2355
  dateActionToday: 'Hoy',
2356
+ chooserImageActionCancel: 'Cancelar',
2357
+ editorImageActionRestore: 'Restaurar',
2358
+ editorImageActionSelect: 'Seleccionar',
2301
2359
  listEmptyDescription: 'Lo sentimos, en el momento no hay elementos en el listado',
2302
2360
  listEmptyTitle: 'Selección no disponible',
2303
2361
  listInputPlaceholder: 'Escriba palabre clave para filtrar...'
@@ -2307,6 +2365,9 @@ const reactI18n = i18n.i18n({
2307
2365
  dateActionCancel: 'Cancel',
2308
2366
  dateActionSelect: 'Select',
2309
2367
  dateActionToday: 'Today',
2368
+ chooserImageActionCancel: 'Cancel',
2369
+ editorImageActionRestore: 'Restore',
2370
+ editorImageActionSelect: 'Select',
2310
2371
  listEmptyDescription: 'Sorry, there are currently no items in the list',
2311
2372
  listEmptyTitle: 'Selection not available',
2312
2373
  listInputPlaceholder: 'Enter keyword to filter...'
@@ -2450,23 +2511,23 @@ function calculateMinHeightList(count, height) {
2450
2511
  }
2451
2512
  function useListController(props) {
2452
2513
  const { count, suggestions, automatic, formControl, lineHeight, reference } = props;
2514
+ const refContent = require$$0.useRef(null);
2515
+ const refList = require$$0.useRef(null);
2516
+ const refInput = require$$0.useRef(null);
2453
2517
  const listIsOpen = require$$0.useRef(false);
2454
- const contentRef = require$$0.useRef(null);
2455
- const listRef = require$$0.useRef(null);
2456
- const inputRef = require$$0.useRef(null);
2457
2518
  const [collection, setCollection] = require$$0.useState(new components.ListCollection(suggestions));
2458
2519
  const [state, refreshState] = require$$0.useState({
2459
2520
  focused: false,
2460
2521
  higher: false,
2461
- value: '',
2462
- modalIsVisible: false
2522
+ modalIsVisible: false,
2523
+ value: ''
2463
2524
  });
2525
+ const changeValueInternal = require$$0.useRef(false);
2464
2526
  const position = require$$0.useRef(0);
2465
2527
  const valueProtected = require$$0.useRef();
2466
- const changeValueInternal = require$$0.useRef(false);
2467
2528
  require$$0.useEffect(() => {
2468
2529
  function onCloseSuggestions({ target }) {
2469
- !contentRef?.current?.contains(target) &&
2530
+ !refContent?.current?.contains(target) &&
2470
2531
  refreshState((state) => ({ ...state, modalIsVisible: false }));
2471
2532
  }
2472
2533
  document.addEventListener('click', onCloseSuggestions);
@@ -2516,7 +2577,7 @@ function useListController(props) {
2516
2577
  const _state = state.modalIsVisible
2517
2578
  ? {
2518
2579
  ...state,
2519
- higher: components.locationListCanTop(contentRef.current, listRef.current, minHeightList)
2580
+ higher: components.locationListCanTop(refContent.current, refList.current, minHeightList)
2520
2581
  }
2521
2582
  : state;
2522
2583
  refreshState((state) => ({ ...state, ..._state }));
@@ -2534,34 +2595,154 @@ function useListController(props) {
2534
2595
  const navigationInput = require$$0.useCallback((event) => {
2535
2596
  if (state.modalIsVisible) {
2536
2597
  const _position = components.navigationListFromInput({
2537
- content: contentRef.current,
2598
+ content: refContent.current,
2538
2599
  event: event,
2539
- list: listRef.current
2600
+ list: refList.current
2540
2601
  });
2541
2602
  position.current = _position ?? 0;
2542
2603
  }
2543
2604
  }, [state.modalIsVisible]);
2544
2605
  const navigationElement = require$$0.useCallback((event) => {
2545
2606
  position.current = components.navigationListFromElement({
2546
- content: contentRef.current,
2607
+ content: refContent.current,
2547
2608
  event: event,
2548
- input: inputRef.current,
2549
- list: listRef.current,
2609
+ input: refInput.current,
2610
+ list: refList.current,
2550
2611
  position: position.current
2551
2612
  });
2552
2613
  }, [state.modalIsVisible]);
2553
2614
  return {
2554
2615
  ...state,
2555
- contentRef,
2556
- inputRef,
2557
- listRef,
2558
2616
  navigationElement,
2559
2617
  navigationInput,
2618
+ refContent,
2619
+ refInput,
2620
+ refList,
2560
2621
  setFormValue,
2561
2622
  setState
2562
2623
  };
2563
2624
  }
2564
2625
 
2626
+ function useRelocationOnComponent({ container, element, onDrag }) {
2627
+ const position = require$$0.useRef({ x: 0, y: 0 });
2628
+ const dragOffset = require$$0.useRef({ x: 0, y: 0 });
2629
+ const dragging = require$$0.useRef(false);
2630
+ const getClientX = require$$0.useCallback((positionX) => {
2631
+ let clientX = position.current.x + positionX - dragOffset.current.x;
2632
+ if (clientX < 0) {
2633
+ clientX = 0;
2634
+ }
2635
+ else {
2636
+ const width = clientX + element.current.offsetWidth;
2637
+ if (width > container.current.offsetWidth) {
2638
+ clientX = container.current.offsetWidth - element.current.offsetWidth;
2639
+ }
2640
+ }
2641
+ return clientX;
2642
+ }, []);
2643
+ const getClientY = require$$0.useCallback((positionY) => {
2644
+ let clientY = position.current.y + positionY - dragOffset.current.y;
2645
+ if (clientY < 0) {
2646
+ clientY = 0;
2647
+ }
2648
+ else {
2649
+ const height = clientY + element.current.offsetHeight;
2650
+ if (height > container.current.offsetHeight) {
2651
+ clientY = container.current.offsetHeight - element.current.offsetHeight;
2652
+ }
2653
+ }
2654
+ return clientY;
2655
+ }, []);
2656
+ const start = require$$0.useCallback((positionX, positionY) => {
2657
+ dragOffset.current = {
2658
+ x: positionX,
2659
+ y: positionY
2660
+ };
2661
+ position.current = {
2662
+ x: element.current.offsetLeft,
2663
+ y: element.current.offsetTop
2664
+ };
2665
+ dragging.current = true;
2666
+ }, []);
2667
+ const relocation = require$$0.useCallback((positionX, positionY) => {
2668
+ const clientX = getClientX(positionX);
2669
+ const clientY = getClientY(positionY);
2670
+ element.current.style.top = `${clientY}px`;
2671
+ element.current.style.left = `${clientX}px`;
2672
+ onDrag && onDrag();
2673
+ }, []);
2674
+ require$$0.useEffect(() => {
2675
+ const mousedown = (event) => {
2676
+ start(event.clientX, event.clientY);
2677
+ };
2678
+ const mousemove = (event) => {
2679
+ if (dragging.current) {
2680
+ relocation(event.clientX, event.clientY);
2681
+ event.preventDefault();
2682
+ }
2683
+ };
2684
+ const mouseup = () => {
2685
+ dragging.current = false;
2686
+ };
2687
+ const touchstart = (event) => {
2688
+ if (event.touches[0]) {
2689
+ start(event.touches[0].clientX, event.touches[0].clientY);
2690
+ }
2691
+ };
2692
+ const touchmove = (event) => {
2693
+ if (event.touches[0] && dragging.current) {
2694
+ relocation(event.touches[0].clientX, event.touches[0].clientY);
2695
+ event.preventDefault();
2696
+ }
2697
+ };
2698
+ const touchend = () => {
2699
+ dragging.current = false;
2700
+ };
2701
+ element.current.addEventListener('mousedown', mousedown);
2702
+ element.current.addEventListener('mousemove', mousemove);
2703
+ element.current.addEventListener('mouseup', mouseup);
2704
+ element.current.addEventListener('touchstart', touchstart);
2705
+ element.current.addEventListener('touchmove', touchmove);
2706
+ element.current.addEventListener('touchend', touchend);
2707
+ return () => {
2708
+ element.current?.removeEventListener('mousedown', mousedown);
2709
+ element.current?.removeEventListener('mousemove', mousemove);
2710
+ element.current?.removeEventListener('mouseup', mouseup);
2711
+ element.current?.removeEventListener('touchstart', touchstart);
2712
+ element.current?.removeEventListener('touchmove', touchmove);
2713
+ element.current?.removeEventListener('touchend', touchend);
2714
+ };
2715
+ }, []);
2716
+ }
2717
+
2718
+ function useResize(props) {
2719
+ const { refElement, onResize } = props;
2720
+ const dimension = require$$0.useRef({ height: 0, width: 0 });
2721
+ const observer = require$$0.useCallback((entries) => {
2722
+ const { height, width } = entries[0].contentRect;
2723
+ onResize &&
2724
+ onResize({
2725
+ current: dimension.current,
2726
+ dimension: {
2727
+ height,
2728
+ width
2729
+ }
2730
+ });
2731
+ dimension.current = { height, width };
2732
+ }, []);
2733
+ require$$0.useEffect(() => {
2734
+ dimension.current = {
2735
+ height: refElement.current.offsetHeight,
2736
+ width: refElement.current.offsetWidth
2737
+ };
2738
+ const resizeObserver = new ResizeObserver(observer);
2739
+ resizeObserver.observe(refElement.current);
2740
+ return () => {
2741
+ resizeObserver.disconnect();
2742
+ };
2743
+ }, []);
2744
+ }
2745
+
2565
2746
  const DURATION_ANIMATION$1 = 240;
2566
2747
  const MAX_ELEMENTS = 6;
2567
2748
  function useFieldAutocomplete(props) {
@@ -2595,6 +2776,9 @@ function useFieldAutocomplete(props) {
2595
2776
  require$$0.useEffect(() => {
2596
2777
  refreshCoincidences(props.suggestions, pattern);
2597
2778
  }, [pattern]);
2779
+ require$$0.useEffect(() => {
2780
+ props.disabled && controller.setState({ focused: false });
2781
+ }, [props.disabled]);
2598
2782
  const onFocusInput = require$$0.useCallback(() => {
2599
2783
  controller.setState({ focused: true });
2600
2784
  }, [controller.setState]);
@@ -2615,7 +2799,7 @@ function useFieldAutocomplete(props) {
2615
2799
  const onClickControl = require$$0.useCallback(() => {
2616
2800
  controller.setState({ modalIsVisible: true });
2617
2801
  setTimeout(() => {
2618
- controller.inputRef?.current?.focus();
2802
+ controller.refInput?.current?.focus();
2619
2803
  }, DURATION_ANIMATION$1);
2620
2804
  }, [controller.setState]);
2621
2805
  const onClickAction = require$$0.useCallback(() => {
@@ -2645,7 +2829,7 @@ function useFieldAutocomplete(props) {
2645
2829
  }
2646
2830
  if (props.selectionContinuos) {
2647
2831
  setPattern('');
2648
- controller.inputRef?.current?.focus();
2832
+ controller.refInput?.current?.focus();
2649
2833
  }
2650
2834
  else {
2651
2835
  controller.setState({ modalIsVisible: false });
@@ -2731,18 +2915,18 @@ function RlsFieldAutocompleteTemplate(props) {
2731
2915
  event.key === 'Enter' && onSearch && onSearch(autocomplete.pattern);
2732
2916
  autocomplete.onKeydownInput(event);
2733
2917
  }, [autocomplete.onKeydownInput, onSearch, autocomplete.pattern]);
2734
- return (jsxRuntimeExports.jsxs("div", { id: props.identifier, ref: autocomplete.contentRef, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: autocomplete.value, onClick: autocomplete.onClickControl }), jsxRuntimeExports.jsx("button", { className: "rls-field-list__action", disabled: disabled, onClick: autocomplete.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: autocomplete.value ? 'trash-2' : 'arrow-ios-down' }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: classNameList, children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: autocomplete.listRef, className: "rls-field-list__ul", children: [jsxRuntimeExports.jsxs("div", { className: "rls-field-list__ul__search", children: [jsxRuntimeExports.jsx("input", { ref: autocomplete.inputRef, className: "rls-field-list__ul__control", type: "text", placeholder: labels.listInputPlaceholder, value: autocomplete.pattern, onChange: onChangePattern, onFocus: autocomplete.onFocusInput, onBlur: autocomplete.onBlurInput, onKeyDown: onKeyDownPattern, disabled: disabled || searching }), onSearch && (jsxRuntimeExports.jsx("button", { disabled: disabled || searching, onClick: onClickPattern, children: jsxRuntimeExports.jsx(RlsIcon, { value: "search" }) }))] }), searching && jsxRuntimeExports.jsx(RlsProgressBar, { indeterminate: true }), autocomplete.coincidences.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: autocomplete.onClickElement(element), onKeyDown: autocomplete.onKeydownElement(element), children: render(element) }, index))), !autocomplete.coincidences.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold rls-truncate", children: labels.listEmptyTitle }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: labels.listEmptyDescription })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: autocomplete.onClickBackdrop })] })] }));
2918
+ return (jsxRuntimeExports.jsxs("div", { id: props.identifier, ref: autocomplete.refContent, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: autocomplete.value, onClick: autocomplete.onClickControl }), jsxRuntimeExports.jsx("button", { className: "rls-field-list__action", disabled: disabled, onClick: autocomplete.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: autocomplete.value ? 'trash-2' : 'arrow-ios-down' }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: classNameList, children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: autocomplete.refList, className: "rls-field-list__ul", children: [jsxRuntimeExports.jsxs("div", { className: "rls-field-list__ul__search", children: [jsxRuntimeExports.jsx("input", { ref: autocomplete.refInput, className: "rls-field-list__ul__control", type: "text", placeholder: labels.listInputPlaceholder, value: autocomplete.pattern, onChange: onChangePattern, onFocus: autocomplete.onFocusInput, onBlur: autocomplete.onBlurInput, onKeyDown: onKeyDownPattern, disabled: disabled || searching }), onSearch && (jsxRuntimeExports.jsx("button", { disabled: disabled || searching, onClick: onClickPattern, children: jsxRuntimeExports.jsx(RlsIcon, { value: "search" }) }))] }), searching && jsxRuntimeExports.jsx(RlsProgressBar, { indeterminate: true }), autocomplete.coincidences.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: autocomplete.onClickElement(element), onKeyDown: autocomplete.onKeydownElement(element), children: render(element) }, index))), !autocomplete.coincidences.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold rls-truncate", children: labels.listEmptyTitle }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: labels.listEmptyDescription })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: autocomplete.onClickBackdrop })] })] }));
2735
2919
  }
2736
2920
  function RlsFieldAutocomplete(props) {
2737
2921
  const render = require$$0.useCallback((element) => (jsxRuntimeExports.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: jsxRuntimeExports.jsx("span", { children: element.title }) })), []);
2738
2922
  return jsxRuntimeExports.jsx(RlsFieldAutocompleteTemplate, { ...props, render: render });
2739
2923
  }
2740
2924
 
2741
- function RlsModal({ children, overflow, visible, rlsTheme }) {
2742
- const className = require$$0.useMemo(() => {
2743
- return renderClassStatus('rls-modal', { overflow, visible });
2744
- }, [overflow, visible]);
2745
- return ReactDOM.createPortal(jsxRuntimeExports.jsxs("div", { className: className, "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsx("div", { className: "rls-modal__component", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-modal__backdrop" })] }), document.body);
2925
+ function RlsModal({ children, className, overflow, visible, rlsTheme }) {
2926
+ const classNameModal = require$$0.useMemo(() => {
2927
+ return renderClassStatus('rls-modal', { overflow, visible }, className);
2928
+ }, [className, overflow, visible]);
2929
+ return ReactDOM.createPortal(jsxRuntimeExports.jsxs("div", { className: classNameModal, "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsx("div", { className: "rls-modal__component", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-modal__backdrop" })] }), document.body);
2746
2930
  }
2747
2931
 
2748
2932
  const formatTitle = '{dw}, {mx} {dd} de {aa}';
@@ -2995,6 +3179,9 @@ function useFieldSelect(props) {
2995
3179
  require$$0.useEffect(() => {
2996
3180
  count.current = props.suggestions.length;
2997
3181
  }, [props.suggestions]);
3182
+ require$$0.useEffect(() => {
3183
+ props.disabled && controller.setState({ focused: false });
3184
+ }, [props.disabled]);
2998
3185
  const onFocusInput = require$$0.useCallback(() => {
2999
3186
  controller.setState({ focused: true });
3000
3187
  }, [controller.setState]);
@@ -3029,7 +3216,7 @@ function useFieldSelect(props) {
3029
3216
  else {
3030
3217
  const modalIsVisible = !controller.modalIsVisible;
3031
3218
  controller.setState({ modalIsVisible });
3032
- modalIsVisible && controller.inputRef?.current?.focus();
3219
+ modalIsVisible && controller.refInput?.current?.focus();
3033
3220
  }
3034
3221
  }, [
3035
3222
  controller.modalIsVisible,
@@ -3043,7 +3230,7 @@ function useFieldSelect(props) {
3043
3230
  controller.setState({ modalIsVisible: false });
3044
3231
  }, [controller.setState]);
3045
3232
  const onChange = require$$0.useCallback((element) => {
3046
- controller.inputRef?.current?.focus();
3233
+ !props.disabled && controller.refInput?.current?.focus();
3047
3234
  if (props.onSelect) {
3048
3235
  controller.setState({ modalIsVisible: false });
3049
3236
  element.value && props.onSelect(element.value);
@@ -3057,7 +3244,8 @@ function useFieldSelect(props) {
3057
3244
  controller.setState,
3058
3245
  controller.setFormValue,
3059
3246
  props.onSelect,
3060
- props.onValue
3247
+ props.onValue,
3248
+ props.disabled
3061
3249
  ]);
3062
3250
  const onClickElement = require$$0.useCallback((element) => {
3063
3251
  return () => {
@@ -3104,9 +3292,9 @@ function RlsFieldSelectTemplate(props) {
3104
3292
  }, [formControl?.disabled, props.disabled]);
3105
3293
  const className = require$$0.useMemo(() => {
3106
3294
  return renderClassStatus('rls-field-box', {
3107
- disabled: disabled,
3295
+ focused: select.focused && !disabled,
3108
3296
  error: formControl?.wrong,
3109
- focused: select.focused && !disabled
3297
+ disabled: disabled
3110
3298
  }, 'rls-field-list rls-field-select');
3111
3299
  }, [formControl?.wrong, select.focused, disabled]);
3112
3300
  const classNameList = require$$0.useMemo(() => {
@@ -3115,7 +3303,7 @@ function RlsFieldSelectTemplate(props) {
3115
3303
  visible: select.modalIsVisible
3116
3304
  });
3117
3305
  }, [select.modalIsVisible, select.higher]);
3118
- return (jsxRuntimeExports.jsxs("div", { id: props.identifier, ref: select.contentRef, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { ref: select.inputRef, className: "rls-field-list__control", readOnly: true, placeholder: placeholder, value: select.value, onFocus: select.onFocusInput, onBlur: select.onBlurInput, onClick: select.onClickInput, onKeyDown: select.onKeydownInput, disabled: disabled }), jsxRuntimeExports.jsx("button", { className: 'rls-field-list__action', disabled: disabled, onClick: select.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: !unremovable && !!select.value ? 'close' : 'arrow-ios-down' }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: classNameList, children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: select.listRef, className: "rls-field-list__ul", children: [suggestions.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: select.onClickElement(element), onKeyDown: select.onKeydownElement(element), children: render(element) }, index))), !suggestions.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold rls-truncate", children: labels.listEmptyTitle }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: labels.listEmptyDescription })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: select.onClickBackdrop })] })] }));
3306
+ return (jsxRuntimeExports.jsxs("div", { id: props.identifier, ref: select.refContent, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { ref: select.refInput, className: "rls-field-list__control", readOnly: true, placeholder: placeholder, value: select.value, onFocus: select.onFocusInput, onBlur: select.onBlurInput, onClick: select.onClickInput, onKeyDown: select.onKeydownInput, disabled: disabled }), jsxRuntimeExports.jsx("button", { className: 'rls-field-list__action', disabled: disabled, onClick: select.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: !unremovable && !!select.value ? 'close' : 'arrow-ios-down' }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: classNameList, children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: select.refList, className: "rls-field-list__ul", children: [suggestions.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: select.onClickElement(element), onKeyDown: select.onKeydownElement(element), children: render(element) }, index))), !suggestions.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold rls-truncate", children: labels.listEmptyTitle }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: labels.listEmptyDescription })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: select.onClickBackdrop })] })] }));
3119
3307
  }
3120
3308
  function RlsFieldSelect(props) {
3121
3309
  const render = require$$0.useCallback((element) => (jsxRuntimeExports.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: jsxRuntimeExports.jsx("span", { children: element.title }) })), []);
@@ -3129,6 +3317,253 @@ function RlsFormNavigation({ children, visible, rlsTheme }) {
3129
3317
  return (jsxRuntimeExports.jsx("div", { className: className, "rls-theme": rlsTheme, children: jsxRuntimeExports.jsx("div", { className: "rls-form-navigation__body", children: children }) }));
3130
3318
  }
3131
3319
 
3320
+ function getRatioFactor(ratio) {
3321
+ switch (ratio) {
3322
+ case '16:9':
3323
+ return 9 / 16;
3324
+ case '8:5':
3325
+ return 5 / 8;
3326
+ case '4:3':
3327
+ return 3 / 4;
3328
+ case '3:4':
3329
+ return 4 / 3;
3330
+ case '3:2':
3331
+ return 2 / 3;
3332
+ default:
3333
+ return 1;
3334
+ }
3335
+ }
3336
+ function simpleThreeRule(value1, value2, proportion) {
3337
+ return (value2 * proportion) / value1;
3338
+ }
3339
+ function RlsImageEditor(props) {
3340
+ const [selection, setSelection] = require$$0.useState(props.rateSelection ?? 60);
3341
+ const [labels, setLabels] = require$$0.useState({
3342
+ actionRestore: reactI18n('editorImageActionRestore'),
3343
+ actionSelect: reactI18n('editorImageActionSelect')
3344
+ });
3345
+ const refBody = require$$0.useRef(null);
3346
+ const refImage = require$$0.useRef(null);
3347
+ const refSelection = require$$0.useRef(null);
3348
+ const refOverlayTop = require$$0.useRef(null);
3349
+ const refOverlayBottom = require$$0.useRef(null);
3350
+ const refOverlayLeft = require$$0.useRef(null);
3351
+ const refOverlayRight = require$$0.useRef(null);
3352
+ const refCanvas = require$$0.useRef(null);
3353
+ const refPicture = require$$0.useRef(null);
3354
+ const image = require$$0.useRef(new Image());
3355
+ const originalImage = require$$0.useRef();
3356
+ const getCropProperties = require$$0.useCallback(() => {
3357
+ return {
3358
+ height: simpleThreeRule(refImage.current.offsetHeight, image.current.height, refSelection.current.offsetHeight),
3359
+ left: simpleThreeRule(refImage.current.offsetWidth, image.current.width, refSelection.current.offsetLeft),
3360
+ top: simpleThreeRule(refImage.current.offsetHeight, image.current.height, refSelection.current.offsetTop),
3361
+ width: simpleThreeRule(refImage.current.offsetWidth, image.current.width, refSelection.current.offsetWidth)
3362
+ };
3363
+ }, []);
3364
+ const refreshOverlaysStyle = require$$0.useCallback(() => {
3365
+ const width = refSelection.current.offsetWidth;
3366
+ const height = refSelection.current.offsetHeight;
3367
+ const top = refSelection.current.offsetTop;
3368
+ const left = refSelection.current.offsetLeft;
3369
+ refOverlayTop.current.style.width = `${width}px`;
3370
+ refOverlayTop.current.style.bottom = `calc(100% - ${top}px)`;
3371
+ refOverlayTop.current.style.left = `${left}px`;
3372
+ refOverlayRight.current.style.left = `calc(${width + left}px)`;
3373
+ refOverlayRight.current.style.width = `calc(100% - ${width + left}px)`;
3374
+ refOverlayBottom.current.style.width = `${width}px`;
3375
+ refOverlayBottom.current.style.top = `calc(${height + top}px)`;
3376
+ refOverlayBottom.current.style.left = `${left}px`;
3377
+ refOverlayLeft.current.style.right = `calc(100% - ${left}px)`;
3378
+ refOverlayLeft.current.style.width = `calc(${left}px)`;
3379
+ }, []);
3380
+ const refreshSelectionFromWidth = require$$0.useCallback((rateSelection) => {
3381
+ const _ratio = rateSelection * getRatioFactor(props.ratio || '1:1');
3382
+ let width = (refImage.current.offsetWidth * rateSelection) / 100;
3383
+ let height = (refImage.current.offsetWidth * _ratio) / 100;
3384
+ if (height > refImage.current.offsetHeight) {
3385
+ height = refImage.current.offsetHeight;
3386
+ width =
3387
+ (height * refImage.current.offsetHeight) /
3388
+ refImage.current.offsetHeight;
3389
+ }
3390
+ return { height, width };
3391
+ }, [props.ratio]);
3392
+ const refreshSelectionFromHeight = require$$0.useCallback((rateSelection) => {
3393
+ const _ratio = rateSelection * getRatioFactor(props.ratio || '1:1');
3394
+ let height = (refImage.current.offsetHeight * rateSelection) / 100;
3395
+ let width = (refImage.current.offsetHeight * _ratio) / 100;
3396
+ if (width > refImage.current.offsetWidth) {
3397
+ width = refImage.current.offsetWidth;
3398
+ height =
3399
+ (width * refImage.current.offsetWidth) / refImage.current.offsetWidth;
3400
+ }
3401
+ return { height, width };
3402
+ }, [props.ratio]);
3403
+ const refreshSelectionStyle = require$$0.useCallback((rateSelection) => {
3404
+ if (image.current.width > 0 && image.current.height > 0) {
3405
+ const { height, width } = image.current.width >= image.current.height
3406
+ ? refreshSelectionFromHeight(rateSelection)
3407
+ : refreshSelectionFromWidth(rateSelection);
3408
+ refSelection.current.style.width = `${width}px`;
3409
+ refSelection.current.style.height = `${height}px`;
3410
+ if (refSelection.current.offsetLeft + width >
3411
+ refImage.current.offsetWidth) {
3412
+ const selectionLeft = refImage.current.offsetWidth - width;
3413
+ refSelection.current.style.left = `${selectionLeft}px`;
3414
+ }
3415
+ if (refSelection.current.offsetTop + height >
3416
+ refImage.current.offsetHeight) {
3417
+ const selectionTop = refImage.current.offsetHeight - height;
3418
+ refSelection.current.style.top = `${selectionTop}px`;
3419
+ }
3420
+ refreshOverlaysStyle();
3421
+ }
3422
+ }, [props.ratio]);
3423
+ const setImageStyle = require$$0.useCallback((width, height) => {
3424
+ refImage.current.style.width = width;
3425
+ refImage.current.style.height = height;
3426
+ refCanvas.current.style.width = width;
3427
+ refCanvas.current.style.height = height;
3428
+ }, []);
3429
+ const refreshImageStyle = require$$0.useCallback(() => {
3430
+ if (image.current.width <= 0 || image.current.height <= 0) {
3431
+ return setImageStyle('0%', '0%');
3432
+ }
3433
+ const height = (refBody.current.offsetWidth * image.current.height) /
3434
+ image.current.width;
3435
+ if (height <= refBody.current.offsetHeight) {
3436
+ return setImageStyle('100%', `${height}px`);
3437
+ }
3438
+ const width = (refBody.current.offsetHeight * image.current.width) /
3439
+ image.current.height;
3440
+ return setImageStyle(`${width}px`, '100%');
3441
+ }, []);
3442
+ require$$0.useEffect(() => {
3443
+ image.current.onload = () => {
3444
+ const context = refCanvas.current.getContext('2d', {
3445
+ willReadFrequently: true
3446
+ });
3447
+ refCanvas.current.width = image.current.width;
3448
+ refCanvas.current.height = image.current.height;
3449
+ context?.drawImage(image.current, 0, 0, image.current.width, image.current.height);
3450
+ originalImage.current = context?.getImageData(0, 0, refCanvas.current.width, refCanvas.current.height);
3451
+ refreshImageStyle();
3452
+ refreshSelectionStyle(selection);
3453
+ };
3454
+ const unsubscription = i18n.i18nSubscribe(() => {
3455
+ setLabels({
3456
+ actionRestore: reactI18n('editorImageActionRestore'),
3457
+ actionSelect: reactI18n('editorImageActionSelect')
3458
+ });
3459
+ });
3460
+ window.addEventListener('resize', refreshImageStyle);
3461
+ return () => {
3462
+ window.removeEventListener('resize', refreshImageStyle);
3463
+ unsubscription();
3464
+ };
3465
+ }, []);
3466
+ require$$0.useEffect(() => {
3467
+ image.current.src = props.src || '';
3468
+ }, [props.src]);
3469
+ require$$0.useEffect(() => {
3470
+ refreshSelectionStyle(selection);
3471
+ }, [selection]);
3472
+ const onResizeElement = require$$0.useCallback(() => {
3473
+ refreshSelectionStyle(selection);
3474
+ }, [selection]);
3475
+ useRelocationOnComponent({
3476
+ container: refImage,
3477
+ element: refSelection,
3478
+ onDrag: refreshOverlaysStyle
3479
+ });
3480
+ useResize({ refElement: refImage, onResize: onResizeElement });
3481
+ const onCropImage = require$$0.useCallback(() => {
3482
+ const cropProps = getCropProperties();
3483
+ const width = cropProps.width;
3484
+ const height = width * getRatioFactor(props.ratio || '1:1');
3485
+ refPicture.current.width = width;
3486
+ refPicture.current.height = height;
3487
+ const context = refPicture.current.getContext('2d');
3488
+ context?.drawImage(refCanvas.current, cropProps.left, cropProps.top, cropProps.width, cropProps.height, 0, 0, width, height);
3489
+ refPicture.current.toBlob((blob) => {
3490
+ if (blob) {
3491
+ const reader = new FileReader();
3492
+ reader.readAsDataURL(blob);
3493
+ reader.onloadend = function () {
3494
+ const value = {
3495
+ base64: reader.result,
3496
+ blob
3497
+ };
3498
+ props.onValue && props.onValue(value);
3499
+ props.formControl?.setValue(value);
3500
+ };
3501
+ }
3502
+ }, props.mimeType || 'image/jpeg', 1);
3503
+ }, [props.ratio, props.mimeType, props.onValue, props.formControl]);
3504
+ const onRestore = require$$0.useCallback(() => {
3505
+ const context = refCanvas.current.getContext('2d');
3506
+ if (originalImage.current) {
3507
+ context?.putImageData(originalImage.current, 0, 0);
3508
+ }
3509
+ }, []);
3510
+ return (jsxRuntimeExports.jsxs("div", { className: "rls-image-editor", children: [jsxRuntimeExports.jsx("div", { ref: refBody, className: "rls-image-editor__body", children: jsxRuntimeExports.jsxs("div", { ref: refImage, className: "rls-image-editor__body__image", children: [jsxRuntimeExports.jsx("div", { ref: refSelection, className: "rls-image-editor__body__selection" }), jsxRuntimeExports.jsx("div", { ref: refOverlayTop, className: "rls-image-editor__body__overlay--top" }), jsxRuntimeExports.jsx("div", { ref: refOverlayRight, className: "rls-image-editor__body__overlay--right" }), jsxRuntimeExports.jsx("div", { ref: refOverlayBottom, className: "rls-image-editor__body__overlay--bottom" }), jsxRuntimeExports.jsx("div", { ref: refOverlayLeft, className: "rls-image-editor__body__overlay--left" }), jsxRuntimeExports.jsx("canvas", { ref: refCanvas })] }) }), jsxRuntimeExports.jsxs("div", { className: "rls-image-editor__footer", children: [jsxRuntimeExports.jsx("div", { className: "rls-image-editor__sliders", children: jsxRuntimeExports.jsx(RlsSlider, { prefixIcon: "external-link", value: selection, minValue: 50, maxValue: 100, onValue: setSelection, disabled: props.disabled }) }), jsxRuntimeExports.jsxs("div", { className: "rls-image-editor__actions", children: [props.children, jsxRuntimeExports.jsx(RlsButton, { type: "classic", prefixIcon: "refresh", onClick: onRestore, disabled: props.disabled, children: labels.actionRestore }), jsxRuntimeExports.jsx(RlsButton, { type: "raised", prefixIcon: "crop", onClick: onCropImage, disabled: props.disabled, children: labels.actionSelect })] })] }), jsxRuntimeExports.jsx("canvas", { ref: refPicture })] }));
3511
+ }
3512
+
3513
+ const mimeTypeSupports = [
3514
+ 'image/png',
3515
+ 'image/jpg',
3516
+ 'image/jpeg',
3517
+ 'image/bmp',
3518
+ 'image/webp',
3519
+ 'image/gif',
3520
+ 'image/svg+xml'
3521
+ ];
3522
+ function RlsImageChooser(props) {
3523
+ const refInput = require$$0.useRef(null);
3524
+ const [labels, setLabels] = require$$0.useState({
3525
+ actionCancel: reactI18n('chooserImageActionCancel')
3526
+ });
3527
+ const [src, setSrc] = require$$0.useState();
3528
+ const [srcEditor, setSrcEditor] = require$$0.useState();
3529
+ const onSelect = require$$0.useCallback(() => {
3530
+ refInput.current.click();
3531
+ }, []);
3532
+ const processImage = require$$0.useCallback((file) => {
3533
+ const reader = new FileReader();
3534
+ reader.onload = function () {
3535
+ setSrcEditor(reader.result);
3536
+ refInput.current.value = '';
3537
+ };
3538
+ reader.readAsDataURL(file);
3539
+ }, []);
3540
+ require$$0.useEffect(() => {
3541
+ refInput.current.onchange = () => {
3542
+ if (refInput.current.files &&
3543
+ mimeTypeSupports.includes(refInput.current.files[0].type)) {
3544
+ processImage(refInput.current.files[0]);
3545
+ }
3546
+ };
3547
+ return i18n.i18nSubscribe(() => {
3548
+ setLabels({
3549
+ actionCancel: reactI18n('chooserImageActionCancel')
3550
+ });
3551
+ });
3552
+ }, []);
3553
+ require$$0.useEffect(() => {
3554
+ props.src && setSrc(props.src);
3555
+ }, [props.src]);
3556
+ const onEditorValue = require$$0.useCallback((image) => {
3557
+ setSrc(image.base64);
3558
+ setSrcEditor(undefined);
3559
+ props.onValue && props.onValue(image);
3560
+ }, [props.onValue]);
3561
+ const onCancel = require$$0.useCallback(() => {
3562
+ setSrcEditor(undefined);
3563
+ }, []);
3564
+ return (jsxRuntimeExports.jsxs("div", { className: "rls-image-chooser", children: [jsxRuntimeExports.jsx("div", { className: "rls-image-chooser__avatar", onClick: onSelect, children: src && jsxRuntimeExports.jsx("img", { src: src }) }), srcEditor && (jsxRuntimeExports.jsx(RlsModal, { className: "rls-image-chooser__modal", visible: true, children: jsxRuntimeExports.jsx(RlsImageEditor, { src: srcEditor, formControl: props.formControl, onValue: onEditorValue, children: jsxRuntimeExports.jsx(RlsButton, { type: "flat", rlsTheme: "danger", onClick: onCancel, disabled: props.disabled, children: labels.actionCancel }) }) })), jsxRuntimeExports.jsx("input", { ref: refInput, type: "file", disabled: props.disabled })] }));
3565
+ }
3566
+
3132
3567
  const DURATION_ANIMATION = 240;
3133
3568
  const DURATION_CHAR = 75;
3134
3569
  const DURATION_MAX = 9000;
@@ -3254,6 +3689,8 @@ exports.RlsFieldSelectTemplate = RlsFieldSelectTemplate;
3254
3689
  exports.RlsFieldText = RlsFieldText;
3255
3690
  exports.RlsFormNavigation = RlsFormNavigation;
3256
3691
  exports.RlsIcon = RlsIcon;
3692
+ exports.RlsImageChooser = RlsImageChooser;
3693
+ exports.RlsImageEditor = RlsImageEditor;
3257
3694
  exports.RlsInput = RlsInput;
3258
3695
  exports.RlsInputMoney = RlsInputMoney;
3259
3696
  exports.RlsInputNumber = RlsInputNumber;
@@ -3281,6 +3718,7 @@ exports.RlsProgressCircular = RlsProgressCircular;
3281
3718
  exports.RlsRadioButton = RlsRadioButton;
3282
3719
  exports.RlsSkeleton = RlsSkeleton;
3283
3720
  exports.RlsSkeletonText = RlsSkeletonText;
3721
+ exports.RlsSlider = RlsSlider;
3284
3722
  exports.RlsSnackbar = RlsSnackbar;
3285
3723
  exports.RlsSwitch = RlsSwitch;
3286
3724
  exports.RlsSwitchControl = RlsSwitchControl;
@@ -3294,5 +3732,7 @@ exports.useDatatable = useDatatable;
3294
3732
  exports.useFieldAutocomplete = useFieldAutocomplete;
3295
3733
  exports.useFieldSelect = useFieldSelect;
3296
3734
  exports.useListController = useListController;
3735
+ exports.useRelocationOnComponent = useRelocationOnComponent;
3736
+ exports.useResize = useResize;
3297
3737
  exports.useSnackbar = useSnackbar;
3298
3738
  //# sourceMappingURL=index.js.map