@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.
- package/dist/cjs/assets/{lib.cjs-c052832f.css → index-Fy0sGm5F.css} +159 -106
- package/dist/cjs/index.js +2119 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/es/assets/{lib-c052832f.css → index-Fy0sGm5F.css} +159 -106
- package/dist/es/index.js +2051 -0
- package/dist/es/index.js.map +1 -0
- package/dist/esm/components/atoms/Amount/Amount.css +3 -2
- package/dist/esm/components/atoms/Amount/Amount.d.ts +3 -1
- package/dist/esm/components/atoms/Amount/Amount.js +2 -2
- package/dist/esm/components/atoms/Amount/Amount.js.map +1 -1
- package/dist/esm/components/atoms/Button/Button.css +1 -1
- package/dist/esm/components/atoms/CheckBox/CheckBox.d.ts +8 -1
- package/dist/esm/components/atoms/CheckBox/CheckBox.js +7 -2
- package/dist/esm/components/atoms/CheckBox/CheckBox.js.map +1 -1
- package/dist/esm/components/atoms/Icon/Icon.css +1 -1
- package/dist/esm/components/atoms/Input/Input.css +1 -1
- package/dist/esm/components/atoms/Input/Input.d.ts +3 -3
- package/dist/esm/components/atoms/Input/Input.js +12 -10
- package/dist/esm/components/atoms/Input/Input.js.map +1 -1
- package/dist/esm/components/atoms/InputMoney/InputMoney.d.ts +3 -3
- package/dist/esm/components/atoms/InputMoney/InputMoney.js +5 -10
- package/dist/esm/components/atoms/InputMoney/InputMoney.js.map +1 -1
- package/dist/esm/components/atoms/InputNumber/InputNumber.d.ts +3 -3
- package/dist/esm/components/atoms/InputNumber/InputNumber.js +5 -10
- package/dist/esm/components/atoms/InputNumber/InputNumber.js.map +1 -1
- package/dist/esm/components/atoms/InputPassword/InputPassword.d.ts +1 -1
- package/dist/esm/components/atoms/InputPassword/InputPassword.js +9 -7
- package/dist/esm/components/atoms/InputPassword/InputPassword.js.map +1 -1
- package/dist/esm/components/atoms/InputText/InputText.d.ts +3 -3
- package/dist/esm/components/atoms/InputText/InputText.js +5 -10
- package/dist/esm/components/atoms/InputText/InputText.js.map +1 -1
- package/dist/esm/components/atoms/Label/Label.css +3 -0
- package/dist/esm/components/atoms/Label/Label.d.ts +2 -0
- package/dist/esm/components/atoms/Label/Label.js +5 -0
- package/dist/esm/components/atoms/Label/Label.js.map +1 -0
- package/dist/esm/components/atoms/MessageIcon/MessageIcon.css +12 -0
- package/dist/esm/components/atoms/MessageIcon/MessageIcon.d.ts +7 -0
- package/dist/esm/components/atoms/MessageIcon/MessageIcon.js +7 -0
- package/dist/esm/components/atoms/MessageIcon/MessageIcon.js.map +1 -0
- package/dist/esm/components/atoms/RadioButton/RadioButton.d.ts +2 -1
- package/dist/esm/components/atoms/RadioButton/RadioButton.js +2 -2
- package/dist/esm/components/atoms/RadioButton/RadioButton.js.map +1 -1
- package/dist/esm/components/atoms/SearchInput/SearchInput.d.ts +2 -2
- package/dist/esm/components/atoms/Switch/Switch.css +40 -21
- package/dist/esm/components/atoms/Switch/Switch.d.ts +7 -1
- package/dist/esm/components/atoms/Switch/Switch.js +8 -3
- package/dist/esm/components/atoms/Switch/Switch.js.map +1 -1
- package/dist/esm/components/atoms/index.d.ts +2 -0
- package/dist/esm/components/atoms/index.js +2 -0
- package/dist/esm/components/atoms/index.js.map +1 -1
- package/dist/esm/components/molecules/ButtonToggle/ButtonToggle.js.map +1 -1
- package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.css +1 -5
- package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.d.ts +1 -1
- package/dist/esm/components/molecules/CheckBoxLabel/CheckBoxLabel.js.map +1 -1
- package/dist/esm/components/molecules/DayPicker/DayPicker.d.ts +1 -1
- package/dist/esm/components/molecules/DayPicker/DayPicker.js +1 -1
- package/dist/esm/components/molecules/DayPicker/DayPicker.js.map +1 -1
- package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.d.ts +1 -1
- package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js +1 -1
- package/dist/esm/components/molecules/DayRangePicker/DayRangePicker.js.map +1 -1
- package/dist/esm/components/molecules/MoneyField/MoneyField.d.ts +4 -2
- package/dist/esm/components/molecules/MoneyField/MoneyField.js +7 -8
- package/dist/esm/components/molecules/MoneyField/MoneyField.js.map +1 -1
- package/dist/esm/components/molecules/MonthPicker/MonthPicker.d.ts +1 -1
- package/dist/esm/components/molecules/MonthPicker/MonthPicker.js.map +1 -1
- package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.d.ts +1 -1
- package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js +1 -1
- package/dist/esm/components/molecules/MonthTitlePicker/MonthTitlePicker.js.map +1 -1
- package/dist/esm/components/molecules/NumberField/NumberField.d.ts +4 -2
- package/dist/esm/components/molecules/NumberField/NumberField.js +7 -8
- package/dist/esm/components/molecules/NumberField/NumberField.js.map +1 -1
- package/dist/esm/components/molecules/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/molecules/PasswordField/PasswordField.d.ts +1 -1
- package/dist/esm/components/molecules/PasswordField/PasswordField.js +6 -7
- package/dist/esm/components/molecules/PasswordField/PasswordField.js.map +1 -1
- package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.d.ts +1 -1
- package/dist/esm/components/molecules/RadioButtonLabel/RadioButtonLabel.js.map +1 -1
- package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.css +2 -5
- package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.d.ts +1 -1
- package/dist/esm/components/molecules/SwitchLabel/SwitchLabel.js.map +1 -1
- package/dist/esm/components/molecules/TextField/TextField.d.ts +4 -2
- package/dist/esm/components/molecules/TextField/TextField.js +7 -8
- package/dist/esm/components/molecules/TextField/TextField.js.map +1 -1
- package/dist/esm/components/molecules/YearPicker/YearPicker.d.ts +2 -2
- package/dist/esm/components/molecules/YearPicker/YearPicker.js +2 -2
- package/dist/esm/components/molecules/YearPicker/YearPicker.js.map +1 -1
- package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.css +21 -19
- package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.d.ts +15 -8
- package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js +26 -159
- package/dist/esm/components/organisms/AutocompleteField/AutocompleteField.js.map +1 -1
- package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.d.ts +27 -0
- package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.js +170 -0
- package/dist/esm/components/organisms/AutocompleteField/autocomplete-field.hook.js.map +1 -0
- package/dist/esm/components/organisms/Card/Card.css +1 -1
- package/dist/esm/components/organisms/Confirmation/Confirmation.css +58 -34
- package/dist/esm/components/organisms/Confirmation/Confirmation.js +2 -1
- package/dist/esm/components/organisms/Confirmation/Confirmation.js.map +1 -1
- package/dist/esm/components/organisms/Datatable/Datatable.d.ts +2 -1
- package/dist/esm/components/organisms/Datatable/Datatable.js +3 -2
- package/dist/esm/components/organisms/Datatable/Datatable.js.map +1 -1
- package/dist/esm/components/organisms/DateField/DateField.css +3 -0
- package/dist/esm/components/organisms/DateField/DateField.d.ts +1 -1
- package/dist/esm/components/organisms/DateField/DateField.js +10 -3
- package/dist/esm/components/organisms/DateField/DateField.js.map +1 -1
- package/dist/esm/components/organisms/DatePicker/DatePicker.d.ts +1 -1
- package/dist/esm/components/organisms/DatePicker/DatePicker.js +4 -3
- package/dist/esm/components/organisms/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/organisms/DateRangeField/DateRangeField.d.ts +1 -1
- package/dist/esm/components/organisms/DateRangeField/DateRangeField.js.map +1 -1
- package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js +3 -2
- package/dist/esm/components/organisms/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/esm/components/organisms/SelectField/SelectField.d.ts +13 -8
- package/dist/esm/components/organisms/SelectField/SelectField.js +21 -89
- package/dist/esm/components/organisms/SelectField/SelectField.js.map +1 -1
- package/dist/esm/components/organisms/SelectField/select-field.hook.d.ts +24 -0
- package/dist/esm/components/organisms/SelectField/select-field.hook.js +104 -0
- package/dist/esm/components/organisms/SelectField/select-field.hook.js.map +1 -0
- package/dist/esm/components/organisms/Snackbar/Snackbar.css +14 -16
- package/dist/esm/components/organisms/Snackbar/Snackbar.d.ts +1 -1
- package/dist/esm/components/organisms/Snackbar/Snackbar.js +1 -1
- package/dist/esm/components/organisms/Snackbar/Snackbar.js.map +1 -1
- package/dist/esm/hooks/index.d.ts +0 -2
- package/dist/esm/hooks/index.js +0 -2
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/hooks/list-control.hook.d.ts +14 -8
- package/dist/esm/hooks/list-control.hook.js +22 -15
- package/dist/esm/hooks/list-control.hook.js.map +1 -1
- package/dist/esm/i18n.d.ts +18 -0
- package/dist/esm/i18n.js +23 -0
- package/dist/esm/i18n.js.map +1 -0
- package/dist/esm/models.d.ts +19 -8
- package/dist/esm/models.js +8 -9
- package/dist/esm/models.js.map +1 -1
- package/dist/esm/utils/css.d.ts +1 -1
- package/dist/esm/utils/css.js +4 -1
- package/dist/esm/utils/css.js.map +1 -1
- package/dist/esm/utils/date-range-picker.js.map +1 -1
- package/dist/esm/utils/day-picker.js.map +1 -1
- package/dist/esm/utils/month-picker.js +1 -1
- package/dist/esm/utils/month-picker.js.map +1 -1
- package/dist/esm/utils/year-picker.js.map +1 -1
- package/package.json +26 -11
- package/dist/cjs/lib.cjs.js +0 -3366
- package/dist/cjs/lib.cjs.js.map +0 -1
- package/dist/es/lib.js +0 -3300
- package/dist/es/lib.js.map +0 -1
- package/dist/esm/hooks/form-control.hook.d.ts +0 -15
- package/dist/esm/hooks/form-control.hook.js +0 -77
- package/dist/esm/hooks/form-control.hook.js.map +0 -1
- package/dist/esm/hooks/form-group.hook.d.ts +0 -2
- package/dist/esm/hooks/form-group.hook.js +0 -22
- package/dist/esm/hooks/form-group.hook.js.map +0 -1
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { ReactControl } from '
|
|
2
|
-
import {
|
|
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
|
|
6
|
-
suggestions:
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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":";
|
|
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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"}
|
|
@@ -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:
|
|
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-
|
|
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
|
-
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
row-gap: var(--sizing-4);
|
|
50
66
|
width: 100%;
|
|
51
|
-
padding:
|
|
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
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
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:
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
font-weight: var(--font-weight-
|
|
89
|
-
|
|
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-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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 || '
|
|
41
|
+
label: approved || reactI18n('confirmationActionApproved'),
|
|
41
42
|
onClick: () => {
|
|
42
43
|
setVisible(false);
|
|
43
44
|
resolve(ConfirmationResult.approved());
|