@soyfri/shared-library 4.0.0 → 4.0.2
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/{ActionMenu-wNWkDZWh.cjs → ActionMenu-D81Xb35f.cjs} +3 -3
- package/ActionMenu-D81Xb35f.cjs.map +1 -0
- package/{ActionMenu-BXRVKopM.js → ActionMenu-DYPA_tYk.js} +3 -3
- package/ActionMenu-DYPA_tYk.js.map +1 -0
- package/{Select-BaY3zJhq.js → Select-BIUq3ZPy.js} +8 -3
- package/Select-BIUq3ZPy.js.map +1 -0
- package/{Select-WpHNCHHz.cjs → Select-C06gHRqZ.cjs} +8 -3
- package/Select-C06gHRqZ.cjs.map +1 -0
- package/components/ActionMenu/ActionMenu.cjs +1 -1
- package/components/ActionMenu/ActionMenu.js +1 -1
- package/components/ActionMenu.d.ts +3 -3
- package/components/Alert.d.ts +3 -3
- package/components/AppBar.d.ts +3 -3
- package/components/Autocomplete.d.ts +3 -3
- package/components/Avatar.d.ts +1 -1
- package/components/Breadcrumbs.d.ts +3 -3
- package/components/Button.d.ts +1 -1
- package/components/ButtonGroup.d.ts +3 -3
- package/components/Card.d.ts +3 -3
- package/components/Checkbox.d.ts +3 -3
- package/components/Chip.d.ts +3 -3
- package/components/Column.d.ts +1 -1
- package/components/DataRow.d.ts +3 -3
- package/components/DatePicker.d.ts +3 -3
- package/components/DateTimePicker.d.ts +3 -3
- package/components/Divider.d.ts +3 -3
- package/components/Drawer.d.ts +3 -3
- package/components/EmptyState.d.ts +3 -3
- package/components/Flyout.d.ts +1 -1
- package/components/Gallery.d.ts +3 -3
- package/components/Icon.d.ts +3 -3
- package/components/Input.d.ts +3 -3
- package/components/InputGroup.d.ts +3 -3
- package/components/MenuButton.d.ts +1 -1
- package/components/Modal.d.ts +3 -3
- package/components/PageHeader.d.ts +3 -3
- package/components/RadioGroup.d.ts +3 -3
- package/components/Select/Select.cjs +1 -1
- package/components/Select/Select.js +1 -1
- package/components/Select.d.ts +3 -3
- package/components/Spinner.d.ts +3 -3
- package/components/Stat.d.ts +3 -3
- package/components/StatusMessage/StatusMessageContext.d.ts +16 -0
- package/components/StatusMessage.d.ts +3 -3
- package/components/Stepper.d.ts +3 -3
- package/components/Switch.d.ts +3 -3
- package/components/Table.d.ts +1 -1
- package/components/Tabs.d.ts +3 -3
- package/components/Timeline.d.ts +3 -3
- package/components/Tooltip.d.ts +1 -1
- package/hooks/ClipBoard/ClipBoard.cjs +43 -24
- package/hooks/ClipBoard/ClipBoard.cjs.map +1 -1
- package/{src/hooks → hooks}/ClipBoard/ClipBoard.d.ts +1 -1
- package/hooks/ClipBoard/ClipBoard.js +43 -24
- package/hooks/ClipBoard/ClipBoard.js.map +1 -1
- package/hooks/ClipBoard.d.ts +1 -1
- package/index.cjs +34 -2
- package/index.cjs.map +1 -1
- package/index.d.ts +62 -2
- package/index.js +11 -3
- package/{src/mui.d.ts → mui.d.ts} +1 -0
- package/package.json +1 -1
- package/ActionMenu-BXRVKopM.js.map +0 -1
- package/ActionMenu-wNWkDZWh.cjs.map +0 -1
- package/Select-BaY3zJhq.js.map +0 -1
- package/Select-WpHNCHHz.cjs.map +0 -1
- package/src/components/Autocomplete/Autocomplete.definitions.d.ts +0 -15
- package/src/components/Avatar/Avatar.definitions.d.ts +0 -11
- package/src/components/Button/Button.definition.d.ts +0 -11
- package/src/components/Card/Card.definition.d.ts +0 -1
- package/src/components/Chip/Chip.definitions.d.ts +0 -10
- package/src/components/DatePicker/DatePicker.definitions.d.ts +0 -8
- package/src/components/DateTimePicker/DateTimePicker.definitions.d.ts +0 -12
- package/src/components/Input/Input.definitions.d.ts +0 -15
- package/src/components/InputGroup/InputGroup.definitions.d.ts +0 -6
- package/src/components/RadioGroup/RadioGroup.definitions.d.ts +0 -6
- package/src/components/Stepper/Stepper.definition.d.ts +0 -2
- package/src/components/Switch/Switch.definitions.d.ts +0 -7
- package/src/components/Table/Table.definition.d.ts +0 -14
- package/src/components/Tabs/Tab.definition.d.ts +0 -3
- package/src/components/Timeline/Timeline.definition.d.ts +0 -3
- package/src/index.d.ts +0 -62
- /package/{src/components → components}/ActionMenu/ActionMenu.d.ts +0 -0
- /package/{src/components → components}/ActionMenu/index.d.ts +0 -0
- /package/{src/components → components}/Alert/Alert.d.ts +0 -0
- /package/{src/components → components}/Alert/index.d.ts +0 -0
- /package/{src/components → components}/AppBar/AppBar.d.ts +0 -0
- /package/{src/components → components}/AppBar/AppBar.sx.d.ts +0 -0
- /package/{src/components → components}/AppBar/AppBarContext.d.ts +0 -0
- /package/{src/components → components}/AppBar/AppBarMenuToggle.d.ts +0 -0
- /package/{src/components → components}/AppBar/index.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/Autocomplete.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/Autocomplete.helpers.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/Autocomplete.sx.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/_parts/AutocompleteChips.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/_parts/AutocompleteLoader.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/_parts/AutocompleteOption.d.ts +0 -0
- /package/{src/components → components}/Autocomplete/index.d.ts +0 -0
- /package/{src/components → components}/Avatar/Avatar.d.ts +0 -0
- /package/{src/components → components}/Avatar/index.d.ts +0 -0
- /package/{src/components → components}/Breadcrumbs/Breadcrumbs.d.ts +0 -0
- /package/{src/components → components}/Breadcrumbs/index.d.ts +0 -0
- /package/{src/components → components}/Button/Button.d.ts +0 -0
- /package/{src/components → components}/Button/index.d.ts +0 -0
- /package/{src/components → components}/ButtonGroup/ButtonGroup.d.ts +0 -0
- /package/{src/components → components}/ButtonGroup/index.d.ts +0 -0
- /package/{src/components → components}/Card/Card.d.ts +0 -0
- /package/{src/components → components}/Card/Card.sx.d.ts +0 -0
- /package/{src/components → components}/Card/index.d.ts +0 -0
- /package/{src/components → components}/Checkbox/Checkbox.d.ts +0 -0
- /package/{src/components → components}/Checkbox/Checkbox.sx.d.ts +0 -0
- /package/{src/components → components}/Checkbox/index.d.ts +0 -0
- /package/{src/components → components}/Chip/Chip.d.ts +0 -0
- /package/{src/components → components}/Chip/index.d.ts +0 -0
- /package/{src/components → components}/Column/Column.d.ts +0 -0
- /package/{src/components → components}/Column/index.d.ts +0 -0
- /package/{src/components → components}/DataRow/DataRow.d.ts +0 -0
- /package/{src/components → components}/DataRow/index.d.ts +0 -0
- /package/{src/components → components}/DatePicker/DatePicker.d.ts +0 -0
- /package/{src/components → components}/DatePicker/DatePicker.helpers.d.ts +0 -0
- /package/{src/components → components}/DatePicker/DatePicker.sx.d.ts +0 -0
- /package/{src/components → components}/DatePicker/index.d.ts +0 -0
- /package/{src/components → components}/DateTimePicker/DateTimePicker.d.ts +0 -0
- /package/{src/components → components}/DateTimePicker/DateTimePicker.helpers.d.ts +0 -0
- /package/{src/components → components}/DateTimePicker/DateTimePicker.sx.d.ts +0 -0
- /package/{src/components → components}/DateTimePicker/index.d.ts +0 -0
- /package/{src/components → components}/Divider/Divider.d.ts +0 -0
- /package/{src/components → components}/Divider/index.d.ts +0 -0
- /package/{src/components → components}/Drawer/Drawer.d.ts +0 -0
- /package/{src/components → components}/Drawer/Drawer.sx.d.ts +0 -0
- /package/{src/components → components}/Drawer/DrawerContext.d.ts +0 -0
- /package/{src/components → components}/Drawer/DrawerItem.d.ts +0 -0
- /package/{src/components → components}/Drawer/index.d.ts +0 -0
- /package/{src/components → components}/EmptyState/EmptyState.d.ts +0 -0
- /package/{src/components → components}/EmptyState/index.d.ts +0 -0
- /package/{src/components → components}/Flyout/Flyout.d.ts +0 -0
- /package/{src/components → components}/Flyout/index.d.ts +0 -0
- /package/{src/components → components}/Gallery/Gallery.d.ts +0 -0
- /package/{src/components → components}/Gallery/Gallery.definition.d.ts +0 -0
- /package/{src/components → components}/Gallery/GalleryLightbox.d.ts +0 -0
- /package/{src/components → components}/Gallery/GalleryMain.d.ts +0 -0
- /package/{src/components → components}/Gallery/GalleryThumbnails.d.ts +0 -0
- /package/{src/components → components}/Gallery/index.d.ts +0 -0
- /package/{src/components → components}/Icon/Icon.d.ts +0 -0
- /package/{src/components → components}/Icon/index.d.ts +0 -0
- /package/{src/components → components}/Input/Input.d.ts +0 -0
- /package/{src/components → components}/Input/Input.helpers.d.ts +0 -0
- /package/{src/components → components}/Input/Input.sx.d.ts +0 -0
- /package/{src/components → components}/Input/index.d.ts +0 -0
- /package/{src/components → components}/InputGroup/InputGroup.d.ts +0 -0
- /package/{src/components → components}/InputGroup/index.d.ts +0 -0
- /package/{src/components → components}/MenuButton/MenuButton.d.ts +0 -0
- /package/{src/components → components}/MenuButton/index.d.ts +0 -0
- /package/{src/components → components}/Modal/Modal.d.ts +0 -0
- /package/{src/components → components}/Modal/ModalBody.d.ts +0 -0
- /package/{src/components → components}/Modal/ModalFooter.d.ts +0 -0
- /package/{src/components → components}/Modal/ModalHeader.d.ts +0 -0
- /package/{src/components → components}/Modal/index.d.ts +0 -0
- /package/{src/components → components}/PageHeader/PageHeader.d.ts +0 -0
- /package/{src/components → components}/PageHeader/index.d.ts +0 -0
- /package/{src/components → components}/RadioGroup/RadioGroup.d.ts +0 -0
- /package/{src/components → components}/RadioGroup/RadioGroup.sx.d.ts +0 -0
- /package/{src/components → components}/RadioGroup/index.d.ts +0 -0
- /package/{src/components → components}/Select/Select.d.ts +0 -0
- /package/{src/components → components}/Select/Select.helpers.d.ts +0 -0
- /package/{src/components → components}/Select/Select.sx.d.ts +0 -0
- /package/{src/components → components}/Select/_parts/SelectMenuItem.d.ts +0 -0
- /package/{src/components → components}/Select/_parts/SelectValue.d.ts +0 -0
- /package/{src/components → components}/Select/index.d.ts +0 -0
- /package/{src/components → components}/Spinner/Spinner.d.ts +0 -0
- /package/{src/components → components}/Spinner/index.d.ts +0 -0
- /package/{src/components → components}/Stat/Stat.d.ts +0 -0
- /package/{src/components → components}/Stat/index.d.ts +0 -0
- /package/{src/components → components}/StatusMessage/StatusMessage.d.ts +0 -0
- /package/{src/components → components}/StatusMessage/index.d.ts +0 -0
- /package/{src/components → components}/Stepper/Step.d.ts +0 -0
- /package/{src/components → components}/Stepper/Stepper.d.ts +0 -0
- /package/{src/components → components}/Stepper/StepperContext.d.ts +0 -0
- /package/{src/components → components}/Stepper/_hooks/useHorizontalScroll.d.ts +0 -0
- /package/{src/components → components}/Stepper/_parts/StepperScrollArrow.d.ts +0 -0
- /package/{src/components → components}/Stepper/index.d.ts +0 -0
- /package/{src/components → components}/Switch/Switch.d.ts +0 -0
- /package/{src/components → components}/Switch/Switch.sx.d.ts +0 -0
- /package/{src/components → components}/Switch/Switch.types.d.ts +0 -0
- /package/{src/components → components}/Switch/index.d.ts +0 -0
- /package/{src/components → components}/Table/Table.d.ts +0 -0
- /package/{src/components → components}/Table/data.d.ts +0 -0
- /package/{src/components → components}/Table/exportsUtils.d.ts +0 -0
- /package/{src/components → components}/Table/index.d.ts +0 -0
- /package/{src/components → components}/Table/types.d.ts +0 -0
- /package/{src/components → components}/Tabs/Tab.d.ts +0 -0
- /package/{src/components → components}/Tabs/Tabs.d.ts +0 -0
- /package/{src/components → components}/Tabs/_tabUtils.d.ts +0 -0
- /package/{src/components → components}/Tabs/index.d.ts +0 -0
- /package/{src/components → components}/Timeline/Timeline.d.ts +0 -0
- /package/{src/components → components}/Timeline/TimelineItem.d.ts +0 -0
- /package/{src/components → components}/Timeline/index.d.ts +0 -0
- /package/{src/components → components}/Tooltip/Tooltip.d.ts +0 -0
- /package/{src/components → components}/Tooltip/index.d.ts +0 -0
- /package/{src/components → components}/_shared/formField.sx.d.ts +0 -0
- /package/{src/components → components}/_shared/mergeSx.d.ts +0 -0
- /package/{src/components → components}/_shared/resolvePreset.d.ts +0 -0
- /package/{src/demos → demos}/themes.d.ts +0 -0
- /package/{src/hooks → hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
- /package/{src/hooks → hooks}/ClipBoard/index.d.ts +0 -0
- /package/{src/theme → theme}/componentStyles.d.ts +0 -0
- /package/{src/theme → theme}/tokens.d.ts +0 -0
- /package/{src/utils → utils}/index.d.ts +0 -0
- /package/{src/utils → utils}/scrollToTop.d.ts +0 -0
package/components/Select.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Select/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Select/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Select/index'
|
|
6
6
|
export {}
|
package/components/Spinner.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Spinner/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Spinner/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Spinner/index'
|
|
6
6
|
export {}
|
package/components/Stat.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Stat/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Stat/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Stat/index'
|
|
6
6
|
export {}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction, ReactNode } from 'react';
|
|
2
|
+
import { StatusMessageProps } from './StatusMessage';
|
|
3
|
+
export type StatusMessageState = {
|
|
4
|
+
[K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;
|
|
5
|
+
} & Pick<StatusMessageProps, 'displayType'>;
|
|
6
|
+
interface StatusMessageContextValue {
|
|
7
|
+
state: StatusMessageState | undefined;
|
|
8
|
+
setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;
|
|
9
|
+
cleanMessage: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const useStatusMessageContext: () => StatusMessageContextValue;
|
|
12
|
+
interface StatusMessageProviderProps {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
export declare const StatusMessageProvider: ({ children }: StatusMessageProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './StatusMessage/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './StatusMessage/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './StatusMessage/index'
|
|
6
6
|
export {}
|
package/components/Stepper.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Stepper/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Stepper/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Stepper/index'
|
|
6
6
|
export {}
|
package/components/Switch.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Switch/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Switch/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Switch/index'
|
|
6
6
|
export {}
|
package/components/Table.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Table/index'
|
|
2
2
|
export {}
|
package/components/Tabs.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Tabs/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Tabs/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Tabs/index'
|
|
6
6
|
export {}
|
package/components/Timeline.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Timeline/index'
|
|
2
2
|
export {}
|
|
3
|
-
import _default from '
|
|
3
|
+
import _default from './Timeline/index'
|
|
4
4
|
export default _default
|
|
5
|
-
export * from '
|
|
5
|
+
export * from './Timeline/index'
|
|
6
6
|
export {}
|
package/components/Tooltip.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './Tooltip/index'
|
|
2
2
|
export {}
|
|
@@ -17,37 +17,56 @@ function useClipboard(options) {
|
|
|
17
17
|
}
|
|
18
18
|
setSnackbarOpen(false);
|
|
19
19
|
}, []);
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} else {
|
|
26
|
-
const textarea = document.createElement("textarea");
|
|
27
|
-
textarea.value = text;
|
|
28
|
-
document.body.appendChild(textarea);
|
|
29
|
-
textarea.select();
|
|
30
|
-
document.execCommand("copy");
|
|
31
|
-
document.body.removeChild(textarea);
|
|
32
|
-
}
|
|
33
|
-
setSnackbarMessage((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!");
|
|
34
|
-
setSnackbarSeverity((options == null ? void 0 : options.severity) || "success");
|
|
20
|
+
const mostrarSnackbar = React.useCallback(
|
|
21
|
+
(mensaje, severidad) => {
|
|
22
|
+
var _a2;
|
|
23
|
+
setSnackbarMessage(mensaje);
|
|
24
|
+
setSnackbarSeverity(severidad);
|
|
35
25
|
setSnackbarPosition((options == null ? void 0 : options.position) || { vertical: "bottom", horizontal: "center" });
|
|
36
26
|
setSnackbarDuration((_a2 = options == null ? void 0 : options.duration) != null ? _a2 : 3e3);
|
|
37
27
|
setSnackbarOpen(true);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
},
|
|
29
|
+
[options]
|
|
30
|
+
);
|
|
31
|
+
const copiarConTextarea = React.useCallback((text) => {
|
|
32
|
+
const textarea = document.createElement("textarea");
|
|
33
|
+
textarea.value = text;
|
|
34
|
+
textarea.style.position = "fixed";
|
|
35
|
+
textarea.style.top = "0";
|
|
36
|
+
textarea.style.opacity = "0";
|
|
37
|
+
document.body.appendChild(textarea);
|
|
38
|
+
textarea.select();
|
|
39
|
+
try {
|
|
40
|
+
return document.execCommand("copy");
|
|
41
|
+
} catch (e) {
|
|
42
|
+
return false;
|
|
43
|
+
} finally {
|
|
44
|
+
document.body.removeChild(textarea);
|
|
45
45
|
}
|
|
46
|
-
}, [
|
|
46
|
+
}, []);
|
|
47
|
+
const executeCopy = React.useCallback(
|
|
48
|
+
async (text) => {
|
|
49
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
50
|
+
try {
|
|
51
|
+
await navigator.clipboard.writeText(text);
|
|
52
|
+
mostrarSnackbar((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!", (options == null ? void 0 : options.severity) || "success");
|
|
53
|
+
return true;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (copiarConTextarea(text)) {
|
|
58
|
+
mostrarSnackbar((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!", (options == null ? void 0 : options.severity) || "success");
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
mostrarSnackbar("No se pudo copiar al portapapeles.", "error");
|
|
62
|
+
return false;
|
|
63
|
+
},
|
|
64
|
+
[copiarConTextarea, mostrarSnackbar, options]
|
|
65
|
+
);
|
|
47
66
|
const copyFromRef = React.useCallback(() => {
|
|
48
67
|
if (elementRef.current) {
|
|
49
68
|
const textToCopy = elementRef.current.innerText || "";
|
|
50
|
-
executeCopy(textToCopy);
|
|
69
|
+
void executeCopy(textToCopy);
|
|
51
70
|
}
|
|
52
71
|
}, [executeCopy]);
|
|
53
72
|
React.useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipBoard.cjs","sources":["../../../src/hooks/ClipBoard/ClipBoard.tsx"],"sourcesContent":["// useClipboard.tsx (Versión Unificada)\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { Snackbar, Alert } from '@mui/material';\nimport { AlertProps } from '@mui/material/Alert';\n\n// Tipo para las opciones del Snackbar\ninterface SnackbarOptions {\n message?: string;\n duration?: number;\n severity?: AlertProps['severity'];\n position?: { vertical: 'top' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n}\n\n/**\n * Hook 'useClipboard'.\n * Proporciona funcionalidad de copiado de texto y feedback visual (Snackbar).\n * Permite dos modos de uso:\n * 1. Uso por Referencia (ref): Se adjunta a un elemento, copia su innerText al hacer clic.\n * 2. Uso por Función (copy): Recibe el texto a copiar directamente como argumento.\n *\n * @param options Opciones de configuración para el Snackbar de feedback.\n * @returns Un objeto que contiene:\n * - 'ref': Una React Ref para adjuntar a un elemento (Modo Ref).\n * - 'copy': Una función (text: string) => void para copiar texto (Modo Función).\n * - 'CopyMessage': El componente Snackbar para renderizar el feedback.\n */\nexport function useClipboard(options?: SnackbarOptions) {\n // --- Elementos de Copiado por Referencia ---\n const elementRef = useRef<HTMLElement>(null);\n\n // --- Estados y Opciones del Snackbar ---\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(options?.message || '¡Copiado al portapapeles!');\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>(options?.severity || 'success');\n const [snackbarPosition, setSnackbarPosition] = useState<import('@mui/material').SnackbarOrigin>(options?.position || { vertical: 'bottom', horizontal: 'center' });\n const [snackbarDuration, setSnackbarDuration] = useState(options?.duration ?? 3000);\n\n // Función para cerrar el Snackbar\n const handleSnackbarClose = useCallback((event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n }, []);\n\n /**\n * FUNCIÓN PRINCIPAL DE COPIADO.\n * Se usa internamente para 'ref' y se expone para 'copy(text)'.\n * @param text El texto exacto a copiar.\n */\n const
|
|
1
|
+
{"version":3,"file":"ClipBoard.cjs","sources":["../../../src/hooks/ClipBoard/ClipBoard.tsx"],"sourcesContent":["// useClipboard.tsx (Versión Unificada)\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { Snackbar, Alert } from '@mui/material';\nimport { AlertProps } from '@mui/material/Alert';\n\n// Tipo para las opciones del Snackbar\ninterface SnackbarOptions {\n message?: string;\n duration?: number;\n severity?: AlertProps['severity'];\n position?: { vertical: 'top' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n}\n\n/**\n * Hook 'useClipboard'.\n * Proporciona funcionalidad de copiado de texto y feedback visual (Snackbar).\n * Permite dos modos de uso:\n * 1. Uso por Referencia (ref): Se adjunta a un elemento, copia su innerText al hacer clic.\n * 2. Uso por Función (copy): Recibe el texto a copiar directamente como argumento.\n *\n * @param options Opciones de configuración para el Snackbar de feedback.\n * @returns Un objeto que contiene:\n * - 'ref': Una React Ref para adjuntar a un elemento (Modo Ref).\n * - 'copy': Una función (text: string) => void para copiar texto (Modo Función).\n * - 'CopyMessage': El componente Snackbar para renderizar el feedback.\n */\nexport function useClipboard(options?: SnackbarOptions) {\n // --- Elementos de Copiado por Referencia ---\n const elementRef = useRef<HTMLElement>(null);\n\n // --- Estados y Opciones del Snackbar ---\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(options?.message || '¡Copiado al portapapeles!');\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>(options?.severity || 'success');\n const [snackbarPosition, setSnackbarPosition] = useState<import('@mui/material').SnackbarOrigin>(options?.position || { vertical: 'bottom', horizontal: 'center' });\n const [snackbarDuration, setSnackbarDuration] = useState(options?.duration ?? 3000);\n\n // Función para cerrar el Snackbar\n const handleSnackbarClose = useCallback((event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n }, []);\n\n /**\n * FUNCIÓN PRINCIPAL DE COPIADO.\n * Se usa internamente para 'ref' y se expone para 'copy(text)'.\n * @param text El texto exacto a copiar.\n */\n const mostrarSnackbar = useCallback(\n (mensaje: string, severidad: AlertProps['severity']) => {\n setSnackbarMessage(mensaje);\n setSnackbarSeverity(severidad);\n setSnackbarPosition(options?.position || { vertical: 'bottom', horizontal: 'center' });\n setSnackbarDuration(options?.duration ?? 3000);\n setSnackbarOpen(true);\n },\n [options],\n );\n\n /** Fallback legacy. `execCommand` devuelve `false` en vez de tirar cuando falla. */\n const copiarConTextarea = useCallback((text: string): boolean => {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n // Fuera de la vista pero seleccionable: sin esto la página salta al final.\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n try {\n return document.execCommand('copy');\n } catch {\n return false;\n } finally {\n document.body.removeChild(textarea);\n }\n }, []);\n\n const executeCopy = useCallback(\n async (text: string): Promise<boolean> => {\n // `writeText` es ASÍNCRONA: llamarla sin await/catch dejaba la promesa\n // suelta, y cuando el navegador la rechaza —documento sin foco, permiso\n // denegado, contexto no seguro— la rejection escapaba al `window` de la\n // app que consume la librería. El try/catch de antes sólo atrapaba\n // errores síncronos, así que no cubría nada de eso.\n if (navigator.clipboard && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text);\n mostrarSnackbar(options?.message || '¡Copiado al portapapeles!', options?.severity || 'success');\n return true;\n } catch {\n // Puede ser sólo falta de foco: se intenta el fallback antes de rendirse.\n }\n }\n\n if (copiarConTextarea(text)) {\n mostrarSnackbar(options?.message || '¡Copiado al portapapeles!', options?.severity || 'success');\n return true;\n }\n\n mostrarSnackbar('No se pudo copiar al portapapeles.', 'error');\n return false;\n },\n [copiarConTextarea, mostrarSnackbar, options],\n );\n\n // --- Lógica del Modo Ref ---\n const copyFromRef = useCallback(() => {\n if (elementRef.current) {\n const textToCopy = elementRef.current.innerText || '';\n // `void`: el listener del DOM no puede esperar la promesa, y ésta ya\n // maneja sus propios errores adentro.\n void executeCopy(textToCopy);\n }\n }, [executeCopy]);\n\n // Adjunta un event listener de clic al elemento referenciado (Modo Ref)\n useEffect(() => {\n const currentElement = elementRef.current;\n if (currentElement) {\n currentElement.style.cursor = 'pointer';\n // Adjuntamos la función que copia el texto del ref\n currentElement.addEventListener('click', copyFromRef);\n }\n\n return () => {\n if (currentElement) {\n currentElement.removeEventListener('click', copyFromRef);\n }\n };\n }, [copyFromRef]);\n\n\n // Componente Snackbar encapsulado. Solo se renderiza si duration es > 0.\n const CopyMessage = () => {\n if (snackbarDuration <= 0) return null; // No renderizar si la duración es 0\n\n return (\n <Snackbar\n open={snackbarOpen}\n autoHideDuration={snackbarDuration}\n onClose={handleSnackbarClose}\n anchorOrigin={snackbarPosition}\n >\n <Alert onClose={handleSnackbarClose} severity={snackbarSeverity} sx={{ width: '100%' }}>\n {snackbarMessage}\n </Alert>\n </Snackbar>\n );\n };\n\n // Retorna ambas funcionalidades para que el usuario elija\n return { ref: elementRef, copy: executeCopy, CopyMessage };\n}\n\nexport default useClipboard;"],"names":["useRef","useState","useCallback","_a","useEffect","jsx","Snackbar","Alert"],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ interface SnackbarOptions {
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function useClipboard(options?: SnackbarOptions): {
|
|
26
26
|
ref: React.RefObject<HTMLElement | null>;
|
|
27
|
-
copy: (text: string) =>
|
|
27
|
+
copy: (text: string) => Promise<boolean>;
|
|
28
28
|
CopyMessage: () => import("react/jsx-runtime").JSX.Element | null;
|
|
29
29
|
};
|
|
30
30
|
export default useClipboard;
|
|
@@ -15,37 +15,56 @@ function useClipboard(options) {
|
|
|
15
15
|
}
|
|
16
16
|
setSnackbarOpen(false);
|
|
17
17
|
}, []);
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
} else {
|
|
24
|
-
const textarea = document.createElement("textarea");
|
|
25
|
-
textarea.value = text;
|
|
26
|
-
document.body.appendChild(textarea);
|
|
27
|
-
textarea.select();
|
|
28
|
-
document.execCommand("copy");
|
|
29
|
-
document.body.removeChild(textarea);
|
|
30
|
-
}
|
|
31
|
-
setSnackbarMessage((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!");
|
|
32
|
-
setSnackbarSeverity((options == null ? void 0 : options.severity) || "success");
|
|
18
|
+
const mostrarSnackbar = useCallback(
|
|
19
|
+
(mensaje, severidad) => {
|
|
20
|
+
var _a2;
|
|
21
|
+
setSnackbarMessage(mensaje);
|
|
22
|
+
setSnackbarSeverity(severidad);
|
|
33
23
|
setSnackbarPosition((options == null ? void 0 : options.position) || { vertical: "bottom", horizontal: "center" });
|
|
34
24
|
setSnackbarDuration((_a2 = options == null ? void 0 : options.duration) != null ? _a2 : 3e3);
|
|
35
25
|
setSnackbarOpen(true);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
26
|
+
},
|
|
27
|
+
[options]
|
|
28
|
+
);
|
|
29
|
+
const copiarConTextarea = useCallback((text) => {
|
|
30
|
+
const textarea = document.createElement("textarea");
|
|
31
|
+
textarea.value = text;
|
|
32
|
+
textarea.style.position = "fixed";
|
|
33
|
+
textarea.style.top = "0";
|
|
34
|
+
textarea.style.opacity = "0";
|
|
35
|
+
document.body.appendChild(textarea);
|
|
36
|
+
textarea.select();
|
|
37
|
+
try {
|
|
38
|
+
return document.execCommand("copy");
|
|
39
|
+
} catch (e) {
|
|
40
|
+
return false;
|
|
41
|
+
} finally {
|
|
42
|
+
document.body.removeChild(textarea);
|
|
43
43
|
}
|
|
44
|
-
}, [
|
|
44
|
+
}, []);
|
|
45
|
+
const executeCopy = useCallback(
|
|
46
|
+
async (text) => {
|
|
47
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
48
|
+
try {
|
|
49
|
+
await navigator.clipboard.writeText(text);
|
|
50
|
+
mostrarSnackbar((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!", (options == null ? void 0 : options.severity) || "success");
|
|
51
|
+
return true;
|
|
52
|
+
} catch (e) {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (copiarConTextarea(text)) {
|
|
56
|
+
mostrarSnackbar((options == null ? void 0 : options.message) || "¡Copiado al portapapeles!", (options == null ? void 0 : options.severity) || "success");
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
mostrarSnackbar("No se pudo copiar al portapapeles.", "error");
|
|
60
|
+
return false;
|
|
61
|
+
},
|
|
62
|
+
[copiarConTextarea, mostrarSnackbar, options]
|
|
63
|
+
);
|
|
45
64
|
const copyFromRef = useCallback(() => {
|
|
46
65
|
if (elementRef.current) {
|
|
47
66
|
const textToCopy = elementRef.current.innerText || "";
|
|
48
|
-
executeCopy(textToCopy);
|
|
67
|
+
void executeCopy(textToCopy);
|
|
49
68
|
}
|
|
50
69
|
}, [executeCopy]);
|
|
51
70
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipBoard.js","sources":["../../../src/hooks/ClipBoard/ClipBoard.tsx"],"sourcesContent":["// useClipboard.tsx (Versión Unificada)\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { Snackbar, Alert } from '@mui/material';\nimport { AlertProps } from '@mui/material/Alert';\n\n// Tipo para las opciones del Snackbar\ninterface SnackbarOptions {\n message?: string;\n duration?: number;\n severity?: AlertProps['severity'];\n position?: { vertical: 'top' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n}\n\n/**\n * Hook 'useClipboard'.\n * Proporciona funcionalidad de copiado de texto y feedback visual (Snackbar).\n * Permite dos modos de uso:\n * 1. Uso por Referencia (ref): Se adjunta a un elemento, copia su innerText al hacer clic.\n * 2. Uso por Función (copy): Recibe el texto a copiar directamente como argumento.\n *\n * @param options Opciones de configuración para el Snackbar de feedback.\n * @returns Un objeto que contiene:\n * - 'ref': Una React Ref para adjuntar a un elemento (Modo Ref).\n * - 'copy': Una función (text: string) => void para copiar texto (Modo Función).\n * - 'CopyMessage': El componente Snackbar para renderizar el feedback.\n */\nexport function useClipboard(options?: SnackbarOptions) {\n // --- Elementos de Copiado por Referencia ---\n const elementRef = useRef<HTMLElement>(null);\n\n // --- Estados y Opciones del Snackbar ---\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(options?.message || '¡Copiado al portapapeles!');\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>(options?.severity || 'success');\n const [snackbarPosition, setSnackbarPosition] = useState<import('@mui/material').SnackbarOrigin>(options?.position || { vertical: 'bottom', horizontal: 'center' });\n const [snackbarDuration, setSnackbarDuration] = useState(options?.duration ?? 3000);\n\n // Función para cerrar el Snackbar\n const handleSnackbarClose = useCallback((event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n }, []);\n\n /**\n * FUNCIÓN PRINCIPAL DE COPIADO.\n * Se usa internamente para 'ref' y se expone para 'copy(text)'.\n * @param text El texto exacto a copiar.\n */\n const
|
|
1
|
+
{"version":3,"file":"ClipBoard.js","sources":["../../../src/hooks/ClipBoard/ClipBoard.tsx"],"sourcesContent":["// useClipboard.tsx (Versión Unificada)\nimport React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { Snackbar, Alert } from '@mui/material';\nimport { AlertProps } from '@mui/material/Alert';\n\n// Tipo para las opciones del Snackbar\ninterface SnackbarOptions {\n message?: string;\n duration?: number;\n severity?: AlertProps['severity'];\n position?: { vertical: 'top' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n}\n\n/**\n * Hook 'useClipboard'.\n * Proporciona funcionalidad de copiado de texto y feedback visual (Snackbar).\n * Permite dos modos de uso:\n * 1. Uso por Referencia (ref): Se adjunta a un elemento, copia su innerText al hacer clic.\n * 2. Uso por Función (copy): Recibe el texto a copiar directamente como argumento.\n *\n * @param options Opciones de configuración para el Snackbar de feedback.\n * @returns Un objeto que contiene:\n * - 'ref': Una React Ref para adjuntar a un elemento (Modo Ref).\n * - 'copy': Una función (text: string) => void para copiar texto (Modo Función).\n * - 'CopyMessage': El componente Snackbar para renderizar el feedback.\n */\nexport function useClipboard(options?: SnackbarOptions) {\n // --- Elementos de Copiado por Referencia ---\n const elementRef = useRef<HTMLElement>(null);\n\n // --- Estados y Opciones del Snackbar ---\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(options?.message || '¡Copiado al portapapeles!');\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>(options?.severity || 'success');\n const [snackbarPosition, setSnackbarPosition] = useState<import('@mui/material').SnackbarOrigin>(options?.position || { vertical: 'bottom', horizontal: 'center' });\n const [snackbarDuration, setSnackbarDuration] = useState(options?.duration ?? 3000);\n\n // Función para cerrar el Snackbar\n const handleSnackbarClose = useCallback((event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n }, []);\n\n /**\n * FUNCIÓN PRINCIPAL DE COPIADO.\n * Se usa internamente para 'ref' y se expone para 'copy(text)'.\n * @param text El texto exacto a copiar.\n */\n const mostrarSnackbar = useCallback(\n (mensaje: string, severidad: AlertProps['severity']) => {\n setSnackbarMessage(mensaje);\n setSnackbarSeverity(severidad);\n setSnackbarPosition(options?.position || { vertical: 'bottom', horizontal: 'center' });\n setSnackbarDuration(options?.duration ?? 3000);\n setSnackbarOpen(true);\n },\n [options],\n );\n\n /** Fallback legacy. `execCommand` devuelve `false` en vez de tirar cuando falla. */\n const copiarConTextarea = useCallback((text: string): boolean => {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n // Fuera de la vista pero seleccionable: sin esto la página salta al final.\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n try {\n return document.execCommand('copy');\n } catch {\n return false;\n } finally {\n document.body.removeChild(textarea);\n }\n }, []);\n\n const executeCopy = useCallback(\n async (text: string): Promise<boolean> => {\n // `writeText` es ASÍNCRONA: llamarla sin await/catch dejaba la promesa\n // suelta, y cuando el navegador la rechaza —documento sin foco, permiso\n // denegado, contexto no seguro— la rejection escapaba al `window` de la\n // app que consume la librería. El try/catch de antes sólo atrapaba\n // errores síncronos, así que no cubría nada de eso.\n if (navigator.clipboard && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text);\n mostrarSnackbar(options?.message || '¡Copiado al portapapeles!', options?.severity || 'success');\n return true;\n } catch {\n // Puede ser sólo falta de foco: se intenta el fallback antes de rendirse.\n }\n }\n\n if (copiarConTextarea(text)) {\n mostrarSnackbar(options?.message || '¡Copiado al portapapeles!', options?.severity || 'success');\n return true;\n }\n\n mostrarSnackbar('No se pudo copiar al portapapeles.', 'error');\n return false;\n },\n [copiarConTextarea, mostrarSnackbar, options],\n );\n\n // --- Lógica del Modo Ref ---\n const copyFromRef = useCallback(() => {\n if (elementRef.current) {\n const textToCopy = elementRef.current.innerText || '';\n // `void`: el listener del DOM no puede esperar la promesa, y ésta ya\n // maneja sus propios errores adentro.\n void executeCopy(textToCopy);\n }\n }, [executeCopy]);\n\n // Adjunta un event listener de clic al elemento referenciado (Modo Ref)\n useEffect(() => {\n const currentElement = elementRef.current;\n if (currentElement) {\n currentElement.style.cursor = 'pointer';\n // Adjuntamos la función que copia el texto del ref\n currentElement.addEventListener('click', copyFromRef);\n }\n\n return () => {\n if (currentElement) {\n currentElement.removeEventListener('click', copyFromRef);\n }\n };\n }, [copyFromRef]);\n\n\n // Componente Snackbar encapsulado. Solo se renderiza si duration es > 0.\n const CopyMessage = () => {\n if (snackbarDuration <= 0) return null; // No renderizar si la duración es 0\n\n return (\n <Snackbar\n open={snackbarOpen}\n autoHideDuration={snackbarDuration}\n onClose={handleSnackbarClose}\n anchorOrigin={snackbarPosition}\n >\n <Alert onClose={handleSnackbarClose} severity={snackbarSeverity} sx={{ width: '100%' }}>\n {snackbarMessage}\n </Alert>\n </Snackbar>\n );\n };\n\n // Retorna ambas funcionalidades para que el usuario elija\n return { ref: elementRef, copy: executeCopy, CopyMessage };\n}\n\nexport default useClipboard;"],"names":["_a"],"mappings":"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"}
|
package/hooks/ClipBoard.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from './ClipBoard/index'
|
|
2
2
|
export {}
|
package/index.cjs
CHANGED
|
@@ -23,7 +23,7 @@ const Table = require("./Table-BpnAkCgd.cjs");
|
|
|
23
23
|
const StatusMessage = require("./StatusMessage-B3nXpuRl.cjs");
|
|
24
24
|
const Modal = require("./Modal-Cfyr-RsW.cjs");
|
|
25
25
|
const Input = require("./Input-Bpjw7qwq.cjs");
|
|
26
|
-
const Select = require("./Select-
|
|
26
|
+
const Select = require("./Select-C06gHRqZ.cjs");
|
|
27
27
|
const Autocomplete = require("./Autocomplete-Bd3bN4Cw.cjs");
|
|
28
28
|
const Switch = require("./Switch-B4ex7yKR.cjs");
|
|
29
29
|
const RadioGroup = require("./RadioGroup-DVvmmDs3.cjs");
|
|
@@ -31,7 +31,7 @@ const Checkbox = require("./Checkbox-Bx4Asmg7.cjs");
|
|
|
31
31
|
const DatePicker = require("./DatePicker-CMcQddi1.cjs");
|
|
32
32
|
const DateTimePicker = require("./DateTimePicker-BVJGq1A0.cjs");
|
|
33
33
|
const InputGroup = require("./InputGroup-BZ7cmAcg.cjs");
|
|
34
|
-
const ActionMenu = require("./ActionMenu-
|
|
34
|
+
const ActionMenu = require("./ActionMenu-D81Xb35f.cjs");
|
|
35
35
|
const AppBarMenuToggle = require("./AppBarMenuToggle-D_RJGtHO.cjs");
|
|
36
36
|
const DrawerItem = require("./DrawerItem-DlnG_NdY.cjs");
|
|
37
37
|
const Flyout = require("./Flyout-fycujUVf.cjs");
|
|
@@ -118,6 +118,38 @@ Object.defineProperty(exports, "ListSubheader", {
|
|
|
118
118
|
enumerable: true,
|
|
119
119
|
get: () => material.ListSubheader
|
|
120
120
|
});
|
|
121
|
+
Object.defineProperty(exports, "MuiTable", {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
get: () => material.Table
|
|
124
|
+
});
|
|
125
|
+
Object.defineProperty(exports, "MuiTableBody", {
|
|
126
|
+
enumerable: true,
|
|
127
|
+
get: () => material.TableBody
|
|
128
|
+
});
|
|
129
|
+
Object.defineProperty(exports, "MuiTableCell", {
|
|
130
|
+
enumerable: true,
|
|
131
|
+
get: () => material.TableCell
|
|
132
|
+
});
|
|
133
|
+
Object.defineProperty(exports, "MuiTableContainer", {
|
|
134
|
+
enumerable: true,
|
|
135
|
+
get: () => material.TableContainer
|
|
136
|
+
});
|
|
137
|
+
Object.defineProperty(exports, "MuiTableHead", {
|
|
138
|
+
enumerable: true,
|
|
139
|
+
get: () => material.TableHead
|
|
140
|
+
});
|
|
141
|
+
Object.defineProperty(exports, "MuiTablePagination", {
|
|
142
|
+
enumerable: true,
|
|
143
|
+
get: () => material.TablePagination
|
|
144
|
+
});
|
|
145
|
+
Object.defineProperty(exports, "MuiTableRow", {
|
|
146
|
+
enumerable: true,
|
|
147
|
+
get: () => material.TableRow
|
|
148
|
+
});
|
|
149
|
+
Object.defineProperty(exports, "MuiTableSortLabel", {
|
|
150
|
+
enumerable: true,
|
|
151
|
+
get: () => material.TableSortLabel
|
|
152
|
+
});
|
|
121
153
|
Object.defineProperty(exports, "Paper", {
|
|
122
154
|
enumerable: true,
|
|
123
155
|
get: () => material.Paper
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -1,2 +1,62 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {}
|
|
1
|
+
export type { LibraryComponentName, PresetStyle, ComponentPresets, LibraryStyles, } from './theme/componentStyles';
|
|
2
|
+
export { DEFAULT_PRESET_NAME, resolvePreset } from './components/_shared/resolvePreset';
|
|
3
|
+
export * from './utils';
|
|
4
|
+
export * from './mui';
|
|
5
|
+
export { Button } from './components/Button';
|
|
6
|
+
export { Card } from './components/Card';
|
|
7
|
+
export type { CardProps } from './components/Card';
|
|
8
|
+
export { Chip } from './components/Chip';
|
|
9
|
+
export { Column } from './components/Column';
|
|
10
|
+
export type { ColumnProps } from './components/Column';
|
|
11
|
+
export { Avatar } from './components/Avatar';
|
|
12
|
+
export { Stat } from './components/Stat';
|
|
13
|
+
export { Spinner } from './components/Spinner';
|
|
14
|
+
export type { SpinnerProps, SpinnerSize, SpinnerColor } from './components/Spinner';
|
|
15
|
+
export { Alert } from './components/Alert';
|
|
16
|
+
export type { AlertProps, AlertSeverity, AlertVariant } from './components/Alert';
|
|
17
|
+
export { Divider } from './components/Divider';
|
|
18
|
+
export type { DividerProps } from './components/Divider';
|
|
19
|
+
export { ButtonGroup } from './components/ButtonGroup';
|
|
20
|
+
export type { ButtonGroupProps } from './components/ButtonGroup';
|
|
21
|
+
export { Breadcrumbs } from './components/Breadcrumbs';
|
|
22
|
+
export type { BreadcrumbsProps } from './components/Breadcrumbs';
|
|
23
|
+
export { PageHeader } from './components/PageHeader';
|
|
24
|
+
export type { PageHeaderProps } from './components/PageHeader';
|
|
25
|
+
export { DataRow } from './components/DataRow';
|
|
26
|
+
export type { DataRowProps } from './components/DataRow';
|
|
27
|
+
export { EmptyState } from './components/EmptyState';
|
|
28
|
+
export type { EmptyStateProps } from './components/EmptyState';
|
|
29
|
+
export { Stepper, Step } from './components/Stepper';
|
|
30
|
+
export { Tabs, Tab } from './components/Tabs';
|
|
31
|
+
export { Table } from './components/Table';
|
|
32
|
+
export { StatusMessage } from './components/StatusMessage';
|
|
33
|
+
export type { StatusMessageProps } from './components/StatusMessage';
|
|
34
|
+
export { Modal, ModalHeader, ModalBody, ModalFooter } from './components/Modal';
|
|
35
|
+
export type { ModalRef, ModalMode, ModalSeverity } from './components/Modal';
|
|
36
|
+
export { Input } from './components/Input';
|
|
37
|
+
export type { InputProps, BaseInputProps } from './components/Input';
|
|
38
|
+
export { Select, Option } from './components/Select';
|
|
39
|
+
export type { SelectProps, SelectOption, OptionProps } from './components/Select';
|
|
40
|
+
export { Autocomplete, AutocompleteSelect } from './components/Autocomplete';
|
|
41
|
+
export type { AutocompleteProps } from './components/Autocomplete';
|
|
42
|
+
export { Switch } from './components/Switch';
|
|
43
|
+
export type { SwitchProps, BaseSwitchProps } from './components/Switch';
|
|
44
|
+
export { RadioGroup } from './components/RadioGroup';
|
|
45
|
+
export type { RadioGroupProps, RadioOption, BaseRadioGroupProps } from './components/RadioGroup';
|
|
46
|
+
export { Checkbox } from './components/Checkbox';
|
|
47
|
+
export type { CheckboxProps, BaseCheckboxProps } from './components/Checkbox';
|
|
48
|
+
export { DatePicker } from './components/DatePicker';
|
|
49
|
+
export type { DatePickerProps } from './components/DatePicker';
|
|
50
|
+
export { DateTimePicker } from './components/DateTimePicker';
|
|
51
|
+
export type { DateTimePickerProps } from './components/DateTimePicker';
|
|
52
|
+
export { InputGroup } from './components/InputGroup';
|
|
53
|
+
export type { InputGroupProps } from './components/InputGroup';
|
|
54
|
+
export { ActionMenu, ActionMenuItem } from './components/ActionMenu';
|
|
55
|
+
export { AppBar, AppBarMenuToggle, useAppBarContext } from './components/AppBar';
|
|
56
|
+
export { Drawer, DrawerItem, useDrawerContext } from './components/Drawer';
|
|
57
|
+
export { Flyout } from './components/Flyout';
|
|
58
|
+
export { Gallery } from './components/Gallery';
|
|
59
|
+
export { Icon } from './components/Icon';
|
|
60
|
+
export { MenuButton } from './components/MenuButton';
|
|
61
|
+
export { Timeline, TimelineItem } from './components/Timeline';
|
|
62
|
+
export { Tooltip } from './components/Tooltip';
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { D, r } from "./resolvePreset-K6_BfWHD.js";
|
|
2
|
-
import { AlertTitle, Backdrop, Box, CircularProgress, Collapse, Container, Fade, Grid, Grow, LinearProgress, Link, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Paper, Skeleton, Snackbar, Stack, ThemeProvider, Typography, Zoom, alpha, createTheme, styled, useMediaQuery, useTheme } from "@mui/material";
|
|
2
|
+
import { AlertTitle, Backdrop, Box, CircularProgress, Collapse, Container, Fade, Grid, Grow, LinearProgress, Link, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Table, TableBody, TableCell, TableContainer, TableHead, TablePagination, TableRow, TableSortLabel, Paper, Skeleton, Snackbar, Stack, ThemeProvider, Typography, Zoom, alpha, createTheme, styled, useMediaQuery, useTheme } from "@mui/material";
|
|
3
3
|
import { renderMultiSectionDigitalClockTimeView } from "@mui/x-date-pickers/timeViewRenderers";
|
|
4
4
|
import { B } from "./Button-UkkP-bNw.js";
|
|
5
5
|
import { C } from "./Card-DYKGY-NG.js";
|
|
@@ -21,7 +21,7 @@ import { T as T2 } from "./Table-BuALBQWX.js";
|
|
|
21
21
|
import { S as S4 } from "./StatusMessage-D0WgSBx7.js";
|
|
22
22
|
import { M, b, c, a as a3 } from "./Modal-BqW0Nk3l.js";
|
|
23
23
|
import { I } from "./Input-BibHlnGN.js";
|
|
24
|
-
import { O, S as S5 } from "./Select-
|
|
24
|
+
import { O, S as S5 } from "./Select-BIUq3ZPy.js";
|
|
25
25
|
import { A as A3, a as a4 } from "./Autocomplete-E5aSUGVK.js";
|
|
26
26
|
import { S as S6 } from "./Switch-CY1Dd2ff.js";
|
|
27
27
|
import { R } from "./RadioGroup-cKCpag8W.js";
|
|
@@ -29,7 +29,7 @@ import { C as C3 } from "./Checkbox-BL4kvHFB.js";
|
|
|
29
29
|
import { D as D4 } from "./DatePicker-D__RSgs-.js";
|
|
30
30
|
import { D as D5 } from "./DateTimePicker-LeaE716a.js";
|
|
31
31
|
import { I as I2 } from "./InputGroup-D5pXKGjZ.js";
|
|
32
|
-
import { A as A4, a as a5 } from "./ActionMenu-
|
|
32
|
+
import { A as A4, a as a5 } from "./ActionMenu-DYPA_tYk.js";
|
|
33
33
|
import { A as A5, a as a6, u } from "./AppBarMenuToggle-BpXBMeca.js";
|
|
34
34
|
import { D as D6, a as a7, u as u2 } from "./DrawerItem-at1lsEo9.js";
|
|
35
35
|
import { F } from "./Flyout-DCcDBYKT.js";
|
|
@@ -97,6 +97,14 @@ export {
|
|
|
97
97
|
b as ModalBody,
|
|
98
98
|
c as ModalFooter,
|
|
99
99
|
a3 as ModalHeader,
|
|
100
|
+
Table as MuiTable,
|
|
101
|
+
TableBody as MuiTableBody,
|
|
102
|
+
TableCell as MuiTableCell,
|
|
103
|
+
TableContainer as MuiTableContainer,
|
|
104
|
+
TableHead as MuiTableHead,
|
|
105
|
+
TablePagination as MuiTablePagination,
|
|
106
|
+
TableRow as MuiTableRow,
|
|
107
|
+
TableSortLabel as MuiTableSortLabel,
|
|
100
108
|
O as Option,
|
|
101
109
|
P as PageHeader,
|
|
102
110
|
Paper,
|
|
@@ -2,6 +2,7 @@ export { Box, Stack, Grid, Container, Paper, Divider, } from '@mui/material';
|
|
|
2
2
|
export { Typography, Link } from '@mui/material';
|
|
3
3
|
export { List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, } from '@mui/material';
|
|
4
4
|
export { CircularProgress, LinearProgress, Skeleton, Alert, AlertTitle, Snackbar, Backdrop, Fade, Grow, Zoom, Collapse, } from '@mui/material';
|
|
5
|
+
export { Table as MuiTable, TableBody as MuiTableBody, TableCell as MuiTableCell, TableContainer as MuiTableContainer, TableHead as MuiTableHead, TableRow as MuiTableRow, TableSortLabel as MuiTableSortLabel, TablePagination as MuiTablePagination, } from '@mui/material';
|
|
5
6
|
export { useTheme, useMediaQuery, alpha, styled, createTheme, ThemeProvider } from '@mui/material';
|
|
6
7
|
export type { SxProps, Theme } from '@mui/material/styles';
|
|
7
8
|
export { renderMultiSectionDigitalClockTimeView } from '@mui/x-date-pickers/timeViewRenderers';
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMenu-BXRVKopM.js","sources":["../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useContext,\n useState,\n type ReactElement,\n type ReactNode,\n type MouseEvent,\n} from 'react';\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Tooltip,\n type MenuItemProps as MuiMenuItemProps,\n} from '@mui/material';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ActionMenuProps {\n /** Items del menú. Normalmente `<ActionMenuItem>` o `<Divider />`. */\n children: ReactNode;\n /**\n * Elemento disparador — cualquier componente clickeable (Button, Chip, IconButton…).\n * El ActionMenu le inyecta `onClick` automáticamente. Si se omite, se usa un\n * IconButton de tres puntos por defecto.\n */\n trigger?: ReactElement;\n /** Texto de tooltip sobre el trigger default. Default: \"Acciones\". */\n triggerTooltip?: string;\n /** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */\n anchorOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */\n transformOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** sx del Menu (Paper interno). */\n menuSx?: SxProps<Theme>;\n /** Deshabilita el trigger entero. */\n disabled?: boolean;\n}\n\ninterface ActionMenuContextValue {\n close: () => void;\n}\n\nconst ActionMenuContext = createContext<ActionMenuContextValue | null>(null);\n\nexport const ActionMenu: React.FC<ActionMenuProps> = ({\n children,\n trigger,\n triggerTooltip,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n menuSx,\n disabled = false,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleClose = () => setAnchorEl(null);\n\n // Abre el menú anclándolo al elemento que recibió el click.\n const openMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) return;\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Si el consumer pasó un trigger (ej. <Button>), le inyectamos onClick.\n // Si no, usamos el IconButton de tres puntos por defecto.\n const triggerElement = trigger ? (\n React.cloneElement(trigger as ReactElement<any>, {\n onClick: openMenu,\n disabled,\n })\n ) : (\n <Tooltip title={triggerTooltip} arrow>\n <IconButton\n size=\"small\"\n onClick={openMenu}\n disabled={disabled}\n aria-label={triggerTooltip}\n >\n <MoreVertIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n\n const paperSx = [\n { minWidth: 180 },\n ...(Array.isArray(menuSx) ? menuSx : menuSx ? [menuSx] : []),\n ] as SxProps<Theme>;\n\n return (\n <>\n {triggerElement}\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{ paper: { sx: paperSx } }}\n >\n <ActionMenuContext.Provider value={{ close: handleClose }}>\n {children}\n </ActionMenuContext.Provider>\n </Menu>\n </>\n );\n};\n\nexport interface ActionMenuItemProps\n extends Omit<MuiMenuItemProps, 'children' | 'onClick'> {\n /** Icono opcional a la izquierda. */\n icon?: ReactNode;\n /** Texto (o nodo) del item. */\n children: ReactNode;\n /** Handler de click. El menú se cierra automáticamente después. */\n onClick?: (event: MouseEvent<HTMLLIElement>) => void;\n}\n\n/**\n * Item del `ActionMenu`. Se cierra automáticamente al hacer click.\n * Acepta todos los props de `MenuItem` de MUI (disabled, selected, sx, …).\n */\nexport const ActionMenuItem = forwardRef<HTMLLIElement, ActionMenuItemProps>(\n function ActionMenuItem({ icon, children, onClick, ...rest }, ref) {\n const ctx = useContext(ActionMenuContext);\n\n const handleClick = (event: MouseEvent<HTMLLIElement>) => {\n event.stopPropagation();\n onClick?.(event);\n ctx?.close();\n };\n\n return (\n <MenuItem ref={ref} onClick={handleClick} {...rest}>\n {icon && <ListItemIcon sx={{ minWidth: 32 }}>{icon}</ListItemIcon>}\n <ListItemText primary={children} />\n </MenuItem>\n );\n },\n);\n\nexport default ActionMenu;\n"],"names":["React","ActionMenuItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,MAAM,oBAAoB,cAA6C,IAAI;AAEpE,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,EAAE,UAAU,UAAU,YAAY,QAAA;AAAA,EACjD,kBAAkB,EAAE,UAAU,OAAO,YAAY,QAAA;AAAA,EACjD;AAAA,EACA,WAAW;AACb,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAI,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,cAAc,MAAM,YAAY,IAAI;AAG1C,QAAM,WAAW,CAAC,UAAmC;AACnD,QAAI,SAAU;AACd,UAAM,gBAAA;AACN,gBAAY,MAAM,aAAa;AAAA,EACjC;AAIA,QAAM,iBAAiB,UACrBA,eAAM,aAAa,SAA8B;AAAA,IAC/C,SAAS;AAAA,IACT;AAAA,EAAA,CACD,IAED,oBAAC,WAAQ,OAAO,gBAAgB,OAAK,MACnC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,cAAY;AAAA,MAEZ,UAAA,oBAAC,cAAA,EAAa,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAEnC;AAGF,QAAM,UAAU;AAAA,IACd,EAAE,UAAU,IAAA;AAAA,IACZ,GAAI,MAAM,QAAQ,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM,IAAI,CAAA;AAAA,EAAC;AAG5D,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,WAAW,EAAE,OAAO,EAAE,IAAI,UAAQ;AAAA,QAElC,UAAA,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAO,YAAA,GACzC,SAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAgBO,MAAM,iBAAiB;AAAA,EAC5B,SAASC,gBAAe,IAAsC,KAAK;AAA3C,iBAAE,QAAM,UAAU,YAAlB,IAA8B,iBAA9B,IAA8B,CAA5B,QAAM,YAAU;AACxC,UAAM,MAAM,WAAW,iBAAiB;AAExC,UAAM,cAAc,CAAC,UAAqC;AACxD,YAAM,gBAAA;AACN,yCAAU;AACV,iCAAK;AAAA,IACP;AAEA,gCACG,UAAA,+BAAS,KAAU,SAAS,eAAiB,OAA7C,EACE,UAAA;AAAA,MAAA,4BAAS,cAAA,EAAa,IAAI,EAAE,UAAU,GAAA,GAAO,UAAA,MAAK;AAAA,MACnD,oBAAC,cAAA,EAAa,SAAS,SAAA,CAAU;AAAA,IAAA,IACnC;AAAA,EAEJ;AACF;"}
|