@rolster/react-components 1.5.7 → 18.10.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 (153) hide show
  1. package/dist/cjs/assets/{lib.cjs-c052832f.css → index-Fy0sGm5F.css} +159 -106
  2. package/dist/cjs/index.js +2119 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/es/assets/{lib-c052832f.css → index-Fy0sGm5F.css} +159 -106
  5. package/dist/es/index.js +2051 -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 +1 -1
  12. package/dist/esm/components/atoms/CheckBox/CheckBox.d.ts +8 -1
  13. package/dist/esm/components/atoms/CheckBox/CheckBox.js +7 -2
  14. package/dist/esm/components/atoms/CheckBox/CheckBox.js.map +1 -1
  15. package/dist/esm/components/atoms/Icon/Icon.css +1 -1
  16. package/dist/esm/components/atoms/Input/Input.css +1 -1
  17. package/dist/esm/components/atoms/Input/Input.d.ts +3 -3
  18. package/dist/esm/components/atoms/Input/Input.js +12 -10
  19. package/dist/esm/components/atoms/Input/Input.js.map +1 -1
  20. package/dist/esm/components/atoms/InputMoney/InputMoney.d.ts +3 -3
  21. package/dist/esm/components/atoms/InputMoney/InputMoney.js +5 -10
  22. package/dist/esm/components/atoms/InputMoney/InputMoney.js.map +1 -1
  23. package/dist/esm/components/atoms/InputNumber/InputNumber.d.ts +3 -3
  24. package/dist/esm/components/atoms/InputNumber/InputNumber.js +5 -10
  25. package/dist/esm/components/atoms/InputNumber/InputNumber.js.map +1 -1
  26. package/dist/esm/components/atoms/InputPassword/InputPassword.d.ts +1 -1
  27. package/dist/esm/components/atoms/InputPassword/InputPassword.js +9 -7
  28. package/dist/esm/components/atoms/InputPassword/InputPassword.js.map +1 -1
  29. package/dist/esm/components/atoms/InputText/InputText.d.ts +3 -3
  30. package/dist/esm/components/atoms/InputText/InputText.js +5 -10
  31. package/dist/esm/components/atoms/InputText/InputText.js.map +1 -1
  32. package/dist/esm/components/atoms/Label/Label.css +3 -0
  33. package/dist/esm/components/atoms/Label/Label.d.ts +2 -0
  34. package/dist/esm/components/atoms/Label/Label.js +5 -0
  35. package/dist/esm/components/atoms/Label/Label.js.map +1 -0
  36. package/dist/esm/components/atoms/MessageIcon/MessageIcon.css +12 -0
  37. package/dist/esm/components/atoms/MessageIcon/MessageIcon.d.ts +7 -0
  38. package/dist/esm/components/atoms/MessageIcon/MessageIcon.js +7 -0
  39. package/dist/esm/components/atoms/MessageIcon/MessageIcon.js.map +1 -0
  40. package/dist/esm/components/atoms/RadioButton/RadioButton.d.ts +2 -1
  41. package/dist/esm/components/atoms/RadioButton/RadioButton.js +2 -2
  42. package/dist/esm/components/atoms/RadioButton/RadioButton.js.map +1 -1
  43. package/dist/esm/components/atoms/SearchInput/SearchInput.d.ts +2 -2
  44. package/dist/esm/components/atoms/Switch/Switch.css +40 -21
  45. package/dist/esm/components/atoms/Switch/Switch.d.ts +7 -1
  46. package/dist/esm/components/atoms/Switch/Switch.js +8 -3
  47. package/dist/esm/components/atoms/Switch/Switch.js.map +1 -1
  48. package/dist/esm/components/atoms/index.d.ts +2 -0
  49. package/dist/esm/components/atoms/index.js +2 -0
  50. package/dist/esm/components/atoms/index.js.map +1 -1
  51. package/dist/esm/components/molecules/ButtonToggle/ButtonToggle.js.map +1 -1
  52. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.css +1 -5
  53. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.d.ts +1 -1
  54. package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.js.map +1 -1
  55. package/dist/esm/components/molecules/DayPicker/DayPicker.d.ts +1 -1
  56. package/dist/esm/components/molecules/DayPicker/DayPicker.js +1 -1
  57. package/dist/esm/components/molecules/DayPicker/DayPicker.js.map +1 -1
  58. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.d.ts +1 -1
  59. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js +1 -1
  60. package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js.map +1 -1
  61. package/dist/esm/components/molecules/MoneyField/MoneyField.d.ts +4 -2
  62. package/dist/esm/components/molecules/MoneyField/MoneyField.js +7 -8
  63. package/dist/esm/components/molecules/MoneyField/MoneyField.js.map +1 -1
  64. package/dist/esm/components/molecules/MonthPicker/MonthPicker.d.ts +1 -1
  65. package/dist/esm/components/molecules/MonthPicker/MonthPicker.js.map +1 -1
  66. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.d.ts +1 -1
  67. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js +1 -1
  68. package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js.map +1 -1
  69. package/dist/esm/components/molecules/NumberField/NumberField.d.ts +4 -2
  70. package/dist/esm/components/molecules/NumberField/NumberField.js +7 -8
  71. package/dist/esm/components/molecules/NumberField/NumberField.js.map +1 -1
  72. package/dist/esm/components/molecules/Pagination/Pagination.js.map +1 -1
  73. package/dist/esm/components/molecules/PasswordField/PasswordField.d.ts +1 -1
  74. package/dist/esm/components/molecules/PasswordField/PasswordField.js +6 -7
  75. package/dist/esm/components/molecules/PasswordField/PasswordField.js.map +1 -1
  76. package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.d.ts +1 -1
  77. package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.js.map +1 -1
  78. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.css +2 -5
  79. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.d.ts +1 -1
  80. package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.js.map +1 -1
  81. package/dist/esm/components/molecules/TextField/TextField.d.ts +4 -2
  82. package/dist/esm/components/molecules/TextField/TextField.js +7 -8
  83. package/dist/esm/components/molecules/TextField/TextField.js.map +1 -1
  84. package/dist/esm/components/molecules/YearPicker/YearPicker.d.ts +2 -2
  85. package/dist/esm/components/molecules/YearPicker/YearPicker.js +2 -2
  86. package/dist/esm/components/molecules/YearPicker/YearPicker.js.map +1 -1
  87. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.css +21 -19
  88. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.d.ts +15 -8
  89. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js +26 -159
  90. package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js.map +1 -1
  91. package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.d.ts +27 -0
  92. package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.js +170 -0
  93. package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.js.map +1 -0
  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 +2 -1
  97. package/dist/esm/components/organisms/Confirmation/Confirmation.js.map +1 -1
  98. package/dist/esm/components/organisms/Datatable/Datatable.d.ts +2 -1
  99. package/dist/esm/components/organisms/Datatable/Datatable.js +3 -2
  100. package/dist/esm/components/organisms/Datatable/Datatable.js.map +1 -1
  101. package/dist/esm/components/organisms/DateField/DateField.css +3 -0
  102. package/dist/esm/components/organisms/DateField/DateField.d.ts +1 -1
  103. package/dist/esm/components/organisms/DateField/DateField.js +10 -3
  104. package/dist/esm/components/organisms/DateField/DateField.js.map +1 -1
  105. package/dist/esm/components/organisms/DatePicker/DatePicker.d.ts +1 -1
  106. package/dist/esm/components/organisms/DatePicker/DatePicker.js +4 -3
  107. package/dist/esm/components/organisms/DatePicker/DatePicker.js.map +1 -1
  108. package/dist/esm/components/organisms/DateRangeField/DateRangeField.d.ts +1 -1
  109. package/dist/esm/components/organisms/DateRangeField/DateRangeField.js.map +1 -1
  110. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.d.ts +1 -1
  111. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js +3 -2
  112. package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js.map +1 -1
  113. package/dist/esm/components/organisms/SelectField/SelectField.d.ts +13 -8
  114. package/dist/esm/components/organisms/SelectField/SelectField.js +21 -89
  115. package/dist/esm/components/organisms/SelectField/SelectField.js.map +1 -1
  116. package/dist/esm/components/organisms/SelectField/select-field.hook.d.ts +24 -0
  117. package/dist/esm/components/organisms/SelectField/select-field.hook.js +104 -0
  118. package/dist/esm/components/organisms/SelectField/select-field.hook.js.map +1 -0
  119. package/dist/esm/components/organisms/Snackbar/Snackbar.css +14 -16
  120. package/dist/esm/components/organisms/Snackbar/Snackbar.d.ts +1 -1
  121. package/dist/esm/components/organisms/Snackbar/Snackbar.js +1 -1
  122. package/dist/esm/components/organisms/Snackbar/Snackbar.js.map +1 -1
  123. package/dist/esm/hooks/index.d.ts +0 -2
  124. package/dist/esm/hooks/index.js +0 -2
  125. package/dist/esm/hooks/index.js.map +1 -1
  126. package/dist/esm/hooks/list-control.hook.d.ts +14 -8
  127. package/dist/esm/hooks/list-control.hook.js +22 -15
  128. package/dist/esm/hooks/list-control.hook.js.map +1 -1
  129. package/dist/esm/i18n.d.ts +18 -0
  130. package/dist/esm/i18n.js +23 -0
  131. package/dist/esm/i18n.js.map +1 -0
  132. package/dist/esm/models.d.ts +19 -8
  133. package/dist/esm/models.js +8 -9
  134. package/dist/esm/models.js.map +1 -1
  135. package/dist/esm/utils/css.d.ts +1 -1
  136. package/dist/esm/utils/css.js +4 -1
  137. package/dist/esm/utils/css.js.map +1 -1
  138. package/dist/esm/utils/date-range-picker.js.map +1 -1
  139. package/dist/esm/utils/day-picker.js.map +1 -1
  140. package/dist/esm/utils/month-picker.js +1 -1
  141. package/dist/esm/utils/month-picker.js.map +1 -1
  142. package/dist/esm/utils/year-picker.js.map +1 -1
  143. package/package.json +26 -11
  144. package/dist/cjs/lib.cjs.js +0 -3366
  145. package/dist/cjs/lib.cjs.js.map +0 -1
  146. package/dist/es/lib.js +0 -3300
  147. package/dist/es/lib.js.map +0 -1
  148. package/dist/esm/hooks/form-control.hook.d.ts +0 -15
  149. package/dist/esm/hooks/form-control.hook.js +0 -77
  150. package/dist/esm/hooks/form-control.hook.js.map +0 -1
  151. package/dist/esm/hooks/form-group.hook.d.ts +0 -2
  152. package/dist/esm/hooks/form-group.hook.js +0 -22
  153. package/dist/esm/hooks/form-group.hook.js.map +0 -1
@@ -1,15 +1,22 @@
1
- import { ReactControl } from '../../../hooks';
2
- import { ListFieldElement } from '../../../models';
1
+ import { ReactControl } from '@rolster/react-forms';
2
+ import { ReactNode } from 'react';
3
+ import { AbstractAutocompleteElement as Element, AutocompleteElement } from '../../../models';
3
4
  import { RlsComponent } from '../../definitions';
4
5
  import './AutocompleteField.css';
5
- interface AutocompleteField<T = unknown> extends RlsComponent {
6
- suggestions: ListFieldElement<T>[];
6
+ interface AutocompleteFieldProps<T = unknown, E extends Element<T> = Element<T>> extends RlsComponent {
7
+ suggestions: E[];
7
8
  disabled?: boolean;
8
- formControl?: ReactControl<HTMLElement>;
9
- onSearch?: (pattern: string) => void;
10
- onSelect?: (value: T) => void;
9
+ formControl?: ReactControl<HTMLElement, T>;
10
+ hiddenIcon?: boolean;
11
11
  placeholder?: string;
12
12
  searching?: boolean;
13
+ onSearch?: (pattern: string) => void;
14
+ onSelect?: (value: T) => void;
15
+ onValue?: (value?: T) => void;
16
+ }
17
+ interface AutocompleteFieldTemplateProps<T = unknown, E extends Element<T> = Element<T>> extends AutocompleteFieldProps<T, E> {
18
+ render: (element: E) => ReactNode;
13
19
  }
14
- export declare function RlsAutocompleteField<T = unknown>({ suggestions, children, disabled, formControl, onSearch, onSelect, placeholder, searching, rlsTheme }: AutocompleteField<T>): import("react/jsx-runtime").JSX.Element;
20
+ export declare function RlsAutocompleteFieldTemplate<T = unknown, E extends Element<T> = Element<T>>({ suggestions, children, disabled, formControl, hiddenIcon, placeholder, searching, rlsTheme, onSearch, onSelect, onValue, render }: AutocompleteFieldTemplateProps<T, E>): import("react/jsx-runtime").JSX.Element;
21
+ export declare function RlsAutocompleteField<T = unknown>(props: AutocompleteFieldProps<T, AutocompleteElement<T>>): import("react/jsx-runtime").JSX.Element;
15
22
  export {};
@@ -1,166 +1,33 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { hasPattern } from '@rolster/helpers-string';
3
- import { useEffect, useState } from 'react';
4
- import { useListControl } from '../../../hooks';
2
+ import reactI18n from '../../../i18n';
5
3
  import { renderClassStatus } from '../../../utils/css';
6
- import { RlsIcon, RlsProgressBar } from '../../atoms';
4
+ import { RlsMessageIcon, RlsIcon, RlsProgressBar } from '../../atoms';
7
5
  import { RlsBallot } from '../../molecules';
6
+ import { useAutocompleteField } from './autocomplete-field.hook';
8
7
  import './AutocompleteField.css';
9
- const DURATION_ANIMATION = 240;
10
- const MAX_ELEMENTS = 6;
11
- export function RlsAutocompleteField({ suggestions, children, disabled, formControl, onSearch, onSelect, placeholder, searching, rlsTheme }) {
12
- const [pattern, setPattern] = useState('');
13
- const [coincidences, setCoincidences] = useState([]);
14
- const [store, setStore] = useState({
15
- pattern: '',
16
- coincidences: [],
17
- previous: null
8
+ export function RlsAutocompleteFieldTemplate({ suggestions, children, disabled, formControl, hiddenIcon, placeholder, searching, rlsTheme, onSearch, onSelect, onValue, render }) {
9
+ const { coincidences, listControl, pattern, onBlurInput, onClickAction, onClickBackdrop, onClickControl, onClickElement, onFocusInput, onKeydownElement, onKeydownInput, setPattern } = useAutocompleteField({
10
+ suggestions,
11
+ disabled,
12
+ formControl,
13
+ onSelect,
14
+ onValue
18
15
  });
19
- const { active, boxContentRef, higher, inputRef, listRef, suggestionsField, value, visible, setActive, setValue, setVisible, navigationElement, navigationInput } = useListControl(suggestions, true);
20
- const [changeInternal, setChangeInternal] = useState(false);
21
- useEffect(() => {
22
- filterSuggestions(pattern, true);
23
- }, [suggestions]);
24
- useEffect(() => {
25
- filterSuggestions(pattern);
26
- }, [pattern]);
27
- useEffect(() => {
28
- if (!changeInternal) {
29
- setValue((formControl?.state &&
30
- suggestionsField.hasElement(formControl?.state)?.description) ||
31
- '');
32
- }
33
- setChangeInternal(false);
34
- }, [formControl?.state]);
35
- function onClickControl() {
36
- if (!disabled) {
37
- setVisible(true);
38
- setTimeout(() => inputRef?.current?.focus(), DURATION_ANIMATION);
39
- }
40
- }
41
- function onFocusInput() {
42
- setActive(true);
43
- }
44
- function onBlurInput() {
45
- setActive(false);
46
- }
47
- function onKeydownInput(event) {
48
- switch (event.code) {
49
- case 'Escape':
50
- setVisible(false);
51
- break;
52
- case 'Tab':
53
- setVisible(false);
54
- break;
55
- default:
56
- navigationInput(event);
57
- break;
58
- }
59
- }
60
- function onClickAction() {
61
- if (value) {
62
- setVisible(false);
63
- setValue('');
64
- if (formControl) {
65
- setChangeInternal(true);
66
- formControl.setState(undefined);
67
- }
68
- }
69
- else {
70
- setVisible(true);
71
- setTimeout(() => inputRef?.current?.focus(), DURATION_ANIMATION);
72
- }
73
- }
74
- function onClickBackdrop() {
75
- setVisible(false);
76
- }
77
- function onClickItem(element) {
78
- return () => {
79
- onChange(element);
80
- };
81
- }
82
- function onKeydownItem(element) {
83
- return (event) => {
84
- switch (event.code) {
85
- case 'Enter':
86
- onChange(element);
87
- break;
88
- default:
89
- navigationElement(event);
90
- break;
91
- }
92
- };
93
- }
94
- function onChange(element) {
95
- const { description, value } = element;
96
- setVisible(false);
97
- if (onSelect) {
98
- onSelect(value);
99
- }
100
- else {
101
- if (formControl) {
102
- setChangeInternal(true);
103
- formControl.setState(value);
104
- }
105
- setValue(description);
106
- }
107
- }
108
- function filterSuggestions(pattern, reboot = false) {
109
- if (pattern) {
110
- const store = reboot ? createStoreEmpty() : searchForPattern(pattern);
111
- const filters = store?.coincidences || suggestions;
112
- const coincidences = filters.filter((element) => element.hasCoincidence(pattern));
113
- setCoincidences(coincidences.slice(0, MAX_ELEMENTS));
114
- setStore({
115
- coincidences,
116
- pattern,
117
- previous: store
118
- });
119
- }
120
- else {
121
- setCoincidences(suggestions.slice(0, MAX_ELEMENTS));
122
- rebootStore();
123
- }
124
- }
125
- function searchForPattern(value) {
126
- if (!store.pattern) {
127
- return null;
128
- }
129
- let newStore = store;
130
- let search = false;
131
- while (!search && newStore) {
132
- search = hasPattern(value, newStore.pattern, true);
133
- if (!search) {
134
- newStore = newStore.previous;
135
- }
136
- }
137
- return newStore || rebootStore();
138
- }
139
- function rebootStore() {
140
- const newStore = createStoreEmpty();
141
- setStore(newStore);
142
- return newStore;
143
- }
144
- function createStoreEmpty() {
145
- return {
146
- coincidences: undefined,
147
- pattern: '',
148
- previous: null
149
- };
150
- }
151
- return (_jsxs("div", { ref: boxContentRef, className: 'rls-autocomplete-field rls-list-field ' +
152
- renderClassStatus('rls-box-field', {
153
- disabled,
154
- active,
155
- selected: !!value
156
- }), "rls-theme": rlsTheme, children: [children && _jsx("label", { className: "rls-box-field__label", children: children }), _jsx("div", { className: "rls-box-field__component", children: _jsxs("div", { className: "rls-box-field__body", children: [_jsx("label", { className: "rls-list-field__control", onClick: onClickControl, children: value ? (_jsx("span", { className: "rls-list-field__control__description", children: value })) : (_jsx("span", { className: "rls-list-field__control__placeholder", children: placeholder })) }), _jsx("button", { className: "rls-list-field__action", disabled: disabled, onClick: onClickAction, children: _jsx(RlsIcon, { value: value ? 'trash-2' : 'list' }) })] }) }), _jsxs("div", { className: renderClassStatus('rls-list-field__suggestions', {
157
- visible,
158
- hide: !visible,
159
- higher
160
- }), children: [_jsxs("ul", { ref: listRef, className: "rls-list-field__ul", children: [_jsxs("div", { className: "rls-list-field__ul__search", children: [_jsx("input", { ref: inputRef, className: "rls-list-field__ul__control", type: "text", value: pattern, onChange: ({ target: { value } }) => {
161
- setPattern(value);
162
- }, disabled: disabled || searching, onFocus: onFocusInput, onBlur: onBlurInput, onKeyDown: onKeydownInput }), onSearch && (_jsx("button", { disabled: disabled || searching, onClick: () => {
163
- onSearch(pattern);
164
- }, children: _jsx(RlsIcon, { value: "search" }) }))] }), searching && _jsx(RlsProgressBar, { indeterminate: true }), coincidences.map((element, index) => (_jsx("li", { className: "rls-list-field__element", tabIndex: -1, onClick: onClickItem(element), onKeyDown: onKeydownItem(element), children: _jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: element.title }) }, index))), !coincidences.length && (_jsx("li", { className: "rls-list-field__empty", children: _jsxs("div", { className: "rls-list-field__empty__description", children: [_jsx("label", { className: "label-bold truncate", children: "Selecci\u00F3n no disponible" }), _jsx("label", { className: "caption-regular", children: "Lo sentimos, en el momento no hay elementos en el listado" })] }) }))] }), _jsx("div", { className: "rls-list-field__backdrop", onClick: onClickBackdrop })] })] }));
16
+ return (_jsxs("div", { ref: listControl.boxContentRef, className: renderClassStatus('rls-box-field', {
17
+ disabled,
18
+ focused: listControl.focused,
19
+ selected: !!listControl.value
20
+ }, 'rls-autocomplete-field rls-list-field'), "rls-theme": rlsTheme, children: [children && _jsx("label", { className: "rls-box-field__label", children: children }), _jsx("div", { className: "rls-box-field__component", children: _jsxs("div", { className: "rls-box-field__body", children: [_jsx("label", { className: "rls-list-field__control", onClick: onClickControl, children: listControl.value ? (_jsx("span", { className: "rls-list-field__control__description", children: listControl.value })) : (_jsx("span", { className: "rls-list-field__control__placeholder", children: placeholder })) }), !hiddenIcon && listControl.value && (_jsx("button", { className: "rls-list-field__action", disabled: disabled, onClick: onClickAction, children: _jsx(RlsIcon, { value: "trash-2" }) }))] }) }), formControl?.touched && formControl?.error && (_jsx("div", { className: "rls-box-field__error", children: _jsx(RlsMessageIcon, { icon: "alert-triangle", rlsTheme: "danger", children: formControl.error.message }) })), _jsxs("div", { className: renderClassStatus('rls-list-field__suggestions', {
21
+ visible: listControl.visible,
22
+ hide: !listControl.visible,
23
+ higher: listControl.higher
24
+ }), children: [_jsx("div", { className: "rls-list-field__suggestions__body", children: _jsxs("ul", { ref: listControl.listRef, className: "rls-list-field__ul", children: [_jsxs("div", { className: "rls-list-field__ul__search", children: [_jsx("input", { ref: listControl.inputRef, className: "rls-list-field__ul__control", type: "text", placeholder: reactI18n('listInputPlaceholder'), value: pattern, onChange: ({ target: { value } }) => {
25
+ setPattern(value);
26
+ }, disabled: disabled || searching, onFocus: onFocusInput, onBlur: onBlurInput, onKeyDown: onKeydownInput }), onSearch && (_jsx("button", { disabled: disabled || searching, onClick: () => {
27
+ onSearch(pattern);
28
+ }, children: _jsx(RlsIcon, { value: "search" }) }))] }), searching && _jsx(RlsProgressBar, { indeterminate: true }), coincidences.map((element, index) => (_jsx("li", { className: "rls-list-field__element", tabIndex: -1, onClick: onClickElement(element), onKeyDown: onKeydownElement(element), children: render(element) }, index))), !coincidences.length && (_jsx("li", { className: "rls-list-field__empty", children: _jsxs("div", { className: "rls-list-field__empty__description", children: [_jsx("label", { className: "label-bold truncate", children: reactI18n('listEmptyTitle') }), _jsx("p", { className: "caption-regular", children: reactI18n('listEmptyDescription') })] }) }))] }) }), _jsx("div", { className: "rls-list-field__backdrop", onClick: onClickBackdrop })] })] }));
29
+ }
30
+ export function RlsAutocompleteField(props) {
31
+ return (_jsx(RlsAutocompleteFieldTemplate, { ...props, render: (element) => (_jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: element.title })) }));
165
32
  }
166
33
  //# sourceMappingURL=AutocompleteField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteField.js","sourceRoot":"","sources":["../../../../../src/components/organisms/AutocompleteField/AutocompleteField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteField.js","sourceRoot":"","sources":["../../../../../src/components/organisms/AutocompleteField/AutocompleteField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ReactControl } from '@rolster/react-forms';
2
+ import { KeyboardEvent, KeyboardEventHandler, MouseEventHandler } from 'react';
3
+ import { AbstractAutocompleteElement as Element } from '../../../models';
4
+ import { ListControl } from '../../../hooks';
5
+ export interface AutocompleteControl<T = unknown, E extends Element<T> = Element<T>> {
6
+ coincidences: E[];
7
+ listControl: ListControl<T>;
8
+ pattern: string;
9
+ onBlurInput: () => void;
10
+ onClickAction: () => void;
11
+ onClickBackdrop: () => void;
12
+ onClickControl: () => void;
13
+ onClickElement: (element: E) => MouseEventHandler;
14
+ onFocusInput: () => void;
15
+ onKeydownElement: (element: E) => KeyboardEventHandler;
16
+ onKeydownInput: (event: KeyboardEvent) => void;
17
+ setPattern: (value: string) => void;
18
+ }
19
+ interface AutocompleteProps<T = unknown, E extends Element<T> = Element<T>> {
20
+ suggestions: E[];
21
+ disabled?: boolean;
22
+ formControl?: ReactControl<HTMLElement, T>;
23
+ onSelect?: (value: T) => void;
24
+ onValue?: (value?: T) => void;
25
+ }
26
+ export declare function useAutocompleteField<T = unknown, E extends Element<T> = Element<T>>({ suggestions, disabled, formControl, onSelect, onValue }: AutocompleteProps<T, E>): AutocompleteControl<T, E>;
27
+ export {};
@@ -0,0 +1,170 @@
1
+ import { hasPattern } from '@rolster/helpers-string';
2
+ import { useEffect, useState } from 'react';
3
+ import { useListControl } from '../../../hooks';
4
+ const DURATION_ANIMATION = 240;
5
+ const MAX_ELEMENTS = 6;
6
+ export function useAutocompleteField({ suggestions, disabled, formControl, onSelect, onValue }) {
7
+ const [pattern, setPattern] = useState('');
8
+ const [coincidences, setCoincidences] = useState([]);
9
+ const [store, setStore] = useState({
10
+ pattern: '',
11
+ coincidences: [],
12
+ previous: null
13
+ });
14
+ const listControl = useListControl({
15
+ suggestions,
16
+ formControl,
17
+ withHigher: true
18
+ });
19
+ const { collection, inputRef, setFocused, setValue, setVisible, navigationElement, navigationInput } = listControl;
20
+ const [changeInternal, setChangeInternal] = useState(false);
21
+ useEffect(() => {
22
+ filterSuggestions(pattern, true);
23
+ }, [suggestions]);
24
+ useEffect(() => {
25
+ filterSuggestions(pattern);
26
+ }, [pattern]);
27
+ useEffect(() => {
28
+ if (!changeInternal) {
29
+ redefineDescription();
30
+ }
31
+ setChangeInternal(false);
32
+ }, [formControl?.state]);
33
+ useEffect(() => {
34
+ redefineDescription();
35
+ }, [collection]);
36
+ function redefineDescription() {
37
+ const element = formControl?.state && collection.find(formControl?.state);
38
+ setValue(element?.description || '');
39
+ }
40
+ function onClickControl() {
41
+ if (!disabled) {
42
+ setVisible(true);
43
+ setTimeout(() => inputRef?.current?.focus(), DURATION_ANIMATION);
44
+ }
45
+ }
46
+ function onFocusInput() {
47
+ setFocused(true);
48
+ }
49
+ function onBlurInput() {
50
+ setFocused(false);
51
+ }
52
+ function onKeydownInput(event) {
53
+ switch (event.code) {
54
+ case 'Escape':
55
+ setVisible(false);
56
+ break;
57
+ case 'Tab':
58
+ setVisible(false);
59
+ break;
60
+ default:
61
+ navigationInput(event);
62
+ break;
63
+ }
64
+ }
65
+ function onClickAction() {
66
+ setVisible(false);
67
+ setValue('');
68
+ if (formControl) {
69
+ setChangeInternal(true);
70
+ formControl.setState(undefined);
71
+ }
72
+ if (onValue) {
73
+ onValue(undefined);
74
+ }
75
+ }
76
+ function onClickBackdrop() {
77
+ setVisible(false);
78
+ }
79
+ function onClickElement(element) {
80
+ return () => {
81
+ onChange(element);
82
+ };
83
+ }
84
+ function onKeydownElement(element) {
85
+ return (event) => {
86
+ switch (event.code) {
87
+ case 'Enter':
88
+ onChange(element);
89
+ break;
90
+ default:
91
+ navigationElement(event);
92
+ break;
93
+ }
94
+ };
95
+ }
96
+ function onChange({ description, value }) {
97
+ setVisible(false);
98
+ if (onSelect) {
99
+ onSelect(value);
100
+ }
101
+ else {
102
+ if (formControl) {
103
+ setChangeInternal(true);
104
+ formControl.setState(value);
105
+ }
106
+ setValue(description);
107
+ }
108
+ if (onValue) {
109
+ onValue(value);
110
+ }
111
+ }
112
+ function filterSuggestions(pattern, reboot = false) {
113
+ if (pattern) {
114
+ const store = reboot ? createStoreEmpty() : searchForPattern(pattern);
115
+ const elements = store?.coincidences || suggestions;
116
+ const coincidences = elements.filter((element) => element.hasCoincidence(pattern));
117
+ setCoincidences(coincidences.slice(0, MAX_ELEMENTS));
118
+ setStore({
119
+ coincidences,
120
+ pattern,
121
+ previous: store
122
+ });
123
+ }
124
+ else {
125
+ setCoincidences(suggestions.slice(0, MAX_ELEMENTS));
126
+ rebootStore();
127
+ }
128
+ }
129
+ function searchForPattern(value) {
130
+ if (!store.pattern) {
131
+ return null;
132
+ }
133
+ let newStore = store;
134
+ let search = false;
135
+ while (!search && newStore) {
136
+ search = hasPattern(value, newStore.pattern, true);
137
+ if (!search) {
138
+ newStore = newStore.previous;
139
+ }
140
+ }
141
+ return newStore || rebootStore();
142
+ }
143
+ function rebootStore() {
144
+ const store = createStoreEmpty();
145
+ setStore(store);
146
+ return store;
147
+ }
148
+ function createStoreEmpty() {
149
+ return {
150
+ coincidences: undefined,
151
+ pattern: '',
152
+ previous: null
153
+ };
154
+ }
155
+ return {
156
+ coincidences,
157
+ listControl,
158
+ pattern,
159
+ onBlurInput,
160
+ onClickAction,
161
+ onClickBackdrop,
162
+ onClickControl,
163
+ onClickElement,
164
+ onFocusInput,
165
+ onKeydownElement,
166
+ onKeydownInput,
167
+ setPattern
168
+ };
169
+ }
170
+ //# sourceMappingURL=autocomplete-field.hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-field.hook.js","sourceRoot":"","sources":["../../../../../src/components/organisms/AutocompleteField/autocomplete-field.hook.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,6 @@
10
10
  .rls-card__content {
11
11
  display: flex;
12
12
  flex-direction: column;
13
- padding: var(--sizing-16);
13
+ padding: var(--rls-card-content-padding);
14
14
  box-sizing: border-box;
15
15
  }
@@ -3,6 +3,17 @@
3
3
  --pvt-component-height: 0rem;
4
4
  --pvt-component-opacity: 0;
5
5
  --pvt-component-visibility: hidden;
6
+ --pvt-title-font-size: var(--heading5-font-size);
7
+ --pvt-title-letter-spacing: var(--heading5-letter-spacing);
8
+ --pvt-title-line-height: var(--heading5-line-height);
9
+ --pvt-title-text-transform: initial;
10
+ --pvt-subtitle-font-size: var(--body-font-size);
11
+ --pvt-subtitle-letter-spacing: var(--body-letter-spacing);
12
+ --pvt-subtitle-line-height: var(--body-line-height);
13
+ --pvt-subtitle-text-transform: initial;
14
+ --pvt-content-font-size: 0.925rem;
15
+ --pvt-content-letter-spacing: 0.05em;
16
+ --pvt-content-line-height: 1.325rem;
6
17
  --pvt-backdrop-opacity: 0;
7
18
  --pvt-backdrop-bottom: initial;
8
19
  position: fixed;
@@ -27,12 +38,15 @@
27
38
  }
28
39
  .rls-confirmation__component {
29
40
  position: absolute;
41
+ display: flex;
42
+ flex-direction: column;
43
+ row-gap: var(--sizing-16);
30
44
  width: calc(100% - var(--sizing-32));
31
- max-width: 20rem;
45
+ max-width: 35rem;
32
46
  height: var(--pvt-component-height);
33
47
  opacity: var(--pvt-component-opacity);
34
48
  visibility: var(--pvt-component-visibility);
35
- padding: var(--sizing-8) 0rem;
49
+ padding: var(--sizing-16) 0rem;
36
50
  box-sizing: border-box;
37
51
  z-index: var(--z-index-2);
38
52
  border-radius: var(--sizing-8);
@@ -46,67 +60,60 @@
46
60
  }
47
61
  .rls-confirmation__header {
48
62
  position: relative;
49
- float: left;
63
+ display: flex;
64
+ flex-direction: column;
65
+ row-gap: var(--sizing-4);
50
66
  width: 100%;
51
- padding: var(--sizing-8) var(--sizing-16);
67
+ padding: 0rem var(--sizing-16);
52
68
  box-sizing: border-box;
53
69
  }
54
70
  .rls-confirmation__header__title {
55
71
  text-align: center;
56
- width: 100%;
57
72
  color: var(--color-theme-500);
58
- font-size: 0.85rem;
59
- line-height: 0.85rem;
60
73
  font-weight: var(--font-weight-bold);
61
- letter-spacing: 0.875px;
62
- text-transform: uppercase;
74
+ font-size: var(--pvt-title-font-size);
75
+ line-height: var(--pvt-title-line-height);
76
+ letter-spacing: var(--pvt-title-letter-spacing);
77
+ text-transform: var(--pvt-title-text-transform);
63
78
  }
64
79
  .rls-confirmation__header__subtitle {
65
80
  text-align: center;
66
- margin-top: var(--sizing-8);
67
- width: 100%;
68
- color: var(--color-theme-100);
69
- font-size: 0.675rem;
70
- line-height: 0.675rem;
81
+ color: var(--color-rolster-300);
71
82
  font-weight: var(--font-weight-bold);
72
- letter-spacing: 0.875px;
73
- text-transform: uppercase;
83
+ font-size: var(--pvt-subtitle-font-size);
84
+ line-height: var(--pvt-subtitle-line-height);
85
+ letter-spacing: var(--pvt-subtitle-letter-spacing);
86
+ text-transform: var(--pvt-subtitle-text-transform);
74
87
  }
75
88
  .rls-confirmation__body {
76
89
  position: relative;
77
- float: left;
78
90
  width: 100%;
79
- padding: var(--sizing-8) var(--sizing-16);
91
+ padding: 0rem var(--sizing-16);
80
92
  box-sizing: border-box;
81
93
  }
82
94
  .rls-confirmation__body__content {
83
95
  color: var(--color-theme-300);
84
- margin: 0rem;
85
96
  text-align: center;
86
- font-size: 0.925rem;
87
- line-height: 1.325rem;
88
- font-weight: var(--font-weight-semibold);
89
- letter-spacing: 0.05em;
97
+ }
98
+ .rls-confirmation__body__content p {
99
+ font-weight: var(--font-weight-medium);
100
+ font-size: var(--pvt-content-font-size);
101
+ line-height: var(--pvt-content-line-height);
102
+ letter-spacing: var(--pvt-content-letter-spacing);
90
103
  }
91
104
  .rls-confirmation__footer {
92
105
  position: relative;
93
- float: left;
94
106
  width: 100%;
95
- padding: var(--sizing-16) var(--sizing-16) var(--sizing-8) var(--sizing-16);
107
+ padding: var(--sizing-8) var(--sizing-16) 0rem var(--sizing-16);
96
108
  box-sizing: border-box;
97
- margin-top: var(--sizing-16);
98
- border-top: var(--border-1-theme-100);
99
109
  }
100
110
  .rls-confirmation__footer__actions {
101
111
  position: relative;
102
- display: flex;
103
- flex-direction: column-reverse;
104
- float: left;
105
112
  width: 100%;
106
- margin: auto;
107
- }
108
- .rls-confirmation__footer__actions button + button {
109
- margin-bottom: var(--sizing-12);
113
+ display: flex;
114
+ flex-direction: row-reverse;
115
+ justify-content: center;
116
+ column-gap: var(--sizing-16);
110
117
  }
111
118
  .rls-confirmation__backdrop {
112
119
  position: absolute;
@@ -123,3 +130,20 @@
123
130
  transition: opacity 120ms 0ms var(--deceleration-curve),
124
131
  bottom 120ms 0ms var(--deceleration-curve);
125
132
  }
133
+
134
+ @media screen and (max-width: 480px) {
135
+ .rls-confirmation {
136
+ --pvt-title-font-size: var(--title-font-size);
137
+ --pvt-title-letter-spacing: var(--title-letter-spacing);
138
+ --pvt-title-line-height: var(--title-line-height);
139
+ --pvt-subtitle-font-size: var(--smalltext-font-size);
140
+ --pvt-subtitle-letter-spacing: var(--smalltext-letter-spacing);
141
+ --pvt-subtitle-line-height: var(--smalltext-line-height);
142
+ --pvt-content-font-size: 0.9125rem;
143
+ }
144
+ .rls-confirmation__footer__actions {
145
+ flex-direction: column-reverse;
146
+ column-gap: 0rem;
147
+ row-gap: var(--sizing-16);
148
+ }
149
+ }
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { PartialSealed } from '@rolster/helpers-advanced';
3
3
  import { useState } from 'react';
4
4
  import ReactDOM from 'react-dom';
5
+ import reactI18n from '../../../i18n';
5
6
  import { renderClassStatus } from '../../../utils/css';
6
7
  import { RlsButton } from '../../atoms';
7
8
  import './Confirmation.css';
@@ -37,7 +38,7 @@ export function useConfirmationService() {
37
38
  subtitle,
38
39
  title,
39
40
  approved: {
40
- label: approved || 'Aceptar',
41
+ label: approved || reactI18n('confirmationActionApproved'),
41
42
  onClick: () => {
42
43
  setVisible(false);
43
44
  resolve(ConfirmationResult.approved());