@rolster/react-components 1.5.6 → 18.9.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 (146) hide show
  1. package/dist/cjs/assets/{lib.cjs-1621a5fc.css → index-Fy0sGm5F.css} +164 -106
  2. package/dist/cjs/index.js +2036 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/es/assets/{lib-1621a5fc.css → index-Fy0sGm5F.css} +164 -106
  5. package/dist/es/index.js +1970 -0
  6. package/dist/es/index.js.map +1 -0
  7. package/dist/esm/components/atoms/Amount/Amount.css +3 -2
  8. package/dist/esm/components/atoms/Amount/Amount.d.ts +3 -1
  9. package/dist/esm/components/atoms/Amount/Amount.js +2 -2
  10. package/dist/esm/components/atoms/Amount/Amount.js.map +1 -1
  11. package/dist/esm/components/atoms/Button/Button.css +5 -1
  12. package/dist/esm/components/atoms/Button/Button.js +1 -1
  13. package/dist/esm/components/atoms/Button/Button.js.map +1 -1
  14. package/dist/esm/components/atoms/CheckBox/CheckBox.d.ts +8 -1
  15. package/dist/esm/components/atoms/CheckBox/CheckBox.js +7 -2
  16. package/dist/esm/components/atoms/CheckBox/CheckBox.js.map +1 -1
  17. package/dist/esm/components/atoms/Icon/Icon.css +1 -1
  18. package/dist/esm/components/atoms/Input/Input.css +1 -1
  19. package/dist/esm/components/atoms/Input/Input.d.ts +3 -3
  20. package/dist/esm/components/atoms/Input/Input.js +12 -10
  21. package/dist/esm/components/atoms/Input/Input.js.map +1 -1
  22. package/dist/esm/components/atoms/InputMoney/InputMoney.d.ts +3 -3
  23. package/dist/esm/components/atoms/InputMoney/InputMoney.js +5 -10
  24. package/dist/esm/components/atoms/InputMoney/InputMoney.js.map +1 -1
  25. package/dist/esm/components/atoms/InputNumber/InputNumber.d.ts +3 -3
  26. package/dist/esm/components/atoms/InputNumber/InputNumber.js +5 -10
  27. package/dist/esm/components/atoms/InputNumber/InputNumber.js.map +1 -1
  28. package/dist/esm/components/atoms/InputPassword/InputPassword.d.ts +1 -1
  29. package/dist/esm/components/atoms/InputPassword/InputPassword.js +9 -7
  30. package/dist/esm/components/atoms/InputPassword/InputPassword.js.map +1 -1
  31. package/dist/esm/components/atoms/InputText/InputText.d.ts +3 -3
  32. package/dist/esm/components/atoms/InputText/InputText.js +5 -10
  33. package/dist/esm/components/atoms/InputText/InputText.js.map +1 -1
  34. package/dist/esm/components/atoms/Label/Label.css +3 -0
  35. package/dist/esm/components/atoms/Label/Label.d.ts +2 -0
  36. package/dist/esm/components/atoms/Label/Label.js +5 -0
  37. package/dist/esm/components/atoms/Label/Label.js.map +1 -0
  38. package/dist/esm/components/atoms/MessageIcon/MessageIcon.css +12 -0
  39. package/dist/esm/components/atoms/MessageIcon/MessageIcon.d.ts +7 -0
  40. package/dist/esm/components/atoms/MessageIcon/MessageIcon.js +7 -0
  41. package/dist/esm/components/atoms/MessageIcon/MessageIcon.js.map +1 -0
  42. package/dist/esm/components/atoms/RadioButton/RadioButton.d.ts +2 -1
  43. package/dist/esm/components/atoms/RadioButton/RadioButton.js +2 -2
  44. package/dist/esm/components/atoms/RadioButton/RadioButton.js.map +1 -1
  45. package/dist/esm/components/atoms/SearchInput/SearchInput.css +1 -0
  46. package/dist/esm/components/atoms/SearchInput/SearchInput.d.ts +2 -2
  47. package/dist/esm/components/atoms/Switch/Switch.css +40 -21
  48. package/dist/esm/components/atoms/Switch/Switch.d.ts +7 -1
  49. package/dist/esm/components/atoms/Switch/Switch.js +8 -3
  50. package/dist/esm/components/atoms/Switch/Switch.js.map +1 -1
  51. package/dist/esm/components/atoms/index.d.ts +2 -0
  52. package/dist/esm/components/atoms/index.js +2 -0
  53. package/dist/esm/components/atoms/index.js.map +1 -1
  54. package/dist/esm/components/molecules/ButtonToggle/ButtonToggle.js.map +1 -1
  55. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.css +1 -5
  56. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.d.ts +1 -1
  57. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.js.map +1 -1
  58. package/dist/esm/components/molecules/DayPicker/DayPicker.d.ts +1 -1
  59. package/dist/esm/components/molecules/DayPicker/DayPicker.js +1 -1
  60. package/dist/esm/components/molecules/DayPicker/DayPicker.js.map +1 -1
  61. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.d.ts +1 -1
  62. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js +1 -1
  63. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js.map +1 -1
  64. package/dist/esm/components/molecules/MoneyField/MoneyField.d.ts +4 -2
  65. package/dist/esm/components/molecules/MoneyField/MoneyField.js +7 -8
  66. package/dist/esm/components/molecules/MoneyField/MoneyField.js.map +1 -1
  67. package/dist/esm/components/molecules/MonthPicker/MonthPicker.d.ts +1 -1
  68. package/dist/esm/components/molecules/MonthPicker/MonthPicker.js.map +1 -1
  69. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.d.ts +1 -1
  70. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js +1 -1
  71. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js.map +1 -1
  72. package/dist/esm/components/molecules/NumberField/NumberField.d.ts +4 -2
  73. package/dist/esm/components/molecules/NumberField/NumberField.js +7 -8
  74. package/dist/esm/components/molecules/NumberField/NumberField.js.map +1 -1
  75. package/dist/esm/components/molecules/Pagination/Pagination.js.map +1 -1
  76. package/dist/esm/components/molecules/PasswordField/PasswordField.d.ts +1 -1
  77. package/dist/esm/components/molecules/PasswordField/PasswordField.js +6 -7
  78. package/dist/esm/components/molecules/PasswordField/PasswordField.js.map +1 -1
  79. package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.d.ts +1 -1
  80. package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.js.map +1 -1
  81. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.css +2 -5
  82. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.d.ts +1 -1
  83. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.js.map +1 -1
  84. package/dist/esm/components/molecules/TextField/TextField.d.ts +4 -2
  85. package/dist/esm/components/molecules/TextField/TextField.js +7 -8
  86. package/dist/esm/components/molecules/TextField/TextField.js.map +1 -1
  87. package/dist/esm/components/molecules/YearPicker/YearPicker.d.ts +2 -2
  88. package/dist/esm/components/molecules/YearPicker/YearPicker.js +2 -2
  89. package/dist/esm/components/molecules/YearPicker/YearPicker.js.map +1 -1
  90. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.css +21 -19
  91. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.d.ts +5 -3
  92. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js +32 -29
  93. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js.map +1 -1
  94. package/dist/esm/components/organisms/Card/Card.css +1 -1
  95. package/dist/esm/components/organisms/Confirmation/Confirmation.css +58 -34
  96. package/dist/esm/components/organisms/Confirmation/Confirmation.js.map +1 -1
  97. package/dist/esm/components/organisms/Datatable/Datatable.d.ts +2 -1
  98. package/dist/esm/components/organisms/Datatable/Datatable.js +3 -2
  99. package/dist/esm/components/organisms/Datatable/Datatable.js.map +1 -1
  100. package/dist/esm/components/organisms/DateField/DateField.css +3 -0
  101. package/dist/esm/components/organisms/DateField/DateField.d.ts +1 -1
  102. package/dist/esm/components/organisms/DateField/DateField.js +10 -3
  103. package/dist/esm/components/organisms/DateField/DateField.js.map +1 -1
  104. package/dist/esm/components/organisms/DatePicker/DatePicker.d.ts +1 -1
  105. package/dist/esm/components/organisms/DatePicker/DatePicker.js +2 -2
  106. package/dist/esm/components/organisms/DatePicker/DatePicker.js.map +1 -1
  107. package/dist/esm/components/organisms/DateRangeField/DateRangeField.d.ts +1 -1
  108. package/dist/esm/components/organisms/DateRangeField/DateRangeField.js.map +1 -1
  109. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.d.ts +1 -1
  110. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js +1 -1
  111. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js.map +1 -1
  112. package/dist/esm/components/organisms/SelectField/SelectField.d.ts +4 -3
  113. package/dist/esm/components/organisms/SelectField/SelectField.js +16 -9
  114. package/dist/esm/components/organisms/SelectField/SelectField.js.map +1 -1
  115. package/dist/esm/components/organisms/Snackbar/Snackbar.css +14 -16
  116. package/dist/esm/components/organisms/Snackbar/Snackbar.d.ts +1 -1
  117. package/dist/esm/components/organisms/Snackbar/Snackbar.js +1 -1
  118. package/dist/esm/components/organisms/Snackbar/Snackbar.js.map +1 -1
  119. package/dist/esm/hooks/index.d.ts +0 -2
  120. package/dist/esm/hooks/index.js +0 -2
  121. package/dist/esm/hooks/index.js.map +1 -1
  122. package/dist/esm/hooks/list-control.hook.d.ts +13 -7
  123. package/dist/esm/hooks/list-control.hook.js +16 -9
  124. package/dist/esm/hooks/list-control.hook.js.map +1 -1
  125. package/dist/esm/models.d.ts +4 -4
  126. package/dist/esm/models.js +6 -7
  127. package/dist/esm/models.js.map +1 -1
  128. package/dist/esm/utils/css.d.ts +1 -1
  129. package/dist/esm/utils/css.js +4 -1
  130. package/dist/esm/utils/css.js.map +1 -1
  131. package/dist/esm/utils/date-range-picker.js.map +1 -1
  132. package/dist/esm/utils/day-picker.js.map +1 -1
  133. package/dist/esm/utils/month-picker.js +1 -1
  134. package/dist/esm/utils/month-picker.js.map +1 -1
  135. package/dist/esm/utils/year-picker.js.map +1 -1
  136. package/package.json +25 -11
  137. package/dist/cjs/lib.cjs.js +0 -3366
  138. package/dist/cjs/lib.cjs.js.map +0 -1
  139. package/dist/es/lib.js +0 -3300
  140. package/dist/es/lib.js.map +0 -1
  141. package/dist/esm/hooks/form-control.hook.d.ts +0 -15
  142. package/dist/esm/hooks/form-control.hook.js +0 -77
  143. package/dist/esm/hooks/form-control.hook.js.map +0 -1
  144. package/dist/esm/hooks/form-group.hook.d.ts +0 -2
  145. package/dist/esm/hooks/form-group.hook.js +0 -22
  146. package/dist/esm/hooks/form-group.hook.js.map +0 -1
@@ -0,0 +1,2036 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var helpersAdvanced = require('@rolster/helpers-advanced');
6
+ var helpersDate = require('@rolster/helpers-date');
7
+ var helpersString = require('@rolster/helpers-string');
8
+ var ReactDOM = require('react-dom');
9
+ require('uuid');
10
+ var rxjs = require('rxjs');
11
+
12
+ const baseCls = 'rls-tabular-text';
13
+ const pointers = ['.', ','];
14
+ function charClass(char) {
15
+ return pointers.includes(char) ? `${baseCls}__pointer` : `${baseCls}__char`;
16
+ }
17
+ function RlsTabularText({ value }) {
18
+ return (jsxRuntime.jsx("div", { className: "rls-tabular-text", children: value?.split('').map((char, index) => (jsxRuntime.jsx("span", { className: charClass(char), children: char }, index))) }));
19
+ }
20
+
21
+ function RlsAmount({ value, decimals, rlsTheme, symbol }) {
22
+ return (jsxRuntime.jsxs("div", { className: "rls-amount", "rls-theme": rlsTheme, children: [symbol && jsxRuntime.jsx("span", { children: symbol }), jsxRuntime.jsx(RlsTabularText, { value: helpersAdvanced.currencyFormat({ value, decimals }) })] }));
23
+ }
24
+
25
+ function renderClassStatus(base, status = {}, aditionals) {
26
+ const resultClass = [base];
27
+ Object.entries(status).forEach(([name, value]) => {
28
+ if (value) {
29
+ typeof value === 'string'
30
+ ? resultClass.push(`${base}--${value}`)
31
+ : resultClass.push(`${base}--${name}`);
32
+ }
33
+ });
34
+ if (aditionals) {
35
+ resultClass.push(aditionals);
36
+ }
37
+ return resultClass.join(' ');
38
+ }
39
+
40
+ function RlsAvatar({ children, rounded, skeleton, rlsTheme }) {
41
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-avatar', { rounded, skeleton }), "rls-theme": rlsTheme, children: children }));
42
+ }
43
+
44
+ function RlsBreadcrumb({ labels }) {
45
+ return (jsxRuntime.jsx("div", { className: "rls-breadcrumb", children: labels.map(({ label, onClick }, index) => (jsxRuntime.jsx("label", { className: "rls-breadcrumb__label", onClick: onClick, children: jsxRuntime.jsx("a", { className: "rls-breadcrumb__label__a", children: label }) }, index))) }));
46
+ }
47
+
48
+ function RlsIcon({ value, skeleton }) {
49
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-icon', { skeleton }), children: jsxRuntime.jsx("i", { className: `rls-icon-${value}` }) }));
50
+ }
51
+
52
+ function RlsButton({ type, children, disabled, prefixIcon, suffixIcon, rlsTheme, onClick }) {
53
+ return (jsxRuntime.jsx("button", { className: "rls-button", onClick: onClick, "rls-theme": rlsTheme, disabled: disabled, children: jsxRuntime.jsxs("div", { className: renderClassStatus('rls-button__content', { type }), children: [prefixIcon && jsxRuntime.jsx(RlsIcon, { value: prefixIcon }), children && (jsxRuntime.jsx("div", { className: "rls-button__label", children: children })), suffixIcon && jsxRuntime.jsx(RlsIcon, { value: suffixIcon })] }) }));
54
+ }
55
+
56
+ function RlsButtonAction({ icon, disabled, tooltip, onClick }) {
57
+ return (jsxRuntime.jsxs("button", { className: "rls-button-action", onClick: onClick, disabled: disabled, children: [jsxRuntime.jsx("div", { className: "rls-button-action__content", children: jsxRuntime.jsx(RlsIcon, { value: icon }) }), tooltip && (jsxRuntime.jsx("div", { className: "rls-button-action__tooltip caption-semibold", children: jsxRuntime.jsx("span", { children: tooltip }) }))] }));
58
+ }
59
+
60
+ function RlsCheckBox({ checked, disabled, onClick, rlsTheme }) {
61
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-checkbox', { checked, disabled }), onClick: onClick, "rls-theme": rlsTheme, children: jsxRuntime.jsx("div", { className: "rls-checkbox__component" }) }));
62
+ }
63
+ function RlsCheckBoxControl({ formControl, disabled, rlsTheme }) {
64
+ return (jsxRuntime.jsx(RlsCheckBox, { checked: formControl.state || false, disabled: disabled, onClick: () => {
65
+ formControl.setState(!formControl.state);
66
+ }, rlsTheme: rlsTheme }));
67
+ }
68
+
69
+ function RlsInput({ children, disabled, formControl, onValue, placeholder, type, value }) {
70
+ const [focused, setFocused] = react.useState(false);
71
+ function onChange(event) {
72
+ switch (type) {
73
+ case 'number':
74
+ setState(+event.target.value);
75
+ break;
76
+ default:
77
+ setState(event.target.value);
78
+ break;
79
+ }
80
+ }
81
+ function setState(value) {
82
+ formControl?.setState(value);
83
+ if (onValue) {
84
+ onValue(value);
85
+ }
86
+ }
87
+ function onFocus() {
88
+ formControl?.focus();
89
+ setFocused(true);
90
+ }
91
+ function onBlur() {
92
+ if (formControl && !formControl.touched) {
93
+ formControl.touch();
94
+ }
95
+ formControl?.blur();
96
+ setFocused(false);
97
+ }
98
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-input', {
99
+ focused: formControl?.focused || focused,
100
+ disabled: formControl?.disabled || disabled
101
+ }), children: [jsxRuntime.jsx("input", { ref: formControl?.elementRef, className: "rls-input__component", autoComplete: "off", type: type || 'text', placeholder: placeholder, disabled: formControl?.disabled || disabled, onFocus: onFocus, onBlur: onBlur, onChange: onChange, value: formControl?.state || value || '' }), jsxRuntime.jsx("span", { className: "rls-input__value", children: children })] }));
102
+ }
103
+
104
+ function RlsInputMoney({ decimals, disabled, formControl, onValue, placeholder, symbol, value }) {
105
+ const [valueInput, setValueInput] = react.useState(value || 0);
106
+ function onMoney(value) {
107
+ if (!formControl) {
108
+ setValueInput(value);
109
+ }
110
+ if (onValue) {
111
+ onValue(value);
112
+ }
113
+ }
114
+ return (jsxRuntime.jsx("div", { className: "rls-input-money", children: jsxRuntime.jsx(RlsInput, { formControl: formControl, type: "number", value: value, disabled: disabled, placeholder: placeholder, onValue: onMoney, children: jsxRuntime.jsx(RlsAmount, { value: formControl?.state || value || valueInput, symbol: symbol, decimals: decimals }) }) }));
115
+ }
116
+
117
+ function RlsInputNumber({ disabled, formControl, onValue, placeholder, value }) {
118
+ const [valueInput, setValueInput] = react.useState(value || 0);
119
+ function onNumber(value) {
120
+ if (!formControl) {
121
+ setValueInput(value);
122
+ }
123
+ if (onValue) {
124
+ onValue(value);
125
+ }
126
+ }
127
+ return (jsxRuntime.jsx("div", { className: "rls-input-number", children: jsxRuntime.jsx(RlsInput, { formControl: formControl, type: "number", value: value, disabled: disabled, placeholder: placeholder, onValue: onNumber, children: formControl?.state || value || valueInput }) }));
128
+ }
129
+
130
+ function RlsInputPassword({ disabled, formControl, onValue, placeholder, type }) {
131
+ const [focused, setFocused] = react.useState(false);
132
+ function onChange(event) {
133
+ formControl?.setState(event.target.value);
134
+ if (onValue) {
135
+ onValue(event.target.value);
136
+ }
137
+ }
138
+ function onFocus() {
139
+ formControl?.focus();
140
+ setFocused(true);
141
+ }
142
+ function onBlur() {
143
+ if (formControl && !formControl.touched) {
144
+ formControl.touch();
145
+ }
146
+ formControl?.blur();
147
+ setFocused(false);
148
+ }
149
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-input-password', {
150
+ focused: formControl?.focused || focused,
151
+ disabled
152
+ }), children: jsxRuntime.jsx("input", { className: "rls-input-password__component", autoComplete: "off", type: type || 'password', placeholder: placeholder, disabled: disabled, onFocus: onFocus, onBlur: onBlur, onChange: onChange }) }));
153
+ }
154
+
155
+ function RlsInputText({ disabled, formControl, onValue, placeholder, value }) {
156
+ const [valueInput, setValueInput] = react.useState(value || '');
157
+ function onText(value) {
158
+ if (!formControl) {
159
+ setValueInput(value);
160
+ }
161
+ if (onValue) {
162
+ onValue(value);
163
+ }
164
+ }
165
+ return (jsxRuntime.jsx("div", { className: "rls-input-text", children: jsxRuntime.jsx(RlsInput, { formControl: formControl, type: "text", value: value, disabled: disabled, placeholder: placeholder, onValue: onText, children: formControl?.state || value || valueInput }) }));
166
+ }
167
+
168
+ function RlsLabel({ children, rlsTheme }) {
169
+ return (jsxRuntime.jsx("label", { className: "rls-label", "rls-theme": rlsTheme, children: children }));
170
+ }
171
+
172
+ function RlsMessageIcon({ icon, children, rlsTheme }) {
173
+ return (jsxRuntime.jsxs("div", { className: "rls-message-icon", "rls-theme": rlsTheme, children: [icon && jsxRuntime.jsx(RlsIcon, { value: icon }), jsxRuntime.jsx("span", { className: "caption-regular truncate", children: children })] }));
174
+ }
175
+
176
+ function RlsPoster({ children, rlsTheme }) {
177
+ return (jsxRuntime.jsx("div", { className: "rls-poster", "rls-theme": rlsTheme, children: children }));
178
+ }
179
+
180
+ function RlsProgressBar({ indeterminate, percentage, rlsTheme }) {
181
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-progress-bar', { indeterminate }), "rls-theme": rlsTheme, children: jsxRuntime.jsx("div", { className: "rls-progress-bar__component", style: { width: `${percentage || 0}%` } }) }));
182
+ }
183
+
184
+ function RlsRadioButton({ checked, disabled, onClick, rlsTheme }) {
185
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-radiobutton', { checked, disabled }), onClick: onClick, "rls-theme": rlsTheme, children: jsxRuntime.jsx("div", { className: "rls-radiobutton__component" }) }));
186
+ }
187
+
188
+ function RlsSearchInput({ formControl, placeholder, onSearch }) {
189
+ return (jsxRuntime.jsxs("div", { className: "rls-search-input", children: [jsxRuntime.jsx(RlsInput, { formControl: formControl, placeholder: placeholder }), onSearch && jsxRuntime.jsx(RlsButtonAction, { icon: "search", onClick: onSearch })] }));
190
+ }
191
+
192
+ function RlsSkeleton({ rlsTheme }) {
193
+ return jsxRuntime.jsx("div", { className: "rls-skeleton", "rls-theme": rlsTheme });
194
+ }
195
+
196
+ function RlsSkeletonText({ active, children, rlsTheme }) {
197
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-skeleton-text', { active }), "rls-theme": rlsTheme, children: jsxRuntime.jsx("span", { className: "rls-skeleton-text__value", children: children }) }));
198
+ }
199
+
200
+ function RlsSwitch({ checked, disabled, onClick, rlsTheme }) {
201
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-switch', { checked, disabled }), onClick: onClick, "rls-theme": rlsTheme, children: jsxRuntime.jsxs("div", { className: "rls-switch__component", children: [jsxRuntime.jsx("div", { className: "rls-switch__component__element" }), jsxRuntime.jsx("div", { className: "rls-switch__component__bar" })] }) }));
202
+ }
203
+ function RlsSwitchControl({ formControl, disabled, rlsTheme }) {
204
+ return (jsxRuntime.jsx(RlsSwitch, { checked: formControl.state || false, disabled: disabled, onClick: () => {
205
+ formControl.setState(!formControl.state);
206
+ }, rlsTheme: rlsTheme }));
207
+ }
208
+
209
+ function RlsBallot({ bordered, children, img, initials, skeleton, subtitle, rlsTheme }) {
210
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-ballot', { bordered, skeleton }), "rls-theme": rlsTheme, children: [(img || initials) && (jsxRuntime.jsxs(RlsAvatar, { skeleton: skeleton, children: [img && jsxRuntime.jsx("img", { src: img }), initials && jsxRuntime.jsx("span", { children: initials })] })), jsxRuntime.jsxs("div", { className: "rls-ballot__component", children: [jsxRuntime.jsx("label", { className: "rls-ballot__title", children: jsxRuntime.jsx(RlsSkeletonText, { active: skeleton, children: children }) }), subtitle && (jsxRuntime.jsx("label", { className: "rls-ballot__subtitle", children: jsxRuntime.jsx(RlsSkeletonText, { active: skeleton, children: subtitle }) }))] })] }));
211
+ }
212
+
213
+ function RlsButtonToggle({ options, type, disabled, rlsTheme, onAction }) {
214
+ const contentRef = react.useRef(null);
215
+ const [firstAction] = options;
216
+ const [action, setAction] = react.useState(firstAction);
217
+ const [visible, setVisible] = react.useState(false);
218
+ react.useEffect(() => {
219
+ function onCloseMenu({ target }) {
220
+ if (!contentRef?.current?.contains(target)) {
221
+ setVisible(false);
222
+ }
223
+ }
224
+ document.addEventListener('click', onCloseMenu);
225
+ return () => {
226
+ document.removeEventListener('click', onCloseMenu);
227
+ };
228
+ }, []);
229
+ function onClickMenu() {
230
+ setVisible((prevValue) => !prevValue);
231
+ }
232
+ function onSelectAction(action) {
233
+ setAction(action);
234
+ setVisible(false);
235
+ }
236
+ return (jsxRuntime.jsxs("div", { className: "rls-button-toggle", ref: contentRef, "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-button-toggle__content", children: [action && (jsxRuntime.jsx("div", { className: "rls-button-toggle__action", children: jsxRuntime.jsx(RlsButton, { disabled: disabled, type: type, onClick: () => {
237
+ if (onAction) {
238
+ onAction(action.value);
239
+ }
240
+ }, children: action.label }) })), jsxRuntime.jsx("div", { className: "rls-button-toggle__icon", children: jsxRuntime.jsx(RlsButton, { type: type, prefixIcon: "arrow-ios-down", disabled: disabled, onClick: onClickMenu }) })] }), jsxRuntime.jsx("div", { className: renderClassStatus('rls-button-toggle__list', {
241
+ visible,
242
+ hide: !visible
243
+ }), children: jsxRuntime.jsx("ul", { children: options.map((action, index) => (jsxRuntime.jsx("li", { className: "truncate", onClick: () => {
244
+ onSelectAction(action);
245
+ }, children: action.label }, index))) }) })] }));
246
+ }
247
+
248
+ function RlsCheckBoxLabel({ children, disabled, extended, formControl, rlsTheme }) {
249
+ const [checked, setChecked] = react.useState(formControl?.value || false);
250
+ react.useEffect(() => {
251
+ setChecked(formControl?.state || false);
252
+ }, [formControl?.state]);
253
+ function onToggle() {
254
+ if (formControl) {
255
+ formControl?.setState(!formControl.state);
256
+ }
257
+ else {
258
+ setChecked(!checked);
259
+ }
260
+ }
261
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-checkbox-label', {
262
+ disabled,
263
+ extended
264
+ }), "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-checkbox-label__component", onClick: onToggle, children: jsxRuntime.jsx(RlsCheckBox, { checked: checked, disabled: disabled }) }), jsxRuntime.jsx("label", { className: "rls-checkbox-label__text", children: children })] }));
265
+ }
266
+
267
+ let Factory$2 = class Factory {
268
+ constructor(props) {
269
+ const { date, value, maxDate, minDate } = props;
270
+ this.value = value;
271
+ this.date = new Date(date.getTime());
272
+ this.maxDate = maxDate;
273
+ this.minDate = minDate;
274
+ this.date.setDate(1);
275
+ }
276
+ static execute(props) {
277
+ const factory = new Factory(props);
278
+ const firstWeek = factory.createFirstWeek();
279
+ const rightWeeks = factory.createRightWeeks();
280
+ return [firstWeek, ...rightWeeks];
281
+ }
282
+ createFirstWeek() {
283
+ const dayStart = this.date.getDay();
284
+ const days = [];
285
+ let day = 1;
286
+ for (let start = 0; start < dayStart; start++) {
287
+ days.push(this.createDayState());
288
+ }
289
+ for (let end = dayStart; end < 7; end++) {
290
+ days.push(this.createDayState(day));
291
+ day++;
292
+ }
293
+ return { days };
294
+ }
295
+ createRightWeeks() {
296
+ const dayStart = this.date.getDay();
297
+ const rightWeeks = [];
298
+ const dayCount = helpersDate.daysFromMonth(this.date.getFullYear(), this.date.getMonth());
299
+ let days = [];
300
+ let countDaysWeek = 1;
301
+ let day = 8 - dayStart;
302
+ do {
303
+ days.push(this.createDayState(day));
304
+ day++;
305
+ countDaysWeek++;
306
+ if (countDaysWeek > 7) {
307
+ rightWeeks.push({ days });
308
+ days = [];
309
+ countDaysWeek = 1;
310
+ }
311
+ } while (day <= dayCount);
312
+ const daysPending = this.createDaysPending(days.length);
313
+ rightWeeks.push({ days: [...days, ...daysPending] });
314
+ return rightWeeks;
315
+ }
316
+ createDaysPending(daysWeek) {
317
+ const daysPending = [];
318
+ const length = 7 - daysWeek;
319
+ for (let index = 0; index < length; index++) {
320
+ daysPending.push(this.createDayState());
321
+ }
322
+ return daysPending;
323
+ }
324
+ createDayState(value) {
325
+ return {
326
+ disabled: this.overflowDay(value || 0),
327
+ forbidden: !value,
328
+ selected: value === this.value,
329
+ value
330
+ };
331
+ }
332
+ overflowDay(day) {
333
+ return this.minOverflowDay(day) || this.maxOverflowDay(day);
334
+ }
335
+ minOverflowDay(day) {
336
+ return this.minDate
337
+ ? helpersDate.weight(helpersDate.refactorDay(this.date, day)) < helpersDate.weight(this.minDate)
338
+ : false;
339
+ }
340
+ maxOverflowDay(day) {
341
+ return this.maxDate
342
+ ? helpersDate.weight(helpersDate.refactorDay(this.date, day)) > helpersDate.weight(this.maxDate)
343
+ : false;
344
+ }
345
+ };
346
+ function createDayPicker(props) {
347
+ return Factory$2.execute(props);
348
+ }
349
+
350
+ function RlsDayPicker({ date, disabled: disabledPicker, formControl, maxDate, minDate, rlsTheme }) {
351
+ const initialDate = date || new Date();
352
+ const initialDay = formControl?.state || initialDate.getDate();
353
+ const [weeks, setWeeks] = react.useState([]);
354
+ const [value, setValue] = react.useState(initialDay);
355
+ react.useEffect(() => {
356
+ setWeeks(createDayPicker({
357
+ date: initialDate,
358
+ value: formControl?.state || value,
359
+ minDate,
360
+ maxDate
361
+ }));
362
+ }, [value, date, minDate, maxDate]);
363
+ react.useEffect(() => {
364
+ if (date && date.getDate() !== value) {
365
+ onChange(date.getDate());
366
+ }
367
+ }, [date]);
368
+ function onChange(value) {
369
+ setValue(value);
370
+ formControl?.setState(value);
371
+ }
372
+ return (jsxRuntime.jsxs("div", { className: "rls-day-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-day-picker__header", children: helpersDate.DAY_LABELS().map((title, index) => (jsxRuntime.jsx("label", { className: "rls-day-picker__label", children: title }, index))) }), jsxRuntime.jsx("div", { className: "rls-day-picker__component", children: weeks.map(({ days }, index) => (jsxRuntime.jsx("div", { className: "rls-day-picker__week", children: days.map(({ value, disabled, forbidden, selected }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-day-picker__day', {
373
+ disabled: disabled || disabledPicker,
374
+ forbidden,
375
+ selected
376
+ }), onClick: () => {
377
+ if (value && !disabled) {
378
+ onChange(value);
379
+ }
380
+ }, children: jsxRuntime.jsx("span", { className: "rls-day-picker__day__span", children: value || '??' }) }, index))) }, index))) })] }));
381
+ }
382
+
383
+ const FORMAT_DESCRIPTION$1 = '{dd}/{mm}/{aa}';
384
+ class ListFieldCollection {
385
+ constructor(value) {
386
+ this.value = value;
387
+ }
388
+ findElement(value) {
389
+ return this.value.find((element) => element.compareTo(value));
390
+ }
391
+ }
392
+ class DateRange {
393
+ constructor(minDate, maxDate) {
394
+ this.minDate = helpersDate.normalizeMinTime(minDate);
395
+ if (maxDate && helpersDate.isBefore(maxDate, minDate)) {
396
+ this.maxDate = helpersDate.normalizeMinTime(maxDate);
397
+ }
398
+ else {
399
+ this.maxDate = helpersDate.normalizeMinTime(minDate);
400
+ }
401
+ const minFormat = helpersDate.formatDate(this.minDate, FORMAT_DESCRIPTION$1);
402
+ const maxFormat = helpersDate.formatDate(this.maxDate, FORMAT_DESCRIPTION$1);
403
+ this.description = `${minFormat} - ${maxFormat}`;
404
+ }
405
+ recalculate(date) {
406
+ if (helpersDate.isBefore(this.minDate, date)) {
407
+ return new DateRange(date, this.maxDate);
408
+ }
409
+ if (helpersDate.isAfter(this.maxDate, date)) {
410
+ return new DateRange(this.minDate, date);
411
+ }
412
+ const minDifference = helpersDate.timeDifference(date, this.minDate);
413
+ const maxDifference = helpersDate.timeDifference(this.maxDate, date);
414
+ return minDifference > maxDifference
415
+ ? new DateRange(this.minDate, date)
416
+ : new DateRange(date, this.maxDate);
417
+ }
418
+ static now() {
419
+ return new DateRange(new Date());
420
+ }
421
+ }
422
+
423
+ let Factory$1 = class Factory {
424
+ constructor(props) {
425
+ const { date, range, maxDate, minDate } = props;
426
+ this.date = new Date(date.getTime());
427
+ this.range = range;
428
+ this.maxDate = maxDate;
429
+ this.minDate = minDate;
430
+ this.date.setDate(1);
431
+ }
432
+ static execute(props) {
433
+ const factory = new Factory(props);
434
+ const firstWeek = factory.createFirstWeek();
435
+ const rightWeeks = factory.createRightWeeks();
436
+ return [firstWeek, ...rightWeeks];
437
+ }
438
+ createFirstWeek() {
439
+ const dayStart = this.date.getDay();
440
+ const days = [];
441
+ let day = 1;
442
+ for (let start = 0; start < dayStart; start++) {
443
+ days.push(this.createDayRangeState());
444
+ }
445
+ for (let end = dayStart; end < 7; end++) {
446
+ days.push(this.createDayRangeState(day));
447
+ day++;
448
+ }
449
+ return { days };
450
+ }
451
+ createRightWeeks() {
452
+ const rightWeeks = [];
453
+ const dayStart = this.date.getDay();
454
+ const dayCount = helpersDate.daysFromMonth(this.date.getFullYear(), this.date.getMonth());
455
+ let days = [];
456
+ let countDaysWeek = 1;
457
+ let day = 8 - dayStart;
458
+ do {
459
+ days.push(this.createDayRangeState(day));
460
+ day++;
461
+ countDaysWeek++;
462
+ if (countDaysWeek > 7) {
463
+ rightWeeks.push({ days });
464
+ days = [];
465
+ countDaysWeek = 1;
466
+ }
467
+ } while (day <= dayCount);
468
+ const daysPending = this.createDaysPending(days.length);
469
+ rightWeeks.push({ days: [...days, ...daysPending] });
470
+ return rightWeeks;
471
+ }
472
+ createDaysPending(daysWeek) {
473
+ const daysPending = [];
474
+ const length = 7 - daysWeek;
475
+ for (let index = 0; index < length; index++) {
476
+ daysPending.push(this.createDayRangeState());
477
+ }
478
+ return daysPending;
479
+ }
480
+ createDayRangeState(day) {
481
+ return {
482
+ value: day,
483
+ disabled: this.overflowDay(day || 0),
484
+ forbidden: !day,
485
+ ranged: day ? this.isRangedFromDate(day) : false,
486
+ selected: day ? this.isSelected(day) : false
487
+ };
488
+ }
489
+ isSelected(day) {
490
+ return (this.isSelectedForDate(this.range.minDate, day) ||
491
+ this.isSelectedForDate(this.range.maxDate, day));
492
+ }
493
+ isSelectedForDate(date, day) {
494
+ return (date.getFullYear() === this.date.getFullYear() &&
495
+ date.getMonth() === this.date.getMonth() &&
496
+ day === date.getDate());
497
+ }
498
+ isRangedFromDate(day) {
499
+ return helpersDate.isBetween(this.range.minDate, this.range.maxDate, helpersDate.refactorDay(this.date, day));
500
+ }
501
+ overflowDay(day) {
502
+ return this.minOverflowDay(day) || this.maxOverflowDay(day);
503
+ }
504
+ minOverflowDay(day) {
505
+ return this.minDate
506
+ ? helpersDate.weight(helpersDate.refactorDay(this.date, day)) < helpersDate.weight(this.minDate)
507
+ : false;
508
+ }
509
+ maxOverflowDay(day) {
510
+ return this.maxDate
511
+ ? helpersDate.weight(helpersDate.refactorDay(this.date, day)) > helpersDate.weight(this.maxDate)
512
+ : false;
513
+ }
514
+ };
515
+ function createRangePicker(props) {
516
+ return Factory$1.execute(props);
517
+ }
518
+
519
+ function RlsDayRangePicker({ date, disabled: disabledPicker, formControl, maxDate, minDate, rlsTheme }) {
520
+ const initialRange = formControl?.state || DateRange.now();
521
+ const initialDate = helpersDate.normalizeMinTime(date || initialRange.minDate);
522
+ const [weeks, setWeeks] = react.useState([]);
523
+ const [range, setRange] = react.useState(initialRange);
524
+ react.useEffect(() => {
525
+ setWeeks(createRangePicker({
526
+ date: initialDate,
527
+ range,
528
+ minDate,
529
+ maxDate
530
+ }));
531
+ }, [range, date, minDate, maxDate]);
532
+ function onChange(value) {
533
+ const newRange = range.recalculate(helpersDate.refactorDay(initialDate, value));
534
+ setRange(newRange);
535
+ formControl?.setState(newRange);
536
+ }
537
+ return (jsxRuntime.jsxs("div", { className: "rls-day-range-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-day-range-picker__header", children: helpersDate.DAY_LABELS().map((title, index) => (jsxRuntime.jsx("label", { className: "rls-day-range-picker__label", children: title }, index))) }), jsxRuntime.jsx("div", { className: "rls-day-range-picker__component", children: weeks.map(({ days }, index) => (jsxRuntime.jsx("div", { className: "rls-day-range-picker__week", children: days.map(({ value, disabled, forbidden, ranged, selected }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-day-range-picker__day', {
538
+ disabled: disabled || disabledPicker,
539
+ forbidden,
540
+ selected,
541
+ ranged
542
+ }), onClick: () => {
543
+ if (value && !disabled) {
544
+ onChange(value);
545
+ }
546
+ }, children: jsxRuntime.jsx("span", { className: "rls-day-range-picker__day__span", children: value || '??' }) }, index))) }, index))) })] }));
547
+ }
548
+
549
+ function RlsMoneyField({ children, decimals, disabled, formControl, onValue, placeholder, symbol, rlsTheme, value }) {
550
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', {
551
+ focused: formControl?.focused,
552
+ error: formControl?.touched && !formControl?.valid,
553
+ disabled: formControl?.disabled || disabled
554
+ }, 'rls-money-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsx("div", { className: "rls-box-field__body", children: jsxRuntime.jsx(RlsInputMoney, { formControl: formControl, value: value, disabled: disabled, placeholder: placeholder, symbol: symbol, decimals: decimals, onValue: onValue }) }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }));
555
+ }
556
+
557
+ const MONTH_MAX_VALUE = helpersDate.Month.January;
558
+ const MONTH_MIN_VALUE = helpersDate.Month.December;
559
+ class Factory {
560
+ constructor(props) {
561
+ const { date, value, maxDate, minDate } = props;
562
+ this.value = value;
563
+ this.date = new Date(date.getTime());
564
+ this.maxDate = maxDate;
565
+ this.minDate = minDate;
566
+ }
567
+ static execute(props) {
568
+ const factory = new Factory(props);
569
+ return [
570
+ factory.createMonth(0),
571
+ factory.createMonth(1),
572
+ factory.createMonth(2),
573
+ factory.createMonth(3),
574
+ factory.createMonth(4),
575
+ factory.createMonth(5),
576
+ factory.createMonth(6),
577
+ factory.createMonth(7),
578
+ factory.createMonth(8),
579
+ factory.createMonth(9),
580
+ factory.createMonth(10),
581
+ factory.createMonth(11)
582
+ ];
583
+ }
584
+ createMonth(value) {
585
+ return {
586
+ value,
587
+ label: helpersDate.MONTH_NAMES()[value],
588
+ disabled: this.overflowMonth(value),
589
+ selected: value === this.value
590
+ };
591
+ }
592
+ get minYear() {
593
+ return this.minDate?.getFullYear() || 0;
594
+ }
595
+ get maxYear() {
596
+ return this.maxDate?.getFullYear() || 10000;
597
+ }
598
+ get minMonth() {
599
+ return this.minDate?.getMonth() || MONTH_MIN_VALUE;
600
+ }
601
+ get maxMonth() {
602
+ return this.maxDate?.getMonth() || MONTH_MAX_VALUE;
603
+ }
604
+ overflowMonth(month) {
605
+ return this.minOverflowMonth(month) || this.maxOverflowMonth(month);
606
+ }
607
+ minOverflowMonth(month) {
608
+ return this.date.getFullYear() === this.minYear && month < this.minMonth;
609
+ }
610
+ maxOverflowMonth(month) {
611
+ return this.date.getFullYear() === this.maxYear && month > this.maxMonth;
612
+ }
613
+ }
614
+ function isMinLimitMonth(month, date, maxDate) {
615
+ const minYear = maxDate?.getFullYear() || 0;
616
+ const minMonth = maxDate?.getMonth() || 0;
617
+ return date.getFullYear() === minYear && month <= minMonth;
618
+ }
619
+ function isMaxLimitMonth(month, date, maxDate) {
620
+ const maxYear = maxDate?.getFullYear() || 10000;
621
+ const maxMonth = maxDate?.getMonth() || 11;
622
+ return date.getFullYear() === maxYear && month >= maxMonth;
623
+ }
624
+ function createMonthPicker(props) {
625
+ return Factory.execute(props);
626
+ }
627
+
628
+ function RlsMonthPicker({ formControl, date, disabled: disabledPicker, maxDate, minDate, rlsTheme }) {
629
+ const initialDate = date || new Date();
630
+ const initialMonth = formControl?.state || initialDate.getMonth();
631
+ const [months, setMonths] = react.useState([]);
632
+ const [value, setValue] = react.useState(initialMonth);
633
+ react.useEffect(() => {
634
+ setMonths(createMonthPicker({
635
+ date: initialDate,
636
+ value: formControl?.state || value,
637
+ minDate,
638
+ maxDate
639
+ }));
640
+ }, [value, date, minDate, maxDate]);
641
+ return (jsxRuntime.jsx("div", { className: "rls-month-picker", "rls-theme": rlsTheme, children: months.map(({ label, value, disabled, selected }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-month-picker__component', {
642
+ disabled: disabled || disabledPicker || false,
643
+ selected
644
+ }), onClick: () => {
645
+ formControl?.setState(value);
646
+ setValue(value);
647
+ }, children: jsxRuntime.jsx("span", { className: "rls-month-picker__span", children: label }) }, index))) }));
648
+ }
649
+
650
+ function RlsMonthTitlePicker({ monthControl, yearControl, date, maxDate, minDate, onClick }) {
651
+ const { state: month } = monthControl;
652
+ const { state: year } = yearControl;
653
+ const [limitMinMonth, setLimitMinMonth] = react.useState(false);
654
+ const [limitMaxMonth, setLimitMaxMonth] = react.useState(false);
655
+ const monthName = helpersDate.MONTH_NAMES()[month || 0];
656
+ react.useEffect(() => {
657
+ if (typeof month === 'number' && date) {
658
+ setLimitMinMonth(isMinLimitMonth(month, date, minDate));
659
+ setLimitMaxMonth(isMaxLimitMonth(month, date, maxDate));
660
+ }
661
+ }, [date]);
662
+ function onPreviousMonth() {
663
+ if (typeof month === 'number' && typeof year === 'number') {
664
+ if (month > MONTH_MIN_VALUE) {
665
+ monthControl.setState(month - 1);
666
+ }
667
+ else {
668
+ monthControl.setState(MONTH_MAX_VALUE);
669
+ yearControl.setState(year - 1);
670
+ }
671
+ }
672
+ }
673
+ function onNextMonth() {
674
+ if (typeof month === 'number' && typeof year === 'number') {
675
+ if (month < MONTH_MAX_VALUE) {
676
+ monthControl.setState(month + 1);
677
+ }
678
+ else {
679
+ monthControl.setState(MONTH_MIN_VALUE);
680
+ yearControl.setState(year + 1);
681
+ }
682
+ }
683
+ }
684
+ return (jsxRuntime.jsxs("div", { className: "rls-month-title-picker", children: [jsxRuntime.jsx(RlsButtonAction, { icon: "arrow-ios-left", onClick: onPreviousMonth, disabled: limitMinMonth }), jsxRuntime.jsx("span", { onClick: onClick, children: monthName }), jsxRuntime.jsx(RlsButtonAction, { icon: "arrow-ios-right", onClick: onNextMonth, disabled: limitMaxMonth })] }));
685
+ }
686
+
687
+ function RlsNumberField({ children, disabled, formControl, onValue, placeholder, rlsTheme, value }) {
688
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', {
689
+ focused: formControl?.focused,
690
+ error: formControl?.touched && !formControl?.valid,
691
+ disabled: formControl?.disabled || disabled
692
+ }, 'rls-number-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsx("div", { className: "rls-box-field__body", children: jsxRuntime.jsx(RlsInputNumber, { formControl: formControl, value: value, disabled: disabled, placeholder: placeholder, onValue: onValue }) }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }));
693
+ }
694
+
695
+ const DEFAULT_COUNT_ELEMENT = 20;
696
+ const MIN_NUMBER_PAGE = 1;
697
+ const FIRST_PAGE = 0;
698
+ const DEFAULT_MAX_VISIBLE = 4;
699
+ function RlsPagination({ elements, count: defaultCount, filter, onElements, onPagination }) {
700
+ const count = defaultCount || DEFAULT_COUNT_ELEMENT;
701
+ const [collection, setCollection] = react.useState([]);
702
+ const [index, setIndex] = react.useState(0);
703
+ const [maxPage, setMaxPage] = react.useState(calculateMaxPage(elements, count));
704
+ const [paginations, setPaginations] = react.useState([]);
705
+ const [currentPagination, setCurrentPagination] = react.useState();
706
+ const [description, setDescription] = react.useState('');
707
+ const [firstPage, setFirstPage] = react.useState(true);
708
+ const [lastPage, setLastPage] = react.useState(false);
709
+ react.useEffect(() => {
710
+ refreshFromElements(elements);
711
+ }, [elements]);
712
+ react.useEffect(() => {
713
+ const isFirstPage = currentPagination?.value === FIRST_PAGE;
714
+ const isLastPage = currentPagination?.value === maxPage - 1;
715
+ setFirstPage(isFirstPage);
716
+ setLastPage(isLastPage);
717
+ if (onPagination) {
718
+ onPagination({ firstPage: isFirstPage, lastPage: isLastPage });
719
+ }
720
+ }, [currentPagination]);
721
+ react.useEffect(() => {
722
+ refreshFromFilter(filter);
723
+ }, [filter]);
724
+ function onChangeElements(elements) {
725
+ if (onElements) {
726
+ onElements(elements);
727
+ }
728
+ }
729
+ function calculateMaxPage(collection, count) {
730
+ return collection.length ? Math.ceil(collection.length / count) : 0;
731
+ }
732
+ function onSelectPagination(pagination) {
733
+ const { value } = pagination;
734
+ pagination.active = true;
735
+ setIndex(value);
736
+ setCurrentPagination(pagination);
737
+ refreshFromChanged(createPageProps({ index: value }));
738
+ }
739
+ function goPagination(pagination) {
740
+ if (currentPagination) {
741
+ currentPagination.active = false;
742
+ }
743
+ onSelectPagination(pagination);
744
+ }
745
+ function goPreviousPagination() {
746
+ if (currentPagination) {
747
+ const { prev, value } = currentPagination;
748
+ if (prev) {
749
+ onSelectPagination(prev);
750
+ currentPagination.active = false;
751
+ }
752
+ else {
753
+ const prevIndex = value - MIN_NUMBER_PAGE;
754
+ if (prevIndex >= FIRST_PAGE) {
755
+ refreshFromChanged(createPagePropsFromIndex(prevIndex));
756
+ }
757
+ }
758
+ }
759
+ }
760
+ function goFirstPagination() {
761
+ if (collection.length) {
762
+ refreshFromChanged(createPagePropsFromIndex(FIRST_PAGE));
763
+ }
764
+ }
765
+ function goNextPagination() {
766
+ if (currentPagination) {
767
+ const { next, value } = currentPagination;
768
+ if (next) {
769
+ onSelectPagination(next);
770
+ currentPagination.active = false;
771
+ }
772
+ else {
773
+ const nextIndex = value + 1;
774
+ if (nextIndex <= maxPage) {
775
+ refreshFromChanged(createPagePropsFromIndex(nextIndex));
776
+ }
777
+ }
778
+ }
779
+ }
780
+ function goLastPagination() {
781
+ if (collection.length) {
782
+ refreshFromChanged(createPagePropsFromIndex(maxPage - MIN_NUMBER_PAGE));
783
+ }
784
+ }
785
+ function createPageCollection(props) {
786
+ const { collection, count, index } = props;
787
+ if (collection.length) {
788
+ const finish = (index + MIN_NUMBER_PAGE) * count;
789
+ const start = index * count;
790
+ return collection.slice(start, finish);
791
+ }
792
+ return [];
793
+ }
794
+ function refreshFromElements(elements) {
795
+ elements.length
796
+ ? refreshFromChanged(createRefreshProps(elements, filter))
797
+ : rebootPagination();
798
+ }
799
+ function refreshFromFilter(filter) {
800
+ refreshFromChanged(createRefreshProps(elements, filter));
801
+ }
802
+ function createRefreshProps(elements, filter) {
803
+ const collection = refreshCollection(elements, filter);
804
+ const maxPage = refreshMaxPage(collection, count);
805
+ const index = refreshIndex(collection, maxPage);
806
+ return createPageProps({ collection, index, maxPage });
807
+ }
808
+ function refreshFromChanged(page) {
809
+ refreshPaginations(page);
810
+ refreshDescription(page);
811
+ onChangeElements(createPageCollection(page));
812
+ }
813
+ function refreshCollection(elements, filter) {
814
+ const collection = filter
815
+ ? elements.filter((element) => helpersString.hasPattern(JSON.stringify(element), filter))
816
+ : elements;
817
+ setCollection(collection);
818
+ return collection;
819
+ }
820
+ function refreshMaxPage(collection, count) {
821
+ const maxPage = calculateMaxPage(collection, count);
822
+ setMaxPage(maxPage);
823
+ return maxPage;
824
+ }
825
+ function refreshIndex(collection, currentMaxPage) {
826
+ const maxPage = currentMaxPage || refreshMaxPage(collection, count);
827
+ if (index < maxPage || index === FIRST_PAGE) {
828
+ return index;
829
+ }
830
+ const newIndex = maxPage - 1;
831
+ setIndex(newIndex);
832
+ return newIndex;
833
+ }
834
+ function rebootPagination() {
835
+ setCollection([]);
836
+ setMaxPage(0);
837
+ setIndex(0);
838
+ setPaginations([]);
839
+ onChangeElements([]);
840
+ }
841
+ function refreshDescription(page) {
842
+ const { collection, count, index } = page;
843
+ const totalCount = elements.length;
844
+ const start = index * count + MIN_NUMBER_PAGE;
845
+ let end = (index + MIN_NUMBER_PAGE) * count;
846
+ if (end > collection.length) {
847
+ end = collection.length;
848
+ }
849
+ setDescription(`${start} - ${end} de ${totalCount}`);
850
+ }
851
+ function refreshPaginations({ index, maxPage }) {
852
+ let maxPageVisible = index + DEFAULT_MAX_VISIBLE;
853
+ if (maxPageVisible > maxPage) {
854
+ maxPageVisible = maxPage;
855
+ }
856
+ let minIndexPage = maxPageVisible - DEFAULT_MAX_VISIBLE;
857
+ if (minIndexPage < 0) {
858
+ minIndexPage = 0;
859
+ }
860
+ if (minIndexPage > index) {
861
+ minIndexPage = index;
862
+ }
863
+ let prevPagination = undefined;
864
+ const paginations = [];
865
+ for (let i = minIndexPage; i < maxPageVisible; i++) {
866
+ const pagination = createPagination(i, index);
867
+ paginations.push(pagination);
868
+ pagination.prev = prevPagination;
869
+ if (prevPagination) {
870
+ prevPagination.next = pagination;
871
+ }
872
+ prevPagination = pagination;
873
+ }
874
+ setPaginations(paginations);
875
+ }
876
+ function createPagination(value, index) {
877
+ const active = value === index;
878
+ const pagination = {
879
+ label: (value + 1).toString(),
880
+ value,
881
+ active
882
+ };
883
+ if (active) {
884
+ setCurrentPagination(pagination);
885
+ }
886
+ return pagination;
887
+ }
888
+ function createPagePropsFromIndex(index) {
889
+ return createPageProps({ index });
890
+ }
891
+ function createPageProps(props) {
892
+ return {
893
+ collection: props.collection || collection,
894
+ index: typeof props.index === 'number' ? props.index : index,
895
+ count: props.count || count,
896
+ maxPage: typeof props.maxPage === 'number' ? props.maxPage : maxPage
897
+ };
898
+ }
899
+ return (jsxRuntime.jsxs("div", { className: "rls-pagination", children: [jsxRuntime.jsxs("div", { className: "rls-pagination__actions", children: [jsxRuntime.jsx("button", { className: "rls-pagination__action", onClick: goFirstPagination, disabled: firstPage, children: jsxRuntime.jsx(RlsIcon, { value: "arrowhead-left" }) }), jsxRuntime.jsx("button", { className: "rls-pagination__action", onClick: goPreviousPagination, disabled: firstPage, children: jsxRuntime.jsx(RlsIcon, { value: "arrow-ios-left" }) })] }), jsxRuntime.jsx("div", { className: "rls-pagination__pages", children: paginations.map((page, index) => {
900
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-pagination__page', {
901
+ active: page.active
902
+ }), onClick: () => {
903
+ goPagination(page);
904
+ }, children: page.label }, index));
905
+ }) }), jsxRuntime.jsx("div", { className: "rls-pagination__description", children: description }), jsxRuntime.jsxs("div", { className: "rls-pagination__actions", children: [jsxRuntime.jsx("button", { className: "rls-pagination__action", onClick: goNextPagination, disabled: lastPage, children: jsxRuntime.jsx(RlsIcon, { value: "arrow-ios-right" }) }), jsxRuntime.jsx("button", { className: "rls-pagination__action", onClick: goLastPagination, disabled: lastPage, children: jsxRuntime.jsx(RlsIcon, { value: "arrowhead-right" }) })] })] }));
906
+ }
907
+
908
+ function RlsPasswordField({ children, disabled, formControl, placeholder, rlsTheme }) {
909
+ const [password, setPassword] = react.useState(true);
910
+ function onToggleInput() {
911
+ setPassword(!password);
912
+ }
913
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus(' rls-box-field', {
914
+ focused: formControl?.focused,
915
+ error: formControl?.touched && !formControl?.valid,
916
+ disabled: formControl?.disabled || disabled
917
+ }, 'rls-password-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx(RlsInputPassword, { formControl: formControl, disabled: disabled, placeholder: placeholder, type: password ? 'password' : 'text' }), jsxRuntime.jsx(RlsButtonAction, { icon: password ? 'eye' : 'eye-off', onClick: onToggleInput })] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }));
918
+ }
919
+
920
+ function RlsRadioButtonLabel({ children, disabled, extended, formControl, rlsTheme, value }) {
921
+ const [checked, setChecked] = react.useState(formControl?.state || false);
922
+ react.useEffect(() => {
923
+ setChecked(formControl?.state === value);
924
+ }, [formControl?.state]);
925
+ function onSelect() {
926
+ if (formControl) {
927
+ formControl?.setState(value);
928
+ }
929
+ }
930
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-radiobutton-label', {
931
+ disabled,
932
+ extended
933
+ }), "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-radiobutton-label__component", onClick: onSelect, children: jsxRuntime.jsx(RlsRadioButton, { checked: checked, disabled: disabled }) }), jsxRuntime.jsx("label", { className: "rls-radiobutton-label__text", children: children })] }));
934
+ }
935
+
936
+ function RlsSwitchLabel({ children, disabled, extended, formControl, rlsTheme }) {
937
+ const [checked, setChecked] = react.useState(formControl?.value || false);
938
+ react.useEffect(() => {
939
+ setChecked(formControl?.state || false);
940
+ }, [formControl?.state]);
941
+ function onToggle() {
942
+ if (formControl) {
943
+ formControl?.setState(!formControl.state);
944
+ }
945
+ else {
946
+ setChecked(!checked);
947
+ }
948
+ }
949
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-switch-label', { disabled, extended }), "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-switch-label__component", onClick: onToggle, children: jsxRuntime.jsx(RlsSwitch, { checked: checked, disabled: disabled }) }), jsxRuntime.jsx("label", { className: "rls-switch-label__text", children: children })] }));
950
+ }
951
+
952
+ function RlsTextField({ children, disabled, formControl, onValue, placeholder, rlsTheme, value }) {
953
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', {
954
+ focused: formControl?.focused,
955
+ error: formControl?.touched && !formControl?.valid,
956
+ disabled: formControl?.disabled || disabled
957
+ }, 'rls-text-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsx("div", { className: "rls-box-field__body", children: jsxRuntime.jsx(RlsInputText, { formControl: formControl, value: value, disabled: disabled, placeholder: placeholder, onValue: onValue }) }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }));
958
+ }
959
+
960
+ function RlsToolbar({ actions, children, subtitle }) {
961
+ return (jsxRuntime.jsxs("div", { className: "rls-toolbar", children: [jsxRuntime.jsxs("div", { className: "rls-toolbar__description", children: [children && jsxRuntime.jsx("label", { className: "rls-toolbar__title", children: children }), subtitle && (jsxRuntime.jsx("label", { className: "rls-toolbar__subtitle caption-semibold", children: subtitle }))] }), actions && (jsxRuntime.jsx("div", { className: "rls-toolbar__actions", children: actions.map((action, index) => (jsxRuntime.jsx("div", { children: action }, index))) }))] }));
962
+ }
963
+
964
+ const COUNT_YEAR_RANGE = 4;
965
+ class FactoryYearPicker {
966
+ constructor(props) {
967
+ const { value, maxDate, minDate } = props;
968
+ this.value = value;
969
+ this.maxDate = maxDate;
970
+ this.minDate = minDate;
971
+ }
972
+ static execute(props) {
973
+ const factory = new FactoryYearPicker(props);
974
+ let year = props.year;
975
+ if (factory.minOverflowYear(year)) {
976
+ year = factory.minYear;
977
+ }
978
+ else if (factory.maxOverflowYear(year)) {
979
+ year = factory.maxYear;
980
+ }
981
+ const years = factory.createYears(year);
982
+ return {
983
+ hasNext: factory.hasNext,
984
+ hasPrevious: factory.hasPrevious,
985
+ maxRange: factory.maxYearRange,
986
+ minRange: factory.minYearRange,
987
+ years
988
+ };
989
+ }
990
+ createYears(year) {
991
+ const prevYears = [];
992
+ const nextYears = [];
993
+ this.minYearRange = year;
994
+ this.maxYearRange = year;
995
+ for (let index = 0; index < COUNT_YEAR_RANGE; index++) {
996
+ const yearPrev = year - COUNT_YEAR_RANGE + index;
997
+ const yearNext = year + index + 1;
998
+ const valuePrev = yearPrev >= this.minYear ? yearPrev : undefined;
999
+ const valueNext = yearNext <= this.maxYear ? yearNext : undefined;
1000
+ const prevState = this.createYear(valuePrev);
1001
+ const nextState = this.createYear(valueNext);
1002
+ prevYears.push(prevState);
1003
+ nextYears.push(nextState);
1004
+ this.recalculateRange(prevState, nextState);
1005
+ }
1006
+ const yearCenter = this.createYear(year);
1007
+ return [...prevYears, yearCenter, ...nextYears];
1008
+ }
1009
+ minOverflowYear(year) {
1010
+ return year < this.minYear;
1011
+ }
1012
+ maxOverflowYear(year) {
1013
+ return year > this.maxYear;
1014
+ }
1015
+ get minYear() {
1016
+ return this.minDate?.getFullYear() || 0;
1017
+ }
1018
+ get maxYear() {
1019
+ return this.maxDate?.getFullYear() || 10000;
1020
+ }
1021
+ get hasPrevious() {
1022
+ return this.minYear < this.minYearRange;
1023
+ }
1024
+ get hasNext() {
1025
+ return this.maxYear > this.maxYearRange;
1026
+ }
1027
+ createYear(value) {
1028
+ return {
1029
+ value,
1030
+ disabled: !value,
1031
+ selected: value === this.value
1032
+ };
1033
+ }
1034
+ recalculateRange(prev, next) {
1035
+ if (!!prev.value && this.minYearRange > prev.value) {
1036
+ this.minYearRange = prev.value;
1037
+ }
1038
+ if (!!next.value && this.maxYearRange < next.value) {
1039
+ this.maxYearRange = next.value;
1040
+ }
1041
+ }
1042
+ }
1043
+ function createYearPicker(props) {
1044
+ return FactoryYearPicker.execute(props);
1045
+ }
1046
+
1047
+ function RlsYearPicker({ formControl, date: date, disabled: disabledPicker, maxDate, minDate, rlsTheme }) {
1048
+ const initialDate = date || new Date();
1049
+ const initialYear = formControl?.state || initialDate.getFullYear();
1050
+ const [value, setValue] = react.useState(initialYear);
1051
+ const [year, setYear] = react.useState(initialYear);
1052
+ const [template, setTemplate] = react.useState(createYearPicker({
1053
+ value: formControl?.state || value,
1054
+ year: initialYear,
1055
+ minDate,
1056
+ maxDate
1057
+ }));
1058
+ react.useEffect(() => {
1059
+ setTemplate(createYearPicker({
1060
+ value: formControl?.state || value,
1061
+ year,
1062
+ minDate,
1063
+ maxDate
1064
+ }));
1065
+ }, [value, year, date, minDate, maxDate]);
1066
+ function onClickPrev() {
1067
+ setYear(year - 8);
1068
+ }
1069
+ function onClickNext() {
1070
+ setYear(year + 8);
1071
+ }
1072
+ function onChange(value) {
1073
+ formControl?.setState(value);
1074
+ setYear(value);
1075
+ setValue(value);
1076
+ }
1077
+ return (jsxRuntime.jsxs("div", { className: "rls-year-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-year-picker__header", children: [jsxRuntime.jsx("div", { className: "rls-year-picker__action rls-year-picker__action--prev", children: jsxRuntime.jsx("button", { disabled: !template.hasPrevious || disabledPicker, onClick: onClickPrev, children: jsxRuntime.jsx(RlsIcon, { value: "arrow-ios-left" }) }) }), jsxRuntime.jsx("div", { className: "rls-year-picker__title", children: jsxRuntime.jsxs("label", { className: "title1-bold", children: [template.minRange, " - ", template.maxRange] }) }), jsxRuntime.jsx("div", { className: "rls-year-picker__action rls-year-picker__action--next", children: jsxRuntime.jsx("button", { disabled: !template.hasNext || disabledPicker, onClick: onClickNext, children: jsxRuntime.jsx(RlsIcon, { value: "arrow-ios-right" }) }) })] }), jsxRuntime.jsx("div", { className: "rls-year-picker__component", children: template.years.map(({ value, disabled, selected }, index) => (jsxRuntime.jsx("div", { className: renderClassStatus('rls-year-picker__year', {
1078
+ disabled: disabled || disabledPicker,
1079
+ selected
1080
+ }), onClick: () => {
1081
+ if (value) {
1082
+ onChange(value);
1083
+ }
1084
+ }, children: jsxRuntime.jsx("span", { className: "rls-year-picker__year__span body1-medium", children: value || '????' }) }, index))) })] }));
1085
+ }
1086
+
1087
+ const classElement = '.rls-list-field__element';
1088
+ const MAX_POSITION_VISIBLE = 4;
1089
+ const LIST_SIZE_REM = 16;
1090
+ const ELEMENT_SIZE_REM = 4;
1091
+ const BASE_SIZE_PX = 16;
1092
+ const ELEMENT_SIZE_PX = BASE_SIZE_PX * ELEMENT_SIZE_REM;
1093
+ const MAZ_LIST_SIZE_PX = BASE_SIZE_PX * LIST_SIZE_REM;
1094
+ function useListControl({ suggestions, formControl, ignoreHigher = false }) {
1095
+ const boxContentRef = react.useRef(null);
1096
+ const listRef = react.useRef(null);
1097
+ const inputRef = react.useRef(null);
1098
+ const [collection, setCollection] = react.useState(new ListFieldCollection([]));
1099
+ const [active, setActive] = react.useState(false);
1100
+ const [visible, setVisible] = react.useState(false);
1101
+ const [opened, setOpened] = react.useState(false);
1102
+ const [value, setValue] = react.useState('');
1103
+ const [higher, setHigher] = react.useState(false);
1104
+ const [positionElement, setPositionElement] = react.useState(0);
1105
+ const [listElements, setListElements] = react.useState(undefined);
1106
+ react.useEffect(() => {
1107
+ function onCloseSuggestions(event) {
1108
+ if (!boxContentRef?.current?.contains(event.target)) {
1109
+ setVisible(false);
1110
+ }
1111
+ }
1112
+ document.addEventListener('click', onCloseSuggestions);
1113
+ return () => {
1114
+ document.removeEventListener('click', onCloseSuggestions);
1115
+ };
1116
+ }, []);
1117
+ react.useEffect(() => {
1118
+ if (visible && !opened) {
1119
+ setOpened(true);
1120
+ }
1121
+ if (!visible && opened && formControl && !formControl.touched) {
1122
+ formControl.touch();
1123
+ }
1124
+ setLocationList();
1125
+ }, [visible]);
1126
+ react.useEffect(() => {
1127
+ setCollection(new ListFieldCollection(suggestions));
1128
+ }, [suggestions]);
1129
+ function setLocationList() {
1130
+ if (boxContentRef?.current) {
1131
+ const { top, height } = boxContentRef.current.getBoundingClientRect();
1132
+ const overflow = BASE_SIZE_PX / 2;
1133
+ const positionEnd = top + height + MAZ_LIST_SIZE_PX + overflow;
1134
+ setHigher(positionEnd > window.innerHeight);
1135
+ }
1136
+ }
1137
+ function navigationInput(event) {
1138
+ switch (event.code) {
1139
+ case 'ArrowUp':
1140
+ if (visible && higher) {
1141
+ navigationInputUp();
1142
+ }
1143
+ break;
1144
+ case 'ArrowDown':
1145
+ if (visible && (ignoreHigher || !higher)) {
1146
+ navigationInputDown();
1147
+ }
1148
+ break;
1149
+ }
1150
+ }
1151
+ function navigationElement(event) {
1152
+ switch (event.code) {
1153
+ case 'ArrowUp':
1154
+ navigationElementUp();
1155
+ break;
1156
+ case 'ArrowDown':
1157
+ navigationElementDown();
1158
+ break;
1159
+ }
1160
+ }
1161
+ function navigationInputUp() {
1162
+ const elements = listRef?.current?.querySelectorAll(classElement);
1163
+ if (elements?.length) {
1164
+ const newPosition = elements.length - 1;
1165
+ setListElements(elements);
1166
+ setPositionElement(newPosition);
1167
+ elements.item(newPosition).focus();
1168
+ if (positionElement > MAX_POSITION_VISIBLE) {
1169
+ const elementPosition = elements.length - MAX_POSITION_VISIBLE;
1170
+ setTimeout(() => {
1171
+ listRef?.current?.scroll({
1172
+ top: ELEMENT_SIZE_PX * elementPosition,
1173
+ behavior: 'smooth'
1174
+ });
1175
+ }, 100);
1176
+ }
1177
+ }
1178
+ }
1179
+ function navigationInputDown() {
1180
+ const elements = listRef?.current?.querySelectorAll(classElement);
1181
+ if (elements?.length) {
1182
+ setListElements(elements);
1183
+ setPositionElement(0);
1184
+ elements.item(0).focus();
1185
+ setTimeout(() => {
1186
+ listRef?.current?.scroll({
1187
+ top: 0,
1188
+ behavior: 'smooth'
1189
+ });
1190
+ }, 100);
1191
+ }
1192
+ }
1193
+ function navigationElementUp() {
1194
+ if (positionElement > 0) {
1195
+ const newPosition = positionElement - 1;
1196
+ setPositionElement(newPosition);
1197
+ listElements?.item(newPosition).focus();
1198
+ }
1199
+ else if (ignoreHigher || !higher) {
1200
+ inputRef?.current?.focus();
1201
+ }
1202
+ }
1203
+ function navigationElementDown() {
1204
+ const newPosition = positionElement + 1;
1205
+ const length = listElements?.length || 0;
1206
+ if (newPosition < length) {
1207
+ setPositionElement(newPosition);
1208
+ listElements?.item(newPosition).focus();
1209
+ }
1210
+ else if (higher && !ignoreHigher) {
1211
+ inputRef?.current?.focus();
1212
+ }
1213
+ }
1214
+ return {
1215
+ active,
1216
+ boxContentRef,
1217
+ collection,
1218
+ higher,
1219
+ inputRef,
1220
+ listRef,
1221
+ navigationElement,
1222
+ navigationInput,
1223
+ setActive,
1224
+ setValue,
1225
+ setVisible,
1226
+ value,
1227
+ visible
1228
+ };
1229
+ }
1230
+
1231
+ const DURATION_ANIMATION$1 = 240;
1232
+ const MAX_ELEMENTS = 6;
1233
+ function RlsAutocompleteField({ suggestions, children, disabled, formControl, hiddenIcon, onSearch, onSelect, onValue, placeholder, searching, rlsTheme }) {
1234
+ const [pattern, setPattern] = react.useState('');
1235
+ const [coincidences, setCoincidences] = react.useState([]);
1236
+ const [store, setStore] = react.useState({
1237
+ pattern: '',
1238
+ coincidences: [],
1239
+ previous: null
1240
+ });
1241
+ const { active, boxContentRef, higher, inputRef, listRef, collection, value, visible, setActive, setValue, setVisible, navigationElement, navigationInput } = useListControl({ suggestions, formControl, ignoreHigher: true });
1242
+ const [changeInternal, setChangeInternal] = react.useState(false);
1243
+ react.useEffect(() => {
1244
+ filterSuggestions(pattern, true);
1245
+ }, [suggestions]);
1246
+ react.useEffect(() => {
1247
+ filterSuggestions(pattern);
1248
+ }, [pattern]);
1249
+ react.useEffect(() => {
1250
+ if (!changeInternal) {
1251
+ redefineDescription();
1252
+ }
1253
+ setChangeInternal(false);
1254
+ }, [formControl?.state]);
1255
+ react.useEffect(() => {
1256
+ redefineDescription();
1257
+ }, [collection]);
1258
+ function redefineDescription() {
1259
+ const element = formControl?.state && collection.findElement(formControl?.state);
1260
+ setValue(element?.description || '');
1261
+ }
1262
+ function onClickControl() {
1263
+ if (!disabled) {
1264
+ setVisible(true);
1265
+ setTimeout(() => inputRef?.current?.focus(), DURATION_ANIMATION$1);
1266
+ }
1267
+ }
1268
+ function onFocusInput() {
1269
+ setActive(true);
1270
+ }
1271
+ function onBlurInput() {
1272
+ setActive(false);
1273
+ }
1274
+ function onKeydownInput(event) {
1275
+ switch (event.code) {
1276
+ case 'Escape':
1277
+ setVisible(false);
1278
+ break;
1279
+ case 'Tab':
1280
+ setVisible(false);
1281
+ break;
1282
+ default:
1283
+ navigationInput(event);
1284
+ break;
1285
+ }
1286
+ }
1287
+ function onClickAction() {
1288
+ setVisible(false);
1289
+ setValue('');
1290
+ if (formControl) {
1291
+ setChangeInternal(true);
1292
+ formControl.setState(undefined);
1293
+ }
1294
+ if (onValue) {
1295
+ onValue(undefined);
1296
+ }
1297
+ }
1298
+ function onClickBackdrop() {
1299
+ setVisible(false);
1300
+ }
1301
+ function onClickItem(element) {
1302
+ return () => {
1303
+ onChange(element);
1304
+ };
1305
+ }
1306
+ function onKeydownItem(element) {
1307
+ return (event) => {
1308
+ switch (event.code) {
1309
+ case 'Enter':
1310
+ onChange(element);
1311
+ break;
1312
+ default:
1313
+ navigationElement(event);
1314
+ break;
1315
+ }
1316
+ };
1317
+ }
1318
+ function onChange({ description, value }) {
1319
+ setVisible(false);
1320
+ if (onSelect) {
1321
+ onSelect(value);
1322
+ }
1323
+ else {
1324
+ if (formControl) {
1325
+ setChangeInternal(true);
1326
+ formControl.setState(value);
1327
+ }
1328
+ setValue(description);
1329
+ }
1330
+ if (onValue) {
1331
+ onValue(value);
1332
+ }
1333
+ }
1334
+ function filterSuggestions(pattern, reboot = false) {
1335
+ if (pattern) {
1336
+ const store = reboot ? createStoreEmpty() : searchForPattern(pattern);
1337
+ const filters = store?.coincidences || suggestions;
1338
+ const coincidences = filters.filter((element) => element.hasCoincidence(pattern));
1339
+ setCoincidences(coincidences.slice(0, MAX_ELEMENTS));
1340
+ setStore({
1341
+ coincidences,
1342
+ pattern,
1343
+ previous: store
1344
+ });
1345
+ }
1346
+ else {
1347
+ setCoincidences(suggestions.slice(0, MAX_ELEMENTS));
1348
+ rebootStore();
1349
+ }
1350
+ }
1351
+ function searchForPattern(value) {
1352
+ if (!store.pattern) {
1353
+ return null;
1354
+ }
1355
+ let newStore = store;
1356
+ let search = false;
1357
+ while (!search && newStore) {
1358
+ search = helpersString.hasPattern(value, newStore.pattern, true);
1359
+ if (!search) {
1360
+ newStore = newStore.previous;
1361
+ }
1362
+ }
1363
+ return newStore || rebootStore();
1364
+ }
1365
+ function rebootStore() {
1366
+ const newStore = createStoreEmpty();
1367
+ setStore(newStore);
1368
+ return newStore;
1369
+ }
1370
+ function createStoreEmpty() {
1371
+ return {
1372
+ coincidences: undefined,
1373
+ pattern: '',
1374
+ previous: null
1375
+ };
1376
+ }
1377
+ return (jsxRuntime.jsxs("div", { ref: boxContentRef, className: renderClassStatus('rls-box-field', {
1378
+ disabled,
1379
+ active,
1380
+ selected: !!value
1381
+ }, 'rls-autocomplete-field rls-list-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("label", { className: "rls-list-field__control", onClick: onClickControl, children: value ? (jsxRuntime.jsx("span", { className: "rls-list-field__control__description", children: value })) : (jsxRuntime.jsx("span", { className: "rls-list-field__control__placeholder", children: placeholder })) }), !hiddenIcon && value && (jsxRuntime.jsx("button", { className: "rls-list-field__action", disabled: disabled, onClick: onClickAction, children: jsxRuntime.jsx(RlsIcon, { value: "trash-2" }) }))] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) })), jsxRuntime.jsxs("div", { className: renderClassStatus('rls-list-field__suggestions', {
1382
+ visible,
1383
+ hide: !visible,
1384
+ higher
1385
+ }), children: [jsxRuntime.jsx("div", { className: "rls-list-field__suggestions__body", children: jsxRuntime.jsxs("ul", { ref: listRef, className: "rls-list-field__ul", children: [jsxRuntime.jsxs("div", { className: "rls-list-field__ul__search", children: [jsxRuntime.jsx("input", { ref: inputRef, className: "rls-list-field__ul__control", type: "text", value: pattern, onChange: ({ target: { value } }) => {
1386
+ setPattern(value);
1387
+ }, disabled: disabled || searching, onFocus: onFocusInput, onBlur: onBlurInput, onKeyDown: onKeydownInput }), onSearch && (jsxRuntime.jsx("button", { disabled: disabled || searching, onClick: () => {
1388
+ onSearch(pattern);
1389
+ }, children: jsxRuntime.jsx(RlsIcon, { value: "search" }) }))] }), searching && jsxRuntime.jsx(RlsProgressBar, { indeterminate: true }), coincidences.map((element, index) => (jsxRuntime.jsx("li", { className: "rls-list-field__element", tabIndex: -1, onClick: onClickItem(element), onKeyDown: onKeydownItem(element), children: jsxRuntime.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: element.title }) }, index))), !coincidences.length && (jsxRuntime.jsx("li", { className: "rls-list-field__empty", children: jsxRuntime.jsxs("div", { className: "rls-list-field__empty__description", children: [jsxRuntime.jsx("label", { className: "label-bold truncate", children: "Selecci\u00F3n no disponible" }), jsxRuntime.jsx("p", { className: "caption-regular", children: "Lo sentimos, en el momento no hay elementos en el listado" })] }) }))] }) }), jsxRuntime.jsx("div", { className: "rls-list-field__backdrop", onClick: onClickBackdrop })] })] }));
1390
+ }
1391
+
1392
+ function RlsCard({ children, outline, rlsTheme }) {
1393
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-card', { outline }), "rls-theme": rlsTheme, children: jsxRuntime.jsx("div", { className: "rls-card__content", children: children }) }));
1394
+ }
1395
+
1396
+ class ConfirmationResult extends helpersAdvanced.PartialSealed {
1397
+ static approved() {
1398
+ return new ConfirmationResult('approved');
1399
+ }
1400
+ static reject() {
1401
+ return new ConfirmationResult('reject');
1402
+ }
1403
+ }
1404
+ function RlsConfirmation({ approved, content, reject, rlsTheme, subtitle, title, visible }) {
1405
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-confirmation', { visible }), "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-confirmation__component", children: [jsxRuntime.jsxs("div", { className: "rls-confirmation__header", children: [title && (jsxRuntime.jsx("div", { className: "rls-confirmation__header__title", children: title })), subtitle && (jsxRuntime.jsx("div", { className: "rls-confirmation__header__subtitle", children: subtitle }))] }), jsxRuntime.jsx("div", { className: "rls-confirmation__body", children: content && (jsxRuntime.jsx("div", { className: "rls-confirmation__body__content", children: content })) }), (approved || reject) && (jsxRuntime.jsx("div", { className: "rls-confirmation__footer", children: jsxRuntime.jsxs("div", { className: "rls-confirmation__footer__actions", children: [approved && (jsxRuntime.jsx(RlsButton, { type: "raised", onClick: () => {
1406
+ if (approved.onClick) {
1407
+ approved.onClick();
1408
+ }
1409
+ }, children: approved.label })), reject && (jsxRuntime.jsx(RlsButton, { type: "outline", onClick: () => {
1410
+ if (reject.onClick) {
1411
+ reject.onClick();
1412
+ }
1413
+ }, children: reject.label }))] }) }))] }), jsxRuntime.jsx("div", { className: "rls-confirmation__backdrop" })] }));
1414
+ }
1415
+ function useConfirmationService() {
1416
+ const [config, setConfig] = react.useState({});
1417
+ const [visible, setVisible] = react.useState(false);
1418
+ const rlsConfirmation = ReactDOM.createPortal(jsxRuntime.jsx(RlsConfirmation, { ...config, visible: visible }), document.body);
1419
+ function confirmation(config) {
1420
+ return new Promise((resolve) => {
1421
+ const { content, rlsTheme, subtitle, title, approved, reject } = config;
1422
+ setConfig({
1423
+ content,
1424
+ rlsTheme,
1425
+ subtitle,
1426
+ title,
1427
+ approved: {
1428
+ label: approved || 'Aceptar',
1429
+ onClick: () => {
1430
+ setVisible(false);
1431
+ resolve(ConfirmationResult.approved());
1432
+ }
1433
+ },
1434
+ reject: reject
1435
+ ? {
1436
+ label: reject,
1437
+ onClick: () => {
1438
+ setVisible(false);
1439
+ resolve(ConfirmationResult.reject());
1440
+ }
1441
+ }
1442
+ : undefined
1443
+ });
1444
+ setVisible(true);
1445
+ });
1446
+ }
1447
+ return {
1448
+ RlsConfirmation: rlsConfirmation,
1449
+ confirmation
1450
+ };
1451
+ }
1452
+
1453
+ function RlsDatatableHeader({ children }) {
1454
+ return jsxRuntime.jsx("tr", { className: "rls-datatable__header", children: children });
1455
+ }
1456
+ function RlsDatatableTitle({ children, className, control }) {
1457
+ return (jsxRuntime.jsx("th", { className: `${className} ` + renderClassStatus('rls-datatable__title', { control }), children: children }));
1458
+ }
1459
+ function RlsDatatableData({ children, className }) {
1460
+ return jsxRuntime.jsx("tr", { className: `rls-datatable__data ${className}`, children: children });
1461
+ }
1462
+ function RlsDatatableCell({ children, className, control, overflow }) {
1463
+ return (jsxRuntime.jsx("th", { className: `${className} ` +
1464
+ renderClassStatus('rls-datatable__cell', { control, overflow }), children: children }));
1465
+ }
1466
+ function RlsDatatable({ children, footer, header, rlsTheme }) {
1467
+ return (jsxRuntime.jsxs("div", { className: "rls-datatable", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("table", { children: [header && jsxRuntime.jsx("thead", { className: "rls-datatable__thead", children: header }), jsxRuntime.jsx("tbody", { className: "rls-datatable__tbody", children: children })] }), footer && jsxRuntime.jsx("div", { className: "rls-datatable__tfooter", children: footer })] }));
1468
+ }
1469
+
1470
+ const controlIsValid = (props) => {
1471
+ const { state, validators } = props;
1472
+ return validators.reduce((errors, validator) => {
1473
+ const error = validator(state);
1474
+ if (error) {
1475
+ errors.push(error);
1476
+ }
1477
+ return errors;
1478
+ }, []);
1479
+ };
1480
+
1481
+ function useReactControl(props = {}) {
1482
+ const [state, setCurrentState] = react.useState(props.state);
1483
+ const [value, setValue] = react.useState(props.state);
1484
+ const [touched, setTouched] = react.useState(false);
1485
+ const [dirty, setDirty] = react.useState(false);
1486
+ const [focused, setFocused] = react.useState(false);
1487
+ const [disabled, setDisabled] = react.useState(false);
1488
+ const [initialValue] = react.useState(props.state);
1489
+ const [validators, setValidators] = react.useState(props.validators);
1490
+ const [subscribers] = react.useState(new rxjs.BehaviorSubject(props.state));
1491
+ const elementRef = react.useRef(null);
1492
+ const errors = (() => validators ? controlIsValid({ state, validators }) : [])();
1493
+ const error = (() => errors[0])();
1494
+ const valid = (() => errors.length === 0)();
1495
+ react.useEffect(() => {
1496
+ if (state !== null && state !== undefined) {
1497
+ setValue(state);
1498
+ }
1499
+ subscribers.next(state);
1500
+ }, [state]);
1501
+ function focus() {
1502
+ setFocused(true);
1503
+ }
1504
+ function blur() {
1505
+ setFocused(false);
1506
+ }
1507
+ function disable() {
1508
+ setDisabled(true);
1509
+ }
1510
+ function enable() {
1511
+ setDisabled(false);
1512
+ }
1513
+ function touch() {
1514
+ setTouched(true);
1515
+ }
1516
+ function untouch() {
1517
+ setTouched(false);
1518
+ }
1519
+ function setState(state) {
1520
+ setDirty(true);
1521
+ setCurrentState(state);
1522
+ }
1523
+ function reset() {
1524
+ setTouched(false);
1525
+ setDirty(false);
1526
+ setCurrentState(initialValue);
1527
+ }
1528
+ function subscribe(subscriber) {
1529
+ return subscribers.subscribe(subscriber);
1530
+ }
1531
+ return {
1532
+ elementRef,
1533
+ error,
1534
+ errors,
1535
+ focused,
1536
+ unfocused: !focused,
1537
+ dirty,
1538
+ pristine: !dirty,
1539
+ disabled,
1540
+ enabled: !disabled,
1541
+ valid,
1542
+ invalid: !valid,
1543
+ touched,
1544
+ untouched: !touched,
1545
+ reset,
1546
+ focus,
1547
+ blur,
1548
+ disable,
1549
+ enable,
1550
+ touch,
1551
+ untouch,
1552
+ setState,
1553
+ setValidators,
1554
+ state,
1555
+ subscribe,
1556
+ value
1557
+ };
1558
+ }
1559
+
1560
+ var PickerListenerType;
1561
+ (function (PickerListenerType) {
1562
+ PickerListenerType["Select"] = "PickerSelect";
1563
+ PickerListenerType["Now"] = "PickerNow";
1564
+ PickerListenerType["Cancel"] = "PickerCancel";
1565
+ })(PickerListenerType || (PickerListenerType = {}));
1566
+
1567
+ function verifyDateRange(date, min, max) {
1568
+ return min && helpersDate.isBefore(min, date)
1569
+ ? min
1570
+ : max && helpersDate.isAfter(max, date)
1571
+ ? max
1572
+ : date;
1573
+ }
1574
+
1575
+ const FORMAT_DESCRIPTION = '{dw}, {mx} {dd} de {aa}';
1576
+ const VISIBILITY_STATE$1 = {
1577
+ month: false,
1578
+ day: false,
1579
+ year: false
1580
+ };
1581
+ const VISIBILITY$1 = {
1582
+ DAY: {
1583
+ ...VISIBILITY_STATE$1,
1584
+ day: true
1585
+ },
1586
+ MONTH: {
1587
+ ...VISIBILITY_STATE$1,
1588
+ month: true
1589
+ },
1590
+ YEAR: {
1591
+ ...VISIBILITY_STATE$1,
1592
+ year: true
1593
+ }
1594
+ };
1595
+ function RlsDatePicker({ automatic, date, formControl, disabled, maxDate, minDate, onListener, rlsTheme }) {
1596
+ const dateInitial = formControl?.state || date || new Date();
1597
+ const yearControl = useReactControl({ state: dateInitial.getFullYear() });
1598
+ const dayControl = useReactControl({ state: dateInitial.getDate() });
1599
+ const monthControl = useReactControl({ state: dateInitial.getMonth() });
1600
+ const [value, setValue] = react.useState(dateInitial);
1601
+ const [{ day, month, year }, setVisibility] = react.useState(VISIBILITY$1.DAY);
1602
+ const title = helpersDate.formatDate(value, FORMAT_DESCRIPTION);
1603
+ react.useEffect(() => {
1604
+ setValue((prevValue) => {
1605
+ return typeof yearControl.state === 'number'
1606
+ ? verifyDateRange(helpersDate.refactorYear(prevValue, yearControl.state), minDate, maxDate)
1607
+ : prevValue;
1608
+ });
1609
+ setVisibility(VISIBILITY$1.DAY);
1610
+ }, [yearControl.state]);
1611
+ react.useEffect(() => {
1612
+ setValue((prevValue) => {
1613
+ return typeof monthControl.state === 'number'
1614
+ ? verifyDateRange(helpersDate.refactorMonth(prevValue, monthControl.state), minDate, maxDate)
1615
+ : prevValue;
1616
+ });
1617
+ setVisibility(VISIBILITY$1.DAY);
1618
+ }, [monthControl.state]);
1619
+ react.useEffect(() => {
1620
+ setValue((prevValue) => {
1621
+ return typeof dayControl.state === 'number'
1622
+ ? verifyDateRange(helpersDate.refactorDay(prevValue, dayControl.state), minDate, maxDate)
1623
+ : prevValue;
1624
+ });
1625
+ }, [dayControl.state]);
1626
+ function onVisibilityDay() {
1627
+ setVisibility(VISIBILITY$1.DAY);
1628
+ }
1629
+ function onVisibilityMonth() {
1630
+ setVisibility(VISIBILITY$1.MONTH);
1631
+ }
1632
+ function onVisibilityYear() {
1633
+ setVisibility(VISIBILITY$1.YEAR);
1634
+ }
1635
+ function onCancel() {
1636
+ if (onListener) {
1637
+ onListener({ type: PickerListenerType.Cancel });
1638
+ }
1639
+ }
1640
+ function onToday() {
1641
+ const value = new Date(); // Today date
1642
+ formControl?.setState(value);
1643
+ setValue(value);
1644
+ yearControl.setState(value.getFullYear());
1645
+ dayControl.setState(value.getDate());
1646
+ monthControl.setState(value.getMonth());
1647
+ if (onListener) {
1648
+ onListener({ type: PickerListenerType.Now, value });
1649
+ }
1650
+ }
1651
+ function onSelect() {
1652
+ formControl?.setState(value);
1653
+ if (onListener) {
1654
+ onListener({ type: PickerListenerType.Select, value });
1655
+ }
1656
+ }
1657
+ return (jsxRuntime.jsxs("div", { className: "rls-date-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-date-picker__header", children: [jsxRuntime.jsx("div", { className: "rls-date-picker__title rls-date-picker__title--description", children: jsxRuntime.jsx("span", { onClick: onVisibilityDay, children: title }) }), jsxRuntime.jsx("div", { className: "rls-date-picker__title rls-date-picker__title--year", children: jsxRuntime.jsx("span", { onClick: onVisibilityYear, children: yearControl.value }) }), jsxRuntime.jsx(RlsMonthTitlePicker, { monthControl: monthControl, yearControl: yearControl, date: value, maxDate: maxDate, minDate: minDate, onClick: onVisibilityMonth })] }), jsxRuntime.jsxs("div", { className: renderClassStatus('rls-date-picker__component', {
1658
+ year,
1659
+ day,
1660
+ month
1661
+ }), children: [jsxRuntime.jsx(RlsDayPicker, { formControl: dayControl, date: value, maxDate: maxDate, minDate: minDate, disabled: disabled }), jsxRuntime.jsx(RlsMonthPicker, { formControl: monthControl, date: value, maxDate: maxDate, minDate: minDate, disabled: disabled }), jsxRuntime.jsx(RlsYearPicker, { formControl: yearControl, date: value, maxDate: maxDate, minDate: minDate, disabled: disabled })] }), jsxRuntime.jsx("div", { className: renderClassStatus('rls-date-picker__footer', { automatic }), children: jsxRuntime.jsxs("div", { className: "rls-date-picker__actions", children: [jsxRuntime.jsx("div", { className: "rls-date-picker__actions--cancel", children: jsxRuntime.jsx(RlsButton, { type: "ghost", onClick: onCancel, children: "Cancelar" }) }), jsxRuntime.jsx("div", { className: "rls-date-picker__actions--today", children: jsxRuntime.jsx(RlsButton, { type: "ghost", onClick: onToday, children: "Hoy" }) }), jsxRuntime.jsx("div", { className: "rls-date-picker__actions--ok", children: jsxRuntime.jsx(RlsButton, { type: "raised", onClick: onSelect, children: "Establecer" }) })] }) })] }));
1662
+ }
1663
+
1664
+ function RlsModal({ children, visible, rlsTheme }) {
1665
+ return ReactDOM.createPortal(jsxRuntime.jsxs("div", { className: renderClassStatus('rls-modal', { visible }), "rls-theme": rlsTheme, children: [jsxRuntime.jsx("div", { className: "rls-modal__component", children: children }), jsxRuntime.jsx("div", { className: "rls-modal__backdrop" })] }), document.body);
1666
+ }
1667
+
1668
+ function RlsDateField({ children, date, disabled, formControl, maxDate, minDate, placeholder, rlsTheme }) {
1669
+ const dateInitial = formControl?.state || date || new Date();
1670
+ const [value, setValue] = react.useState(dateInitial);
1671
+ const [show, setShow] = react.useState(false);
1672
+ const [description, setDescription] = react.useState('');
1673
+ react.useEffect(() => {
1674
+ setDescription(value ? helpersDate.formatDate(value, '{dd}/{mx}/{aa}') : '');
1675
+ }, [value]);
1676
+ function onClickInput() {
1677
+ setShow(true);
1678
+ }
1679
+ function onClean() {
1680
+ if (value) {
1681
+ formControl?.setState(undefined);
1682
+ setValue(undefined);
1683
+ if (formControl && !formControl.touched) {
1684
+ formControl.touch();
1685
+ }
1686
+ }
1687
+ else {
1688
+ setShow(true);
1689
+ }
1690
+ }
1691
+ return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: renderClassStatus('rls-box-field', { disabled }), children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput, disabled: disabled }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClean, disabled: disabled, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) }))] }), jsxRuntime.jsx(RlsModal, { visible: show, children: jsxRuntime.jsx(RlsDatePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value }) => {
1692
+ if (value) {
1693
+ setValue(value);
1694
+ }
1695
+ setShow(false);
1696
+ if (formControl && !formControl.touched) {
1697
+ formControl.touch();
1698
+ }
1699
+ } }) })] }));
1700
+ }
1701
+
1702
+ const VISIBILITY_STATE = {
1703
+ month: false,
1704
+ day: false,
1705
+ year: false
1706
+ };
1707
+ const VISIBILITY = {
1708
+ DAY: {
1709
+ ...VISIBILITY_STATE,
1710
+ day: true
1711
+ },
1712
+ MONTH: {
1713
+ ...VISIBILITY_STATE,
1714
+ month: true
1715
+ },
1716
+ YEAR: {
1717
+ ...VISIBILITY_STATE,
1718
+ year: true
1719
+ }
1720
+ };
1721
+ function RlsDateRangePicker({ automatic, date: datePicker, disabled, formControl, maxDate, minDate, rlsTheme, onListener }) {
1722
+ const dateInitial = helpersDate.normalizeMinTime(datePicker || new Date());
1723
+ const rangeInitial = formControl?.state || DateRange.now();
1724
+ const yearControl = useReactControl({ state: dateInitial.getFullYear() });
1725
+ const monthControl = useReactControl({ state: dateInitial.getMonth() });
1726
+ const dayControl = useReactControl({ state: rangeInitial });
1727
+ const [value, setValue] = react.useState(rangeInitial);
1728
+ const [date, setDate] = react.useState(dateInitial);
1729
+ const [{ day, month, year }, setVisibility] = react.useState(VISIBILITY.DAY);
1730
+ react.useEffect(() => {
1731
+ setDate((prevValue) => {
1732
+ return typeof yearControl.state === 'number'
1733
+ ? helpersDate.refactorYear(prevValue, yearControl.state)
1734
+ : prevValue;
1735
+ });
1736
+ setVisibility(VISIBILITY.DAY);
1737
+ }, [yearControl.state]);
1738
+ react.useEffect(() => {
1739
+ setDate((prevValue) => {
1740
+ return typeof monthControl.state === 'number'
1741
+ ? helpersDate.refactorMonth(prevValue, monthControl.state)
1742
+ : prevValue;
1743
+ });
1744
+ setVisibility(VISIBILITY.DAY);
1745
+ }, [monthControl.state]);
1746
+ react.useEffect(() => {
1747
+ if (dayControl.state) {
1748
+ setValue(dayControl.state);
1749
+ }
1750
+ setVisibility(VISIBILITY.DAY);
1751
+ }, [dayControl.state]);
1752
+ function onVisibilityDay() {
1753
+ setVisibility(VISIBILITY.DAY);
1754
+ }
1755
+ function onVisibilityMonth() {
1756
+ setVisibility(VISIBILITY.MONTH);
1757
+ }
1758
+ function onVisibilityYear() {
1759
+ setVisibility(VISIBILITY.YEAR);
1760
+ }
1761
+ function onCancel() {
1762
+ if (onListener) {
1763
+ onListener({ type: PickerListenerType.Cancel });
1764
+ }
1765
+ }
1766
+ function onSelect() {
1767
+ formControl?.setState(value);
1768
+ if (onListener) {
1769
+ onListener({ type: PickerListenerType.Select, value });
1770
+ }
1771
+ }
1772
+ return (jsxRuntime.jsxs("div", { className: "rls-date-range-picker", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-date-range-picker__header", children: [jsxRuntime.jsx("div", { className: "rls-date-range-picker__title rls-date-range-picker__title--description", children: jsxRuntime.jsx("span", { onClick: onVisibilityDay, children: value.description }) }), jsxRuntime.jsx("div", { className: "rls-date-range-picker__title rls-date-range-picker__title--year", children: jsxRuntime.jsx("span", { onClick: onVisibilityYear, children: yearControl.state }) }), jsxRuntime.jsx(RlsMonthTitlePicker, { monthControl: monthControl, yearControl: yearControl, date: date, maxDate: maxDate, minDate: minDate, onClick: onVisibilityMonth })] }), jsxRuntime.jsxs("div", { className: renderClassStatus('rls-date-range-picker__component', {
1773
+ year,
1774
+ day,
1775
+ month
1776
+ }), children: [jsxRuntime.jsx(RlsDayRangePicker, { formControl: dayControl, date: date, maxDate: maxDate, minDate: minDate, disabled: disabled }), jsxRuntime.jsx(RlsMonthPicker, { formControl: monthControl, date: date, maxDate: maxDate, minDate: minDate, disabled: disabled }), jsxRuntime.jsx(RlsYearPicker, { formControl: yearControl, date: date, maxDate: maxDate, minDate: minDate, disabled: disabled })] }), jsxRuntime.jsx("div", { className: renderClassStatus('rls-date-range-picker__footer', {
1777
+ automatic
1778
+ }), children: jsxRuntime.jsxs("div", { className: "rls-date-range-picker__actions", children: [jsxRuntime.jsx("div", { className: "rls-date-range-picker__actions--cancel", children: jsxRuntime.jsx(RlsButton, { type: "ghost", onClick: onCancel, children: "Cancelar" }) }), jsxRuntime.jsx("div", { className: "rls-date-range-picker__actions--ok", children: jsxRuntime.jsx(RlsButton, { type: "raised", onClick: onSelect, children: "Establecer" }) })] }) })] }));
1779
+ }
1780
+
1781
+ function RlsDateRangeField({ children, date: datePicker, disabled, formControl, maxDate, minDate, placeholder, rlsTheme }) {
1782
+ const rangeInitial = formControl?.state || DateRange.now();
1783
+ const dateInitial = datePicker || new Date();
1784
+ const [value, setValue] = react.useState(rangeInitial);
1785
+ const [date] = react.useState(dateInitial);
1786
+ const [show, setShow] = react.useState(false);
1787
+ const [description, setDescription] = react.useState('');
1788
+ react.useEffect(() => {
1789
+ setDescription(value?.description || '');
1790
+ }, [value]);
1791
+ function onClickInput() {
1792
+ setShow(true);
1793
+ }
1794
+ function onClickAction() {
1795
+ if (value) {
1796
+ formControl?.setState(undefined);
1797
+ setValue(undefined);
1798
+ }
1799
+ else {
1800
+ setShow(true);
1801
+ }
1802
+ }
1803
+ return (jsxRuntime.jsxs("div", { className: "rls-date-field", "rls-theme": rlsTheme, children: [jsxRuntime.jsxs("div", { className: "rls-box-field", children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { className: "rls-date-field__control", type: "text", value: description, readOnly: true, placeholder: placeholder, onClick: onClickInput }), jsxRuntime.jsx("button", { className: "rls-date-field__action", onClick: onClickAction, children: jsxRuntime.jsx(RlsIcon, { value: value ? 'trash-2' : 'calendar' }) })] }) })] }), jsxRuntime.jsx(RlsModal, { visible: show, children: jsxRuntime.jsx(RlsDateRangePicker, { formControl: formControl, date: date, disabled: disabled, maxDate: maxDate, minDate: minDate, onListener: ({ value }) => {
1804
+ if (value) {
1805
+ setValue(value);
1806
+ }
1807
+ setShow(false);
1808
+ } }) })] }));
1809
+ }
1810
+
1811
+ function RlsFormNavigation({ children, visible, rlsTheme }) {
1812
+ return (jsxRuntime.jsx("div", { className: renderClassStatus('rls-form-navigation', { visible }), "rls-theme": rlsTheme, children: jsxRuntime.jsx("div", { className: "rls-form-navigation__body", children: children }) }));
1813
+ }
1814
+
1815
+ function RlsSelectField({ suggestions, children, disabled, formControl, onSelect, onValue, placeholder, rlsTheme }) {
1816
+ const { active, boxContentRef, higher, inputRef, listRef, collection, value, visible, setActive, setValue, setVisible, navigationElement, navigationInput } = useListControl({ suggestions, formControl });
1817
+ const [changeInternal, setChangeInternal] = react.useState(false);
1818
+ react.useEffect(() => {
1819
+ if (!changeInternal) {
1820
+ redefineDescription();
1821
+ }
1822
+ setChangeInternal(false);
1823
+ }, [formControl?.state]);
1824
+ react.useEffect(() => {
1825
+ redefineDescription();
1826
+ }, [collection]);
1827
+ function redefineDescription() {
1828
+ const element = formControl?.state && collection.findElement(formControl?.state);
1829
+ setValue(element?.description || '');
1830
+ }
1831
+ function onFocusInput() {
1832
+ setActive(true);
1833
+ }
1834
+ function onBlurInput() {
1835
+ setActive(false);
1836
+ }
1837
+ function onClickInput() {
1838
+ setVisible(true);
1839
+ }
1840
+ function onKeydownInput(event) {
1841
+ switch (event.code) {
1842
+ case 'Space':
1843
+ setVisible(true);
1844
+ break;
1845
+ case 'Enter':
1846
+ setVisible(true);
1847
+ break;
1848
+ case 'Escape':
1849
+ setVisible(false);
1850
+ break;
1851
+ case 'Tab':
1852
+ setVisible(false);
1853
+ break;
1854
+ default:
1855
+ navigationInput(event);
1856
+ break;
1857
+ }
1858
+ }
1859
+ function onClickAction() {
1860
+ const newVisible = !visible;
1861
+ setVisible(newVisible);
1862
+ if (newVisible) {
1863
+ inputRef?.current?.focus();
1864
+ }
1865
+ }
1866
+ function onClickBackdrop() {
1867
+ setVisible(false);
1868
+ }
1869
+ function onClickItem(element) {
1870
+ return () => {
1871
+ onChange(element);
1872
+ };
1873
+ }
1874
+ function onKeydownItem(element) {
1875
+ return (event) => {
1876
+ switch (event.code) {
1877
+ case 'Enter':
1878
+ onChange(element);
1879
+ break;
1880
+ default:
1881
+ navigationElement(event);
1882
+ break;
1883
+ }
1884
+ };
1885
+ }
1886
+ function onChange({ description, value }) {
1887
+ inputRef?.current?.focus();
1888
+ setVisible(false);
1889
+ if (onSelect) {
1890
+ onSelect(value);
1891
+ }
1892
+ else {
1893
+ if (formControl) {
1894
+ setChangeInternal(true);
1895
+ formControl.setState(value);
1896
+ }
1897
+ setValue(description);
1898
+ }
1899
+ if (onValue) {
1900
+ onValue(value);
1901
+ }
1902
+ }
1903
+ return (jsxRuntime.jsxs("div", { ref: boxContentRef, className: renderClassStatus('rls-box-field', { active, disabled }, 'rls-select-field rls-list-field'), "rls-theme": rlsTheme, children: [children && jsxRuntime.jsx("label", { className: "rls-box-field__label", children: children }), jsxRuntime.jsx("div", { className: "rls-box-field__component", children: jsxRuntime.jsxs("div", { className: "rls-box-field__body", children: [jsxRuntime.jsx("input", { ref: inputRef, className: "rls-list-field__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: value, onFocus: onFocusInput, onBlur: onBlurInput, onClick: onClickInput, onKeyDown: onKeydownInput }), jsxRuntime.jsx("button", { className: renderClassStatus('rls-list-field__action', { visible }), disabled: disabled, onClick: onClickAction, children: jsxRuntime.jsx(RlsIcon, { value: "arrow-ios-down" }) })] }) }), formControl?.touched && formControl?.error && (jsxRuntime.jsx("div", { className: "rls-box-field__error", children: jsxRuntime.jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) })), jsxRuntime.jsxs("div", { className: renderClassStatus('rls-list-field__suggestions', {
1904
+ visible,
1905
+ hide: !visible,
1906
+ higher
1907
+ }), children: [jsxRuntime.jsx("div", { className: "rls-list-field__suggestions__body", children: jsxRuntime.jsxs("ul", { ref: listRef, className: "rls-list-field__ul", children: [suggestions.map((element, index) => (jsxRuntime.jsx("li", { className: "rls-list-field__element", tabIndex: -1, onClick: onClickItem(element), onKeyDown: onKeydownItem(element), children: jsxRuntime.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: element.title }) }, index))), !suggestions.length && (jsxRuntime.jsx("li", { className: "rls-list-field__empty", children: jsxRuntime.jsxs("div", { className: "rls-list-field__empty__description", children: [jsxRuntime.jsx("label", { className: "label-bold truncate", children: "Selecci\u00F3n no disponible" }), jsxRuntime.jsx("p", { className: "caption-regular", children: "Lo sentimos, en el momento no hay elementos en el listado" })] }) }))] }) }), jsxRuntime.jsx("div", { className: "rls-list-field__backdrop", onClick: onClickBackdrop })] })] }));
1908
+ }
1909
+
1910
+ const DURATION_ANIMATION = 240;
1911
+ const DURATION_CHAR = 75;
1912
+ const DURATION_MAX = 9000;
1913
+ const DURATION_MIN = 3000;
1914
+ const DURATION_RESET = 480;
1915
+ function calculateDuration({ length }) {
1916
+ let duration = length * DURATION_CHAR;
1917
+ if (duration < DURATION_MIN) {
1918
+ duration = DURATION_MIN;
1919
+ }
1920
+ else if (duration > DURATION_MAX) {
1921
+ duration = DURATION_MAX;
1922
+ }
1923
+ return duration + DURATION_RESET;
1924
+ }
1925
+ function RlsSnackbar({ content, icon, title, visible, rlsTheme }) {
1926
+ return (jsxRuntime.jsxs("div", { className: renderClassStatus('rls-snackbar', { visible }), "rls-theme": rlsTheme, children: [icon && (jsxRuntime.jsx("div", { className: "rls-snackbar__avatar", children: jsxRuntime.jsx(RlsIcon, { value: icon }) })), jsxRuntime.jsxs("div", { className: "rls-snackbar__component", children: [title && jsxRuntime.jsx("div", { className: "rls-snackbar__title", children: title }), jsxRuntime.jsx("div", { className: "rls-snackbar__content", children: content })] })] }));
1927
+ }
1928
+ function useSnackbarService() {
1929
+ const [config, setConfig] = react.useState({});
1930
+ const [duration, setDuration] = react.useState(4000);
1931
+ const [timeoutId, setTimeoutId] = react.useState();
1932
+ const [visible, setVisible] = react.useState(false);
1933
+ const rlsSnackbar = jsxRuntime.jsx(RlsSnackbar, { ...config, visible: visible });
1934
+ react.useEffect(() => {
1935
+ if (visible) {
1936
+ const timeoutId = setTimeout(() => {
1937
+ setVisible(false);
1938
+ setTimeoutId(undefined);
1939
+ }, duration);
1940
+ setTimeoutId(timeoutId);
1941
+ }
1942
+ else if (timeoutId) {
1943
+ clearTimeout(timeoutId);
1944
+ setTimeout(() => snackbar(config), DURATION_ANIMATION);
1945
+ }
1946
+ }, [visible]);
1947
+ function snackbar(config) {
1948
+ const { content } = config;
1949
+ setConfig(config);
1950
+ setDuration(calculateDuration(String(content)));
1951
+ setVisible(!visible);
1952
+ }
1953
+ return {
1954
+ RlsSnackbar: rlsSnackbar,
1955
+ snackbar
1956
+ };
1957
+ }
1958
+
1959
+ const RlsContext = react.createContext({
1960
+ confirmation: () => {
1961
+ return Promise.resolve(ConfirmationResult.approved());
1962
+ },
1963
+ snackbar: () => { }
1964
+ });
1965
+ function RlsApplication({ children }) {
1966
+ const { RlsConfirmation, confirmation } = useConfirmationService();
1967
+ const { RlsSnackbar, snackbar } = useSnackbarService();
1968
+ return (jsxRuntime.jsxs(RlsContext.Provider, { value: { confirmation, snackbar }, children: [jsxRuntime.jsx("div", { className: "rls-app__body", children: children }), RlsSnackbar, RlsConfirmation] }));
1969
+ }
1970
+
1971
+ exports.ConfirmationResult = ConfirmationResult;
1972
+ exports.DateRange = DateRange;
1973
+ exports.ListFieldCollection = ListFieldCollection;
1974
+ exports.RlsAmount = RlsAmount;
1975
+ exports.RlsApplication = RlsApplication;
1976
+ exports.RlsAutocompleteField = RlsAutocompleteField;
1977
+ exports.RlsAvatar = RlsAvatar;
1978
+ exports.RlsBallot = RlsBallot;
1979
+ exports.RlsBreadcrumb = RlsBreadcrumb;
1980
+ exports.RlsButton = RlsButton;
1981
+ exports.RlsButtonAction = RlsButtonAction;
1982
+ exports.RlsButtonToggle = RlsButtonToggle;
1983
+ exports.RlsCard = RlsCard;
1984
+ exports.RlsCheckBox = RlsCheckBox;
1985
+ exports.RlsCheckBoxControl = RlsCheckBoxControl;
1986
+ exports.RlsCheckBoxLabel = RlsCheckBoxLabel;
1987
+ exports.RlsConfirmation = RlsConfirmation;
1988
+ exports.RlsContext = RlsContext;
1989
+ exports.RlsDatatable = RlsDatatable;
1990
+ exports.RlsDatatableCell = RlsDatatableCell;
1991
+ exports.RlsDatatableData = RlsDatatableData;
1992
+ exports.RlsDatatableHeader = RlsDatatableHeader;
1993
+ exports.RlsDatatableTitle = RlsDatatableTitle;
1994
+ exports.RlsDateField = RlsDateField;
1995
+ exports.RlsDatePicker = RlsDatePicker;
1996
+ exports.RlsDateRangeField = RlsDateRangeField;
1997
+ exports.RlsDateRangePicker = RlsDateRangePicker;
1998
+ exports.RlsDayPicker = RlsDayPicker;
1999
+ exports.RlsDayRangePicker = RlsDayRangePicker;
2000
+ exports.RlsFormNavigation = RlsFormNavigation;
2001
+ exports.RlsIcon = RlsIcon;
2002
+ exports.RlsInput = RlsInput;
2003
+ exports.RlsInputMoney = RlsInputMoney;
2004
+ exports.RlsInputNumber = RlsInputNumber;
2005
+ exports.RlsInputPassword = RlsInputPassword;
2006
+ exports.RlsInputText = RlsInputText;
2007
+ exports.RlsLabel = RlsLabel;
2008
+ exports.RlsMessageIcon = RlsMessageIcon;
2009
+ exports.RlsModal = RlsModal;
2010
+ exports.RlsMoneyField = RlsMoneyField;
2011
+ exports.RlsMonthPicker = RlsMonthPicker;
2012
+ exports.RlsMonthTitlePicker = RlsMonthTitlePicker;
2013
+ exports.RlsNumberField = RlsNumberField;
2014
+ exports.RlsPagination = RlsPagination;
2015
+ exports.RlsPasswordField = RlsPasswordField;
2016
+ exports.RlsPoster = RlsPoster;
2017
+ exports.RlsProgressBar = RlsProgressBar;
2018
+ exports.RlsRadioButton = RlsRadioButton;
2019
+ exports.RlsRadioButtonLabel = RlsRadioButtonLabel;
2020
+ exports.RlsSearchInput = RlsSearchInput;
2021
+ exports.RlsSelectField = RlsSelectField;
2022
+ exports.RlsSkeleton = RlsSkeleton;
2023
+ exports.RlsSkeletonText = RlsSkeletonText;
2024
+ exports.RlsSnackbar = RlsSnackbar;
2025
+ exports.RlsSwitch = RlsSwitch;
2026
+ exports.RlsSwitchControl = RlsSwitchControl;
2027
+ exports.RlsSwitchLabel = RlsSwitchLabel;
2028
+ exports.RlsTabularText = RlsTabularText;
2029
+ exports.RlsTextField = RlsTextField;
2030
+ exports.RlsToolbar = RlsToolbar;
2031
+ exports.RlsYearPicker = RlsYearPicker;
2032
+ exports.renderClassStatus = renderClassStatus;
2033
+ exports.useConfirmationService = useConfirmationService;
2034
+ exports.useListControl = useListControl;
2035
+ exports.useSnackbarService = useSnackbarService;
2036
+ //# sourceMappingURL=index.js.map