@apia/components 4.0.50 → 4.0.58
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/LICENSE.md +6 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +117 -92
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/accordion/context.ts","../src/components/accordion/handler.tsx","../src/components/accordion/KeyHandler.tsx","../src/components/ListBox/common.ts","../src/components/accordion/Accordion.tsx","../src/components/accordion/AccordionItemButton.tsx","../src/components/modals/hooks/useModal.tsx","../src/components/modals/layout/DialogHeader.tsx","../src/components/modals/ModalContext.ts","../src/components/modals/hooks/useEscapeKey.ts","../src/components/modals/hooks/useInitialFocus.ts","../src/components/modals/hooks/useStyleState.ts","../src/components/modals/windowModal/handleMouseMove.ts","../src/components/modals/windowModal/bringToTop.ts","../src/components/modals/WindowModal.tsx","../src/hooks/useBodyScrollLock.ts","../src/components/modals/Overlay.tsx","../src/components/modals/StaticModal.tsx","../src/components/modals/Modal.tsx","../src/objects/ApiaUtil/modals/OpenModal.tsx","../src/objects/ApiaUtil/modals/ApiaUtilModals.tsx","../src/objects/ApiaUtil/notifications/ApiaUtilNotifications.tsx","../src/objects/ApiaUtil/tabs/util.ts","../src/objects/ApiaUtil/tabs/ApiaUtilTabsController.tsx","../src/components/modals/DeadSessionModal.tsx","../src/components/modals/CalendarModal.tsx","../src/components/modals/layout/DialogButtonBar.tsx","../src/components/forms/buttons/SimpleButton.tsx","../src/components/modals/layout/Confirm.tsx","../src/components/dialogs/ConfirmModal.tsx","../src/components/dialogs/AlertModal.tsx","../src/objects/ApiaUtil/dialogs/ApiaUtilDialogs.tsx","../src/objects/ApiaUtil/parsers/parseStringToApiaNumber.ts","../src/objects/ApiaUtil/parsers/ApiaUtilParsers.ts","../src/objects/ApiaUtil/tooltips/ApiaUtilTooltip.ts","../src/objects/ApiaUtil/tooltips/AutomaticTooltip.ts","../src/objects/ApiaUtil/tooltips/tooltip/util.ts","../src/objects/ApiaUtil/tooltips/tooltip/Tooltip.tsx","../src/objects/ApiaUtil/tooltips/ApiaUtilTooltips.tsx","../src/objects/ApiaUtil/menu/ApiaUtilMenu.tsx","../src/objects/ApiaUtil/mouse/ApiaUtilMouse.ts","../src/objects/ApiaUtil/index.tsx","../src/objects/ScreenLocker/index.tsx","../src/components/forms/Autocomplete/Context.tsx","../src/components/forms/Autocomplete/OptionsBox.tsx","../src/components/forms/Autocomplete/store/AutocompleteController.tsx","../src/components/forms/Autocomplete/SearchBox.tsx","../src/components/forms/Autocomplete/Keyhandler.tsx","../src/components/forms/Autocomplete/index.tsx","../src/components/forms/AutogrowTextarea.tsx","../src/components/forms/buttons/BaseButton.tsx","../src/components/forms/buttons/IconButton.tsx","../src/components/buttons/useOtherTagButton.ts","../src/components/forms/Captcha.tsx","../src/components/forms/Checkbox.tsx","../src/components/forms/IconInput.tsx","../src/components/forms/CalModal.tsx","../src/components/forms/DateInput.tsx","../src/components/forms/FieldErrorMessage.tsx","../src/components/forms/NumberInput.tsx","../src/components/forms/RequiredMark.tsx","../src/components/forms/util/style.ts","../src/components/forms/FieldLabel.tsx","../src/components/accordion/defaultElements/Checkbox.tsx","../src/components/accordion/defaultElements/useIsChecked.ts","../src/components/responsive/AutoEllipsis.tsx","../src/components/responsive/makeResponsiveComponent.tsx","../src/components/accordion/defaultElements/DefaultAccordionItemButton.tsx","../src/components/accordion/AccordionItemContent.tsx","../src/components/accordion/AccordionItem.tsx","../src/components/apia/ApiaDateFilter.tsx","../src/components/apia/ApiaFilter.tsx","../src/components/boxes/LabelBox.tsx","../src/components/containers/ContainerWithHeader/index.tsx","../src/components/collapsiblePanel/collapsiblePanel.ts","../src/components/collapsiblePanel/index.tsx","../src/components/ListBox/ListboxContext.tsx","../src/components/ListBox/ListboxItem.tsx","../src/components/waiAriaHelpers/typeAhead.ts","../src/components/ListBox/ListboxKeyhandler.tsx","../src/components/ListBox/Combobox.tsx","../src/components/ListBox/listbox.ts","../src/components/ListBox/operations.ts","../src/components/ListBox/useStore.ts","../src/components/ListBox/useShoutSelectionChange.ts","../src/components/ListBox/useIndexedChildren.ts","../src/components/ListBox/useListboxAutofocus.ts","../src/components/ListBox/useUpdateRowCount.ts","../src/components/ListBox/useListboxContextValue.ts","../src/components/ListBox/index.tsx","../src/components/loaders/LinearLoader.tsx","../src/components/loaders/ProgressBar.tsx","../src/components/loaders/LoaderSpinner.tsx","../src/components/loaders/ListSkeletonLoader.tsx","../src/components/lock/LinearSpinnerLock.tsx","../src/components/IconsList/store/distinctors.ts","../src/components/IconsList/store/keysMaker.ts","../src/components/IconsList/store/operations.ts","../src/components/IconsList/store/state.ts","../src/components/IconsList/store/context.ts","../src/components/IconsList/store/useStore.tsx","../src/components/IconsList/KeyHandler.tsx","../src/components/IconsList/styles.ts","../src/components/IconsList/util.ts","../src/components/IconsList/context.tsx","../src/components/IconsList/Icon.tsx","../src/components/IconsList/IconWrapper.tsx","../src/components/IconsList/renderers/DefaultIconRenderer.tsx","../src/components/IconsList/index.tsx","../src/components/importComponent.tsx","../src/components/Toolbar/ToolbarController.tsx","../src/components/Toolbar/ToolbarTextButton.tsx","../src/components/Toolbar/ToolbarIconButton.tsx","../src/components/Toolbar/ToolbarInput.tsx","../src/components/Toolbar/ToolbarSeparator.tsx","../src/components/Toolbar/ToolbarSelect.tsx","../src/components/Toolbar/index.tsx","../src/components/SortableList/SortableListHandler.tsx","../src/components/SortableList/SortableListItem.tsx","../src/components/SortableList/index.tsx","../src/components/document/FileCard.tsx","../src/components/document/Dropzone.tsx","../src/components/document/Uploader.tsx","../src/components/pagination/index.tsx","../src/templater/AttributeParsers.ts","../src/templater/PathShortcuts.ts","../src/templater/AttributeFilters.ts","../src/templater/AttributeReplacers.ts","../src/templater/ComplexReplacements.tsx","../src/templater/TagReplacers.tsx","../src/templater/contextMethods.ts","../src/templater/AttributeValueParsers.ts","../src/templater/Commands.tsx","../src/templater/CommentsParsers.ts","../src/templater/Templater.tsx","../src/components/markdown/MDRenderer/index.tsx","../src/components/Permissions/SwitchCard.tsx","../src/components/Permissions/PermissionsList.tsx","../src/components/Permissions/modals/UserModalBtn.tsx","../src/components/Permissions/modals/PoolModalBtn.tsx","../src/components/Permissions/Permissions.tsx","../src/tabs/util.ts","../src/tabs/ContextMenu.tsx","../src/tabs/renderers/DefaultTabsLabelRenderer.tsx","../src/tabs/Item.tsx","../src/tabs/hooks/useShowScrollButtons.ts","../src/tabs/TabsList.tsx","../src/tabs/tabsController.ts","../src/tabs/Content.tsx","../src/tabs/Tabs.tsx","../src/layout/AsidePanel.tsx","../src/layout/FavoriteIcon.tsx","../src/layout/Label.tsx","../src/layout/menuController.tsx","../src/layout/portal/FooterButtons.tsx","../src/layout/TwoColumns/AccordionAside.tsx","../src/layout/TwoColumns/Aside.tsx","../src/layout/TwoColumns/AsideLoader.tsx","../src/layout/TwoColumns/BodyAside.tsx","../src/layout/TwoColumns/FloatingAside.tsx","../src/layout/TwoColumns/FooterResponsiveButtons.tsx","../src/layout/TwoColumns/HamburguerMenu.tsx","../src/layout/TwoColumns/HeaderButtons.tsx","../src/layout/TwoColumns/Header.tsx","../src/layout/TwoColumns/ShowResponsive.tsx","../src/layout/twoColumnsCentered/HeaderButtons.tsx","../src/parameterizable/Parameter.tsx","../src/parameterizable/ParameterRender.tsx","../src/parameterizable/ParametersTable.tsx","../src/parameterizable/TableParameter.tsx","../src/parameterizable/ParametersGroup.tsx","../src/parameterizable/ParametersStore.ts","../src/parameterizable/Parameters.tsx","../src/parameterizable/FilterConditionDTO.tsx","../src/parameterizable/FilterDTO.tsx","../src/parameterizable/FiltersStore.ts"],"sourcesContent":["import { TId } from '@apia/util';\r\nimport { createContext, useContext } from 'react';\r\nimport { TAccordionHandler } from '.';\r\n\r\nexport const AccordionContext = createContext<TAccordionHandler | null>(null);\r\nexport const AccordionItemContext = createContext<TId | null>(null);\r\n\r\nexport const useAccordionContext = () => {\r\n const context = useContext(AccordionContext);\r\n if (!context) throw new Error('There is no AccordionContext');\r\n return context;\r\n};\r\n","import { TId } from '@apia/util';\r\nimport { ReactNode, useContext, useEffect, useMemo, useState } from 'react';\r\nimport { AccordionContext, AccordionItemContext } from './context';\r\nimport { TItemState, TItemStateListener, TPropsListener } from './types';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { IAccordionProps } from './Accordion';\r\n\r\ntype TSelectionComparator<T> = (prev: T, next: T) => boolean;\r\n\r\ntype TItemUpdater =\r\n | Partial<TItemState>\r\n | ((currentProps: TItemState) => Partial<TItemState>);\r\n\r\nfunction makeItemStateSelectorHook(handler: AccordionHandler) {\r\n return function useItemStateSelector<T>(\r\n selector: (props: TItemState) => T,\r\n comparator: TSelectionComparator<T> = shallowEqual,\r\n ) {\r\n const id = handler.hooks.useItemId();\r\n const [state, setState] = useState<T>(selector(handler.itemsState[id]));\r\n\r\n handler.hooks.useItemStateUpdate((props) => {\r\n const newState = selector(props);\r\n if (!comparator(state, newState)) {\r\n setState(newState);\r\n }\r\n });\r\n\r\n return state;\r\n };\r\n}\r\n\r\nfunction makePropsSelectorHook(handler: AccordionHandler) {\r\n return function usePropsSelector<T>(\r\n selector: (props: IAccordionProps) => T,\r\n comparator: TSelectionComparator<T> = shallowEqual,\r\n ) {\r\n const [state, setState] = useState<T>(selector(handler.props));\r\n\r\n handler.hooks.usePropsUpdate((props) => {\r\n const newState = selector(props);\r\n if (!comparator(state, newState)) {\r\n setState(newState);\r\n }\r\n });\r\n\r\n return state;\r\n };\r\n}\r\n\r\nexport class AccordionHandler {\r\n itemsState: Record<TId, TItemState> = {};\r\n itemsStateListeners: Record<TId, TItemStateListener[]> = {};\r\n\r\n propsListeners: TPropsListener[] = [];\r\n\r\n constructor(\r\n public id: string,\r\n public props: IAccordionProps,\r\n ) {}\r\n\r\n registerItem(itemId: TId, initialState: TItemState) {\r\n if (!this.itemsState[itemId]) this.itemsState[itemId] = initialState;\r\n }\r\n\r\n toggleItem(itemId: TId, expanded?: boolean) {\r\n const isExpanded = expanded ?? !this.itemsState[itemId].isExpanded;\r\n if (this.props.singleExpand && isExpanded) {\r\n Object.keys(this.itemsState).forEach((current) => {\r\n if (current !== itemId) {\r\n this.udpateItem(current, { isExpanded: false });\r\n }\r\n });\r\n }\r\n this.udpateItem(itemId, { isExpanded });\r\n }\r\n\r\n unregisterItem(itemId: TId) {\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete this.itemsState[itemId];\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete this.itemsStateListeners[itemId];\r\n }\r\n\r\n /**\r\n * Permite actualizar parcialmente el estado de un item\r\n */\r\n udpateItem(itemId: TId, updater: TItemUpdater) {\r\n const newProps =\r\n updater instanceof Function ? updater(this.itemsState[itemId]) : updater;\r\n\r\n Object.assign(this.itemsState[itemId], newProps);\r\n this.itemsStateListeners[itemId].forEach((current) =>\r\n current(this.itemsState[itemId]),\r\n );\r\n }\r\n\r\n updateProps(props: IAccordionProps) {\r\n this.props = { ...this.props, ...props };\r\n this.propsListeners.forEach((current) => current(props));\r\n }\r\n\r\n hooks = {\r\n useAccordionContextProvider: () => {\r\n const Provider = useMemo(\r\n () =>\r\n ({ children }: { children: ReactNode }) => (\r\n <AccordionContext.Provider value={this}>\r\n {children}\r\n </AccordionContext.Provider>\r\n ),\r\n [],\r\n );\r\n return Provider;\r\n },\r\n useItemContextProvider: (itemId: TId) => {\r\n const Provider = useMemo(\r\n () =>\r\n ({ children }: { children: ReactNode }) => (\r\n <AccordionItemContext.Provider value={itemId}>\r\n {children}\r\n </AccordionItemContext.Provider>\r\n ),\r\n [itemId],\r\n );\r\n return Provider;\r\n },\r\n useItemId: () => {\r\n const id = useContext(AccordionItemContext);\r\n if (id === null) throw new Error('There is no AccordionItemContext');\r\n return id;\r\n },\r\n useItemStateSelector: makeItemStateSelectorHook(this),\r\n useItemStateUpdate: (cb: TItemStateListener) => {\r\n const itemId = this.hooks.useItemId();\r\n useEffect(() => {\r\n if (!this.itemsStateListeners[itemId])\r\n this.itemsStateListeners[itemId] = [];\r\n this.itemsStateListeners[itemId].push(cb);\r\n\r\n return () => {\r\n this.itemsStateListeners[itemId] = this.itemsStateListeners[\r\n itemId\r\n ].filter((current) => current != cb);\r\n };\r\n }, [cb, itemId]);\r\n },\r\n usePropsSelector: makePropsSelectorHook(this),\r\n usePropsUpdate: (cb: TPropsListener) => {\r\n useEffect(() => {\r\n this.propsListeners.push(cb);\r\n return () => {\r\n this.propsListeners = this.propsListeners.filter(\r\n (current) => current !== cb,\r\n );\r\n };\r\n }, [cb]);\r\n },\r\n };\r\n}\r\n","import { Box, type BoxProps } from '@apia/theme';\r\nimport { useAccordionContext } from './context';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useCallback } from 'react';\r\n\r\nexport const KeyHandler = (props: BoxProps) => {\r\n const handler = useAccordionContext();\r\n\r\n const variant = handler.hooks.usePropsSelector((current) => current.variant);\r\n\r\n return (\r\n <Box\r\n {...props}\r\n ref={useCallback(\r\n (ref: HTMLElement | null) => {\r\n if (ref) {\r\n ref.addEventListener('keydown', (ev) => {\r\n if (\r\n (ev.target as HTMLElement).closest('.accordion__item__content')\r\n )\r\n return;\r\n\r\n const accordionItem = (ev.target as HTMLElement)?.closest(\r\n '.accordion__item',\r\n ) as HTMLElement;\r\n const accordion = (ev.target as HTMLElement)?.closest(\r\n '.accordion',\r\n );\r\n const allItems = [\r\n ...(accordion?.querySelectorAll('.accordion__item') ?? []),\r\n ];\r\n const currentIndex = allItems.findIndex(\r\n (current) => current === accordionItem,\r\n );\r\n\r\n if (ev.code === 'ArrowDown') {\r\n if (currentIndex < allItems.length - 1) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex + 1] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.focus();\r\n }\r\n } else if (ev.code === 'ArrowUp') {\r\n if (currentIndex > 0) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex - 1] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.focus();\r\n }\r\n } else if (ev.code === 'ArrowLeft') {\r\n if (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '[aria-expanded=\"true\"]',\r\n ) as HTMLElement\r\n ) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.click();\r\n }\r\n } else if (ev.code === 'ArrowRight') {\r\n if (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '[aria-expanded=\"false\"]',\r\n ) as HTMLElement\r\n ) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.click();\r\n }\r\n } else if (ev.code === 'Space') {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n const id = accordionItem.dataset.id as string;\r\n handler.udpateItem(id, {\r\n isChecked: !handler.itemsState[id].isChecked,\r\n });\r\n }\r\n });\r\n }\r\n },\r\n [handler],\r\n )}\r\n {...(variant ? getVariant(variant) : undefined)}\r\n />\r\n );\r\n};\r\n","import { findScrollContainer } from '@apia/util';\r\nimport { TDistinctors } from '@apia/dom-store';\r\n\r\nexport type TRowDistinctions = {\r\n rowIndex: number;\r\n};\r\n\r\nexport type TListboxState = {\r\n /**\r\n * El múltipleSearch está de acuerdo a la especificación de wai-aria. Está\r\n * habilitado por defecto e implica que si el usuario presiona una \"rápida\r\n * sucesión\" (según palabras de wai-aria) de caracteres, se irá\r\n * alternando el foco entre los elementos que comiencen con la cadena\r\n * introducida.\r\n */\r\n allowMultipleCharacterSearch?: boolean;\r\n allowSelection: boolean;\r\n /**\r\n * El singleCharacterSearch está de acuerdo a la especificación de wai-aria.\r\n * Está habilitado por defecto e implica que si el usuario presiona una\r\n * \"lenta sucesión\" (según palabras de wai-aria) de caracteres, se irá\r\n * alternando el foco entre los elementos que comiencen con la letra\r\n * introducida.\r\n */\r\n allowSingleCharacterSearch?: boolean;\r\n focusedRow: number;\r\n hiddenRows: number[];\r\n id: string;\r\n isEverythingSelected: boolean;\r\n isMultipleSelection: boolean;\r\n lastSelectedRow: number;\r\n rowsCount: number;\r\n /**\r\n * La función de búsqueda debe tomar el label de un campo y el texto\r\n * introducido en el campo de búsqueda y determinar si el mismo debe ser\r\n * mostrado o no. Por defecto, se usa una función de matcheo estricto.\r\n */\r\n searchFunction: (label: string, searchString: string) => boolean;\r\n selectedRows: number[];\r\n shownRows: number[];\r\n showSearchbox: boolean;\r\n /**\r\n * Este método permite determinar si un elemento comienza con una cadena de\r\n * texto en particular. Por defecto se usa String.startsWith, sin embargo se\r\n * permite el pasaje de este método para situaciones particulares, ejemplo\r\n * si se deseara incluir elementos sin tomar en cuenta los espacios.\r\n */\r\n startsWithFunction: (label: string, searchString: string) => boolean;\r\n typing: string | null;\r\n};\r\n\r\nexport function makeRowKey(rowIndex: TRowDistinctions | number) {\r\n return `row_${typeof rowIndex === 'number' ? rowIndex : rowIndex.rowIndex}`;\r\n}\r\n\r\nlet uniqueidIndex = 0;\r\nexport function uniqueId(prefix?: string) {\r\n return `${prefix ?? ''}${uniqueidIndex++}`;\r\n}\r\n\r\nfunction getDistinctors(storeId: string): TDistinctors<TListboxState> {\r\n return {\r\n listbox: [\r\n (_: void, state) => {\r\n return {\r\n etc: {\r\n 'aria-activedescendant':\r\n state.shownRows.length > 0\r\n ? `${storeId}__row__${state.focusedRow}`\r\n : undefined,\r\n },\r\n };\r\n },\r\n ],\r\n row: [\r\n (distinctions: TRowDistinctions, state) => {\r\n return {\r\n classList: {\r\n add: [\r\n 'listbox__row',\r\n state.focusedRow === distinctions.rowIndex ? 'focused' : '',\r\n state.allowSelection &&\r\n state.selectedRows.includes(distinctions.rowIndex)\r\n ? 'selected'\r\n : '',\r\n ],\r\n remove: [\r\n state.focusedRow === distinctions.rowIndex ? '' : 'focused',\r\n state.allowSelection &&\r\n state.selectedRows.includes(distinctions.rowIndex)\r\n ? ''\r\n : 'selected',\r\n ],\r\n },\r\n dataset: {\r\n add: {\r\n focused: state.focusedRow === distinctions.rowIndex,\r\n },\r\n },\r\n etc: {\r\n ...(state.allowSelection\r\n ? {\r\n 'aria-selected': state.selectedRows.includes(\r\n distinctions.rowIndex,\r\n ),\r\n }\r\n : null),\r\n id: `${storeId}__row__${distinctions.rowIndex}`,\r\n },\r\n };\r\n },\r\n (prevState: TListboxState, nextState: TListboxState) => {\r\n const element = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__row[data-focused=\"true\"]`,\r\n );\r\n\r\n if (element) {\r\n element.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n\r\n if (prevState.focusedRow > nextState.focusedRow) {\r\n const scrollContainer = findScrollContainer(element);\r\n\r\n if (scrollContainer && scrollContainer !== document.body) {\r\n scrollContainer.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const elRect = element.getBoundingClientRect();\r\n const contRect = scrollContainer.getBoundingClientRect();\r\n\r\n if (elRect.top - contRect.top < elRect.height)\r\n scrollContainer.scrollTop -= elRect.height;\r\n }\r\n }\r\n }\r\n },\r\n ],\r\n searchbox: [\r\n (_: void, state) => {\r\n return {\r\n classList: { add: ['listbox__searchbox'] },\r\n etc: {\r\n 'aria-activedescendant':\r\n state.shownRows.length > 0\r\n ? `${storeId}__row__${state.focusedRow}`\r\n : undefined,\r\n },\r\n };\r\n },\r\n ],\r\n };\r\n}\r\nconst defaultState: Omit<\r\n TListboxState,\r\n 'id' | 'showSearchbox' | 'shownRows' | 'searchFunction' | 'startsWithFunction'\r\n> = {\r\n allowSelection: true,\r\n focusedRow: 0,\r\n hiddenRows: [],\r\n isEverythingSelected: false,\r\n isMultipleSelection: false,\r\n lastSelectedRow: -1,\r\n rowsCount: 0,\r\n selectedRows: [],\r\n typing: null,\r\n};\r\n\r\nconst keysMakers = {\r\n row: makeRowKey,\r\n listbox: () => 'listbox',\r\n searchbox: () => 'searchbox',\r\n};\r\n\r\nfunction getInitialState(\r\n initialState: Partial<TListboxState> &\r\n Pick<TListboxState, 'id' | 'showSearchbox'>,\r\n): TListboxState {\r\n return {\r\n ...defaultState,\r\n ...initialState,\r\n\r\n searchFunction:\r\n initialState.searchFunction ??\r\n ((label, searchString) => !!label.match(new RegExp(searchString))),\r\n\r\n startsWithFunction:\r\n initialState.startsWithFunction ??\r\n ((label, searchString) => {\r\n return label.startsWith(searchString);\r\n }),\r\n\r\n shownRows: new Array(initialState.rowsCount ?? 0).fill(1).map((_, i) => i),\r\n };\r\n}\r\n\r\nexport { getDistinctors, getInitialState, keysMakers };\r\n","import { useRef, FC, ReactNode, useEffect, useState, useMemo } from 'react';\r\nimport { AccordionHandler } from './handler';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { uniqueId } from '../ListBox/common';\r\n\r\nexport interface IAccordionProps {\r\n /**\r\n * Tiempo en ms que dura la animación. Por defecto se usa 150.\r\n */\r\n animationDuration?: number;\r\n children?: ReactNode;\r\n className?: string;\r\n getHandler?: (handler: AccordionHandler) => unknown;\r\n singleExpand?: boolean;\r\n /**\r\n * Por defecto usa la variante layout.common.components.accordion.primary\r\n */\r\n variant?: string;\r\n}\r\n\r\nexport const Accordion: FC<IAccordionProps> = ({\r\n animationDuration = 150,\r\n children,\r\n className,\r\n getHandler,\r\n variant = 'layout.common.components.accordion.primary',\r\n singleExpand = false,\r\n}) => {\r\n const id = useMemo(() => uniqueId(), []);\r\n\r\n const [handler] = useState(() => {\r\n return new AccordionHandler(id, {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n singleExpand,\r\n });\r\n });\r\n const propsRef = useRef({\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n });\r\n if (\r\n !shallowEqual(\r\n {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n },\r\n propsRef.current,\r\n )\r\n ) {\r\n propsRef.current = {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n };\r\n handler.updateProps({\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n });\r\n }\r\n\r\n const Provider = handler.hooks.useAccordionContextProvider();\r\n\r\n useEffect(() => {\r\n getHandler?.(handler);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [getHandler, handler]);\r\n\r\n return (\r\n <Provider>\r\n <KeyHandler className={`accordion ${className ?? ''}`}>\r\n {children}\r\n </KeyHandler>\r\n </Provider>\r\n );\r\n};\r\n","import { ReactNode } from 'react';\r\n\r\nexport type TAccordionItemButton = {\r\n children?: ReactNode;\r\n};\r\n\r\nexport const AccordionItemButton = ({ children }: TAccordionItemButton) => {\r\n return <>{children}</>;\r\n};\r\n","import { useUpdateEffect } from '@apia/util';\r\nimport React from 'react';\r\nimport usePortal, { Args } from 'react-cool-portal';\r\nimport { TModal } from '../Modal';\r\n\r\nexport type TUseModalConfiguration = Pick<TModal, 'onClose' | 'onExited'> & {\r\n debugPerformanceName?: string;\r\n isDefaultOpen?: boolean;\r\n onOpen?: () => unknown;\r\n portalArgs?: Omit<Args, 'containerId'>;\r\n preFetcher?: () => Promise<void>;\r\n};\r\n\r\n/**\r\n * Este hook provee una forma muy sencilla de utilizar nuestro modal. Provee\r\n * varias funcionalidades interesantes para poder manipular el modal en\r\n * distintas circunstancias:\r\n *\r\n * Objeto parámetro:\r\n *\r\n * - **defaultOpen**, Boolean, si es true el modal aparecerá abierto al montar\r\n * y sino aparecerá cerrado.\r\n * - **onOpen**: Event listener que será llamado en el momento exacto en que la\r\n * orden de apertura del modal fue dada.\r\n * - **onClose**: Event listener que será llamado en el momento exacto en que\r\n * el modal es cerrado, ya sea por un click en el overlay o porque la tecla\r\n * escape fue presionada.\r\n * - **onExited**, Event listener que será llamado luego de que la animación de\r\n * cierre del modal terminó.\r\n * - **preFetcher**, este método deberá devolver una promesa y en dicha promesa\r\n * deberá realizar cualquier operación que fuera necesaria antes de abrir el\r\n * modal, ejemplo: cargar la información que el modal debe mostrar. Si este\r\n * método es pasado, será llamado antes de abrir el modal y la vista se pondrá\r\n * en modo de carga (la propiedad isLoading devuelta y la propiedad isLoading\r\n * del OpenModalContextProvider estarán en true), hasta que la promesa sea\r\n * resuelta, momento en que se abrirá el modal e isLoading será puesto en false.\r\n * - **portalArgs**, objeto de configuración aceptado por el hook usePortal de\r\n * **react-cool-portal**.\r\n *\r\n * Objeto devuelto:\r\n *\r\n * - Para un modal en donde el botón de abrir el modal esté inserto dentro del\r\n * componente que lo utiliza, se devuelven los métodos **show** y **hide**.\r\n * - Para un modal en donde el botón de abrir el modal esté fuera del\r\n * componente, se devuelve **openModalContextValue**, que es el valor que debe\r\n * pasarse al contexto de tipo OpenModalContextProvider, un contexto que\r\n * puede ser utilizado para renderizar el botón encargado de abrir el modal,\r\n * fuera del alcance del componente que define el modal en sí. Se muestra un\r\n * ejemplo más abajo.\r\n * - Todos los demás elementos devueltos son para pasar directamente al modal,\r\n * entre ellos se encuentran las propiedades que el modal utiliza para saber si\r\n * debe estar abierto, los event listeners correspondientes y un portal, que el\r\n * modal usará para mostrarse dentro del área de modales, lo cual es sumamente\r\n * importante para que el focusController funcione correctamente.\r\n *\r\n * @see OpenModalContextProvider\r\n * @see usePortal\r\n *\r\n * @example\r\n *\r\n const { openModalContextValue, ...modalProps } = useModal(\r\n React.useMemo(() => ({\r\n onClose: () => console.log(\"Al presionar en cerrar.\"),\r\n onExited: () => console.log(\"Al terminar la animación de cierre.\"),\r\n onOpen: () => console.log(\"Al abrir.\"),\r\n }), [])\r\n );\r\n\r\n return (\r\n <OpenModalContext.Provider value={openModalContextValue}>\r\n <OpenModalContext.Consumer>\r\n {({ isLoading, show }) => (\r\n <Button isLoading={isLoading} onClick={show}>Open modal</Button>\r\n )}\r\n </OpenModalContext.Consumer>\r\n <Modal shouldCloseOnEsc shouldCloseOnOverlayClick {...modalProps}>\r\n Hello world\r\n </Modal>\r\n </OpenModalContext.Provider>\r\n );\r\n */\r\nexport function useModal(configuration?: TUseModalConfiguration) {\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [isOpen, setIsOpen] = React.useState(\r\n configuration?.portalArgs?.defaultShow ??\r\n configuration?.isDefaultOpen ??\r\n false,\r\n );\r\n\r\n const {\r\n Portal,\r\n hide: hidePortal,\r\n show: showPortal,\r\n } = usePortal({\r\n ...configuration?.portalArgs,\r\n containerId: 'AppModals',\r\n autoRemoveContainer: false,\r\n escToHide: false,\r\n clickOutsideToHide: false,\r\n defaultShow: false,\r\n internalShowHide: false,\r\n });\r\n\r\n const hide = React.useCallback(() => {\r\n setIsOpen(false);\r\n if (configuration?.onClose) configuration.onClose();\r\n }, [configuration]);\r\n const show = React.useCallback(() => {\r\n if (configuration?.preFetcher) {\r\n setIsLoading(true);\r\n configuration\r\n .preFetcher()\r\n .then(() => {\r\n setIsOpen(true);\r\n setIsLoading(false);\r\n })\r\n .catch(console.error);\r\n } else setIsOpen(true);\r\n }, [configuration]);\r\n const onClose = React.useCallback(() => {\r\n setIsOpen(false);\r\n if (configuration?.onClose) configuration.onClose();\r\n }, [configuration]);\r\n const onExited = React.useCallback(() => {\r\n hidePortal();\r\n if (configuration?.onExited) configuration.onExited();\r\n }, [configuration, hidePortal]);\r\n const openModalContextValue = React.useMemo(() => {\r\n return {\r\n isLoading,\r\n show,\r\n };\r\n }, [isLoading, show]);\r\n\r\n useUpdateEffect(() => {\r\n if (isOpen) {\r\n if (configuration?.onOpen) configuration.onOpen();\r\n showPortal();\r\n }\r\n }, [isOpen]);\r\n\r\n return {\r\n hide,\r\n isLoading,\r\n isOpen,\r\n onClose,\r\n onExited,\r\n openModalContextValue,\r\n Portal,\r\n show,\r\n };\r\n}\r\n","import { Box, Close, Heading, useBreakpointIndex } from '@apia/theme';\r\nimport React, { FC } from 'react';\r\nimport { responsive, spacing } from '@apia/theme';\r\n\r\nexport interface IDialogHeader {\r\n className?: string;\r\n close: () => void;\r\n hideCloseButton?: boolean;\r\n id?: string;\r\n NavBar?: React.ReactNode;\r\n title?: string;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n BTN_CLOSE: string;\r\n }\r\n}\r\n\r\nconst DialogHeader: FC<IDialogHeader> = ({\r\n className,\r\n close,\r\n hideCloseButton,\r\n id,\r\n NavBar,\r\n title = '',\r\n}) => {\r\n const breakpointIndex = useBreakpointIndex();\r\n\r\n const Title = (\r\n <Heading\r\n as=\"h3\"\r\n sx={{\r\n wordBreak: 'break-word',\r\n m: '0',\r\n flex: '2 0',\r\n color: 'title',\r\n }}\r\n className=\"modal__title\"\r\n id={id ? `modal-${id}-title` : ''}\r\n >\r\n {title}\r\n </Heading>\r\n );\r\n\r\n const CloseButton = React.useMemo(\r\n () =>\r\n hideCloseButton ? null : (\r\n <Close\r\n role=\"button\"\r\n type=\"button\"\r\n aria-label={window.BTN_CLOSE}\r\n onClick={close}\r\n title={window.BTN_CLOSE}\r\n sx={{\r\n mr: 'unset',\r\n }}\r\n className=\"modal__closeButton\"\r\n data-test-id=\"close\"\r\n />\r\n ),\r\n [close, hideCloseButton],\r\n );\r\n\r\n const NavBarElement = NavBar && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n gap: responsive({ 0: 2, 1: '3px', 2: 2 }),\r\n justifyContent: 'end',\r\n flexDirection: responsive({ 0: 'row', 1: 'column', 3: 'row' }),\r\n width: responsive({ 0: 'auto', 1: '100%', 2: 'auto' }),\r\n flexBasis: 'max-content',\r\n height: '100%',\r\n }}\r\n className=\"modal__headerBar\"\r\n >\r\n {NavBar}\r\n </Box>\r\n );\r\n\r\n return breakpointIndex > 3 ? (\r\n <Box\r\n className={`${className} modal__header`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'start',\r\n mb: spacing(0),\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n gap: spacing(2),\r\n flexWrap: 'nowrap',\r\n }}\r\n >\r\n {Title}\r\n {NavBarElement}\r\n {CloseButton}\r\n </Box>\r\n ) : (\r\n <Box\r\n className={`${className} modal__header`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: responsive({ 0: 'center', 2: 'end' }),\r\n mb: spacing(0),\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n gap: spacing(2),\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n width: '100%',\r\n }}\r\n >\r\n {Title}\r\n {CloseButton}\r\n </Box>\r\n {NavBarElement}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DialogHeader;\r\n","import { createContext, useContext } from 'react';\r\n\r\nexport type TModalContext = {\r\n changeTitle: (newTitle: string) => void;\r\n close: () => unknown;\r\n descriptionId: string;\r\n};\r\n\r\nexport const ModalContext = createContext<TModalContext | null>(null);\r\n\r\nexport function useModalContext() {\r\n const context = useContext(ModalContext);\r\n\r\n if (!context) throw new Error('There is no ModalContext');\r\n\r\n return context;\r\n}\r\n","import { useEffect } from 'react';\r\nimport { ApiaUtil } from '../../../objects';\r\n\r\n/**\r\n * Contorla la lógica encargada de cerrar el modal al presionar la tecla escape.\r\n */\r\nexport function useEscapeKey({\r\n closeHandler,\r\n id,\r\n isOpenInner,\r\n shouldCloseOnEsc,\r\n}: {\r\n id: string;\r\n closeHandler: () => void;\r\n isOpenInner: boolean;\r\n shouldCloseOnEsc?: boolean;\r\n}) {\r\n useEffect(() => {\r\n function handleEscape(event: KeyboardEvent) {\r\n if (event.code !== 'Escape') return;\r\n\r\n const notifications = [\r\n ...(document.querySelectorAll(\r\n '.notificationsFloatingList .notification',\r\n ) ?? []),\r\n ];\r\n if (notifications.length) {\r\n ApiaUtil.instance.notifications.closeAll();\r\n return;\r\n }\r\n\r\n const tooltips = [\r\n ...(document.querySelectorAll('.tooltip__wrapper') ?? []),\r\n ];\r\n if (tooltips.length) {\r\n return;\r\n }\r\n\r\n const overlays = [\r\n ...document.querySelectorAll('.overlay, .window__modal'),\r\n ];\r\n\r\n const modal = (event.target as HTMLElement).closest(`#modal__${id}`);\r\n if (modal) {\r\n /**\r\n * Funcionamiento para el WindowModal\r\n */\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n closeHandler();\r\n } else if (\r\n overlays.length > 0 &&\r\n (overlays[overlays.length - 1]?.id === id ||\r\n overlays[overlays.length - 1]?.id === `modal__${id}`)\r\n ) {\r\n /**\r\n * Legacy, para el StaticModal\r\n */\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n closeHandler();\r\n }\r\n }\r\n if (isOpenInner && shouldCloseOnEsc)\r\n document.addEventListener('keydown', handleEscape, false);\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape, false);\r\n };\r\n }, [shouldCloseOnEsc, isOpenInner, closeHandler, id]);\r\n}\r\n","import { useEffect } from 'react';\r\nimport { TModal } from '../Modal';\r\nimport { focus, focusSelector, getFocusSelector } from '@apia/util';\r\n\r\nexport function useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement,\r\n}: { isOpenInner: boolean; parentElement?: HTMLElement | null } & Pick<\r\n TModal,\r\n | 'noFocus'\r\n | 'initialFocusGetter'\r\n | 'initialFocusRef'\r\n | 'initialFocusConfiguration'\r\n>) {\r\n useEffect(\r\n () => {\r\n if (!noFocus && isOpenInner) {\r\n if (parentElement) {\r\n void focus.on(\r\n () => {\r\n if (initialFocusGetter) return initialFocusGetter(parentElement);\r\n if (initialFocusRef?.current)\r\n return (\r\n (initialFocusRef?.current || parentElement) as HTMLElement\r\n ).querySelector(focusSelector) as HTMLElement;\r\n return parentElement.querySelector(\r\n getFocusSelector(':not(.modal__closeButton)'),\r\n ) as HTMLElement;\r\n },\r\n { ...initialFocusConfiguration, focusEvenWhenScreenLocked: true },\r\n );\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [parentElement],\r\n );\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\nimport { SetStateAction, useCallback, useRef } from 'react';\r\n\r\ntype InitialStyleAssigner = (el: HTMLElement) => Partial<ThemeUICSSObject>;\r\ntype CSSState = Partial<ThemeUICSSObject>;\r\n\r\ntype UseStyleStateProps = {\r\n initialState?: CSSState | InitialStyleAssigner;\r\n onUpdateRef?: InitialStyleAssigner;\r\n};\r\n\r\nexport function applyStylesToElement(el: HTMLElement, styles: CSSState) {\r\n Object.entries(styles).forEach(([name, value]) => {\r\n try {\r\n el.style[name as 'width'] = value as any;\r\n } catch (e) {\r\n e; // Se intentó asignar un valor que no es correcto\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Este hook permite mantener un estado de estilos, para utilizar en un elemento del DOM.\r\n *\r\n * A diferencia de un setState común, al realizar setState en este hook no se re-renderiza el componente, sino que se aplican los estilos directamente en el DOM.\r\n *\r\n * Se garantiza además que estos estados no se perderán en los re-renderizados provocados por causas externas a este hook.\r\n */\r\nexport function useStyleState(props?: UseStyleStateProps) {\r\n const element = useRef<null | HTMLElement>(null);\r\n const state = useRef<CSSState>(\r\n typeof props?.initialState === 'object'\r\n ? props?.initialState\r\n : ({} as CSSState),\r\n );\r\n\r\n const applyStyles = useCallback(() => {\r\n applyStylesToElement(element.current!, state.current);\r\n }, []);\r\n\r\n const hasInitializedState = useRef(typeof props?.initialState !== 'function');\r\n return {\r\n ref: useCallback(\r\n (el: HTMLElement | null) => {\r\n element.current = el;\r\n if (el) {\r\n if (!hasInitializedState.current) {\r\n hasInitializedState.current = true;\r\n state.current = (props?.initialState as InitialStyleAssigner)(el);\r\n }\r\n\r\n if (props?.onUpdateRef) {\r\n state.current = props.onUpdateRef(el);\r\n }\r\n\r\n applyStyles();\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [applyStyles],\r\n ),\r\n setState: useCallback(\r\n (newState: SetStateAction<CSSState>) => {\r\n state.current =\r\n typeof newState === 'function' ? newState(state.current) : newState;\r\n applyStyles();\r\n },\r\n [applyStyles],\r\n ),\r\n };\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\nimport { addBoundary } from '@apia/util';\r\nimport { MutableRefObject } from 'react';\r\nimport { applyStylesToElement } from '../hooks/useStyleState';\r\n\r\nexport function handleMouseMove({\r\n dragBounded,\r\n ev,\r\n initialPosition,\r\n initialMousePosition,\r\n modalMainElement,\r\n setStyle,\r\n}: {\r\n dragBounded?: boolean;\r\n ev: MouseEvent;\r\n initialPosition: MutableRefObject<null | DOMRect>;\r\n initialMousePosition: MutableRefObject<null | { x: number; y: number }>;\r\n modalMainElement: HTMLElement;\r\n setStyle: (newState: React.SetStateAction<Partial<ThemeUICSSObject>>) => void;\r\n}) {\r\n if (initialPosition.current) {\r\n ev.preventDefault();\r\n const diffX = ev.clientX - initialMousePosition.current!.x;\r\n const diffY = ev.clientY - initialMousePosition.current!.y;\r\n\r\n const currentSize = modalMainElement.getBoundingClientRect();\r\n\r\n const newLeft = addBoundary(\r\n initialPosition.current.left + diffX,\r\n 0,\r\n window.innerWidth - (dragBounded ? currentSize.width : 50),\r\n );\r\n const newTop = addBoundary(\r\n initialPosition.current.top + diffY,\r\n 0,\r\n window.innerHeight - (dragBounded ? currentSize.height : 50),\r\n );\r\n\r\n setStyle({\r\n left: `${newLeft}px`,\r\n top: `${newTop}px`,\r\n right: 'unset',\r\n bottom: 'unset',\r\n });\r\n\r\n const mainElement = modalMainElement;\r\n const headerElement = mainElement?.querySelector<HTMLElement>(\r\n '.window__modal .modal__header',\r\n );\r\n const modalContent = mainElement?.querySelector<HTMLElement>(\r\n '.window__modal .modal__content',\r\n );\r\n\r\n if (modalContent && mainElement) {\r\n const headerBounding = headerElement?.getBoundingClientRect();\r\n const contentBounding = mainElement.getBoundingClientRect();\r\n\r\n applyStylesToElement(modalContent, {\r\n maxHeight: `${window.innerHeight - newTop - (headerBounding?.height ?? 0)}px`,\r\n });\r\n\r\n mainElement.dataset.originalWidth =\r\n mainElement.dataset.originalWidth || String(contentBounding!.width);\r\n applyStylesToElement(mainElement, {\r\n maxWidth: `${Math.min(Number.parseInt(mainElement.dataset.originalWidth, 10), window.innerWidth - newLeft)}px`,\r\n });\r\n }\r\n }\r\n}\r\n","export function resetModalsPositions() {\r\n document.querySelectorAll<HTMLElement>('.window__modal').forEach((c) => {\r\n c.style.zIndex = '1200';\r\n });\r\n}\r\n\r\nexport function bringToTop(modalElement: HTMLElement) {\r\n document.querySelectorAll<HTMLElement>('.window__modal').forEach((c) => {\r\n if (c.querySelector<HTMLElement>('.modal__main') === modalElement) {\r\n c.style.zIndex = '1201';\r\n } else {\r\n c.style.zIndex = '1200';\r\n }\r\n });\r\n}\r\n","import {\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n Fragment,\r\n} from 'react';\r\nimport { TModal } from './Modal';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box, ThemeUICSSObject, getVariant } from '@apia/theme';\r\nimport DialogHeader from './layout/DialogHeader';\r\nimport { ModalContext } from './ModalContext';\r\nimport { useEscapeKey } from './hooks/useEscapeKey';\r\nimport { useInitialFocus } from './hooks/useInitialFocus';\r\nimport { getFocusSelector, useCombinedRefs } from '@apia/util';\r\nimport { useStyleState } from './hooks/useStyleState';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\nimport { handleMouseMove } from './windowModal/handleMouseMove';\r\nimport { bringToTop } from './windowModal/bringToTop';\r\n\r\nexport const WindowModal = forwardRef<HTMLDivElement, TModal>(\r\n (\r\n {\r\n animationDuration = 150,\r\n children = null,\r\n className,\r\n defaultPosition,\r\n dragBounded,\r\n hideCloseButton,\r\n id,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n isOpen = false,\r\n maxWidth,\r\n NavBar,\r\n noFocus,\r\n noHeader = false,\r\n onClose = () => {},\r\n onDragStart = () => {},\r\n onExited = () => {},\r\n Portal,\r\n shouldCloseOnEsc = true,\r\n size = 'md',\r\n title = '',\r\n variant,\r\n },\r\n ref,\r\n ) => {\r\n const innerId = useMemo(() => {\r\n return `Modal${uniqueId()}`;\r\n }, []);\r\n\r\n const lastTitle = useRef(title);\r\n const [innerTitle, setInnerTitle] = useState(title);\r\n if (lastTitle.current !== title && innerTitle !== title) {\r\n setInnerTitle(title);\r\n }\r\n const [isOpenInner, setIsOpen] = useState(isOpen);\r\n useEffect(() => {\r\n setIsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n const closeHandler = useCallback(() => {\r\n setIsOpen(false);\r\n onClose();\r\n }, [onClose]);\r\n\r\n const [parentElement, setParentElement] = useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n useEscapeKey({ closeHandler, id: innerId, isOpenInner, shouldCloseOnEsc });\r\n useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement,\r\n });\r\n\r\n const Wrapper = useMemo(() => {\r\n return Portal ?? Fragment;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const hasSetPosition = useRef(false);\r\n const { ref: stylesRef, setState: setStyle } = useStyleState({\r\n onUpdateRef(el) {\r\n const mainElement = el.querySelector<HTMLElement>('.modal__main');\r\n const bounding = mainElement!.getBoundingClientRect();\r\n\r\n const returnObject: Partial<ThemeUICSSObject> = {\r\n position: 'fixed',\r\n };\r\n\r\n if (!hasSetPosition.current && mainElement) {\r\n bringToTop(mainElement);\r\n hasSetPosition.current =\r\n !!defaultPosition || (!!bounding && bounding.width > 200);\r\n Object.assign(\r\n returnObject,\r\n defaultPosition ?? {\r\n left: `${window.innerWidth / 2 - (bounding?.width ?? 0) / 2}px`,\r\n top: `${window.innerHeight / 2 - (bounding?.height ?? 0) / 2}px`,\r\n },\r\n );\r\n }\r\n\r\n return returnObject;\r\n },\r\n });\r\n\r\n const unSubscribe = useRef(() => {});\r\n const initialPosition = useRef<null | DOMRect>(null);\r\n const initialMousePosition = useRef<null | { x: number; y: number }>(null);\r\n const assignRefs = useCombinedRefs(\r\n setParentElement as unknown as React.ForwardedRef<unknown>,\r\n ref as unknown as React.Ref<unknown>,\r\n stylesRef as unknown as React.Ref<unknown>,\r\n );\r\n\r\n return (\r\n <Wrapper>\r\n <ModalContext.Provider\r\n value={useMemo(() => {\r\n return {\r\n changeTitle: (newTitle) => {\r\n setInnerTitle(newTitle);\r\n },\r\n close: () => {\r\n closeHandler();\r\n },\r\n descriptionId: `${innerId}_Description`,\r\n };\r\n }, [closeHandler, innerId])}\r\n >\r\n <CSSTransition\r\n in={isOpen}\r\n timeout={animationDuration}\r\n classNames=\"modal\"\r\n appear\r\n unmountOnExit\r\n nodeRef={setParentElement as any}\r\n onExited={onExited}\r\n >\r\n <Box\r\n ref={assignRefs}\r\n className={`modal__variantWrapper window__modal ${className ?? ''}`}\r\n id={`modal__${innerId}`}\r\n {...(variant ? getVariant(variant) : {})}\r\n sx={{ zIndex: 'modal' }}\r\n >\r\n <FreeFocusInside>\r\n <Box\r\n id={id}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={title}\r\n aria-describedby={`${innerId}_Description`}\r\n aria-hidden=\"false\"\r\n className=\"modal__main\"\r\n // allows scrolling within element, despite body lock\r\n data-scroll-lock-scrollable\r\n sx={useMemo(() => {\r\n return {\r\n variant: `layout.common.modals.${size}`,\r\n ...(maxWidth !== undefined ? { maxWidth } : {}),\r\n };\r\n }, [maxWidth, size])}\r\n data-variant={`layout.common.modals.${size}`}\r\n ref={useCallback(\r\n (el: null | HTMLElement) => {\r\n unSubscribe.current();\r\n unSubscribe.current = () => {};\r\n\r\n if (el) {\r\n const handleMouseDown = (ev: MouseEvent) => {\r\n if (\r\n (ev.target as HTMLElement).closest?.(\r\n '[draggable=\"true\"]',\r\n ) ||\r\n !(ev.target as HTMLElement).closest?.(\r\n '.modal__header',\r\n )\r\n )\r\n return;\r\n\r\n if (\r\n (ev.target as HTMLElement).closest(\r\n getFocusSelector(),\r\n )\r\n )\r\n return;\r\n\r\n const res = onDragStart?.(ev);\r\n if (res === false) return;\r\n\r\n const rect = el.getBoundingClientRect();\r\n initialPosition.current = rect;\r\n initialMousePosition.current = {\r\n x: ev.clientX,\r\n y: ev.clientY,\r\n };\r\n\r\n bringToTop(\r\n (ev.target as HTMLElement).closest<HTMLElement>(\r\n '.modal__main',\r\n )!,\r\n );\r\n };\r\n const innerHandleMouseMove = (ev: MouseEvent) => {\r\n if (initialPosition.current) {\r\n handleMouseMove({\r\n dragBounded,\r\n ev,\r\n initialMousePosition,\r\n initialPosition,\r\n modalMainElement: el,\r\n setStyle,\r\n });\r\n }\r\n };\r\n\r\n const handleMouseUp = () => {\r\n initialPosition.current = null;\r\n };\r\n\r\n el.addEventListener('mousedown', handleMouseDown);\r\n document.addEventListener(\r\n 'mousemove',\r\n innerHandleMouseMove,\r\n );\r\n document.addEventListener('mouseup', handleMouseUp);\r\n\r\n unSubscribe.current = () => {\r\n el.removeEventListener('mousedown', handleMouseDown);\r\n document.removeEventListener(\r\n 'mousemove',\r\n innerHandleMouseMove,\r\n );\r\n document.removeEventListener(\r\n 'mouseup',\r\n handleMouseUp,\r\n );\r\n };\r\n }\r\n },\r\n [dragBounded, onDragStart, setStyle],\r\n )}\r\n >\r\n {!noHeader && (\r\n <DialogHeader\r\n NavBar={NavBar}\r\n title={innerTitle}\r\n close={closeHandler}\r\n hideCloseButton={hideCloseButton}\r\n id={`${innerId}_Header`}\r\n />\r\n )}\r\n <Box\r\n className=\"modal__content\"\r\n id={\r\n typeof children === 'string'\r\n ? `${innerId}_Description`\r\n : undefined\r\n }\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n </FreeFocusInside>\r\n </Box>\r\n </CSSTransition>\r\n </ModalContext.Provider>\r\n </Wrapper>\r\n );\r\n },\r\n);\r\n","import { useEffect } from 'react';\r\n\r\nclass BodyScrollLocker {\r\n #isLocked = false;\r\n #onChangeCb: () => unknown = () => {};\r\n #onDestroyCb: () => unknown = () => {};\r\n\r\n get isLocked() {\r\n return this.#isLocked;\r\n }\r\n\r\n destroy() {\r\n this.#onDestroyCb();\r\n }\r\n\r\n lock() {\r\n this.#isLocked = true;\r\n this.#onChangeCb();\r\n }\r\n\r\n unlock() {\r\n this.#isLocked = false;\r\n this.#onChangeCb();\r\n }\r\n\r\n onChange(cb: () => unknown) {\r\n this.#onChangeCb = cb;\r\n\r\n return () => (this.#onChangeCb = () => {});\r\n }\r\n\r\n onDestroy(cb: () => unknown) {\r\n this.#onDestroyCb = cb;\r\n\r\n return () => (this.#onDestroyCb = () => {});\r\n }\r\n}\r\n\r\nconst BodyScrollLock = new (class BodyScrollLockClass {\r\n lockers: BodyScrollLocker[] = [];\r\n #evaluate() {\r\n const willLock =\r\n this.lockers.filter((current) => current.isLocked).length > 0;\r\n\r\n document.body.style.maxHeight = '100vh';\r\n\r\n if (willLock && document.body.scrollHeight > document.body.clientHeight)\r\n document.body.style.paddingRight = '10px';\r\n\r\n document.body.style.overflow = willLock ? 'hidden' : 'auto';\r\n\r\n if (!(willLock && document.body.scrollHeight > document.body.clientHeight))\r\n document.body.style.paddingRight = '0px';\r\n }\r\n\r\n getLocker() {\r\n const locker = new BodyScrollLocker();\r\n locker.onChange(() => this.#evaluate());\r\n locker.onDestroy(() => {\r\n this.lockers = this.lockers.filter((current) => current !== locker);\r\n this.#evaluate();\r\n });\r\n this.lockers.push(locker);\r\n\r\n return locker;\r\n }\r\n})();\r\n\r\nexport function useBodyScrollLock(isLocked: boolean) {\r\n useEffect(() => {\r\n const locker = BodyScrollLock.getLocker();\r\n if (isLocked) locker.lock();\r\n else locker.unlock();\r\n\r\n return () => {\r\n locker.destroy();\r\n };\r\n }, [isLocked]);\r\n}\r\n","import * as React from 'react';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport ReactFocusLock, { FreeFocusInside } from 'react-focus-lock';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useCombinedRefs } from '@apia/util';\r\nimport { useBodyScrollLock } from '../../hooks';\r\n\r\nexport interface IOverlay extends BoxProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n onOverlayClicked: (event: React.MouseEvent<HTMLDivElement>) => void;\r\n /**\r\n * Permite pasar un callback que será llamado una vez que el overlay termine\r\n * de cerrarse.\r\n */\r\n onExited: () => void;\r\n isOpen?: boolean;\r\n shouldAvoidInitialFocusTrap?: boolean;\r\n stretch?: boolean;\r\n transitionDuration?: number;\r\n}\r\n\r\nexport const Overlay = React.forwardRef<unknown, IOverlay>(\r\n (\r\n {\r\n children,\r\n className = '',\r\n onExited,\r\n onOverlayClicked,\r\n isOpen: open = false,\r\n shouldAvoidInitialFocusTrap,\r\n stretch,\r\n transitionDuration = 150,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const innerRef = React.useRef<HTMLDivElement>(null);\r\n const assignRefs = useCombinedRefs(innerRef, ref);\r\n useBodyScrollLock(open);\r\n return (\r\n <CSSTransition\r\n in={open}\r\n timeout={transitionDuration}\r\n onExited={onExited}\r\n classNames=\"overlayAnimation\"\r\n appear\r\n nodeRef={innerRef}\r\n unmountOnExit\r\n >\r\n <Box\r\n className={`${className} overlay`}\r\n ref={assignRefs}\r\n {...props}\r\n data-type=\"overlay\"\r\n role=\"presentation\"\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent<HTMLDivElement>) => {\r\n if (ev.target === innerRef.current) onOverlayClicked(ev);\r\n },\r\n [onOverlayClicked],\r\n )}\r\n {...getVariant(\r\n props.variant ??\r\n `layout.common.modals.overlay${stretch ? '--stretch' : ''}`,\r\n )}\r\n >\r\n <ReactFocusLock\r\n autoFocus={shouldAvoidInitialFocusTrap ? false : undefined}\r\n returnFocus\r\n crossFrame={false}\r\n >\r\n <FreeFocusInside>{children}</FreeFocusInside>\r\n </ReactFocusLock>\r\n </Box>\r\n </CSSTransition>\r\n );\r\n },\r\n);\r\n\r\nOverlay.displayName = 'Overlay';\r\n","import React, {\r\n useEffect,\r\n useState,\r\n useCallback,\r\n forwardRef,\r\n useRef,\r\n} from 'react';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box } from '@apia/theme';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport { useCombinedRefs } from '@apia/util';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Overlay } from './Overlay';\r\nimport DialogHeader from './layout/DialogHeader';\r\nimport { ModalContext } from './ModalContext';\r\nimport { TModal } from './Modal';\r\nimport { useEscapeKey } from './hooks/useEscapeKey';\r\nimport { useInitialFocus } from './hooks/useInitialFocus';\r\nimport { resetModalsPositions } from './windowModal/bringToTop';\r\n\r\nlet canCloseOnClick = true;\r\n\r\nexport const StaticModal = forwardRef(\r\n (\r\n {\r\n animationDuration = 150,\r\n children = null,\r\n className,\r\n hideCloseButton,\r\n id,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n isOpen = false,\r\n maxWidth,\r\n NavBar,\r\n noFocus,\r\n noHeader = false,\r\n onClose = () => {},\r\n onExited = () => {},\r\n Portal,\r\n shouldCloseOnEsc = true,\r\n shouldCloseOnOverlayClick = true,\r\n size = 'md',\r\n stretch,\r\n title = '',\r\n variant,\r\n }: Omit<TModal, 'asWindow'>,\r\n ref: React.Ref<HTMLDivElement>,\r\n ) => {\r\n const lastTitle = useRef(title);\r\n const [innerTitle, setInnerTitle] = useState(title);\r\n if (lastTitle.current !== title && innerTitle !== title) {\r\n setInnerTitle(title);\r\n }\r\n const [isOpenInner, setIsOpen] = useState(isOpen);\r\n const innerId = React.useMemo(() => {\r\n return `Modal${uniqueId()}`;\r\n }, []);\r\n\r\n useEffect(() => {\r\n setIsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n const closeHandler = useCallback(() => {\r\n setIsOpen(false);\r\n onClose();\r\n }, [onClose]);\r\n const [overlayElement, setInnerRef] = React.useState<HTMLElement>();\r\n const assignRefs = useCombinedRefs(\r\n setInnerRef as unknown as React.ForwardedRef<unknown>,\r\n ref as unknown as React.Ref<unknown>,\r\n ((el: HTMLElement) => {\r\n if (el) {\r\n resetModalsPositions();\r\n }\r\n }) as unknown as React.Ref<unknown>,\r\n );\r\n\r\n const overlayClickedHandle = (event: React.MouseEvent<HTMLDivElement>) => {\r\n if (shouldCloseOnOverlayClick && canCloseOnClick) {\r\n if (\r\n (event.target as HTMLDivElement).getAttribute('data-type') ===\r\n 'overlay'\r\n ) {\r\n closeHandler();\r\n }\r\n }\r\n\r\n canCloseOnClick = true;\r\n };\r\n\r\n useEscapeKey({ closeHandler, id: innerId, isOpenInner, shouldCloseOnEsc });\r\n useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement: overlayElement,\r\n });\r\n\r\n const Wrapper = React.useMemo(() => {\r\n return Portal ?? React.Fragment;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const nodeRef = useRef<HTMLElement | null>(null);\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <ModalContext.Provider\r\n value={React.useMemo(() => {\r\n return {\r\n changeTitle: (newTitle) => {\r\n setInnerTitle(newTitle);\r\n },\r\n close: () => {\r\n closeHandler();\r\n },\r\n descriptionId: `${innerId}_Description`,\r\n };\r\n }, [closeHandler, innerId])}\r\n >\r\n <Wrapper>\r\n <Overlay\r\n onOverlayClicked={overlayClickedHandle}\r\n isOpen={isOpen}\r\n className={className}\r\n stretch={stretch}\r\n ref={assignRefs}\r\n onExited={onExited}\r\n id={innerId}\r\n shouldAvoidInitialFocusTrap={noFocus}\r\n >\r\n <CSSTransition\r\n in={isOpen}\r\n timeout={animationDuration}\r\n classNames=\"modal\"\r\n appear\r\n unmountOnExit\r\n nodeRef={nodeRef}\r\n >\r\n <Box\r\n ref={(el) => {\r\n nodeRef.current = el;\r\n uns.current();\r\n if (el) {\r\n const handleMouseDown = () => {\r\n canCloseOnClick = false;\r\n };\r\n const handleMouseUp = () => {\r\n canCloseOnClick = true;\r\n };\r\n el.addEventListener('mousedown', handleMouseDown);\r\n uns.current = () =>\r\n el.removeEventListener('mousedown', handleMouseDown);\r\n el.addEventListener('mouseup', handleMouseUp);\r\n uns.current = () =>\r\n el.removeEventListener('mouseup', handleMouseUp);\r\n }\r\n }}\r\n className=\"modal__variantWrapper\"\r\n {...(variant ? getVariant(variant) : {})}\r\n >\r\n <Box\r\n id={id}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={title}\r\n aria-describedby={`${innerId}_Description`}\r\n aria-hidden=\"false\"\r\n className=\"modal__main\"\r\n // allows scrolling within element, despite body lock\r\n data-scroll-lock-scrollable\r\n sx={React.useMemo(() => {\r\n return {\r\n variant: `layout.common.modals.${size}`,\r\n ...(maxWidth !== undefined ? { maxWidth } : {}),\r\n };\r\n }, [maxWidth, size])}\r\n data-variant={`layout.common.modals.${size}`}\r\n >\r\n {!noHeader && (\r\n <DialogHeader\r\n className=\"modal__header\"\r\n NavBar={NavBar}\r\n title={innerTitle}\r\n close={closeHandler}\r\n hideCloseButton={hideCloseButton}\r\n id={`${innerId}_Header`}\r\n />\r\n )}\r\n <Box\r\n className=\"modal__content\"\r\n id={\r\n typeof children === 'string'\r\n ? `${innerId}_Description`\r\n : undefined\r\n }\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </CSSTransition>\r\n </Overlay>\r\n </Wrapper>\r\n </ModalContext.Provider>\r\n );\r\n },\r\n);\r\n\r\nStaticModal.displayName = 'StaticModal';\r\n","import React, { forwardRef } from 'react';\r\nimport { IOnFocusConfiguration, TFocusRetriever } from '@apia/util';\r\nimport { TModalSize } from '../types';\r\nimport { IDialogHeader } from './layout/DialogHeader';\r\nimport { WindowModal } from './WindowModal';\r\nimport { StaticModal } from './StaticModal';\r\nimport { useBreakpointIndex } from '@theme-ui/match-media';\r\n\r\nexport type TModal = {\r\n animationDuration?: number;\r\n /**\r\n * Aplica solamente para modales que tengan draggable=true.\r\n */\r\n defaultPosition?: {\r\n left?: string;\r\n right?: string;\r\n top?: string;\r\n bottom?: string;\r\n };\r\n /**\r\n * Si esta variable está en true, el modal se comportará más como una ventana\r\n * que como un modal\r\n */\r\n draggable?: boolean;\r\n /*\r\n * Si esta variable está en true, no se podrá arrastrar el modal fuera de la ventana\r\n */\r\n dragBounded?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n id?: string;\r\n initialFocusConfiguration?: IOnFocusConfiguration;\r\n /**\r\n * Este retriever será pasado al método focus.on para realizar el foco en el\r\n * elemento inicial del modal.\r\n *\r\n * @see focus\r\n */\r\n initialFocusGetter?: (\r\n modalInnerRef: HTMLElement,\r\n ) => ReturnType<TFocusRetriever>;\r\n /**\r\n * Si se pasa un ref, el modal hará foco sobre el elemento una vez que haya\r\n * abierto.\r\n */\r\n initialFocusRef?: React.RefObject<unknown>;\r\n /**\r\n * Controla el estado del modal, indicando a la transición de apertura o\r\n * cierre que debe comenzar, dependiendo de si cambia a true o false\r\n * respectivamente.\r\n */\r\n isOpen?: boolean;\r\n maxWidth?: number | string;\r\n /**\r\n * Permite pasar un componente React que se mostrará a la derecha del título,\r\n * con el fin de incorporar botones en el header del modal.\r\n */\r\n NavBar?: React.ReactNode;\r\n noFocus?: boolean;\r\n noHeader?: boolean;\r\n /**\r\n * Permite definir un callback que será llamado solamente cuando el modal se\r\n * cierre por medio del click en el overlay, al presionar escape o mediante\r\n * el botón cerrar del header (La X).\r\n */\r\n onClose?: () => void;\r\n /**\r\n * Este método recibe el evento del mousedown utilizado para controllar el dragstart. Si el usuario devuelve false, el drag no será realizado.\r\n */\r\n onDragStart?: (ev: MouseEvent) => boolean;\r\n /**\r\n * Permite definir un callback que será llamado siempre que el modal se\r\n * cierre, una vez que la animación haya terminado.\r\n */\r\n onExited?: () => unknown;\r\n /**\r\n * Al pasar un Portal, el modal se abrirá dentro de éste y no directamente en\r\n * la posición actual dentro del árbol de componentes. Normalmente, este\r\n * Portal es pasado automáticamente por el hook useModal (No el de la\r\n * librería, sino el nuestro).\r\n *\r\n * @see useModal\r\n */\r\n Portal?: React.FC<{\r\n children: React.ReactNode;\r\n }>;\r\n /**\r\n * Si es true, el modal será cerrado al presionar escape.\r\n */\r\n shouldCloseOnEsc?: boolean;\r\n /**\r\n * Si es true, el modal será cerrado al hacer clic en el overlay.\r\n */\r\n shouldCloseOnOverlayClick?: boolean;\r\n size?: TModalSize;\r\n stretch?: boolean;\r\n title?: string;\r\n variant?: string;\r\n} & Pick<IDialogHeader, 'hideCloseButton'>;\r\n\r\nexport const Modal = forwardRef(\r\n (props: TModal, ref: React.Ref<HTMLDivElement>) => {\r\n const breakpoint = useBreakpointIndex();\r\n\r\n if (props.draggable && breakpoint > 3) {\r\n return <WindowModal {...props} ref={ref} />;\r\n }\r\n return <StaticModal {...props} ref={ref} />;\r\n },\r\n);\r\n\r\nModal.displayName = 'Modal';\r\n","import { usePrevious } from '@apia/util';\r\nimport { useModal } from '../../../components/modals/hooks/useModal';\r\nimport { Modal, TModal } from '../../../components/modals/Modal';\r\nimport { Confirm, IConfirm } from '../../../components';\r\nimport React, { useRef } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport type TOpenModal = Pick<\r\n TModal,\r\n | 'NavBar'\r\n | 'Portal'\r\n | 'children'\r\n | 'className'\r\n | 'hideCloseButton'\r\n | 'initialFocusGetter'\r\n | 'initialFocusConfiguration'\r\n | 'maxWidth'\r\n | 'noHeader'\r\n | 'onExited'\r\n | 'shouldCloseOnEsc'\r\n | 'shouldCloseOnOverlayClick'\r\n | 'size'\r\n | 'stretch'\r\n | 'title'\r\n | 'variant'\r\n | 'draggable'\r\n | 'onClose'\r\n | 'onDragStart'\r\n | 'defaultPosition'\r\n | 'dragBounded'\r\n> & {\r\n id?: string;\r\n children?: React.ReactNode;\r\n confirmProps?: Omit<IConfirm, 'onConfirmOk' | 'onConfirmCancel' | 'children'>;\r\n /**\r\n * Determina si el modal debe abrirse al ser montado o no.\r\n */\r\n isDefaultOpen?: boolean;\r\n /**\r\n * El método onConfirm permite pasar un callback que devuelva una promesa. En\r\n * caso de ser así, si esta promesa resuelve a true, el modal será cerrado o\r\n * en caso contrario permanecerá abierto. Es útil en situaciones en donde es\r\n * necesario corroborar una condición antes de cerrar el modal. En la\r\n * situación en que se decida mantener el modal abierto, está a cargo del\r\n * usuario del componente realizar las indicaciones visuales correspondientes\r\n * para indicar al usuario el motivo por el cual el modal no fue cerrado.\r\n */\r\n onConfirm?: () => Promise<boolean> | boolean | void;\r\n /**\r\n * El método onCancel será llamado siempre que un usuario cierre el modal,\r\n * excepto cuando haya presionado en onConfirm.\r\n */\r\n onCancel?: () => void;\r\n /**\r\n * Permite introducir html directamente dentro del contenedor del modal.\r\n */\r\n html?: string;\r\n};\r\n\r\nexport const OpenModal = (props: TOpenModal & { isOpen: boolean }) => {\r\n const modalProps = useModal({\r\n isDefaultOpen: true,\r\n onExited: props.onExited,\r\n onClose: props.onClose,\r\n });\r\n\r\n const previousOpenProp = usePrevious(props.isOpen);\r\n if (previousOpenProp.current !== props.isOpen && !props.isOpen) {\r\n modalProps.hide();\r\n }\r\n\r\n const hasConfirmed = useRef(false);\r\n\r\n const confirmProps = props.confirmProps;\r\n if (props.onConfirm || props.onCancel) {\r\n return (\r\n <Modal\r\n {...props}\r\n {...modalProps}\r\n onExited={() => {\r\n props.onClose?.();\r\n props.onExited?.();\r\n if (!hasConfirmed.current) {\r\n props.onCancel?.();\r\n }\r\n }}\r\n >\r\n <Confirm\r\n {...confirmProps}\r\n onConfirm={async () => {\r\n hasConfirmed.current = true;\r\n const res = await props.onConfirm?.();\r\n\r\n if (res !== false) {\r\n modalProps.hide();\r\n }\r\n }}\r\n onCancel={() => {\r\n modalProps.hide();\r\n }}\r\n children={\r\n props.html ? (\r\n <Box dangerouslySetInnerHTML={{ __html: props.html }} />\r\n ) : (\r\n props.children\r\n )\r\n }\r\n />\r\n </Modal>\r\n );\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n {...modalProps}\r\n children={\r\n props.html ? (\r\n <Box dangerouslySetInnerHTML={{ __html: props.html }} />\r\n ) : (\r\n props.children\r\n )\r\n }\r\n />\r\n );\r\n};\r\n","import { Fragment, ReactNode } from 'react';\r\nimport { OpenModal, TOpenModal } from './OpenModal';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport class ApiaUtilModalHandler {\r\n constructor(\r\n public close: () => void,\r\n public setProperties: (props: Partial<TOpenModal>) => unknown,\r\n public getProperties: () => TOpenModal,\r\n ) {}\r\n\r\n public setConfirmProps(props: Partial<TOpenModal['confirmProps']>) {\r\n this.setProperties({\r\n confirmProps: { ...this.getProperties().confirmProps, ...props },\r\n });\r\n }\r\n}\r\n\r\nexport class ApiaUtilModals {\r\n private overlays: { render: ReactNode; id: number }[] = [];\r\n private modals: (TOpenModal & { isOpen: boolean })[] = [];\r\n\r\n #maxId = 0;\r\n #maxOverlay = 0;\r\n\r\n constructor() {\r\n document.addEventListener('openModal', (event) => {\r\n const cevent = event as CustomEvent;\r\n this.open(cevent.detail as TOpenModal);\r\n });\r\n\r\n makeObservable<ApiaUtilModals, 'overlays' | 'modals'>(this, {\r\n overlays: observable,\r\n modals: observable,\r\n });\r\n }\r\n\r\n #innerClose = (id: string) => {\r\n this.modals = this.modals.filter((s) => s.id !== id);\r\n };\r\n\r\n close(id: string) {\r\n const modal = this.modals.find((s) => s.id === id);\r\n\r\n if (modal) {\r\n modal.onClose?.();\r\n modal.onExited?.();\r\n }\r\n\r\n this.#innerClose(id);\r\n }\r\n\r\n open(props: TOpenModal) {\r\n const id = props.id ?? `modal_${this.#maxId++}`;\r\n this.modals.push({\r\n ...props,\r\n id,\r\n isOpen: true,\r\n onClose: props.onClose,\r\n onExited: () => {\r\n props.onExited?.();\r\n this.#innerClose(id);\r\n },\r\n });\r\n\r\n return new ApiaUtilModalHandler(\r\n () => {\r\n this.close(id);\r\n },\r\n (props) => {\r\n Object.assign(this.modals.find((m) => m.id === id) ?? {}, props);\r\n },\r\n () => {\r\n return this.modals.find((m) => m.id === id)!;\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * The overlay method allows to append an element to the array of overlays, which will be rendered after any existent modal.\r\n *\r\n * This way, it's possible to add a completelly custom modal with no style, nor any custom behavior added by this controller.\r\n * \r\n * @example\r\n * \r\n * const portal = createPortal(\r\n <iframe\r\n style={{\r\n position: 'fixed',\r\n inset: 0,\r\n }}\r\n src={makeApiaUrl({\r\n action: 'editGrid',\r\n frmName: grid.getProperty('gridForm'),\r\n frmParent: grid.getForm().definition.frmParent,\r\n portalFormMode: false,\r\n editionMode: true,\r\n react: true,\r\n index,\r\n preventAsXmlParameter: true,\r\n ajaxUrl: 'apia.execution.FormAction.run',\r\n })}\r\n />,\r\n document.getElementById('AppModals') as HTMLElement,\r\n );\r\n\r\n ApiaUtil.instance.modals.overlay(portal);\r\n */\r\n overlay(o: ReactNode) {\r\n const id = this.#maxOverlay++;\r\n\r\n const overlay = { render: <Fragment key={id}>{o}</Fragment>, id };\r\n this.overlays.push(overlay);\r\n\r\n return () => {\r\n this.overlays = this.overlays.filter((c) => c.id !== id);\r\n };\r\n }\r\n\r\n Component = observer(() => {\r\n return (\r\n <>\r\n {this.modals.map((current) => (\r\n <OpenModal key={current.id} {...current} />\r\n ))}\r\n {this.overlays.map((c) => c.render)}\r\n </>\r\n );\r\n });\r\n}\r\n","import {\r\n NotificationsList,\r\n defaultNotifier,\r\n TNotificationId,\r\n INotification,\r\n TDispatchedNotification,\r\n TNotificationSelector,\r\n} from '@apia/notifications';\r\nimport type { ApiaUtil } from '..';\r\n\r\nexport class ApiaUtilNotifications {\r\n constructor(protected util: ApiaUtil) {}\r\n\r\n close = (id: TNotificationId | INotification) => {\r\n defaultNotifier.close(id);\r\n };\r\n\r\n closeAll = () => {\r\n defaultNotifier.closeAll();\r\n };\r\n\r\n notify = (notification: TDispatchedNotification): void => {\r\n if (notification.type === 'modal') {\r\n this.util.modals.open({\r\n size: 'flex',\r\n children: notification.message,\r\n title: notification.title || '',\r\n onConfirm: () => {},\r\n confirmProps: {\r\n hideCancelButton: true,\r\n },\r\n });\r\n } else {\r\n defaultNotifier.notify({\r\n ...notification,\r\n type: notification.type ?? 'warning',\r\n });\r\n }\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n useSelector = (selector: TNotificationSelector<any>) =>\r\n defaultNotifier.useSelector(selector);\r\n\r\n Component = () => {\r\n return <NotificationsList />;\r\n };\r\n}\r\n","import { ITabContainer } from '../types';\r\n\r\nexport function getIframe() {\r\n return window.frameElement as HTMLIFrameElement;\r\n}\r\n\r\nexport function getTabContainer() {\r\n const tabsController = getIframe()?.getReactTabsController?.();\r\n if (tabsController) return tabsController;\r\n\r\n const windowTop = window.top;\r\n const isIniFrame = windowTop?.document != null;\r\n let result: HTMLElement | typeof window.tabsController | null =\r\n document.getElementById('tabContainer');\r\n if (result === null && isIniFrame)\r\n result =\r\n windowTop.document.getElementById('tabContainer') ??\r\n windowTop.tabsController;\r\n\r\n return result as unknown as ITabContainer;\r\n}\r\n","import { TId } from '@apia/util';\r\nimport { getTabContainer } from './util';\r\nimport { Tab, TTab } from '../../../tabs';\r\n\r\nexport class ApiaUtilTabsController {\r\n get currentTab(): Tab<TTab> {\r\n try {\r\n return getTabContainer().getHandler().getActiveTab();\r\n } catch (e) {\r\n e;\r\n }\r\n\r\n return {\r\n async close(_?: boolean) {\r\n try {\r\n window.close();\r\n } catch (_) {\r\n //\r\n }\r\n return true;\r\n },\r\n remove() {\r\n this.close();\r\n },\r\n } as any;\r\n }\r\n\r\n closeTab(tabId: string, force?: boolean) {\r\n const tabContainer = getTabContainer();\r\n if (tabContainer !== null) {\r\n tabContainer.getTab(tabId)?.close(force);\r\n return;\r\n } else {\r\n try {\r\n window.close();\r\n } catch (_ignore) {\r\n //\r\n }\r\n }\r\n }\r\n\r\n getHandler() {\r\n return getTabContainer()?.getHandler();\r\n }\r\n\r\n /**\r\n * openApiaTab y openTab son sinónimos.\r\n */\r\n openTab(title: string, url: string): Promise<TId> {\r\n const tabContainer = getTabContainer();\r\n if (tabContainer !== null) {\r\n return tabContainer.addNewTab(title, url);\r\n }\r\n\r\n return new Promise((resolve) => resolve(''));\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useModal } from './hooks';\r\nimport { Modal } from './Modal';\r\nimport { Icon } from '@apia/icons';\r\nimport { Box, getVariant, Link } from '@apia/theme';\r\n\r\nexport const DeadSessionModal = ({ onClick }: { onClick: () => unknown }) => {\r\n const { Portal } = useModal();\r\n return (\r\n <Modal\r\n Portal={Portal}\r\n isOpen\r\n shouldCloseOnOverlayClick={false}\r\n shouldCloseOnEsc={false}\r\n hideCloseButton\r\n sx={React.useMemo(\r\n () => ({\r\n backgroundColor: 'palette.background.default',\r\n }),\r\n [],\r\n )}\r\n >\r\n <Box\r\n role=\"alert\"\r\n {...getVariant('layout.common.modals.deadSession')}\r\n className=\"deadSession\"\r\n >\r\n <Box className=\"textAndIcon\">\r\n <Icon title=\"\" size=\"iconLg\" name=\"Alert\" />\r\n {window.MSG_INVALID_SESSION}\r\n </Box>\r\n <Link\r\n className=\"goHomeLink\"\r\n href={window.CONTEXT}\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n ev.preventDefault();\r\n onClick();\r\n },\r\n [onClick],\r\n )}\r\n >\r\n {window.LBL_GOTO_LOGIN}\r\n </Link>\r\n </Box>\r\n </Modal>\r\n );\r\n};\r\n","import React, { ComponentType, Suspense, lazy } from 'react';\r\nimport { Modal, TModal } from './Modal';\r\n\r\nexport interface ICalendarModal extends TModal {\r\n handleClickDay: (date: Date) => void;\r\n onCancel: () => void;\r\n calValue?: Date;\r\n locale: string;\r\n}\r\n\r\nexport const CalendarModal = React.forwardRef<HTMLDivElement, ICalendarModal>(\r\n ({ handleClickDay, onCancel, calValue, locale, size, ...props }, ref) => {\r\n const Calendar = lazy(\r\n () =>\r\n import('react-calendar') as unknown as Promise<{\r\n default: ComponentType<any>;\r\n }>,\r\n );\r\n return (\r\n <Modal\r\n noHeader\r\n size={size ?? 'cal'}\r\n shouldCloseOnEsc\r\n shouldCloseOnOverlayClick\r\n ref={ref}\r\n {...props}\r\n initialFocusGetter={(modalRef) => {\r\n return modalRef?.querySelector(\r\n '.react-calendar__tile--active',\r\n ) as HTMLElement;\r\n }}\r\n >\r\n <Suspense fallback={null}>\r\n <Calendar\r\n onClickDay={handleClickDay}\r\n locale={locale}\r\n value={calValue ?? new Date()}\r\n nextLabel=\"›\"\r\n next2Label=\"»\"\r\n prevLabel=\"‹\"\r\n prev2Label=\"«\"\r\n />\r\n </Suspense>\r\n </Modal>\r\n );\r\n },\r\n);\r\n\r\nCalendarModal.displayName = 'CalendarModal';\r\n","import { getVariant } from '@apia/theme';\r\nimport * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport interface IDialogButtonBar {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const DialogButtonBar: React.FC<IDialogButtonBar> = ({\r\n children,\r\n className,\r\n}) => {\r\n return (\r\n <Box\r\n className={`${className ?? ''} buttonsBar`}\r\n {...getVariant('layout.common.modals.buttonsBar')}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { TIconType } from '@apia/icons';\r\nimport {\r\n getVariant,\r\n spacing,\r\n Box,\r\n Button,\r\n ButtonProps,\r\n Spinner,\r\n ThemeUICSSObject,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport * as React from 'react';\r\n\r\nexport interface ISimpleButton extends ButtonProps {\r\n buttonSx?: ThemeUICSSObject;\r\n icon?: TIconType;\r\n iconColor?: string;\r\n iconPosition?: 'left' | 'right';\r\n iconSize?: number;\r\n isLoading?: boolean;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: string;\r\n spinnerSize?: number;\r\n type?: 'button' | 'submit' | 'reset';\r\n}\r\n\r\nconst simpleButton: ThemeUICSSObject = {\r\n display: 'inline-flex',\r\n gap: spacing(3),\r\n position: 'relative',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n svg: {\r\n flexShrink: 0,\r\n path: {\r\n fill: 'currentColor',\r\n },\r\n },\r\n\r\n '.toggled': {\r\n backgroundColor: 'primary',\r\n },\r\n\r\n '.button__content': {\r\n overflowWrap: 'break-word',\r\n },\r\n\r\n /* PREPEND HERE */\r\n};\r\n\r\nexport const SimpleButton = React.forwardRef(\r\n (\r\n {\r\n buttonSx,\r\n children = null,\r\n className,\r\n disabled = false,\r\n icon,\r\n iconColor,\r\n iconPosition = 'left',\r\n iconSize,\r\n id,\r\n isLoading,\r\n name,\r\n onClick,\r\n size,\r\n spinnerSize = 16,\r\n sx,\r\n title,\r\n type = 'button',\r\n variant = 'primary',\r\n ...buttonProps\r\n }: ISimpleButton,\r\n ref: React.Ref<unknown>,\r\n ) => {\r\n const loadingSx = React.useMemo<ThemeUIStyleObject>(\r\n () => ({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }),\r\n [],\r\n );\r\n const spanSx = React.useMemo(\r\n () => ({\r\n color: isLoading ? 'transparent' : undefined,\r\n }),\r\n [isLoading],\r\n );\r\n const Icon = React.useMemo(() => icon, [icon]);\r\n\r\n return (\r\n <Button\r\n ref={ref as React.Ref<HTMLButtonElement>}\r\n id={id}\r\n name={name}\r\n title={title}\r\n aria-label={title}\r\n onClick={onClick}\r\n type={type}\r\n disabled={isLoading || disabled}\r\n className={className}\r\n {...getVariant(`${variant}${size !== 'md' && size ? `-${size}` : ''}`)}\r\n {...buttonProps}\r\n sx={{ ...simpleButton, ...buttonSx, ...sx }}\r\n >\r\n {Icon && iconPosition === 'left' && (\r\n <Icon title=\"\" size={iconSize} color={iconColor} />\r\n )}\r\n <Box as=\"span\" className=\"button__content\" sx={spanSx}>\r\n {children ?? title}\r\n </Box>\r\n {Icon && iconPosition === 'right' && (\r\n <Icon title=\"\" size={iconSize} color={iconColor} />\r\n )}\r\n {isLoading && (\r\n <Box className=\"spinner\" sx={loadingSx}>\r\n <Spinner size={spinnerSize} color=\"inherit\" />\r\n </Box>\r\n )}\r\n </Button>\r\n );\r\n },\r\n);\r\n\r\nSimpleButton.displayName = 'SimpleButton';\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { IConfirm } from '../../dialogs';\r\nimport { MouseEvent, useCallback } from 'react';\r\nimport { DialogButtonBar } from './DialogButtonBar';\r\nimport { SimpleButton } from '../../forms/buttons/SimpleButton';\r\nimport { useModalContext } from '../ModalContext';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const Confirm = ({\r\n children,\r\n additionalButtons,\r\n additionalButtonsOnRight,\r\n cancelButtonText: cancelText,\r\n className,\r\n confirmButtonText: confirmText,\r\n confirmButtonVariant = 'primary',\r\n contentRef,\r\n disabled,\r\n hideCancelButton,\r\n hideConfirmButton,\r\n isLoading,\r\n onCancel,\r\n onConfirm,\r\n variant,\r\n}: Omit<IConfirm, 'title'>) => {\r\n const { descriptionId } = useModalContext();\r\n\r\n const showsCancelButton = onCancel && !hideCancelButton;\r\n const showsConfirmButton = !hideConfirmButton;\r\n\r\n if (!showsCancelButton && showsConfirmButton) {\r\n confirmText = confirmText || getLabel('btnClose').text;\r\n } else if (showsConfirmButton) {\r\n confirmText = getLabel('btnCon').text;\r\n cancelText = getLabel('btnCan').text;\r\n }\r\n\r\n return (\r\n <Box\r\n {...getVariant(variant ?? 'layout.common.modals.confirm')}\r\n className={`${className ?? ''} confirm`}\r\n >\r\n <Box ref={contentRef} className=\"confirm__content\" id={descriptionId}>\r\n {children}\r\n </Box>\r\n <DialogButtonBar className=\"confirm__buttonBar\">\r\n <Box\r\n className=\"confirm__customButtons\"\r\n onClick={useCallback(\r\n (ev: MouseEvent) => {\r\n if ((ev.target as HTMLElement).closest('button')) onCancel?.();\r\n },\r\n [onCancel],\r\n )}\r\n >\r\n {additionalButtons}\r\n </Box>\r\n\r\n <Box className=\"confirm__defaultButtons\">\r\n <Box\r\n className=\"confirm__customButtonsOnRight\"\r\n onClick={useCallback(\r\n (ev: MouseEvent) => {\r\n if ((ev.target as HTMLElement).closest('button')) onCancel?.();\r\n },\r\n [onCancel],\r\n )}\r\n >\r\n {additionalButtonsOnRight}\r\n </Box>\r\n {showsConfirmButton && (\r\n <SimpleButton\r\n onClick={onConfirm}\r\n title={confirmText}\r\n variant={\r\n !showsCancelButton && showsConfirmButton\r\n ? 'outline'\r\n : confirmButtonVariant\r\n }\r\n disabled={isLoading ?? disabled}\r\n isLoading={isLoading}\r\n className=\"confirm__confirmButton\"\r\n type=\"submit\"\r\n data-test-id=\"confirm\"\r\n >\r\n {confirmText}\r\n </SimpleButton>\r\n )}\r\n {showsCancelButton && (\r\n <SimpleButton\r\n onClick={onCancel}\r\n title={cancelText}\r\n {...getVariant('secondary')}\r\n disabled={isLoading}\r\n className=\"confirm__cancelButton\"\r\n data-test-id=\"cancel\"\r\n >\r\n {cancelText}\r\n </SimpleButton>\r\n )}\r\n </Box>\r\n </DialogButtonBar>\r\n </Box>\r\n );\r\n};\r\n","import { Modal, useModal } from '../modals';\r\nimport { TApiaButtonType, TModalSize } from '../types';\r\nimport { ReactNode, Ref, useCallback, useRef } from 'react';\r\nimport { Confirm } from '../modals/layout/Confirm';\r\n\r\nexport interface IConfirm {\r\n additionalButtons?: ReactNode;\r\n additionalButtonsOnRight?: ReactNode;\r\n cancelButtonText?: string;\r\n children: ReactNode;\r\n className?: string;\r\n confirmButtonText?: string;\r\n confirmButtonVariant?: TApiaButtonType;\r\n contentRef?: Ref<HTMLDivElement>;\r\n disabled?: boolean;\r\n hideCancelButton?: boolean;\r\n hideConfirmButton?: boolean;\r\n isLoading?: boolean;\r\n onConfirm?: () => unknown;\r\n onCancel?: () => unknown;\r\n title?: string;\r\n size?: TModalSize;\r\n variant?: string;\r\n}\r\n\r\nexport const ConfirmModal = ({\r\n onConfirm,\r\n onCancel,\r\n title,\r\n size,\r\n ...props\r\n}: IConfirm): JSX.Element => {\r\n const hasConfirmed = useRef(false);\r\n\r\n const { hide, ...modalProps } = useModal({\r\n isDefaultOpen: true,\r\n onExited: () => {\r\n if (hasConfirmed.current) onConfirm?.();\r\n else onCancel?.();\r\n },\r\n });\r\n\r\n const handleCancel = useCallback(() => {\r\n hide();\r\n }, [hide]);\r\n\r\n const handleConfirm = useCallback(() => {\r\n hasConfirmed.current = true;\r\n hide();\r\n }, [hide]);\r\n\r\n return (\r\n <Modal\r\n {...modalProps}\r\n initialFocusGetter={useCallback(\r\n (current: HTMLElement) =>\r\n current.querySelector<HTMLElement>('.confirm__confirmButton'),\r\n [],\r\n )}\r\n title={title}\r\n size={size}\r\n >\r\n <Confirm {...props} onCancel={handleCancel} onConfirm={handleConfirm} />\r\n </Modal>\r\n );\r\n};\r\n","import { useCallback, useMemo } from 'react';\r\nimport { Confirm, Modal, useModal } from '../modals';\r\n\r\nexport interface IAlert {\r\n children: React.ReactNode;\r\n confirmButtonText?: string;\r\n onClose: () => void;\r\n title?: string;\r\n}\r\n\r\nexport const AlertModal = ({\r\n children,\r\n confirmButtonText,\r\n onClose,\r\n title,\r\n}: IAlert) => {\r\n const { hide, ...modalProps } = useModal({\r\n isDefaultOpen: true,\r\n onExited: onClose,\r\n });\r\n\r\n return (\r\n <Modal\r\n {...modalProps}\r\n sx={useMemo(\r\n () => ({\r\n '.modal__content .confirm__content': {\r\n overflow: 'visible',\r\n },\r\n }),\r\n [],\r\n )}\r\n initialFocusGetter={useCallback((ref: HTMLElement) => {\r\n return ref?.querySelector('.confirm__confirmButton') as HTMLElement;\r\n }, [])}\r\n title={title}\r\n >\r\n <Confirm\r\n onConfirm={useCallback(() => {\r\n hide();\r\n }, [hide])}\r\n confirmButtonText={confirmButtonText}\r\n >\r\n {children}\r\n </Confirm>\r\n </Modal>\r\n );\r\n};\r\n","import { ReactNode, useCallback } from 'react';\r\nimport {\r\n ConfirmModal,\r\n IConfirm,\r\n} from '../../../components/dialogs/ConfirmModal';\r\nimport { AlertModal } from '../../../components/dialogs/AlertModal';\r\nimport { makeAutoObservable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\ntype TApiaUtilConfirm = Pick<\r\n IConfirm,\r\n | 'additionalButtons'\r\n | 'additionalButtonsOnRight'\r\n | 'cancelButtonText'\r\n | 'children'\r\n | 'className'\r\n | 'confirmButtonText'\r\n | 'confirmButtonVariant'\r\n | 'contentRef'\r\n | 'hideCancelButton'\r\n | 'hideConfirmButton'\r\n | 'title'\r\n | 'size'\r\n | 'variant'\r\n>;\r\n\r\ntype TApiaUtilInnerConfirm = TApiaUtilConfirm & { id: string } & Pick<\r\n IConfirm,\r\n 'onCancel' | 'onConfirm'\r\n >;\r\n\r\ntype TAlert = {\r\n children: ReactNode;\r\n title: string;\r\n confirmButtonText?: string;\r\n};\r\n\r\ntype TApiaUtilInnerAlert = TAlert & { onClose: () => unknown; id: string };\r\n\r\nexport class ApiaUtilDialogs {\r\n #maxIdAlert = 0;\r\n #maxIdConfirm = 0;\r\n\r\n alerts: TApiaUtilInnerAlert[] = [];\r\n dialogs: TApiaUtilInnerConfirm[] = [];\r\n\r\n constructor() {\r\n makeAutoObservable(this);\r\n }\r\n\r\n alert(props: TAlert): Promise<void> {\r\n return new Promise((resolve) => {\r\n this.alerts.push({\r\n ...props,\r\n onClose: () => resolve(),\r\n id: `confirm${this.#maxIdAlert++}`,\r\n });\r\n });\r\n }\r\n\r\n confirm(props: TApiaUtilConfirm): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n this.dialogs.push({\r\n ...props,\r\n id: `confirm${this.#maxIdConfirm++}`,\r\n onCancel: () => resolve(false),\r\n onConfirm: () => resolve(true),\r\n });\r\n });\r\n }\r\n\r\n Component = observer(() => {\r\n const removeModal = useCallback(\r\n (which: TApiaUtilConfirm & { id: string }) => {\r\n this.dialogs = this.dialogs.filter((search) => search !== which);\r\n },\r\n [],\r\n );\r\n\r\n return (\r\n <>\r\n {this.alerts.map((current) => (\r\n <AlertModal {...current} key={current.id} />\r\n ))}\r\n {this.dialogs.map((current) => (\r\n <ConfirmModal\r\n {...current}\r\n key={current.id}\r\n onCancel={() => {\r\n removeModal(current);\r\n current.onCancel?.();\r\n }}\r\n onConfirm={() => {\r\n removeModal(current);\r\n current.onConfirm?.();\r\n }}\r\n />\r\n ))}\r\n </>\r\n );\r\n });\r\n}\r\n","function fillZeros(amount: number) {\r\n return Array(Math.max(0, amount)).fill(0).join('');\r\n}\r\n\r\nfunction fillThousandsZeros(value: number) {\r\n const stringValue = String(value);\r\n return `${fillZeros(3 - stringValue.length)}${String(value)}`;\r\n}\r\n\r\nconst decimalCount = Number(window.AMOUNT_DECIMAL_SEPARATOR);\r\nconst decimalZeros = Number(window.AMOUNT_DECIMAL_ZEROS);\r\nconst decimalSeparator = window.CHAR_DECIMAL_SEPARATOR;\r\nconst thousandsSeparator = window.CHAR_THOUS_SEPARATOR;\r\nconst regexpThousandsSeparator =\r\n thousandsSeparator === '.' ? '\\\\.' : thousandsSeparator;\r\nconst regexpDecimalSeparator =\r\n decimalSeparator === '.' ? '\\\\.' : decimalSeparator;\r\nconst shouldRound = false;\r\n\r\n/* \r\nfunction parseNumberInputValueToNumber(value: string): number {\r\n return Number.parseFloat(\r\n value.replaceAll(thousandsSeparator, '').replaceAll(decimalSeparator, '.'),\r\n );\r\n}\r\n\r\nfunction parseNumberValueToNumberInput(value: string | number): string {\r\n const stringNumber = String(value);\r\n const result = stringNumber.match(/(-?)(\\d+)(?:\\.(\\d+))?/);\r\n if (!result) return '';\r\n\r\n const isNegative = !!result[1];\r\n const integer = result[2];\r\n const decimals = result[3] as string | null;\r\n const decimalsString = decimals ? `${regexpDecimalSeparator}${decimals}` : '';\r\n\r\n return (\r\n parseStringToApiaNumber(\r\n `${isNegative ? '-' : ''}${integer}${decimalsString}`,\r\n ) ?? ''\r\n );\r\n} */\r\n\r\nexport function parseStringToApiaNumber(value: string): string | null {\r\n const result = value.match(\r\n new RegExp(\r\n `^(-)?((?:(?:\\\\d{1,3})${regexpThousandsSeparator}(?:\\\\d{3}${regexpThousandsSeparator})*(?:\\\\d{3}))?|(?:\\\\d*))(?:(?:${regexpDecimalSeparator})(\\\\d+))?$`,\r\n ),\r\n );\r\n if (!result) return null;\r\n\r\n const isNegative = !!result[1];\r\n let module = Number(result[2].replaceAll(thousandsSeparator, ''));\r\n const slicedDecimals = result[3]?.slice(0, decimalCount + 1) ?? '';\r\n const noZeroDecimals =\r\n (slicedDecimals\r\n ? `${String(\r\n Math.round(\r\n Number(\r\n `${slicedDecimals}${fillZeros(\r\n (shouldRound ? decimalCount + 1 : decimalCount) -\r\n slicedDecimals.length,\r\n )}`,\r\n ) / (shouldRound ? 10 : 1),\r\n ),\r\n )}`\r\n : ''\r\n )\r\n .slice(0, decimalCount)\r\n .match(/(\\d*[1-9])0*/)?.[1] ?? '';\r\n\r\n const decimalsString: string = `${noZeroDecimals}${fillZeros(\r\n decimalZeros - noZeroDecimals.length,\r\n )}`;\r\n\r\n const finalNumberString: string[] = [];\r\n while (module >= 1000) {\r\n module /= 1000;\r\n const truncedInteger = Math.trunc(module);\r\n finalNumberString.unshift(\r\n fillThousandsZeros(Math.round((module - truncedInteger) * 1000)),\r\n );\r\n module = truncedInteger;\r\n }\r\n finalNumberString.unshift(String(module));\r\n\r\n return `${isNegative ? '-' : ''}${finalNumberString.join(\r\n window.ADD_THOUSAND_SEPARATOR ? window.CHAR_THOUS_SEPARATOR : '',\r\n )}${decimalsString.length > 0 ? `${decimalSeparator}${decimalsString}` : ''}`;\r\n}\r\n","import { parseStringToApiaNumber } from './parseStringToApiaNumber';\r\n\r\nconst delimiters = [',', ';', '\\t', '|'];\r\nexport class ApiaUtilParsers {\r\n /**\r\n * Toma un número sin separadores de miles y lo devuelve en el formato\r\n * establecido por los parámetros de Apia para separadores de miles y\r\n * separadores de decimales.\r\n */\r\n addThousSeparator(nStr: string | number): string {\r\n // Apia Original Function\r\n let str = String(nStr);\r\n str += '';\r\n const x =\r\n window.CHAR_DECIMAL_SEPARATOR && str.split(window.CHAR_DECIMAL_SEPARATOR);\r\n let x1 = x?.[0];\r\n const x2 =\r\n x && x.length > 1 && window.CHAR_DECIMAL_SEPARATOR\r\n ? `${window.CHAR_DECIMAL_SEPARATOR}${x[1]}`\r\n : '';\r\n const rgx = /(\\d+)(\\d{3})/;\r\n while (x1 && rgx.test(x1)) {\r\n x1 =\r\n x1 &&\r\n window.CHAR_THOUS_SEPARATOR &&\r\n x1.replace(rgx, `$1${window.CHAR_THOUS_SEPARATOR}$2`);\r\n }\r\n return x1 ? `${x1}${x2}` : String(nStr);\r\n }\r\n\r\n #parseString(value: string): string {\r\n return parseStringToApiaNumber(value) || '';\r\n }\r\n\r\n /**\r\n * Toma un número y lo devuelve formateado con los parámetros de Apia\r\n */\r\n apiaNumber(pValue: number): number | string;\r\n /**\r\n * Toma una cadena de caracteres y lo parsea en el formato de Apia.\r\n * Esta cadena de caracteres podría venir por ejemplo de un evento\r\n * onChange en un campo de tipo input.\r\n */\r\n apiaNumber(pValue: string): string;\r\n apiaNumber(pValue: string | number): number | string {\r\n if (typeof pValue === 'string') {\r\n return this.#parseString(pValue);\r\n }\r\n // Apia Classic Original Function\r\n let value = '';\r\n try {\r\n value = pValue.toFixed(parseInt(window.AMOUNT_DECIMAL_SEPARATOR, 10));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n let s = value;\r\n if (!s.includes('.')) {\r\n if (window.ADD_THOUSAND_SEPARATOR) {\r\n s = this.addThousSeparator(s);\r\n }\r\n return s;\r\n }\r\n if (window.ADD_THOUSAND_SEPARATOR) {\r\n s = this.addThousSeparator(s.replace('.', window.CHAR_DECIMAL_SEPARATOR));\r\n } else {\r\n s = s.replace('.', window.CHAR_DECIMAL_SEPARATOR);\r\n }\r\n const int = s.split(window.CHAR_DECIMAL_SEPARATOR)[0];\r\n let decimals: string = s.split(window.CHAR_DECIMAL_SEPARATOR)[1];\r\n let decCount: number = decimals.length - 1;\r\n while (\r\n decCount >= parseInt(window.AMOUNT_DECIMAL_ZEROS, 10) &&\r\n decimals.charAt(decCount) === '0'\r\n ) {\r\n decimals = decimals.substring(0, decCount);\r\n decCount -= 1;\r\n }\r\n return (\r\n int +\r\n (decimals || decimals === '0'\r\n ? window.CHAR_DECIMAL_SEPARATOR + decimals\r\n : '')\r\n );\r\n }\r\n\r\n /**\r\n * Toma un número en formato Apia y lo devuelve como float en javascript.\r\n */\r\n jsNumber(value: string): number {\r\n // Apia Classic Original Function\r\n let re;\r\n if (window.CHAR_THOUS_SEPARATOR === '.')\r\n re = new RegExp(`\\\\${window.CHAR_THOUS_SEPARATOR}`, 'g');\r\n else\r\n re =\r\n window.CHAR_THOUS_SEPARATOR &&\r\n new RegExp(window.CHAR_THOUS_SEPARATOR, 'g');\r\n let aux = re && value.replace(re, '');\r\n aux =\r\n aux &&\r\n window.CHAR_DECIMAL_SEPARATOR &&\r\n aux.replace(window.CHAR_DECIMAL_SEPARATOR, '.');\r\n\r\n if (typeof aux !== 'string') {\r\n return parseFloat(value);\r\n }\r\n return aux ? parseFloat(aux) : parseFloat(value);\r\n }\r\n\r\n /**\r\n * Hay muchos valores que podrían querer ser interpretados como booleano\r\n *\r\n * Devuelve true si el valor coincide con true|T|t|1 y false si coincide con\r\n * false|F|f|0. Si no coincide con ninguna de éstas hace throw de un error.\r\n */\r\n parseBool(val: string): boolean {\r\n if (/^(?:true|T|t|1)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0)$/i.test(val)) return false;\r\n throw new Error('Property/Value is a boolean, try using true or false');\r\n }\r\n\r\n /**\r\n * Toma una estructura bidimensional y la convierte a csv, usando el método\r\n * String(...) sobre cada celda de datos.\r\n */\r\n toCsv(data: any[][], delimiter = ',') {\r\n return data.map((c) => c.map((d) => String(d)).join(delimiter)).join('\\n');\r\n }\r\n\r\n /**\r\n * Inspecciona las primeras filas de un array de strings, en búsqueda del mejor delimitador\r\n * para convertir esos strings a array de datos, que serán el resultado de haber interpretado\r\n * un documento CSV.\r\n */\r\n #findDelimiter(rows: string[]) {\r\n const maxColsByDelimiter: Record<string, number> = {};\r\n\r\n for (const delimiter of delimiters) {\r\n const headCols = rows[0].split(delimiter).length;\r\n\r\n let allTrue = true;\r\n for (let i = 1; i < Math.min(30, rows.length) && allTrue; i++) {\r\n allTrue = allTrue && headCols === rows[i].split(delimiter).length;\r\n }\r\n\r\n if (allTrue) {\r\n maxColsByDelimiter[delimiter] = headCols;\r\n }\r\n }\r\n\r\n let max = 0;\r\n let bestDelimiter: string | null = null;\r\n\r\n Object.entries(maxColsByDelimiter).forEach(([delimiter, count]) => {\r\n if (count > max) {\r\n max = count;\r\n bestDelimiter = delimiter;\r\n }\r\n });\r\n\r\n if (bestDelimiter !== null) {\r\n return bestDelimiter as string;\r\n }\r\n\r\n throw new Error(\r\n `Cannot determine delimiter, it's none of: ${delimiters.join(', ')}`,\r\n );\r\n }\r\n\r\n #parseCellValue(cellValue: string) {\r\n return cellValue.match(/^\\s*\"?([^\"]+)\"?[\\s\\r\\n]*$/)?.[1] ?? cellValue;\r\n }\r\n\r\n /**\r\n * Convierte un string a array de arrays, parseándolo en formato CSV, encontrando el delimitador en forma automática.\r\n */\r\n fromCsv(data: string): string[][] {\r\n const rows = data.split(/\\r?\\n\\r?/).filter((row) => !row.match(/^\\s*$/));\r\n const delimiter = this.#findDelimiter(rows);\r\n\r\n return rows.map((c) => {\r\n const a = c.split(delimiter);\r\n if (a[0][a[0].length - 1] === '') {\r\n a.pop();\r\n }\r\n return a.map((d) => this.#parseCellValue(d));\r\n });\r\n }\r\n}\r\n","import { TTooltip } from './tooltip';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ApiaUtilTooltip {\r\n id = `tooltip__${maxId++}`;\r\n\r\n constructor(\r\n public props: TTooltip,\r\n public close: () => void,\r\n ) {}\r\n}\r\n","import type { ApiaUtilTooltips } from './ApiaUtilTooltips';\r\nimport { TTooltip } from './tooltip';\r\n\r\nlet y = 0,\r\n x = 0;\r\ndocument?.addEventListener('mousemove', (ev) => {\r\n x = ev.clientX;\r\n y = ev.clientY;\r\n});\r\n\r\nexport class AutomaticTooltip {\r\n #timeout = 500;\r\n #tooltipTimeout = 0;\r\n #unsuscribe: (() => void) | null = null;\r\n\r\n ref = (el: HTMLElement | null) => {\r\n this.#unsuscribe?.();\r\n\r\n const listener = () => {\r\n clearTimeout(this.#tooltipTimeout);\r\n\r\n this.#tooltipTimeout = setTimeout(() => {\r\n if (this.#tooltip?.children)\r\n this.handler.open({\r\n closeOnMouseLeaveTooltip: true,\r\n closeOnEscape: true,\r\n closeOnScrollOut: true,\r\n ...this.#tooltip,\r\n anchorPoint: { left: x + 3, top: y + 3 },\r\n });\r\n }, this.#timeout) as unknown as number;\r\n };\r\n\r\n const reset = () => {\r\n clearTimeout(this.#tooltipTimeout);\r\n };\r\n\r\n if (el) {\r\n el.addEventListener('mousemove', listener);\r\n el.addEventListener('mouseleave', reset);\r\n\r\n this.#unsuscribe = () => {\r\n el.removeEventListener('mousemove', listener);\r\n el.removeEventListener('mouseleave', reset);\r\n };\r\n } else {\r\n this.#unsuscribe?.();\r\n reset();\r\n }\r\n };\r\n\r\n #tooltip: Partial<TTooltip> | null = null;\r\n\r\n constructor(\r\n tooltip: (Partial<TTooltip> & { timeout?: number }) | null = null,\r\n private handler: ApiaUtilTooltips,\r\n ) {\r\n this.#tooltip = tooltip;\r\n if (tooltip?.timeout !== undefined) {\r\n this.#timeout = tooltip?.timeout;\r\n }\r\n }\r\n\r\n update = (tooltip: Partial<TTooltip>) => {\r\n this.#tooltip = tooltip;\r\n };\r\n}\r\n","import { isChild } from '@apia/util';\r\nimport { TAttachToElement, TPosition, TTooltip } from './types';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\n\r\nexport function isAttachToElementAFunction(\r\n attachToElement: TAttachToElement,\r\n): attachToElement is () => HTMLElement {\r\n return (\r\n attachToElement instanceof Function &&\r\n getParamNames(attachToElement).length === 0\r\n );\r\n}\r\n\r\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\r\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\r\n\r\nexport function getParamNames(func: object) {\r\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\r\n const fnStr = func.toString().replace(STRIP_COMMENTS, '');\r\n let result: string[] | RegExpMatchArray | null = fnStr\r\n .slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')'))\r\n .match(ARGUMENT_NAMES);\r\n if (result === null) result = [];\r\n\r\n return result;\r\n}\r\n\r\nfunction determineAnchorPoint({\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n}: Pick<TTooltip, 'attachToElementAnchorPoint'> &\r\n Required<Pick<TTooltip, 'attachToElement'>>) {\r\n let actualAnchorPoint: TPosition = { left: 0, top: 0 };\r\n\r\n const element = isAttachToElementAFunction(attachToElement)\r\n ? attachToElement()\r\n : attachToElement.current;\r\n\r\n if (element) {\r\n const rect = element.getBoundingClientRect();\r\n\r\n const point = attachToElementAnchorPoint ?? 'topRight';\r\n\r\n switch (point) {\r\n case 'bottomLeft':\r\n actualAnchorPoint = {\r\n left: rect.left,\r\n top: rect.bottom,\r\n };\r\n break;\r\n case 'bottomRight':\r\n actualAnchorPoint = {\r\n left: rect.right,\r\n top: rect.bottom,\r\n };\r\n break;\r\n case 'center':\r\n actualAnchorPoint = {\r\n left: (rect.left + rect.right) / 2,\r\n top: (rect.bottom + rect.top) / 2,\r\n };\r\n break;\r\n case 'topLeft':\r\n actualAnchorPoint = {\r\n left: rect.left,\r\n top: rect.top,\r\n };\r\n break;\r\n case 'topRight':\r\n actualAnchorPoint = {\r\n left: rect.right,\r\n top: rect.top,\r\n };\r\n break;\r\n }\r\n } else {\r\n console.warn(\r\n 'Cannot resolve element, will use default positioning ',\r\n attachToElement,\r\n );\r\n }\r\n\r\n return actualAnchorPoint;\r\n}\r\n\r\nlet x = 0;\r\nlet y = 0;\r\ndocument.addEventListener('mousemove', (ev) => {\r\n x = ev.clientX;\r\n y = ev.clientY;\r\n});\r\n\r\nexport function calculateTooltipPosition({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n minSize,\r\n preferredOrientationX,\r\n preferredOrientationY,\r\n preferredSize = { height: 'auto', width: 'auto' },\r\n}: Pick<\r\n TTooltip,\r\n | 'anchorPoint'\r\n | 'attachToElement'\r\n | 'attachToElementAnchorPoint'\r\n | 'attachToMousePosition'\r\n | 'minSize'\r\n | 'preferredOrientationX'\r\n | 'preferredOrientationY'\r\n | 'preferredSize'\r\n>): ThemeUICSSObject {\r\n let actualAnchorPoint = anchorPoint;\r\n\r\n if (attachToMousePosition) {\r\n actualAnchorPoint = {\r\n left: x + 3,\r\n top: y + 3,\r\n };\r\n }\r\n\r\n if (attachToElement) {\r\n actualAnchorPoint = determineAnchorPoint({\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n });\r\n }\r\n\r\n if (actualAnchorPoint) {\r\n const availableBottomSpace = window.innerHeight - actualAnchorPoint.top;\r\n const availableTopSpace = actualAnchorPoint.top;\r\n const availableLeftSpace = actualAnchorPoint.left;\r\n const availableRightSpace = window.innerWidth - actualAnchorPoint.left;\r\n\r\n const isEnoughToRight =\r\n ((preferredSize?.width !== 'auto' ? preferredSize?.width : undefined) ??\r\n minSize?.width ??\r\n 0) <= availableRightSpace;\r\n const isEnoughToLeft =\r\n ((preferredSize?.width !== 'auto' ? preferredSize?.width : undefined) ??\r\n minSize?.width ??\r\n 0) <= availableLeftSpace;\r\n const isEnoughToBottom =\r\n ((preferredSize?.height !== 'auto' ? preferredSize?.height : undefined) ??\r\n minSize?.height ??\r\n 0) <= availableBottomSpace;\r\n const isEnoughToTop =\r\n ((preferredSize?.height !== 'auto' ? preferredSize?.height : undefined) ??\r\n minSize?.height ??\r\n 0) <= availableTopSpace;\r\n\r\n const preferredWidth =\r\n preferredSize.width === 'auto' ? Infinity : preferredSize.width;\r\n const preferredHeight =\r\n preferredSize.height === 'auto' ? Infinity : preferredSize.height;\r\n\r\n const position: ThemeUICSSObject = {\r\n '& > *': {\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'auto',\r\n },\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n width: preferredSize.width === 'auto' ? 'auto' : undefined,\r\n height: preferredSize.height === 'auto' ? 'auto' : undefined,\r\n };\r\n\r\n if (preferredOrientationX === 'left') {\r\n if (isEnoughToLeft) {\r\n position.maxWidth = Math.min(preferredWidth, availableLeftSpace);\r\n position.right = window.innerWidth - actualAnchorPoint.left;\r\n } else if (isEnoughToRight) {\r\n position.maxWidth = Math.min(preferredWidth, availableRightSpace);\r\n position.left = actualAnchorPoint.left;\r\n } else {\r\n position.left = 0;\r\n position.maxWidth = '100vw';\r\n }\r\n } else {\r\n if (isEnoughToRight) {\r\n position.maxWidth = Math.min(preferredWidth, availableRightSpace);\r\n position.left = actualAnchorPoint.left;\r\n } else if (isEnoughToLeft) {\r\n position.maxWidth = Math.min(preferredWidth, availableLeftSpace);\r\n position.right = window.innerWidth - actualAnchorPoint.left;\r\n } else {\r\n position.left = 0;\r\n position.maxWidth = '100vw';\r\n }\r\n }\r\n\r\n if (preferredOrientationY === 'top') {\r\n if (isEnoughToTop) {\r\n position.maxHeight = Math.min(preferredHeight, availableTopSpace);\r\n position.bottom = window.innerHeight - actualAnchorPoint.top;\r\n } else if (isEnoughToBottom) {\r\n position.maxHeight = Math.min(preferredHeight, availableBottomSpace);\r\n position.top = actualAnchorPoint.top;\r\n } else {\r\n position.maxHeight = '100vh';\r\n position.top = 0;\r\n }\r\n } else {\r\n if (isEnoughToBottom) {\r\n position.maxHeight = Math.min(preferredHeight, availableBottomSpace);\r\n position.top = actualAnchorPoint.top;\r\n } else if (isEnoughToTop) {\r\n position.maxHeight = Math.min(preferredHeight, availableTopSpace);\r\n position.bottom = window.innerHeight - actualAnchorPoint.top;\r\n } else {\r\n position.maxHeight = '100vh';\r\n position.top = 0;\r\n }\r\n }\r\n\r\n position.minHeight =\r\n typeof position.maxHeight === 'number'\r\n ? Math.min(position.maxHeight, minSize?.height ?? 0)\r\n : (minSize?.height ?? 0);\r\n position.minWidth =\r\n typeof position.minWidth === 'number'\r\n ? Math.min(position.minWidth, minSize?.width ?? 0)\r\n : (minSize?.width ?? 0);\r\n\r\n return position;\r\n }\r\n\r\n return { left: 0, top: 0, width: 'auto', height: 'auto' };\r\n}\r\n\r\nexport function useHandlers({\r\n attachToElement,\r\n closeOnClick,\r\n closeOnClickOut,\r\n closeOnEscape,\r\n closeOnMouseLeaveTooltip,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnScrollOut,\r\n onClose,\r\n}: Pick<\r\n TTooltip,\r\n | 'attachToElement'\r\n | 'closeOnClick'\r\n | 'closeOnClickOut'\r\n | 'closeOnEscape'\r\n | 'closeOnMouseLeaveTooltip'\r\n | 'closeOnMouseLeaveAttachedElement'\r\n | 'closeOnScrollOut'\r\n | 'onClose'\r\n>) {\r\n const hasInited = useRef(false);\r\n const close = useCallback(() => {\r\n onClose?.();\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n function handleEscape(ev: KeyboardEvent) {\r\n if (ev.code === 'Escape' && closeOnEscape !== false) {\r\n close();\r\n }\r\n }\r\n function handleMouseDownOut(ev: MouseEvent) {\r\n if (!hasInited.current) return;\r\n\r\n const actuallyCloseOnClickOut =\r\n (closeOnClickOut instanceof Function\r\n ? closeOnClickOut(ev)\r\n : closeOnClickOut) === true;\r\n\r\n if (\r\n actuallyCloseOnClickOut &&\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('tooltip__wrapper'),\r\n )\r\n ) {\r\n close();\r\n }\r\n }\r\n function handleScroll(ev: Event) {\r\n if (!hasInited.current) return;\r\n if (\r\n closeOnScrollOut &&\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('tooltip__wrapper'),\r\n )\r\n ) {\r\n close();\r\n }\r\n }\r\n\r\n function handleMouseLeave(event: MouseEvent) {\r\n const actuallyCloseOnMouseLeaveTooltip =\r\n closeOnMouseLeaveTooltip instanceof Function\r\n ? closeOnMouseLeaveTooltip(event)\r\n : closeOnMouseLeaveTooltip;\r\n\r\n const actuallyCloseOnMouseLeaveAttachedElement =\r\n closeOnMouseLeaveAttachedElement instanceof Function\r\n ? closeOnMouseLeaveAttachedElement(event)\r\n : closeOnMouseLeaveAttachedElement;\r\n\r\n if (\r\n !hasInited.current ||\r\n (!actuallyCloseOnMouseLeaveAttachedElement &&\r\n !actuallyCloseOnMouseLeaveTooltip)\r\n )\r\n return;\r\n\r\n const resolvedAttachToElement = attachToElement\r\n ? isAttachToElementAFunction(attachToElement)\r\n ? attachToElement()\r\n : attachToElement.current\r\n : null;\r\n\r\n const isTooltipTheTarget = isChild(\r\n event.target as HTMLElement,\r\n (current) => current.classList.contains('tooltip__wrapper'),\r\n );\r\n const isAttachedTheTarget = isChild(\r\n event.target as HTMLElement,\r\n (current) => current === resolvedAttachToElement,\r\n );\r\n\r\n const isTooltipRelated = isChild(\r\n event.relatedTarget as HTMLElement,\r\n (current) => current.classList.contains('tooltip__wrapper'),\r\n );\r\n\r\n const isAttachedRelated = isChild(\r\n event.relatedTarget as HTMLElement,\r\n (current) => current === resolvedAttachToElement,\r\n );\r\n\r\n if (isTooltipRelated || isAttachedRelated) return;\r\n if (isAttachedTheTarget && !actuallyCloseOnMouseLeaveAttachedElement)\r\n return;\r\n if (isTooltipTheTarget && !actuallyCloseOnMouseLeaveTooltip) return;\r\n\r\n if (isTooltipTheTarget || isAttachedTheTarget) close();\r\n }\r\n\r\n document.addEventListener('keydown', handleEscape);\r\n document.addEventListener('mousedown', handleMouseDownOut);\r\n document.addEventListener('scroll', handleScroll);\r\n document.addEventListener('mouseout', handleMouseLeave);\r\n\r\n setTimeout(() => {\r\n hasInited.current = true;\r\n }, 0);\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n document.removeEventListener('mousedown', handleMouseDownOut);\r\n document.removeEventListener('scroll', handleScroll);\r\n document.removeEventListener('mouseout', handleMouseLeave);\r\n };\r\n }, [\r\n attachToElement,\r\n close,\r\n closeOnClickOut,\r\n closeOnEscape,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnMouseLeaveTooltip,\r\n closeOnScrollOut,\r\n ]);\r\n\r\n return {\r\n handleOnClick: useCallback(\r\n (ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n if (closeOnClick) {\r\n close();\r\n }\r\n },\r\n [close, closeOnClick],\r\n ),\r\n };\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { TTooltip } from './types';\r\nimport { Box, ThemeUICSSObject } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { calculateTooltipPosition, useHandlers } from './util';\r\n\r\nexport const Tooltip = ({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n children,\r\n className,\r\n closeOnClick = false,\r\n closeOnClickOut = true,\r\n closeOnEscape = true,\r\n closeOnMouseLeaveTooltip = true,\r\n closeOnMouseLeaveAttachedElement = true,\r\n closeOnScrollOut = true,\r\n minSize,\r\n onClose,\r\n preferredOrientationX = 'right',\r\n preferredOrientationY = 'bottom',\r\n preferredSize = { height: 'auto', width: 'auto' },\r\n variant = 'layout.common.tooltips.primary',\r\n closeOthers,\r\n initialFocusGetter,\r\n ...dataset\r\n}: TTooltip) => {\r\n const calculatedPosition = calculateTooltipPosition({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n minSize,\r\n preferredOrientationX,\r\n preferredOrientationY,\r\n preferredSize,\r\n });\r\n\r\n const sx = {\r\n position: 'fixed',\r\n ...calculatedPosition,\r\n } as ThemeUICSSObject;\r\n\r\n const { handleOnClick } = useHandlers({\r\n attachToElement,\r\n closeOnEscape,\r\n closeOnClickOut,\r\n closeOnClick,\r\n closeOnMouseLeaveTooltip,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnScrollOut,\r\n onClose,\r\n });\r\n\r\n return (\r\n <Box\r\n {...dataset}\r\n className={`tooltip__wrapper ${className ?? ''}`}\r\n {...getVariant(variant)}\r\n sx={sx}\r\n onClick={handleOnClick}\r\n ref={(el) => {\r\n if (el) {\r\n initialFocusGetter?.(el)?.focus();\r\n }\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { useMemo, useState } from 'react';\r\nimport { EventEmitter, useMount, useUnmount } from '@apia/util';\r\nimport { ApiaUtilTooltip } from './ApiaUtilTooltip';\r\nimport { AutomaticTooltip } from './AutomaticTooltip';\r\nimport { TTooltip, Tooltip } from './tooltip';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\n\r\nexport class ApiaUtilTooltips {\r\n #emitter = new EventEmitter<{\r\n changedList: ApiaUtilTooltip[];\r\n }>();\r\n tooltips: ApiaUtilTooltip[] = [];\r\n\r\n constructor() {\r\n document.addEventListener('keydown', (ev) => {\r\n if (\r\n ev.code === 'Escape' &&\r\n this.tooltips.find((c) => c.props.closeOnEscape !== false)\r\n ) {\r\n ev.stopImmediatePropagation();\r\n ev.preventDefault();\r\n\r\n this.tooltips = this.tooltips.filter(\r\n (current) => current.props.closeOnEscape === false,\r\n );\r\n this.#shoutChangedList();\r\n }\r\n });\r\n }\r\n\r\n #shoutChangedList = () => {\r\n this.#emitter.emit('changedList', [...this.tooltips]);\r\n };\r\n\r\n /**\r\n * Permite crear un tooltip que se abrirá automáticamente al estar parado\r\n * sobre un elemento durante 300ms\r\n */\r\n useHover = (tooltip?: Partial<TTooltip> & { timeout?: number }) => {\r\n let tt: AutomaticTooltip | undefined = undefined;\r\n\r\n tt = useMemo(() => {\r\n tt?.ref(null);\r\n return new AutomaticTooltip(tooltip ?? null, this);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [tooltip]);\r\n\r\n useUnmount(() => {\r\n tt?.ref(null);\r\n });\r\n\r\n return tt;\r\n };\r\n\r\n close = (id: string) => {\r\n this.tooltips = this.tooltips.filter((current) => current.id !== id);\r\n this.#shoutChangedList();\r\n };\r\n\r\n closeAll = () => {\r\n this.tooltips = [];\r\n this.#shoutChangedList();\r\n };\r\n\r\n open = (tooltip: TTooltip) => {\r\n const controller = new ApiaUtilTooltip(tooltip, () => {\r\n this.close(controller.id);\r\n controller.props.onClose?.();\r\n });\r\n\r\n if (tooltip.closeOthers !== false) {\r\n this.tooltips = [controller];\r\n } else {\r\n this.tooltips = [...this.tooltips, controller];\r\n }\r\n this.#shoutChangedList();\r\n\r\n return controller;\r\n };\r\n\r\n Component = () => {\r\n const [tooltips, setTooltips] = useState<ApiaUtilTooltip[]>(this.tooltips);\r\n\r\n useMount(() => {\r\n const unsuscribeToList = this.#emitter.on('changedList', (ev) => {\r\n setTooltips(ev);\r\n });\r\n\r\n return () => {\r\n unsuscribeToList();\r\n };\r\n });\r\n\r\n return (\r\n <FreeFocusInside\r\n {...({ sx: { position: 'relative', zIndex: 'tooltip' } } as any)}\r\n >\r\n {tooltips.map((current) => (\r\n <Tooltip\r\n {...current.props}\r\n onClose={() => {\r\n current.close();\r\n }}\r\n key={current.id}\r\n />\r\n ))}\r\n </FreeFocusInside>\r\n );\r\n };\r\n}\r\n","import { Icon, TIconName } from '@apia/icons';\r\nimport { Box } from '@apia/theme';\r\nimport { EventEmitter, useMount } from '@apia/util';\r\nimport {\r\n ControlledMenu,\r\n MenuItem,\r\n MenuItemProps,\r\n ControlledMenuProps,\r\n MenuDivider,\r\n SubMenu,\r\n} from '@szhsin/react-menu';\r\nimport { ReactNode, useCallback, useState } from 'react';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\n\r\nexport type TSubmenu = { label: string; items: TMenuItems };\r\n\r\nexport type TMenuItem =\r\n | (MenuItemProps & { icon?: TIconName; key: string })\r\n | 'separator'\r\n | TSubmenu;\r\n\r\nexport type TMenuItems = TMenuItem[];\r\n\r\nfunction isSubmenu(item: TMenuItem): item is TSubmenu {\r\n return Array.isArray((item as TSubmenu).items);\r\n}\r\n\r\nexport class ApiaUtilMenu {\r\n #emitter = new EventEmitter<{ toggle: boolean }>();\r\n #items: TMenuItems = [];\r\n menuProps: ControlledMenuProps | null = null;\r\n\r\n #hooks = {\r\n useIsOpen: (): [boolean, () => void] => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useMount(() => {\r\n return this.#emitter.on('toggle', setIsOpen);\r\n });\r\n\r\n return [\r\n isOpen,\r\n useCallback(() => {\r\n setIsOpen(false);\r\n }, []),\r\n ];\r\n },\r\n };\r\n\r\n close = () => {\r\n this.#emitter.emit('toggle', false);\r\n };\r\n\r\n open = ({\r\n menuProps,\r\n items,\r\n }: {\r\n menuProps: ControlledMenuProps;\r\n items: TMenuItems;\r\n }) => {\r\n this.#items = items;\r\n this.menuProps = menuProps;\r\n\r\n this.#emitter.emit('toggle', true);\r\n };\r\n\r\n #maxId = 0;\r\n\r\n #RenderMenu = (submenu: TSubmenu) => {\r\n const hasIcon = submenu.items.find(\r\n (c) => !!(c as { icon?: TIconName }).icon,\r\n );\r\n\r\n return (\r\n <>\r\n {submenu.items.map((current, i) => {\r\n if (current === 'separator')\r\n return <MenuDivider key={`separator${i}`} />;\r\n\r\n if (isSubmenu(current)) {\r\n return (\r\n <SubMenu\r\n label={current.label}\r\n className={hasIcon ? 'with-icon' : ''}\r\n key={`submenu${this.#maxId++}`}\r\n >\r\n {this.#RenderMenu(current)}\r\n </SubMenu>\r\n );\r\n }\r\n\r\n const children = hasIcon ? (\r\n <Box className=\"menu_item\">\r\n <Box className=\"icon_box\">\r\n {current.icon && (\r\n <Icon\r\n className=\"icon\"\r\n name={current.icon}\r\n title={current.title!}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"children_box\">\r\n {current.children as ReactNode}\r\n </Box>\r\n </Box>\r\n ) : (\r\n (current.children as ReactNode)\r\n );\r\n\r\n return (\r\n <MenuItem {...current} key={current.key}>\r\n {children}\r\n </MenuItem>\r\n );\r\n })}\r\n </>\r\n );\r\n };\r\n\r\n Component = () => {\r\n const [isOpen, close] = this.#hooks.useIsOpen();\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <FreeFocusInside>\r\n <ControlledMenu\r\n {...this.menuProps}\r\n state={isOpen ? 'open' : 'closed'}\r\n onClose={(ev) => {\r\n close();\r\n this.menuProps?.onClose?.(ev);\r\n }}\r\n >\r\n {this.#RenderMenu({ label: '', items: this.#items })}\r\n </ControlledMenu>\r\n </FreeFocusInside>\r\n );\r\n };\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport class ApiaUtilMouse extends EventEmitter<{\r\n updatePosition: { x: number; y: number };\r\n}> {\r\n x = 0;\r\n y = 0;\r\n\r\n get position() {\r\n return { x: this.x, y: this.y };\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n document.addEventListener('mousemove', (ev) => {\r\n this.x = ev.clientX;\r\n this.y = ev.clientY;\r\n\r\n this.emit('updatePosition', { x: this.x, y: this.y });\r\n });\r\n }\r\n}\r\n","import { ApiaUtilModals } from './modals/ApiaUtilModals';\r\nimport { ApiaUtilNotifications } from './notifications/ApiaUtilNotifications';\r\nimport { ApiaUtilTabsController } from './tabs/ApiaUtilTabsController';\r\nimport { ApiaUtilDialogs } from './dialogs/ApiaUtilDialogs';\r\nimport { ApiaUtilParsers } from './parsers/ApiaUtilParsers';\r\nimport { ApiaUtilTooltips } from './tooltips/ApiaUtilTooltips';\r\nimport { ApiaUtilMenu } from './menu/ApiaUtilMenu';\r\nimport { ApiaUtilMouse } from './mouse/ApiaUtilMouse';\r\n\r\nexport class ApiaUtil {\r\n static #instance: ApiaUtil;\r\n public static get instance() {\r\n if (!this.#instance) {\r\n this.#instance = new ApiaUtil();\r\n }\r\n\r\n return this.#instance;\r\n }\r\n\r\n private constructor() {\r\n this.dialogs = new ApiaUtilDialogs();\r\n this.menu = new ApiaUtilMenu();\r\n this.modals = new ApiaUtilModals();\r\n this.mouse = new ApiaUtilMouse();\r\n this.notifications = new ApiaUtilNotifications(this);\r\n this.parsers = new ApiaUtilParsers();\r\n this.tabs = new ApiaUtilTabsController();\r\n this.tooltips = new ApiaUtilTooltips();\r\n }\r\n\r\n dialogs: ApiaUtilDialogs;\r\n menu: ApiaUtilMenu;\r\n modals: ApiaUtilModals;\r\n mouse: ApiaUtilMouse;\r\n notifications: ApiaUtilNotifications;\r\n parsers: ApiaUtilParsers;\r\n tabs: ApiaUtilTabsController;\r\n tooltips: ApiaUtilTooltips;\r\n\r\n Component = () => {\r\n return (\r\n <>\r\n <this.dialogs.Component />\r\n <this.modals.Component />\r\n <this.notifications.Component />\r\n <this.tooltips.Component />\r\n <this.menu.Component />\r\n </>\r\n );\r\n };\r\n}\r\n","import { CSSProperties } from '@apia/theme';\r\nimport { StatefulEmitter } from '@apia/util';\r\n\r\ntype LockTypes = 'linear' | 'white' | 'common';\r\ntype Lock = {\r\n count: number;\r\n};\r\ntype LockOptions = Partial<{\r\n type: LockTypes;\r\n}>;\r\n\r\nexport class ScreenLocker {\r\n protected emitter = new StatefulEmitter<{\r\n locks: Record<LockTypes, Lock>;\r\n release: true;\r\n }>({\r\n locks: {\r\n common: { count: 0 },\r\n linear: { count: 0 },\r\n white: { count: 1 },\r\n },\r\n });\r\n\r\n lock = (options?: LockOptions) => {\r\n this.emitter.setState('locks', (s) => {\r\n const key = options?.type ?? 'common';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) + 1 },\r\n };\r\n });\r\n\r\n return () =>\r\n this.emitter.setState('locks', (s) => {\r\n const key = options?.type ?? 'common';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) - 1 },\r\n };\r\n });\r\n };\r\n\r\n protected hasReleased = false;\r\n /**\r\n * This method will work once, then, the action will be ignored. The ScreenLocker starts always locked on white, when this method is called, all listeners of onRelease will be called and the lock will be released.\r\n */\r\n release = () => {\r\n if (this.hasReleased) return;\r\n this.hasReleased = true;\r\n\r\n this.emitter.setState('locks', (s) => {\r\n const key = 'white';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) - 1 },\r\n };\r\n });\r\n this.emitter.emit('release', true);\r\n };\r\n\r\n /**\r\n * This method notifies when the screenLock is released by the first time.\r\n */\r\n onRelease = this.emitter.on.bind(this.emitter, 'release');\r\n\r\n /**\r\n * This component is the responsible for putting the lock courtain in the browser when it's required. It must be used once per application.\r\n */\r\n Component = () => {\r\n const locks = this.emitter.useState('locks');\r\n\r\n const style: CSSProperties = {\r\n alignItems: 'center',\r\n display: 'flex',\r\n inset: 0,\r\n justifyContent: 'center',\r\n position: 'fixed',\r\n };\r\n\r\n if (locks.white.count) {\r\n return (\r\n <div\r\n style={{\r\n ...style,\r\n background: 'white',\r\n }}\r\n >\r\n White\r\n </div>\r\n );\r\n }\r\n\r\n if (locks.linear.count) {\r\n return <div style={style}>Linear</div>;\r\n }\r\n\r\n if (locks.common.count) {\r\n return <div style={style}>Common</div>;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { AutocompleteController } from './store/AutocompleteController';\r\n\r\nexport const AutocompleteContext = createContext<AutocompleteController | null>(\r\n null,\r\n);\r\n\r\nexport function useAutocompleteContext() {\r\n const context = useContext(AutocompleteContext);\r\n\r\n if (!context) throw new Error('There is no AutocompleteContext');\r\n\r\n return context;\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { Box } from '@apia/theme';\r\nimport { Fragment } from '@apia/theme/jsx-runtime';\r\n\r\nexport const OptionsBox = observer(() => {\r\n const handler = useAutocompleteContext();\r\n\r\n return (\r\n <Fragment>\r\n {handler.state.options.map((c, i) => {\r\n if (c.filtered) {\r\n return <Fragment key={c.value} />;\r\n } else {\r\n return (\r\n <Box\r\n className={`autocomplete__option ${handler.focusedIndex === i ? 'focused' : ''} ${handler.state.readOnly ? 'readOnly' : ''}`}\r\n key={c.value}\r\n onMouseDown={(ev) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n\r\n handler.setValue(c.value);\r\n handler.close();\r\n\r\n window.requestAnimationFrame(() => {\r\n handler\r\n .getAutocompleteBox()\r\n ?.querySelector<HTMLElement>('input')\r\n ?.focus();\r\n });\r\n }}\r\n data-value={c.value}\r\n >\r\n {c.label} \r\n </Box>\r\n );\r\n }\r\n })}\r\n </Fragment>\r\n );\r\n});\r\n","import { uniqueId } from 'lodash-es';\r\nimport { makeAutoObservable, reaction } from 'mobx';\r\nimport { ReactNode } from 'react';\r\nimport { ApiaUtil, ApiaUtilTooltip } from '../../../../objects';\r\nimport { AutocompleteContext } from '../Context';\r\nimport { OptionsBox } from '../OptionsBox';\r\nimport { TIconName } from '@apia/icons';\r\n\r\nexport type AutocompleteProps = {\r\n /**\r\n * Si este flag es true, la búsqueda se realiza con .toLowerCase() en el valor y en la cadena de búsqueda.\r\n */\r\n caseInsensitive?: boolean;\r\n icon?: TIconName;\r\n onChange?: (\r\n value: string,\r\n controller: AutocompleteController,\r\n ) => void | Promise<boolean>;\r\n /**\r\n * Si se pasa una función de búsqueda, cuando el usuario busque se llamará a esta función para determinar qué opciones deberán mostrarse.\r\n *\r\n * La función de búsqueda será llamada mediante un debounce con tiempo = state.searchDebounce (ms).\r\n *\r\n * Si no se pasa función de búsqueda, la comparación se realizará contra this.state.options, siguiendo el algoritmo descrito en AutocompleteOption.\r\n */\r\n onSearch?: (\r\n str: string,\r\n controller: AutocompleteController,\r\n ) => Promise<AutocompleteOption[]>;\r\n options: AutocompleteOption[];\r\n /**\r\n * Por defecto es 100ms.\r\n */\r\n searchDebounce?: number;\r\n readOnly?: boolean;\r\n} & AutocompleteBoxProps &\r\n Partial<Pick<AutocompleteState, 'disabled' | 'value'>>;\r\n\r\ntype AutocompleteBoxProps = Partial<{\r\n className: string;\r\n id: string;\r\n name: string;\r\n}>;\r\n\r\ntype AutocompleteState = {\r\n disabled: boolean;\r\n readOnly: boolean;\r\n focusedValue?: null | string;\r\n loading: boolean;\r\n showValue: string;\r\n value: string;\r\n width: number;\r\n};\r\n\r\n/**\r\n * El componente buscará dentro de las opciones disponibles cuando el usuario realice una búsqueda en el cuadro de texto. Para ello, compara cada opción contra str según:\r\n *\r\n * Si caseInsensitive===true, la comparación se hará en lowerCase.\r\n *\r\n * Si se pasa searchLabel, se compara contra searchLabel.\r\n * Sino, si label?.toString() está definido, se utiliza label?.toSring().\r\n * Sino, se utiliza value.\r\n *\r\n * Un se mostrará en los resultados si el algoritmo determina que (result_search_label).indexOf(str) !== -1.\r\n */\r\nexport type AutocompleteOption = {\r\n /**\r\n * @private\r\n *\r\n * Se utiliza para determinar si debe mostrarse o no.\r\n */\r\n filtered?: boolean;\r\n label: ReactNode;\r\n /**\r\n * Si se pasa searchLabel, será utilizado en vez de label. Si no se pasa, se hará label.toString() para realizar la búsqueda, que solamente tiene sentido cuando label es un primitivo.\r\n */\r\n searchLabel?: string;\r\n /**\r\n * @default Por defecto toma el valor ''\r\n */\r\n value: string;\r\n};\r\n\r\nexport class AutocompleteController {\r\n state: AutocompleteState & AutocompleteProps = {\r\n disabled: false,\r\n readOnly: false,\r\n id: uniqueId('autocomplete'),\r\n loading: false,\r\n options: [],\r\n searchDebounce: 100,\r\n showValue: '',\r\n value: '',\r\n width: 55,\r\n };\r\n\r\n constructor(properties: Partial<AutocompleteProps>) {\r\n Object.assign(this.state, properties);\r\n if (properties.value) {\r\n this.state.showValue = String(\r\n properties.options?.find((c) => c.value === properties.value)?.label,\r\n );\r\n this.state.focusedValue = properties.value;\r\n }\r\n\r\n makeAutoObservable(this, {\r\n getAutocompleteBox: false,\r\n getOptionByValue: false,\r\n });\r\n\r\n reaction(\r\n () => this.state.focusedValue,\r\n () => {\r\n if (this.state.focusedValue) {\r\n this.getOptionElement(this.state.focusedValue)?.scrollIntoView({\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n }\r\n },\r\n );\r\n }\r\n\r\n get focusedIndex() {\r\n const currentIndex = this.state.options.findIndex(\r\n (c) => c.value === this.state.focusedValue,\r\n );\r\n\r\n if (currentIndex === -1) {\r\n return 0;\r\n }\r\n\r\n return currentIndex;\r\n }\r\n\r\n get isOpen() {\r\n return !!this.getOptionsBox();\r\n }\r\n\r\n close(selectValue = true) {\r\n this.tooltipRef?.close();\r\n this.tooltipRef = null;\r\n if (!this.state.showValue) this.#actualSearch('');\r\n\r\n if (selectValue) {\r\n let currentValue = this.state.options.find(\r\n (c) => c.value === this.state.focusedValue,\r\n );\r\n if (!currentValue) {\r\n currentValue = this.state.options.find((c) => !c.filtered);\r\n }\r\n\r\n this.setValue(currentValue?.value || '');\r\n }\r\n }\r\n\r\n getAutocompleteBox() {\r\n return document.querySelector<HTMLElement>(\r\n `[data-autocomplete-box=\"${this.state.id!}\"]`,\r\n );\r\n }\r\n\r\n getOptionsBox() {\r\n return document.querySelector<HTMLElement>(\r\n `[data-autocomplete-options=\"${this.state.id!}\"]`,\r\n );\r\n }\r\n\r\n getOptionElement(value: string) {\r\n return this.getOptionsBox()?.querySelector<HTMLElement>(\r\n `.autocomplete__option[data-value=\"${value}\"]`,\r\n );\r\n }\r\n\r\n getOptionByValue(value: string) {\r\n return this.state.options.find((current) => current.value === value);\r\n }\r\n\r\n focusFirst() {\r\n const option = this.state.options.find((c) => !c.filtered);\r\n\r\n if (option) {\r\n if (this.isOpen) {\r\n this.state.focusedValue = option.value;\r\n this.state.showValue = option.label?.toString?.() || '';\r\n } else {\r\n this.setValue(option.value);\r\n }\r\n }\r\n }\r\n\r\n focusLast() {\r\n const option = this.state.options.findLast((c) => !c.filtered);\r\n\r\n if (option) {\r\n if (this.isOpen) {\r\n this.state.focusedValue = option.value;\r\n this.state.showValue = option.label?.toString?.() || '';\r\n } else {\r\n this.setValue(option.value);\r\n }\r\n }\r\n }\r\n\r\n focusNext(n = 1) {\r\n const option = this.state.options[this.focusedIndex];\r\n if (option) {\r\n let newFocusedOption: AutocompleteOption = option;\r\n\r\n for (let i = this.focusedIndex + 1; i < this.state.options.length; i++) {\r\n if (\r\n !this.state.options[i].filtered &&\r\n (--n === 0 || i === this.state.options.length - 1)\r\n ) {\r\n newFocusedOption = this.state.options[i];\r\n break;\r\n }\r\n }\r\n\r\n if (this.isOpen) {\r\n this.state.focusedValue = newFocusedOption.value;\r\n this.state.showValue = newFocusedOption.label?.toString?.() || '';\r\n } else {\r\n this.setValue(newFocusedOption.value);\r\n }\r\n }\r\n }\r\n\r\n focusPrevious(n = 1) {\r\n const option = this.state.options[this.focusedIndex];\r\n if (option) {\r\n let newFocusedOption: AutocompleteOption = option;\r\n\r\n for (let i = this.focusedIndex - 1; i >= 0; i--) {\r\n if (!this.state.options[i].filtered && (--n === 0 || i === 0)) {\r\n newFocusedOption = this.state.options[i];\r\n break;\r\n }\r\n }\r\n\r\n if (this.isOpen) {\r\n this.state.focusedValue = newFocusedOption.value;\r\n this.state.showValue = newFocusedOption.label?.toString?.() || '';\r\n } else {\r\n this.setValue(newFocusedOption.value);\r\n }\r\n }\r\n }\r\n\r\n open() {\r\n if (this.state.disabled) {\r\n return;\r\n }\r\n\r\n this.tooltipRef = ApiaUtil.instance.tooltips.open({\r\n attachToElement: () => {\r\n return this.getAutocompleteBox()!;\r\n },\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnClick: true,\r\n children: (\r\n <AutocompleteContext.Provider value={this}>\r\n <OptionsBox />\r\n </AutocompleteContext.Provider>\r\n ),\r\n onClose: () => {\r\n this.tooltipRef = null;\r\n this.close();\r\n },\r\n minSize: {\r\n height: Math.min(4, this.state.options.length) * 28,\r\n width: this.state.width,\r\n },\r\n preferredOrientationY: 'bottom',\r\n preferredOrientationX: 'right',\r\n attachToElementAnchorPoint: 'bottomLeft',\r\n variant: 'layout.common.components.autocomplete.optionsContainer',\r\n className: 'autocomplete__options__box',\r\n 'data-autocomplete-options': this.state.id!,\r\n });\r\n }\r\n\r\n toggleOpen() {\r\n if (this.isOpen) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n #actualSearch = async (str: string) => {\r\n if (this.state.onSearch) {\r\n if (str === '') this.state.value = '';\r\n const newOptions = await this.state.onSearch(str, this);\r\n this.state.options = newOptions;\r\n } else {\r\n this.state.options.forEach((c) => {\r\n if (this.state.caseInsensitive) {\r\n c.filtered =\r\n (c.searchLabel ?? c.label?.toString?.() ?? c.value)\r\n .toLowerCase()\r\n .indexOf(str.toLowerCase()) === -1;\r\n } else {\r\n c.filtered =\r\n (c.searchLabel ?? c.label?.toString?.() ?? c.value)?.indexOf(\r\n str,\r\n ) === -1;\r\n }\r\n\r\n if (this.getOptionByValue(this.state.focusedValue!)?.filtered) {\r\n this.state.focusedValue =\r\n this.state.options.find((c) => !c.filtered)?.value || null;\r\n }\r\n });\r\n }\r\n };\r\n\r\n #timeout: any = 0;\r\n search(str: string) {\r\n if (this.state.disabled) {\r\n return;\r\n }\r\n\r\n this.state.showValue = str;\r\n\r\n clearTimeout(this.#timeout);\r\n this.#timeout = setTimeout(() => {\r\n this.#actualSearch(str);\r\n }, 100);\r\n }\r\n\r\n selectFocused() {\r\n this.close();\r\n const newValue = this.state.focusedValue || this.state.options[0]?.value;\r\n\r\n if (newValue) {\r\n this.setValue(newValue);\r\n }\r\n }\r\n\r\n async setValue(\r\n value: string,\r\n props?: { fireOnChange?: boolean; force?: true },\r\n ) {\r\n if (\r\n (this.state.disabled ||\r\n this.state.readOnly ||\r\n (value === this.state.value && props?.fireOnChange !== false)) &&\r\n !props?.force\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedOption = this.state.options.find((c) => c.value === value);\r\n const newValue = selectedOption?.value || '';\r\n\r\n if (props?.fireOnChange !== false) {\r\n const onChangeResult = this.state.onChange?.(newValue, this);\r\n if (onChangeResult instanceof Promise) {\r\n if (!(await onChangeResult)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.state.value = newValue;\r\n this.state.focusedValue = this.state.value;\r\n this.state.showValue = selectedOption?.label?.toString?.() || '';\r\n }\r\n\r\n tooltipRef: ApiaUtilTooltip | null = null;\r\n}\r\n","import {\r\n Box,\r\n Input,\r\n InputProps,\r\n Select,\r\n Spinner,\r\n useBreakpointIndex,\r\n} from '@apia/theme';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Icon } from '@apia/icons';\r\nimport { useRef } from 'react';\r\n\r\nexport const SearchBox = observer((props: InputProps) => {\r\n const handler = useAutocompleteContext();\r\n const breakpoint = useBreakpointIndex();\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n return (\r\n <Box className=\"autocomplete__inputWrapper\">\r\n <input\r\n type=\"hidden\"\r\n name={handler.state.name}\r\n value={handler.state.value}\r\n />\r\n {breakpoint <= 3 ? (\r\n <Select\r\n disabled={handler.state.disabled}\r\n onChange={(ev) => {\r\n handler.setValue(ev.target.value);\r\n }}\r\n >\r\n {handler.state.options.map((c) => (\r\n <option key={c.value} value={c.value}>\r\n {c.label}\r\n </option>\r\n ))}\r\n </Select>\r\n ) : (\r\n <>\r\n <Input\r\n {...props}\r\n ref={inputRef}\r\n className={`autocomplete__search ${handler.state.disabled ? 'disabled' : ''} ${handler.state.readOnly ? 'readOnly' : ''}`}\r\n onChange={async (ev) => {\r\n handler.search(ev.target.value);\r\n }}\r\n onClick={() => {\r\n handler.state.width =\r\n inputRef.current?.getBoundingClientRect().width ??\r\n handler.state.width;\r\n\r\n handler.toggleOpen();\r\n }}\r\n onFocus={(ev) => {\r\n ev.target.setSelectionRange(0, ev.target.value.length);\r\n }}\r\n onBlur={() => {\r\n handler.close();\r\n }}\r\n value={handler.state.showValue}\r\n />\r\n <Box className=\"autocomplete__icons\">\r\n {handler.state.loading && (\r\n <Spinner className=\"autocomplete__loadingSpinner\" />\r\n )}\r\n <Icon\r\n title=\"\"\r\n name={handler.state?.icon || 'ArrowDown'}\r\n className=\"autocomplete__downArrow\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n );\r\n});\r\n","import { Box, BoxProps } from '@apia/theme';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const KeyHandler = observer((props: BoxProps) => {\r\n const handler = useAutocompleteContext();\r\n\r\n return (\r\n <Box\r\n {...props}\r\n className={`autocomplete__keyhandler ${props.className ?? ''}`}\r\n onKeyDown={(ev) => {\r\n props.onKeyDown?.(ev);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n if (ev.key.match(/^[a-z ]$/i)) {\r\n if (!handler.isOpen) {\r\n handler.open();\r\n }\r\n }\r\n\r\n switch (ev.code) {\r\n case 'ArrowDown':\r\n ev.preventDefault();\r\n handler.focusNext();\r\n break;\r\n case 'ArrowUp':\r\n ev.preventDefault();\r\n handler.focusPrevious();\r\n break;\r\n case 'Enter':\r\n case 'NumpadEnter':\r\n ev.preventDefault();\r\n\r\n if (handler.isOpen) {\r\n handler.selectFocused();\r\n } else {\r\n handler.open();\r\n }\r\n break;\r\n case 'End':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusLast();\r\n }\r\n break;\r\n case 'Escape':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n handler.close(false);\r\n }\r\n break;\r\n case 'Home':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusFirst();\r\n }\r\n break;\r\n case 'PageDown':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusNext(10);\r\n }\r\n break;\r\n case 'PageUp':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusPrevious(10);\r\n }\r\n break;\r\n }\r\n }\r\n }}\r\n ></Box>\r\n );\r\n});\r\n","import { useState } from 'react';\r\nimport {\r\n AutocompleteController,\r\n AutocompleteProps,\r\n} from './store/AutocompleteController';\r\nimport { shallowEqual, usePrevious } from '@apia/util';\r\nimport { AutocompleteContext } from './Context';\r\nimport { getVariant, InputProps } from '@apia/theme';\r\nimport { SearchBox } from './SearchBox';\r\nimport { KeyHandler } from './Keyhandler';\r\n\r\nexport type AutocompleteCmpProps = {\r\n handler?: AutocompleteController;\r\n getHandler?: (handler: AutocompleteController) => unknown;\r\n properties?: AutocompleteProps;\r\n inputProps?: InputProps;\r\n boxProps?: React.HTMLAttributes<HTMLDivElement>;\r\n};\r\n\r\nexport const Autocomplete = (props: AutocompleteCmpProps) => {\r\n const [handler] = useState<AutocompleteController>(() => {\r\n const newHandler =\r\n props.handler ?? new AutocompleteController(props.properties ?? {});\r\n props.getHandler?.(newHandler);\r\n return newHandler;\r\n });\r\n\r\n const prevProps = usePrevious(props.properties);\r\n if (!shallowEqual(prevProps.current, props.properties) && handler?.state) {\r\n Object.assign(handler!.state, props.properties);\r\n if (\r\n prevProps.current?.value !== props.properties?.value &&\r\n props.properties?.value !== undefined\r\n ) {\r\n handler.setValue(props.properties.value, { fireOnChange: false });\r\n }\r\n }\r\n\r\n if (!handler) {\r\n return null;\r\n }\r\n\r\n return (\r\n <AutocompleteContext.Provider value={handler}>\r\n <KeyHandler\r\n {...props.boxProps}\r\n className={`autocomplete ${props.properties?.className || ''}`}\r\n data-autocomplete-box={handler.state.id}\r\n {...getVariant('layout.common.components.autocomplete')}\r\n >\r\n <SearchBox {...props.inputProps} />\r\n </KeyHandler>\r\n </AutocompleteContext.Provider>\r\n );\r\n};\r\n\r\nexport * from './store/AutocompleteController';\r\n","import { DetailedHTMLProps, TextareaHTMLAttributes } from 'react';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const AutogrowTextarea = observer(\r\n (\r\n props: DetailedHTMLProps<\r\n TextareaHTMLAttributes<HTMLTextAreaElement>,\r\n HTMLTextAreaElement\r\n > & { error?: boolean },\r\n ) => {\r\n const updateHeight = (el: HTMLTextAreaElement) => {\r\n const update = () => {\r\n const bounding = el.getBoundingClientRect();\r\n if (bounding.width > 0) {\r\n clearInterval(interval);\r\n\r\n const copy = el.cloneNode(true) as HTMLTextAreaElement;\r\n copy.style.opacity = '0';\r\n copy.style.position = 'fixed';\r\n copy.style.left = '-9999px';\r\n copy.style.width = `${bounding.width}px`;\r\n copy.style.height = '1px';\r\n\r\n document.body.append(copy);\r\n\r\n el.style.height = `${copy.scrollHeight + 5}px`;\r\n copy.remove();\r\n }\r\n };\r\n\r\n const interval = setInterval(update, 100);\r\n update();\r\n };\r\n\r\n return (\r\n <textarea\r\n {...props}\r\n className={`${props.className ?? ''} autogrow_textarea ${props.error ? 'invalid_field' : ''}`}\r\n onKeyDown={(ev) => {\r\n props?.onKeyDown?.(ev);\r\n if (!ev.isDefaultPrevented() && ev.code === 'Enter' && ev.ctrlKey) {\r\n (ev.target as HTMLElement)\r\n .closest<HTMLFormElement>('form')\r\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\r\n ?.click();\r\n }\r\n }}\r\n ref={(el) => {\r\n if (el instanceof HTMLTextAreaElement) {\r\n updateHeight(el);\r\n }\r\n }}\r\n onChange={(ev) => {\r\n props?.onChange?.(ev);\r\n updateHeight(ev.target as HTMLTextAreaElement);\r\n }}\r\n />\r\n );\r\n },\r\n);\r\n","import { Button, Spinner, Flex, ThemeUIStyleObject } from '@apia/theme';\r\nimport { TApiaButtonType } from '../../types';\r\nimport { getVariant, spacing } from '@apia/theme';\r\n\r\ninterface IBaseButton {\r\n text?: string;\r\n children?: string;\r\n loadingChildren?: string;\r\n id?: string;\r\n name?: string;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n variant?: TApiaButtonType | string;\r\n type?: 'button' | 'submit' | 'reset';\r\n SXProps?: ThemeUIStyleObject;\r\n}\r\n\r\n/**\r\n * The world's most **basic** button\r\n */\r\nexport const BaseButton = ({\r\n id,\r\n name,\r\n onClick = () => {},\r\n isLoading = false,\r\n loadingChildren,\r\n disabled = false,\r\n children = '',\r\n text = '',\r\n variant = 'primary',\r\n type = 'button',\r\n SXProps,\r\n ...buttonProps\r\n}: IBaseButton) => {\r\n return (\r\n <Button\r\n id={id}\r\n name={name}\r\n onClick={onClick}\r\n {...getVariant(variant)}\r\n type={type}\r\n title={children}\r\n disabled={isLoading || disabled}\r\n {...buttonProps}\r\n >\r\n <Flex\r\n as=\"span\"\r\n sx={{\r\n color: 'inherit',\r\n width: '100%',\r\n flexDirection: 'row',\r\n alignContent: 'center',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n gap: spacing(3),\r\n ...SXProps,\r\n }}\r\n >\r\n {isLoading && (\r\n <>\r\n <Spinner size={20} color=\"inherit\" />\r\n {loadingChildren}\r\n </>\r\n )}\r\n {!isLoading && (children || text)}\r\n </Flex>\r\n </Button>\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport {\r\n IconButton as IconButtonThemeUI,\r\n Spinner,\r\n IconButtonProps,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport { icons, TIconName, TIconType } from '@apia/icons';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nexport type TIconSize = number | 'Xs' | 'Sm' | 'Md' | 'Lg' | 'Xl';\r\n\r\nexport type TApiaIconButton =\r\n | 'icon'\r\n | 'icon-primary'\r\n | 'icon-outline'\r\n | 'icon-only';\r\n\r\nexport type TIconButton = Omit<IconButtonProps, 'sx'> &\r\n React.AriaAttributes & {\r\n className?: string;\r\n /**\r\n * Es posible pasar explícitamente un ícono o el nombre del ícono de\r\n * acuerdo a la librería de la aplicación. Ver Icon.tsx\r\n */\r\n icon: TIconType | TIconName;\r\n iconSize?: TIconSize;\r\n id?: string;\r\n disabled?: boolean;\r\n href?: string;\r\n isLoading?: boolean;\r\n isToggled?: boolean;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n onMouseOut?: React.MouseEventHandler<HTMLButtonElement>;\r\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\r\n size?: TIconSize;\r\n title?: string;\r\n variant?: string;\r\n 'data-test-id'?: string;\r\n };\r\n\r\n/**\r\n * Renderiza un botón con un ícono adentro.\r\n *\r\n * La variante por defecto de este componente es buttons.icon\r\n *\r\n * Si se pasa solamente size, el iconSize será\r\n */\r\nexport const IconButton = React.forwardRef(\r\n (\r\n {\r\n className,\r\n disabled = false,\r\n icon,\r\n iconSize: outerIconSize,\r\n id,\r\n isLoading = false,\r\n isToggled = false,\r\n href,\r\n onClick = () => {},\r\n onMouseOver = () => {},\r\n onMouseOut = () => {},\r\n size = 'Sm',\r\n title,\r\n type = 'button',\r\n variant = 'icon',\r\n ...rest\r\n }: TIconButton,\r\n ref: React.Ref<HTMLButtonElement>,\r\n ) => {\r\n const sizes = ['Xs', 'Sm', 'Md', 'Lg', 'Xl'];\r\n const iconSize =\r\n outerIconSize ?? sizes[Math.max(0, sizes.indexOf(size as string) - 1)];\r\n\r\n const sx: ThemeUIStyleObject = React.useMemo(() => {\r\n return {\r\n width: `icon${size}`,\r\n minWidth: `icon${size}`,\r\n height: `icon${size}`,\r\n minHeight: `icon${size}`,\r\n svg: {\r\n width: `icon${iconSize}`,\r\n minWidth: `icon${iconSize}`,\r\n height: `icon${iconSize}`,\r\n minHeight: `icon${iconSize}`,\r\n },\r\n };\r\n }, [iconSize, size]);\r\n\r\n const ActualIcon = React.useMemo(() => {\r\n return typeof icon === 'string' ? icons[icon] : icon;\r\n }, [icon]);\r\n\r\n return (\r\n <IconButtonThemeUI\r\n id={id}\r\n ref={ref}\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent<HTMLButtonElement>) => {\r\n if (href) window.open(href, '_blank');\r\n onClick?.(ev);\r\n },\r\n [href, onClick],\r\n )}\r\n onMouseOver={onMouseOver}\r\n onMouseOut={onMouseOut}\r\n {...getVariant(variant)}\r\n sx={sx}\r\n disabled={isLoading || disabled}\r\n className={`${className ?? ''} iconButton ${\r\n isToggled ? 'isToggled' : ''\r\n }`}\r\n title={title}\r\n aria-label={\r\n rest['aria-label'] ?? (rest.as !== undefined ? undefined : title)\r\n }\r\n type={rest.as !== undefined ? undefined : type}\r\n role={href ? 'link' : undefined}\r\n {...rest}\r\n >\r\n {isLoading ? <Spinner color=\"inherit\" /> : <ActualIcon />}\r\n </IconButtonThemeUI>\r\n );\r\n },\r\n);\r\n\r\nIconButton.displayName = 'IconButton';\r\n","import { getSpecificParent } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\n\r\n/**\r\n * Este hook está pensado para crear un botón utilizando un tag cualquiera.\r\n *\r\n * @example\r\n *\r\n * const buttonProps = useOtherTagButton(React.useMemo(()=>({\r\n * onClick(ev) { console.log(ev.target) },\r\n * onKeyDown(ev) { console.log(ev.code) }\r\n * }),[])\r\n *\r\n * return <div {...buttonProps}>Esto es un botón</div>\r\n */\r\nexport function useOtherTagButton(\r\n props?: Partial<{\r\n className?: string;\r\n onClick: React.MouseEventHandler;\r\n onKeyDown: React.KeyboardEventHandler;\r\n }>,\r\n) {\r\n const specificClass = React.useMemo(() => `otherTag${uniqueId()}`, []);\r\n\r\n const actualOnClick = React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n props?.onClick?.(ev);\r\n },\r\n [props],\r\n );\r\n const actualOnKeyDown = React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n props?.onKeyDown?.(ev);\r\n if (ev.code === 'Enter' || ev.code === 'Space') {\r\n ev.preventDefault();\r\n const button = getSpecificParent(ev.target as HTMLElement, (current) =>\r\n current.classList.contains(specificClass),\r\n );\r\n if (button) button.click();\r\n }\r\n },\r\n [props, specificClass],\r\n );\r\n\r\n return {\r\n className: `${specificClass} ${props?.className ?? ''}`,\r\n onClick: actualOnClick,\r\n onKeyDown: actualOnKeyDown,\r\n role: 'button',\r\n tabIndex: 0,\r\n };\r\n}\r\n","import { Flex, Image, Input } from '@apia/theme';\r\nimport { useState } from 'react';\r\nimport { IconButton } from './buttons';\r\nimport { getVariant } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const Captcha = ({\r\n name,\r\n imageUrl,\r\n onChange,\r\n value,\r\n className,\r\n}: {\r\n name: string;\r\n className?: string;\r\n imageUrl: string;\r\n onChange: React.ChangeEventHandler<HTMLInputElement>;\r\n value: string;\r\n}) => {\r\n const [imgSrc, setImgSrc] = useState<string>(`${imageUrl}?t=${Date.now()}`);\r\n\r\n const handleSyncClick = () => {\r\n // IMG reload\r\n setImgSrc(`${imageUrl}?t=${Date.now()}`);\r\n };\r\n\r\n return (\r\n <Flex\r\n sx={{\r\n flexDirection: 'column',\r\n }}\r\n className=\"captcha__field\"\r\n {...getVariant('layout.common.forms.captcha')}\r\n >\r\n <Flex className=\"captcha__imageContainer\">\r\n <Image alt=\"\" src={imgSrc} />\r\n </Flex>\r\n <Flex className={`captcha__inputContainer ${className ?? ''}`}>\r\n <Input\r\n autoComplete=\"off\"\r\n name={name}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n\r\n <Flex className=\"captcha__buttons\">\r\n <IconButton\r\n icon=\"Refresh\"\r\n type=\"button\"\r\n aria-label={getLabel('lblCaptchaActivateAudio').text}\r\n onClick={handleSyncClick}\r\n ></IconButton>\r\n <IconButton\r\n icon=\"Volume\"\r\n type=\"button\"\r\n aria-label={getLabel('lblCaptchaActivateAudio').text}\r\n onClick={() => {}}\r\n ></IconButton>\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n );\r\n};\r\n","import {\r\n Button,\r\n ButtonProps,\r\n Input,\r\n InputProps,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport { TModify, getSpecificParent, useUpdateEffect } from '@apia/util';\r\nimport {\r\n ChangeEventHandler,\r\n forwardRef,\r\n MouseEventHandler,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Icon, TIconName } from '@apia/icons';\r\n\r\nexport type TCheckbox = TModify<\r\n ButtonProps,\r\n {\r\n background?: string;\r\n checked?: boolean;\r\n color?: string;\r\n defaultChecked?: boolean;\r\n icon?: TIconName;\r\n indeterminate?: boolean;\r\n native?: boolean;\r\n onChange?: ChangeEventHandler<HTMLInputElement>;\r\n readOnly?: boolean;\r\n required?: boolean;\r\n type?: string;\r\n }\r\n>;\r\n\r\nexport const Checkbox = forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n disabled,\r\n icon = 'Check',\r\n indeterminate,\r\n name,\r\n native,\r\n onChange,\r\n readOnly,\r\n required,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [isChecked, setIsChecked] = useState(\r\n props.defaultChecked ?? props.checked ?? false,\r\n );\r\n\r\n const checkbox = useRef<HTMLInputElement>(null);\r\n\r\n useUpdateEffect(\r\n () => setIsChecked(props.checked ?? false),\r\n [props.checked],\r\n );\r\n\r\n const sx = useMemo(\r\n () => ({\r\n bg: props.background ?? undefined,\r\n color: props.color ?? undefined,\r\n '&[aria-checked=\"false\"]': {\r\n bg: props.background ?? undefined,\r\n color: 'transparent',\r\n },\r\n }),\r\n [props.background, props.color],\r\n );\r\n\r\n useEffect(() => {\r\n if (checkbox.current && indeterminate !== undefined)\r\n checkbox.current.indeterminate = indeterminate;\r\n }, [indeterminate]);\r\n\r\n const nativeSx = useMemo(\r\n () => ({ variant: 'forms.checkbox' }) as ThemeUIStyleObject,\r\n [],\r\n );\r\n\r\n return native ? (\r\n <input\r\n type=\"checkbox\"\r\n onClick={props.onClick as unknown as MouseEventHandler}\r\n aria-checked={isChecked}\r\n sx={nativeSx}\r\n ref={checkbox}\r\n disabled={disabled}\r\n name={name}\r\n checked={isChecked}\r\n onChange={(ev) => {\r\n if (props.checked === undefined) setIsChecked(ev.target.checked);\r\n if (onChange) onChange(ev);\r\n }}\r\n required={required}\r\n className={` ${props.className ?? ''} nativeCheckbox `}\r\n {...(props as unknown as InputProps)}\r\n />\r\n ) : (\r\n <>\r\n <Button\r\n {...props}\r\n onClick={(ev) => {\r\n if (readOnly) {\r\n return;\r\n }\r\n if (\r\n getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => (current as HTMLInputElement).type === 'button',\r\n )\r\n ) {\r\n if (props.onClick) props.onClick(ev);\r\n checkbox.current?.click();\r\n }\r\n }}\r\n type=\"button\"\r\n {...getVariant('forms.customCheckbox')}\r\n role=\"checkbox\"\r\n aria-checked={isChecked}\r\n sx={sx}\r\n ref={ref}\r\n disabled={disabled}\r\n >\r\n <Icon title=\"\" name={icon} size=\"32px\" />\r\n </Button>\r\n <Input\r\n type=\"checkbox\"\r\n sx={{ display: 'none' }}\r\n ref={checkbox}\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n }}\r\n name={name}\r\n checked={isChecked}\r\n onChange={(ev) => {\r\n if (props.checked === undefined) setIsChecked(ev.target.checked);\r\n if (onChange) onChange(ev);\r\n }}\r\n required={required}\r\n disabled={disabled}\r\n />\r\n </>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { getVariant, Box, InputProps } from '@apia/theme';\r\nimport { isChild, useCombinedRefs } from '@apia/util';\r\nimport React from 'react';\r\nimport { TIconName, TIconType } from '@apia/icons';\r\nimport { IconButton } from './buttons';\r\nimport ReactInputMask from 'react-input-mask';\r\n\r\nexport interface IField {\r\n className?: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n readOnly?: boolean;\r\n}\r\n\r\nexport interface IIconInput extends IField {\r\n additionalButtons?: React.ReactNode;\r\n additionalButtonsPosition?: 'before' | 'after';\r\n buttonProps?: Partial<React.ComponentProps<typeof IconButton>>;\r\n buttonRef?: React.RefObject<HTMLButtonElement>;\r\n hideButton?: boolean;\r\n icon?: TIconType | TIconName;\r\n inputProps?: Partial<InputProps>;\r\n inputRef?: React.RefObject<HTMLInputElement>;\r\n mask?: string;\r\n onClick?: (ev: React.MouseEvent) => void;\r\n onBlur?: React.FocusEventHandler;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport const IconInput = ({\r\n additionalButtons,\r\n additionalButtonsPosition = 'before',\r\n buttonProps,\r\n buttonRef,\r\n className,\r\n disabled,\r\n hideButton,\r\n icon = 'Search',\r\n inputProps,\r\n inputRef,\r\n isLoading,\r\n mask,\r\n onClick,\r\n onBlur,\r\n readOnly,\r\n ...rest\r\n}: IIconInput) => {\r\n const { sx: inputSx, ...actualInputProps } = inputProps ?? {};\r\n const innerButtonRef = React.useRef<HTMLButtonElement>(null);\r\n const assignButtonRef = useCombinedRefs(buttonRef, innerButtonRef);\r\n\r\n const parentRef = React.useRef<HTMLElement | null>(null);\r\n const handleBlur = React.useCallback(\r\n (ev: React.FocusEvent) => {\r\n if (\r\n onBlur &&\r\n (!ev.relatedTarget ||\r\n (ev.relatedTarget &&\r\n !isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === parentRef.current,\r\n )))\r\n ) {\r\n Object.assign(ev.target, {\r\n value: ev.target\r\n .closest<HTMLElement>('.iconInput')!\r\n .querySelector<HTMLInputElement>('input')!.value,\r\n });\r\n onBlur(ev);\r\n }\r\n },\r\n [onBlur],\r\n );\r\n\r\n return (\r\n <Box\r\n {...getVariant('forms.iconInput')}\r\n ref={parentRef}\r\n onBlur={handleBlur}\r\n className={`${className ?? ''} iconInput`}\r\n >\r\n <ReactInputMask\r\n mask={mask ?? ''}\r\n disabled={isLoading || disabled}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ref={inputRef as any}\r\n readOnly={readOnly}\r\n sx={{ variant: 'forms.input', ...inputSx }}\r\n data-variant=\"forms.input\"\r\n {...rest}\r\n {...actualInputProps}\r\n maxLength={mask ? undefined : inputProps?.maxLength}\r\n />\r\n {additionalButtonsPosition === 'before' && additionalButtons}\r\n {!hideButton && (\r\n <IconButton\r\n onClick={onClick}\r\n icon={icon}\r\n disabled={disabled}\r\n isLoading={isLoading}\r\n ref={assignButtonRef as React.Ref<HTMLButtonElement>}\r\n {...buttonProps}\r\n />\r\n )}\r\n {additionalButtonsPosition === 'after' && additionalButtons}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport React from 'react';\r\nimport Calendar from 'react-calendar';\r\n\r\nexport interface ICalModal {\r\n handleClickDay: (date: Date) => void;\r\n calValue?: Date;\r\n locale: string;\r\n}\r\n\r\nconst CalModal = React.forwardRef<HTMLDivElement, ICalModal>(\r\n ({ handleClickDay, calValue, locale }) => {\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.datePicker')}\r\n className=\"datePicker\"\r\n >\r\n <Calendar\r\n onClickDay={handleClickDay}\r\n locale={locale}\r\n value={calValue || new Date()}\r\n nextLabel=\"›\"\r\n next2Label=\"»\"\r\n prevLabel=\"‹\"\r\n prev2Label=\"«\"\r\n />\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nexport default CalModal;\r\n","import {\r\n ChangeEvent,\r\n MouseEvent,\r\n FocusEvent,\r\n MutableRefObject,\r\n useMemo,\r\n} from 'react';\r\nimport { FaCalendarAlt } from '@meronex/icons/fa';\r\nimport { getDateFormat, getLabel, TDateFormat, uniqueId } from '@apia/util';\r\nimport { IconInput } from './IconInput';\r\nimport { Box, Close, getVariant } from '@apia/theme';\r\nimport { makeAutoObservable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ApiaUtil } from '../../objects';\r\nimport CalModal from './CalModal';\r\nimport dayjs from 'dayjs';\r\n\r\nconst DEFAULT_LOCALE = window.LANG_CODE;\r\nconst DEFAULT_MASK_PLACEHOLDER = '_';\r\n\r\nconst dateFormat: TDateFormat = getDateFormat();\r\n\r\nconst getMaskForDateFormat = (): string => {\r\n if (dateFormat === 'YYYY/MM/DD') return '9999/99/99';\r\n return '99/99/9999';\r\n};\r\n\r\nexport type TDateProps = {\r\n className?: string;\r\n disabled?: boolean;\r\n id?: string;\r\n readonly?: boolean;\r\n\r\n // Specific props\r\n onBlur?: (date: string | null, ev?: FocusEvent<HTMLElement>) => unknown;\r\n /**\r\n * If a Promise<false> is returned, the value change is not accepted\r\n * and a msgInvalidDate error message is emitted.\r\n */\r\n onChange?: (date: string | null) => void | Promise<string | null>;\r\n onError?: (error: string) => unknown;\r\n value?: string;\r\n\r\n inputRef?: MutableRefObject<any>;\r\n props?: React.HTMLAttributes<HTMLInputElement>;\r\n};\r\n\r\nclass DateInputController {\r\n props: Pick<TDateProps, 'onBlur' | 'onChange' | 'onError' | 'id'> = {};\r\n state: Pick<TDateProps, 'disabled' | 'readonly' | 'value'> = {};\r\n _ref: HTMLElement | null = null;\r\n\r\n error = false;\r\n inputValue = '';\r\n value: Date | null = null;\r\n\r\n constructor(actualId?: string) {\r\n this.props.id = uniqueId(actualId ?? 'date-input');\r\n\r\n makeAutoObservable(this);\r\n }\r\n\r\n clear() {\r\n this.setValueFromString('');\r\n this.focus();\r\n }\r\n\r\n focus() {\r\n const input = this._ref?.querySelector<HTMLInputElement>('input');\r\n if (input) {\r\n input.focus();\r\n setTimeout(() => {\r\n window.requestAnimationFrame(() => {\r\n input.setSelectionRange(0, input.value.length);\r\n });\r\n }, 0);\r\n }\r\n }\r\n\r\n ref(el: HTMLElement | null) {\r\n this._ref = el;\r\n }\r\n\r\n get calendarElementId() {\r\n return `DateModal${this.props.id}`;\r\n }\r\n\r\n private isInsidePicker(el?: HTMLElement) {\r\n return !!el?.closest(\r\n `#${CSS.escape(this.props.id ?? '')}, #${CSS.escape(this.calendarElementId)}`,\r\n );\r\n }\r\n\r\n onBlur(ev: FocusEvent<HTMLElement, Element>) {\r\n if (!this.isInsidePicker(ev.relatedTarget as HTMLElement)) {\r\n if (this.error) {\r\n this.inputValue = '';\r\n this.value = null;\r\n this.error = false;\r\n }\r\n\r\n this.props.onBlur?.(this.inputValue, ev);\r\n }\r\n }\r\n\r\n onInputChange(ev: ChangeEvent<HTMLInputElement>) {\r\n this.setValueFromString(ev.target.value);\r\n }\r\n\r\n private onCalendarSelect(value: Date) {\r\n this.setValue(value);\r\n }\r\n\r\n openCalendar(ev: MouseEvent<any, any>) {\r\n const tooltip = ApiaUtil.instance.tooltips.open({\r\n attachToElement() {\r\n return (ev.target as HTMLElement).closest<HTMLElement>('button')!;\r\n },\r\n attachToElementAnchorPoint: 'center',\r\n closeOnClick: false,\r\n closeOnClickOut: true,\r\n closeOnEscape: true,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnScrollOut: true,\r\n children: (\r\n <div id={this.calendarElementId}>\r\n <CalModal\r\n calValue={this.value || new Date()}\r\n locale={DEFAULT_LOCALE}\r\n handleClickDay={(date) => {\r\n tooltip.close();\r\n this.onCalendarSelect(date);\r\n this.focus();\r\n }}\r\n />\r\n </div>\r\n ),\r\n initialFocusGetter(el) {\r\n return el.querySelector(`.react-calendar__tile--active`);\r\n },\r\n minSize: { width: 350, height: 310 },\r\n onClose: () => {\r\n window.requestAnimationFrame(() => {\r\n if (!this.isInsidePicker(document.activeElement as HTMLElement)) {\r\n this.props.onBlur?.(this.inputValue);\r\n }\r\n });\r\n },\r\n });\r\n }\r\n\r\n setValueFromString(str: string, fire = true) {\r\n if (str === '' || str.replaceAll('_', '9') === getMaskForDateFormat()) {\r\n this.inputValue = '';\r\n this.setValue(null, fire);\r\n } else if (str !== this.inputValue) {\r\n const hasPlaceHolder = str.match(/_/);\r\n if (!hasPlaceHolder) {\r\n const value = dayjs(str, dateFormat);\r\n const formattedDate = value.format(dateFormat);\r\n if (value.isValid() && formattedDate === str) {\r\n this.setValue(value.toDate(), fire);\r\n /**\r\n * TWO Situations where inputValue must be directly assigned!\r\n */\r\n } else {\r\n this.inputValue = str;\r\n this.props.onError?.(getLabel('msgInvalidDate').text);\r\n this.error = true;\r\n }\r\n } else {\r\n this.inputValue = str;\r\n }\r\n }\r\n }\r\n\r\n async setValue(date: Date | null, fire = true) {\r\n this.error = false;\r\n\r\n if (date !== this.value) {\r\n const dateValue = dayjs(date);\r\n const newValue = dateValue.isValid() ? dateValue.format(dateFormat) : '';\r\n const res = fire ? await this.props.onChange?.(newValue) : null;\r\n\r\n this.inputValue = newValue || '';\r\n if (typeof res !== 'string') {\r\n this.value = date;\r\n } else {\r\n this.error = true;\r\n this.value = null;\r\n this.props.onError?.(res);\r\n }\r\n }\r\n }\r\n\r\n previousValue: string | null = '';\r\n render(props: TDateProps) {\r\n const { onBlur, onChange, onError, id } = props;\r\n Object.assign(this.props, {\r\n onBlur,\r\n onChange,\r\n onError,\r\n id: id ?? this.props.id,\r\n });\r\n\r\n const { value, disabled, readonly } = props;\r\n Object.assign(this.state, { readonly, value, disabled });\r\n\r\n if (value !== undefined && this.previousValue !== value) {\r\n this.previousValue = value;\r\n this.setValueFromString(value, false);\r\n }\r\n }\r\n}\r\n\r\nexport const DateInput = observer(\r\n ({\r\n className,\r\n disabled,\r\n id: outerId,\r\n inputRef,\r\n onBlur,\r\n onChange,\r\n onError,\r\n readonly,\r\n value: outerValue,\r\n props,\r\n }: TDateProps) => {\r\n const controller = useMemo(\r\n () => new DateInputController(outerId),\r\n [outerId],\r\n );\r\n controller.render({\r\n className,\r\n disabled,\r\n id: outerId,\r\n inputRef,\r\n onBlur,\r\n onChange,\r\n onError,\r\n readonly,\r\n value: outerValue,\r\n props,\r\n });\r\n\r\n return (\r\n <Box\r\n {...getVariant('forms.dateInput')}\r\n className={`${className ?? ''} dateInput`}\r\n id={controller.props.id}\r\n onBlur={controller.onBlur.bind(controller)}\r\n ref={controller.ref.bind(controller)}\r\n >\r\n <IconInput\r\n additionalButtons={\r\n controller.inputValue &&\r\n getMaskForDateFormat().replaceAll('9', DEFAULT_MASK_PLACEHOLDER) !==\r\n controller.inputValue ? (\r\n <Close\r\n as=\"button\"\r\n onClick={controller.clear.bind(controller)}\r\n className=\"delete_date_button\"\r\n onMouseDown={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n />\r\n ) : undefined\r\n }\r\n buttonProps={{ disabled }}\r\n icon={FaCalendarAlt}\r\n inputProps={{\r\n disabled,\r\n onChange: controller.onInputChange.bind(controller),\r\n value: controller.inputValue,\r\n id: outerId,\r\n name: outerId,\r\n ...props,\r\n }}\r\n mask={getMaskForDateFormat()}\r\n maskPlaceholder={DEFAULT_MASK_PLACEHOLDER}\r\n onClick={controller.openCalendar.bind(controller)}\r\n readOnly={readonly}\r\n />\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { customEvents } from '@apia/util';\r\nimport * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport interface IFieldErrorMessage {\r\n children: React.ReactNode | string;\r\n name?: string;\r\n}\r\n\r\nexport const FieldErrorMessage = ({ children, name }: IFieldErrorMessage) => {\r\n const [ref, setRef] = React.useState<null | HTMLDivElement>(null);\r\n\r\n React.useEffect(() => {\r\n if (children) {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n ref?.dispatchEvent(event);\r\n }\r\n }, [children, ref]);\r\n\r\n if (children) {\r\n return (\r\n <Box\r\n ref={setRef}\r\n role=\"alert\"\r\n data-testid={name ? `err_${name}` : null}\r\n sx={{\r\n mb: '0',\r\n color: 'danger',\r\n pt: '2',\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n","/**\r\n * El NumberInput respeta los parámetros de ambiente:\r\n * - AMOUNT_DECIMAL_SEPARATOR\r\n * - AMOUNT_DECIMAL_ZEROS\r\n * - CHAR_DECIMAL_SEPARATOR\r\n * - CHAR_THOUS_SEPARATOR\r\n * - ADD_THOUSAND_SEPARATOR\r\n */\r\n\r\nimport React, { useRef } from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\n\r\nexport type TNumberInputChangeEvent = { error: boolean; value: string };\r\n\r\nexport type TNumberInput = Omit<\r\n InputProps,\r\n 'type' | 'onChange' | 'onBlur' | 'value' | 'defaultValue'\r\n> & {\r\n onChange?: (ev: TNumberInputChangeEvent) => unknown;\r\n value?: string;\r\n defaultValue?: string;\r\n avoidDecimalRestriction?: boolean;\r\n deleteValueOnError?: boolean;\r\n};\r\n\r\nfunction fillZeros(amount: number) {\r\n return Array(Math.max(0, amount)).fill(0).join('');\r\n}\r\n\r\nfunction fillThousandsZeros(value: number) {\r\n const stringValue = String(value);\r\n return `${fillZeros(3 - stringValue.length)}${String(value)}`;\r\n}\r\n\r\nconst decimalCount = Number(window.AMOUNT_DECIMAL_SEPARATOR);\r\nconst decimalZeros = Number(window.AMOUNT_DECIMAL_ZEROS);\r\nconst decimalSeparator = window.CHAR_DECIMAL_SEPARATOR;\r\nconst thousandsSeparator = window.CHAR_THOUS_SEPARATOR;\r\nconst regexpThousandsSeparator =\r\n thousandsSeparator === '.' ? '\\\\.' : thousandsSeparator;\r\nconst regexpDecimalSeparator =\r\n decimalSeparator === '.' ? '\\\\.' : decimalSeparator;\r\n\r\nexport function parseNumberInputValueToNumber(value: string): number {\r\n return Number.parseFloat(\r\n value.replaceAll(thousandsSeparator, '').replaceAll(decimalSeparator, '.'),\r\n );\r\n}\r\n\r\nexport function parseNumberValueToNumberInput(value: string | number): string {\r\n const stringNumber = String(value);\r\n const result = stringNumber.match(/(-?)(\\d+)(?:\\.(\\d+))/);\r\n if (!result) return '';\r\n\r\n const isNegative = !!result[1];\r\n const integer = result[2];\r\n const decimals = result[3] as string | null;\r\n const decimalsString = decimals ? `${regexpDecimalSeparator}${decimals}` : '';\r\n\r\n return (\r\n formatValueToShow(`${isNegative ? '-' : ''}${integer}${decimalsString}`) ||\r\n ''\r\n );\r\n}\r\n\r\nfunction formatValueToShow(\r\n value: string,\r\n avoidDecimalRestriction = false,\r\n): string | null {\r\n const result = value.match(\r\n new RegExp(\r\n `^(-)?((?:(?:\\\\d{1,3})${regexpThousandsSeparator}(?:\\\\d{3}${regexpThousandsSeparator})*(?:\\\\d{3}))?|(?:\\\\d*))(?:(?:${regexpDecimalSeparator})(\\\\d+))?$`,\r\n ),\r\n );\r\n if (!result) return null;\r\n\r\n const isNegative = !!result[1];\r\n let module = Number(result[2].replaceAll(thousandsSeparator, ''));\r\n const slicedDecimals = avoidDecimalRestriction\r\n ? result[3]\r\n : (result[3]?.slice(0, decimalCount) ?? ''); // 🔹 solo recorto, no paso +1\r\n\r\n let decimalsString: string;\r\n if (!avoidDecimalRestriction) {\r\n const noZeroDecimals =\r\n (slicedDecimals\r\n ? `${slicedDecimals}` // 🔹 sin redondear, solo uso lo que viene\r\n : ''\r\n ).match(/(\\d*[1-9])0*/)?.[1] ?? '';\r\n decimalsString = `${noZeroDecimals}${fillZeros(\r\n decimalZeros - noZeroDecimals.length,\r\n )}`;\r\n } else {\r\n decimalsString = slicedDecimals ?? '';\r\n }\r\n\r\n const finalNumberString: string[] = [];\r\n while (module >= 1000) {\r\n module /= 1000;\r\n const truncedInteger = Math.trunc(module);\r\n finalNumberString.unshift(\r\n fillThousandsZeros(Math.round((module - truncedInteger) * 1000)),\r\n );\r\n module = truncedInteger;\r\n }\r\n finalNumberString.unshift(String(module));\r\n\r\n return `${isNegative ? '-' : ''}${finalNumberString.join(\r\n window.ADD_THOUSAND_SEPARATOR ? window.CHAR_THOUS_SEPARATOR : '',\r\n )}${decimalsString.length > 0 ? `${decimalSeparator}${decimalsString}` : ''}`;\r\n}\r\n\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, TNumberInput>(\r\n (\r\n { value, avoidDecimalRestriction, deleteValueOnError = true, ...props },\r\n ref,\r\n ) => {\r\n const [actualValue, setActualValue] = React.useState<string>('');\r\n const [showValue, setShowValue] = React.useState<string>('');\r\n const lastEmittedValue = React.useRef<string>('');\r\n const inError = useRef(false);\r\n\r\n const setValue = React.useCallback(\r\n (newValue: string) => {\r\n if (newValue === '') {\r\n if (newValue === lastEmittedValue.current) return;\r\n setActualValue('');\r\n setShowValue('');\r\n props.onChange?.({ value: '', error: false });\r\n inError.current = false;\r\n } else {\r\n const parsedValue = formatValueToShow(\r\n newValue,\r\n avoidDecimalRestriction,\r\n );\r\n if (parsedValue === null) {\r\n if (deleteValueOnError) {\r\n setActualValue('');\r\n setShowValue('');\r\n }\r\n props.onChange?.({ value: '', error: true });\r\n inError.current = true;\r\n } else {\r\n if (newValue === lastEmittedValue.current) {\r\n setShowValue(parsedValue);\r\n return;\r\n }\r\n setActualValue(newValue);\r\n setShowValue(parsedValue);\r\n props.onChange?.({ value: parsedValue, error: false });\r\n inError.current = false;\r\n }\r\n }\r\n lastEmittedValue.current = newValue;\r\n },\r\n [avoidDecimalRestriction, deleteValueOnError, props],\r\n );\r\n\r\n React.useEffect(() => {\r\n if (value !== actualValue) setValue((value as string) ?? '');\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [value]);\r\n\r\n return (\r\n <Input\r\n {...props}\r\n onFocus={React.useCallback(\r\n (ev: React.FocusEvent<HTMLInputElement>) => {\r\n props.onFocus?.(ev);\r\n if (!inError.current || deleteValueOnError !== false) {\r\n setShowValue(\r\n String(actualValue).replaceAll(thousandsSeparator, ''),\r\n );\r\n }\r\n },\r\n [actualValue, deleteValueOnError, props],\r\n )}\r\n onBlur={React.useCallback(\r\n (ev: React.FocusEvent<HTMLInputElement>) => {\r\n setValue(ev.target.value);\r\n },\r\n [setValue],\r\n )}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n setShowValue(ev.target.value);\r\n },\r\n [],\r\n )}\r\n type=\"text\"\r\n ref={ref}\r\n value={showValue}\r\n />\r\n );\r\n },\r\n);\r\n","import { Box, ThemeUICSSObject, BoxProps } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport interface IRequiredMark extends Partial<BoxProps> {\r\n isFormReadonly?: boolean;\r\n isRequired?: boolean;\r\n isReadonly?: boolean;\r\n sx?: ThemeUICSSObject;\r\n style?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Muestra el * en los campos de requerido.\r\n */\r\nexport const RequiredMark = ({\r\n isFormReadonly = false,\r\n isRequired = false,\r\n isReadonly = false,\r\n sx,\r\n style,\r\n ...rest\r\n}: IRequiredMark) => {\r\n const mergedSx: ThemeUICSSObject = {\r\n color: 'palette.error.main',\r\n fontWeight: 'bold',\r\n ...(sx ?? (style as unknown as ThemeUICSSObject) ?? {}),\r\n };\r\n\r\n if (!isRequired || isReadonly || isFormReadonly) return null;\r\n\r\n return (\r\n <Box\r\n as=\"span\"\r\n sx={mergedSx}\r\n className=\"requiredMark\"\r\n title={getLabel('msgReqField').text}\r\n {...rest}\r\n >\r\n *\r\n </Box>\r\n );\r\n};\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const getFieldErrorStyles = (isValid: boolean): ThemeUICSSObject => {\r\n return {\r\n borderLeftStyle: !isValid ? 'solid' : null,\r\n borderLeftWidth: !isValid ? '4px' : null,\r\n borderLeftColor: !isValid ? 'danger' : undefined,\r\n };\r\n};\r\n\r\nexport const getFieldTouchedStyles = (isTouched: boolean): ThemeUICSSObject => {\r\n return {\r\n borderStyle: isTouched ? 'solid' : null,\r\n borderWidth: isTouched ? '1px' : null,\r\n borderColor: isTouched ? 'orange' : undefined,\r\n };\r\n};\r\n","import { injectStyles, getVariant, Box, BoxProps } from '@apia/theme';\r\nimport { forwardRef } from 'react';\r\nimport { RequiredMark } from './RequiredMark';\r\n\r\nexport type TFieldLabel = {\r\n avoidSemicolon?: boolean;\r\n /**\r\n * Permite mostrar un mensaje de error debajo del campo\r\n */\r\n error?: string;\r\n hideRequiredMark?: boolean;\r\n label: string;\r\n /**\r\n * La propiedad required se utiliza para mostrar el * de requerido.\r\n *\r\n * @see requiredMarkPosition\r\n * @see hideRequiredMark\r\n */\r\n required?: boolean;\r\n requiredMarkPosition?: 'before' | 'after';\r\n} & BoxProps;\r\n\r\ninjectStyles('layout.common.components.fieldLabel', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 1,\r\n\r\n '.fieldLabel__label': {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport const FieldLabel = forwardRef<HTMLDivElement, TFieldLabel>(\r\n (\r\n {\r\n as,\r\n avoidSemicolon,\r\n children,\r\n error,\r\n hideRequiredMark,\r\n label,\r\n required,\r\n requiredMarkPosition = 'after',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <Box\r\n as={as ?? 'label'}\r\n {...props}\r\n className={`fieldLabel ${props.className ?? ''}`}\r\n {...getVariant('layout.common.components.fieldLabel')}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n >\r\n <Box className=\"fieldLabel__label\">\r\n {requiredMarkPosition === 'before' && (\r\n <RequiredMark\r\n isRequired={required}\r\n isReadonly={hideRequiredMark}\r\n isFormReadonly={hideRequiredMark}\r\n />\r\n )}\r\n {label}\r\n {requiredMarkPosition === 'after' && (\r\n <RequiredMark\r\n isRequired={required}\r\n isReadonly={hideRequiredMark}\r\n isFormReadonly={hideRequiredMark}\r\n />\r\n )}\r\n {!avoidSemicolon && ':'}\r\n </Box>\r\n <Box>{children}</Box>\r\n {error && <Box className=\"fieldLabel__error\">{error}</Box>}\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nFieldLabel.displayName = 'FieldLabel';\r\n","import { Box } from '@apia/theme';\r\nimport { Icon } from '@apia/icons';\r\n\r\nexport interface ICheckbox {\r\n checked: boolean;\r\n disabled?: boolean;\r\n onChange: (checked: boolean) => unknown;\r\n}\r\n\r\nexport const Checkbox = (props: ICheckbox) => {\r\n return (\r\n <Box\r\n className=\"accordion__item__button__check\"\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n if (!props.disabled) props.onChange?.(!props.checked);\r\n }}\r\n >\r\n {props.checked && <Icon title=\"\" name=\"Check\" />}\r\n </Box>\r\n );\r\n};\r\n","import { useRef } from 'react';\r\nimport { useAccordionContext } from '../context';\r\nimport { IAccordionItemButton } from './DefaultAccordionItemButton';\r\n\r\nexport function useIsChecked(\r\n props: IAccordionItemButton,\r\n): [boolean, (isChecked: boolean) => void] {\r\n const handler = useAccordionContext();\r\n const isChecked = handler.hooks.useItemStateSelector(\r\n (current) => current.isChecked,\r\n );\r\n const id = handler.hooks.useItemId();\r\n\r\n const previousPropsChecked = useRef(props.checked);\r\n if (\r\n previousPropsChecked.current !== props.checked &&\r\n props.checked !== undefined\r\n ) {\r\n previousPropsChecked.current = props.checked;\r\n handler.udpateItem(id, { isChecked: props.checked });\r\n }\r\n\r\n return [\r\n isChecked,\r\n (isChecked) => {\r\n handler.udpateItem(id, { isChecked });\r\n props.onChange?.(isChecked);\r\n },\r\n ];\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { isChild } from '@apia/util';\r\nimport { useEffect, ReactNode, useRef, useCallback } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const AutoEllipsis = ({\r\n children,\r\n findParent,\r\n overrideStyles,\r\n}: {\r\n children: ReactNode;\r\n /**\r\n * Si se pasa el método findParent, será invocado con el nodo de AutoEllipsis\r\n * para dar control sobre cuál es el elemento al que se le clonarán los\r\n * estilos.\r\n */\r\n findParent?: (currentElement: HTMLElement) => HTMLElement;\r\n /**\r\n * Si se pasa overrideStyles, será invocado con el nodo actual de\r\n * AutoEllipsis para tomar decisiones acerca de cuáles estilos serán\r\n * aplicados.\r\n */\r\n overrideStyles?: (\r\n currentElement: HTMLElement,\r\n ) => Partial<CSSStyleDeclaration>;\r\n}) => {\r\n const unsuscribe = useRef(() => {});\r\n const clone = useRef<HTMLElement | null>(null);\r\n const timeout = useRef(0);\r\n const ref = useCallback(\r\n (el: HTMLElement) => {\r\n if (!el || !document.contains(el)) return;\r\n\r\n unsuscribe.current();\r\n\r\n function showBox() {\r\n if (!el || !document.contains(el)) return;\r\n\r\n // If there is any clone open, close it\r\n document\r\n .querySelectorAll('.autoellipsis_clone')\r\n .forEach((c) => c.remove());\r\n\r\n clone.current = el.cloneNode(true) as HTMLElement;\r\n const target = findParent?.(el) ?? el;\r\n const styles = window.getComputedStyle(target);\r\n for (let i = 0; i < styles.length; i++) {\r\n try {\r\n const name = styles[i] as keyof typeof target.style;\r\n const value = styles[name];\r\n if (!(name as string).match(/webkit/)) {\r\n (clone.current as HTMLElement).style[name as any] = value as any;\r\n }\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n const bound = el.getBoundingClientRect();\r\n clone.current.style.position = 'fixed';\r\n clone.current.style.left = `${bound.left - 1}px`;\r\n clone.current.style.top = `${bound.top - 1}px`;\r\n clone.current.style.width = `${bound.width + 8}px`;\r\n clone.current.style.whiteSpace = 'break-spaces';\r\n clone.current.style.overflow = 'visible';\r\n clone.current.style.textOverflow = 'unset';\r\n clone.current.style.background =\r\n 'var(--theme-ui-colors-palette-background-paper)';\r\n clone.current.style.color =\r\n 'var(--theme-ui-colors-palette-text-primary)';\r\n clone.current.style.border = '1px solid';\r\n clone.current.style.borderColor =\r\n 'var(--theme-ui-colors-palette-border-field)';\r\n clone.current.style.zIndex = '1000000';\r\n clone.current.style.height = 'auto';\r\n clone.current.style.fill =\r\n 'var(--theme-ui-colors-palette-text-primary)';\r\n clone.current.style.pointerEvents = 'none';\r\n clone.current.style.wordBreak = 'break-all';\r\n clone.current.classList.add('autoellipsis_clone');\r\n\r\n const overridenStyles = overrideStyles?.(el);\r\n\r\n if (overridenStyles) {\r\n Object.entries(overridenStyles).forEach(([name, value]) => {\r\n if (name.match(/webkit/)) return;\r\n\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\r\n (clone.current as HTMLElement).style[name as any] =\r\n value as string;\r\n } catch (e) {\r\n e;\r\n }\r\n });\r\n }\r\n\r\n clone.current.addEventListener('mouseleave', (ev) => {\r\n if (\r\n isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === el,\r\n )\r\n )\r\n return;\r\n\r\n clone.current?.remove();\r\n });\r\n\r\n let interval: any = 0;\r\n function close() {\r\n clone.current?.remove();\r\n document.removeEventListener('scroll', close);\r\n clearInterval(interval);\r\n }\r\n interval = setInterval(() => {\r\n if (!document.contains(el)) {\r\n close();\r\n }\r\n }, 100);\r\n\r\n document.addEventListener('scroll', close);\r\n document.body.append(clone.current);\r\n\r\n const cloneBounding = clone.current.getBoundingClientRect();\r\n\r\n const difX = Math.abs(cloneBounding.width - bound.width);\r\n const difY = Math.abs(cloneBounding.height - bound.height);\r\n\r\n if (difX < 50 && difY < 10) {\r\n clone.current.remove();\r\n }\r\n }\r\n\r\n function hideBox(ev: MouseEvent) {\r\n if (\r\n isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === clone.current,\r\n )\r\n )\r\n return;\r\n\r\n clone.current?.remove();\r\n }\r\n\r\n function handleMouseEnter() {\r\n timeout.current = setTimeout(() => {\r\n showBox();\r\n }, 500) as unknown as number;\r\n }\r\n function handleMouseLeave(ev: MouseEvent) {\r\n clearTimeout(timeout.current);\r\n hideBox(ev);\r\n }\r\n\r\n el.addEventListener('mouseenter', handleMouseEnter);\r\n el.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n unsuscribe.current = () => {\r\n el.removeEventListener('mouseenter', handleMouseEnter);\r\n el.removeEventListener('mouseleave', handleMouseLeave);\r\n clearTimeout(timeout.current);\r\n };\r\n },\r\n [findParent, overrideStyles],\r\n );\r\n\r\n useEffect(() => {\r\n return () => {\r\n clone.current?.remove();\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n ref={ref}\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n }}\r\n className=\"autoellipsis__container\"\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import {\r\n FC,\r\n FunctionComponent,\r\n useCallback,\r\n useDeferredValue,\r\n useEffect,\r\n useRef,\r\n useState,\r\n useTransition,\r\n} from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\ninterface IMakeResponsiveComponent<P extends Record<string, unknown>> {\r\n breakPoints: number[];\r\n Component: FunctionComponent<\r\n P & { breakPoint: number; breakPointWidth: number; containerWidth: number }\r\n >;\r\n /**\r\n * Este HOC hace un setState cada vez que cambia el ancho del contenedor. Hay\r\n * situaciones en las que es deseable agregar un debounce a este\r\n * comportamiento para mejorar la performance. *Por defecto usa 100*\r\n */\r\n debounce?: number;\r\n /**\r\n * Por defecto usa 4.\r\n */\r\n defaultBreakpoint?: number;\r\n}\r\n\r\nfunction calcBreakPoint(currentWidth: number, breakPoints: number[]) {\r\n let currentIndex = 0;\r\n\r\n while (\r\n currentIndex < breakPoints.length &&\r\n currentWidth > breakPoints[currentIndex]\r\n )\r\n currentIndex++;\r\n\r\n return currentIndex;\r\n}\r\n\r\nexport interface IResponsiveComponent<P> extends FC<P> {\r\n setBreakpoints: { current: (breakPoints: number[]) => void };\r\n}\r\n\r\n/**\r\n * El método makeResponsiveComponent agrega un wrapper alrededor de un\r\n * componente para conocer el ancho del contenedor del mismo. De esta forma, es\r\n * fácil predecir qué ancho dispone el mismo para renderizarse y de esa forma\r\n * poder tomar decisiones de responsividad que no dependen del ancho de la\r\n * pantalla sino del espacio donde se encuentra.\r\n */\r\nexport const makeResponsiveComponent = <P extends Record<string, unknown>>({\r\n breakPoints,\r\n Component,\r\n defaultBreakpoint,\r\n}: IMakeResponsiveComponent<P>): IResponsiveComponent<\r\n P & {\r\n breakPoints?: number[];\r\n }\r\n> => {\r\n const setBreakpoints: { current: (b: number[]) => void } = {\r\n current: () => {},\r\n };\r\n\r\n return Object.assign(\r\n function ResponsiveComponent(\r\n props: P & {\r\n breakPoints?: number[];\r\n },\r\n ) {\r\n const [breakPoint, setCurrentBreakpoint] = useState<number>(\r\n defaultBreakpoint ?? 4,\r\n );\r\n\r\n const [innerBreakpoints, setInnerBreakpoints] = useState(\r\n props.breakPoints ?? breakPoints,\r\n );\r\n setBreakpoints.current = setInnerBreakpoints;\r\n\r\n const [containerWidth, setContainerWidth] = useState(\r\n breakPoints[defaultBreakpoint ?? 4],\r\n );\r\n const observer = useRef<ResizeObserver | null>(null);\r\n const shouldDisconnect = useRef(false);\r\n\r\n const [hasRendered, setHasRendered] = useState(false);\r\n const [, startTransition] = useTransition();\r\n\r\n const ref = useCallback(\r\n (element: HTMLElement) => {\r\n if (!element) return;\r\n\r\n observer.current?.disconnect();\r\n observer.current = new ResizeObserver((resizeProps) => {\r\n if (resizeProps[0].contentRect.width === 0) return;\r\n\r\n startTransition(() => {\r\n setContainerWidth(resizeProps[0].contentRect.width);\r\n setCurrentBreakpoint(\r\n calcBreakPoint(\r\n resizeProps[0].contentRect.width,\r\n innerBreakpoints,\r\n ),\r\n );\r\n setHasRendered(true);\r\n });\r\n });\r\n\r\n if (element) observer.current.observe(element);\r\n },\r\n [innerBreakpoints],\r\n );\r\n\r\n useEffect(() => {\r\n shouldDisconnect.current = false;\r\n\r\n return () => {\r\n shouldDisconnect.current = true;\r\n setTimeout(() => {\r\n if (shouldDisconnect.current) {\r\n observer.current?.disconnect();\r\n }\r\n /**\r\n * El timeout tiene un tiempo arbitrariamente alto ya que de esta\r\n * forma el observer se va a desconectar una vez que el componente\r\n * se desmonte. Si pusiera un tiempo menor, caería en el riesgo de\r\n * que se desconecte aún cuando el componente está montado\r\n */\r\n }, 2000);\r\n };\r\n }, [innerBreakpoints]);\r\n\r\n const deferBreakPoint = useDeferredValue(breakPoint);\r\n const deferContainerWidth = useDeferredValue(containerWidth);\r\n\r\n return (\r\n <Box ref={ref}>\r\n {hasRendered ? (\r\n <Component\r\n {...props}\r\n breakPoint={deferBreakPoint}\r\n breakPointWidth={breakPoints[deferBreakPoint]}\r\n containerWidth={deferContainerWidth}\r\n />\r\n ) : null}\r\n </Box>\r\n );\r\n },\r\n { setBreakpoints },\r\n );\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { Icon, type TIconName } from '@apia/icons';\r\nimport { useAccordionContext } from '../context';\r\nimport { ISimpleButton, SimpleButton } from '../../forms';\r\nimport { Checkbox } from './Checkbox';\r\nimport { useIsChecked } from './useIsChecked';\r\nimport { KeyboardEvent, MouseEvent, ReactNode, useCallback } from 'react';\r\nimport { AutoEllipsis } from '../../responsive';\r\n\r\nexport interface IAccordionItemButton {\r\n ariaLabel: string;\r\n /**\r\n * Si checked !== undefined => se mostrará un checkbox.\r\n */\r\n checked?: boolean;\r\n /**\r\n * Solamente se utiliza en conjunto con el checkbox y permite evitar que el\r\n * usuario pueda marcar o desmarcar el checkbox.\r\n */\r\n className?: string;\r\n disableSelection?: boolean;\r\n domButtonProps?: ISimpleButton;\r\n isHtml?: boolean | boolean[];\r\n label: string;\r\n /**\r\n * Evento que se dispara cuando el usuario hace click en el checkbox o\r\n * presiona espacio sobre el botón del acordeón.\r\n */\r\n onChange?: (checked: boolean) => unknown;\r\n onClick?: (ev: MouseEvent) => unknown;\r\n onUserPressEnter?: (ev: KeyboardEvent) => unknown;\r\n rightButtons?: ReactNode;\r\n rightIcons?: TIconName[] | TIconName;\r\n tabIndex?: number;\r\n /**\r\n * Si no se pasa title se usará ariaLabel.\r\n */\r\n title?: string;\r\n}\r\n\r\nexport const DefaultAccordionItemButton = (props: IAccordionItemButton) => {\r\n const handler = useAccordionContext();\r\n\r\n const { isExpanded } = handler.hooks.useItemStateSelector((props) => props);\r\n const id = handler.hooks.useItemId();\r\n const [isChecked, setIsChecked] = useIsChecked(props);\r\n const handleClick = useCallback(\r\n (ev: MouseEvent) => {\r\n props.onClick?.(ev);\r\n if (!ev.isDefaultPrevented()) handler.toggleItem(id, !isExpanded);\r\n },\r\n [handler, id, isExpanded, props],\r\n );\r\n const handleKeyDown = useCallback(\r\n (ev: KeyboardEvent) => {\r\n if (ev.code === 'Enter') {\r\n props.onUserPressEnter?.(ev);\r\n if (!ev.isDefaultPrevented() && props.rightButtons)\r\n handler.toggleItem(id, !isExpanded);\r\n }\r\n },\r\n [handler, id, isExpanded, props],\r\n );\r\n\r\n return (\r\n <SimpleButton\r\n {...props.domButtonProps}\r\n className={`accordion__item__button ${props.className ?? ''} ${\r\n props.domButtonProps?.className ?? ''\r\n }`}\r\n onClick={handleClick}\r\n onKeyDown={handleKeyDown}\r\n aria-expanded={isExpanded}\r\n aria-controls={`accordion__${handler.id}__${id}`}\r\n title={props.title}\r\n aria-label={props.ariaLabel}\r\n tabIndex={props.tabIndex}\r\n >\r\n <Box className=\"accordion__item__button__leftGroup\">\r\n {props.checked !== undefined && (\r\n <Checkbox\r\n checked={isChecked}\r\n disabled={props.disableSelection}\r\n onChange={setIsChecked}\r\n />\r\n )}\r\n {(props.label ?? props.title ?? props.ariaLabel)\r\n .split(' | ')\r\n .map((content, i) => {\r\n if (\r\n (typeof props.isHtml === 'boolean' && props.isHtml) ||\r\n (Array.isArray(props.isHtml) && props.isHtml[i])\r\n ) {\r\n return (\r\n <Box\r\n className=\"accordion__item__button__html\"\r\n dangerouslySetInnerHTML={{\r\n __html: String(content).replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n as=\"span\"\r\n />\r\n );\r\n } else {\r\n return (\r\n <Box as=\"h3\" className=\"accordion__item__button__label\">\r\n <AutoEllipsis overrideStyles={() => ({ textAlign: 'left' })}>\r\n {content}\r\n </AutoEllipsis>\r\n </Box>\r\n );\r\n }\r\n })}\r\n </Box>\r\n <Box className=\"accordion__item__button__rightGroup\">\r\n {props.rightButtons}\r\n <Icon\r\n name={isExpanded ? 'ArrowUpThin' : 'ArrowDownThin'}\r\n title={props.title ?? props.ariaLabel}\r\n size={23}\r\n />\r\n </Box>\r\n </SimpleButton>\r\n );\r\n};\r\n","import { Children, ReactElement, useRef } from 'react';\r\nimport { AccordionItemButton } from './AccordionItemButton';\r\nimport { DefaultAccordionItemButton } from './defaultElements/DefaultAccordionItemButton';\r\nimport { IAccordionItemProps } from './AccordionItem';\r\nimport AnimateHeight from 'react-animate-height';\r\nimport { useAccordionContext } from './context';\r\nimport { Box } from '@apia/theme';\r\nimport { customEvents } from '@apia/util';\r\n\r\nexport const AccordionItemContent = ({\r\n children,\r\n buttonProps,\r\n}: IAccordionItemProps) => {\r\n let button = null;\r\n\r\n const actualChildren = Children.toArray(children).filter((current) => {\r\n if (typeof current !== 'string' && typeof current !== 'number') {\r\n const element = current as ReactElement;\r\n\r\n if (element.type === AccordionItemButton) {\r\n button = element;\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n\r\n if (button === null && buttonProps)\r\n button = <DefaultAccordionItemButton {...buttonProps} />;\r\n\r\n const handler = useAccordionContext();\r\n const isExpanded = handler.hooks.useItemStateSelector(\r\n (current) => current.isExpanded,\r\n );\r\n const id = handler.hooks.useItemId();\r\n\r\n const duration = handler.hooks.usePropsSelector(\r\n (current) => current.animationDuration,\r\n );\r\n\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <Box\r\n className=\"accordion__item\"\r\n data-id={id}\r\n data-test-id={id}\r\n ref={(el) => {\r\n uns.current();\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n handler.toggleItem(id, true);\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n >\r\n {button}\r\n <AnimateHeight\r\n className={`accordion__item__content ${isExpanded ? ' expanded' : ''}`}\r\n height={isExpanded ? 'auto' : 0}\r\n duration={duration}\r\n id={`accordion__${handler.id}__${id}`}\r\n >\r\n {actualChildren}\r\n </AnimateHeight>\r\n </Box>\r\n );\r\n};\r\n","import { ReactNode, useRef } from 'react';\r\nimport { AccordionItemContent } from './AccordionItemContent';\r\nimport { useAccordionContext } from './context';\r\nimport { TId } from '@apia/util';\r\nimport { IAccordionItemButton } from './defaultElements/DefaultAccordionItemButton';\r\n\r\nexport interface IAccordionItemProps {\r\n /**\r\n * Cada elemento del acordeón tiene dos formas de renderizar el botón. O bien\r\n * se pasa un elemento AccordionItemButton como hijo o bien se pasan\r\n * buttonProps. En caso contrario, el elemento no tendrá botón.\r\n */\r\n buttonProps?: IAccordionItemButton;\r\n children?: ReactNode;\r\n defaultExpanded?: boolean;\r\n id: TId;\r\n}\r\n\r\nexport const AccordionItem = ({\r\n children,\r\n id,\r\n defaultExpanded,\r\n ...props\r\n}: IAccordionItemProps) => {\r\n const context = useAccordionContext();\r\n const Provider = context.hooks.useItemContextProvider(id);\r\n const hasRegistered = useRef(false);\r\n\r\n if (!hasRegistered.current) {\r\n hasRegistered.current = true;\r\n context.registerItem(id, {\r\n isChecked: false,\r\n isExpanded: !!defaultExpanded,\r\n });\r\n }\r\n\r\n return (\r\n <Provider>\r\n <AccordionItemContent id={id} {...props}>\r\n {children}\r\n </AccordionItemContent>\r\n </Provider>\r\n );\r\n};\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport * as React from 'react';\r\nimport { IApiaFilter } from './ApiaFilter';\r\nimport { getFieldErrorStyles } from '../forms';\r\nimport { DateInput } from '../forms/DateInput';\r\n\r\nconst NoMemoApiaDateFilter = (\r\n { filter, onChange, onBlur, onPressEnter }: IApiaFilter,\r\n ref: React.Ref<HTMLInputElement | HTMLSelectElement>,\r\n) => {\r\n const [value, setValue] = React.useState<string>(String(filter.currentValue));\r\n const [lastDispatchedValue, setLastDispatchedValue] = React.useState<string>(\r\n String(filter.currentValue),\r\n );\r\n\r\n const handleClick = React.useCallback((ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n }, []);\r\n\r\n useUpdateEffect(() => {\r\n setValue(filter.currentValue as string);\r\n }, [filter.currentValue]);\r\n\r\n return (\r\n <DateInput\r\n value={value}\r\n sx={getFieldErrorStyles(!filter.error)}\r\n aria-label={filter.toolTip}\r\n ref={ref as React.Ref<HTMLInputElement>}\r\n placeholder={filter.placeholder}\r\n onChange={(ev) => {\r\n if (onChange) {\r\n const result = onChange(String(ev));\r\n if (result === true) {\r\n setValue(ev);\r\n return true;\r\n }\r\n return result as string | false | void;\r\n }\r\n return false;\r\n }}\r\n onClick={handleClick}\r\n onBlur={() => {\r\n if (value !== lastDispatchedValue && onBlur) {\r\n setLastDispatchedValue(value);\r\n setValue(value);\r\n onBlur(value);\r\n }\r\n }}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter' && onPressEnter) {\r\n setLastDispatchedValue(value);\r\n onPressEnter(value);\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const ApiaDateFilter = React.forwardRef(NoMemoApiaDateFilter);\r\n","import { TApiaFilter, TApiaFilterValue } from '@apia/util';\r\nimport { ForwardedRef } from 'react';\r\nimport * as React from 'react';\r\nimport { Input, Select } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport {\r\n TNumberInputChangeEvent,\r\n NumberInput,\r\n getFieldErrorStyles,\r\n} from '../forms';\r\nimport { ApiaDateFilter } from './ApiaDateFilter';\r\n\r\nexport interface IApiaFilter {\r\n filter: TApiaFilter;\r\n onBlur?: (ev: TApiaFilterValue) => void;\r\n onChange?: (\r\n ev: TApiaFilterValue,\r\n ) => void | boolean | string | Promise<boolean | string>;\r\n onPressEnter?: (ev: TApiaFilterValue) => void;\r\n}\r\n\r\nconst NoMemoApiaFilter = (\r\n { filter, onChange, onBlur, onPressEnter }: IApiaFilter,\r\n ref: React.Ref<HTMLInputElement | HTMLSelectElement>,\r\n) => {\r\n const [value, setValue] = React.useState<TApiaFilterValue>(\r\n filter.currentValue ?? '',\r\n );\r\n\r\n const handleClick = React.useCallback((ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n }, []);\r\n\r\n const [lastEmittedValue, setLastEmittedValue] =\r\n React.useState<TApiaFilterValue>(filter.currentValue);\r\n\r\n const filterCurrentValue = filter?.currentValue;\r\n React.useEffect(() => {\r\n if (filterCurrentValue === '') {\r\n setValue(String(filterCurrentValue));\r\n setLastEmittedValue(String(filterCurrentValue));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filter?.deleteFiltersTimestamp]);\r\n\r\n if (filter) {\r\n const handleChange = (\r\n ev: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n ) => {\r\n if (\r\n (onChange && onChange(String(ev.target.value)) !== false) ||\r\n !onChange\r\n )\r\n setValue(String(ev.target.value));\r\n };\r\n const handleNumberChange = (ev: TNumberInputChangeEvent) => {\r\n if ((onChange && onChange(String(ev.value)) !== false) || !onChange)\r\n setValue(String(ev.value));\r\n };\r\n const handleBlur = (\r\n ev:\r\n | React.ChangeEvent<HTMLInputElement | HTMLSelectElement>\r\n | React.KeyboardEvent,\r\n ) => {\r\n if (onBlur && lastEmittedValue !== value) {\r\n setLastEmittedValue(value);\r\n onBlur((ev.target as HTMLInputElement).value);\r\n }\r\n };\r\n\r\n const sortedOptions = filter.sortCombo\r\n ? [...(filter.options ?? [])].sort((a, b) => (a.label > b.label ? 1 : -1))\r\n : filter.options;\r\n const options = sortedOptions?.map((option) => {\r\n return (\r\n <option value={option.value} key={option.value ?? option.label ?? ' '}>\r\n {option.label}\r\n </option>\r\n );\r\n });\r\n\r\n if (filter.type === 'date' || filter.type === 'D')\r\n return (\r\n <ApiaDateFilter\r\n filter={filter}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n onPressEnter={onPressEnter}\r\n ref={ref}\r\n />\r\n );\r\n\r\n if (filter.type === 'apiaNumber') {\r\n return (\r\n <NumberInput\r\n aria-readonly={filter.readonly}\r\n readOnly={filter.readonly}\r\n value={value as string}\r\n placeholder={filter.placeholder}\r\n onChange={handleNumberChange}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter') {\r\n handleBlur(ev);\r\n if (onPressEnter)\r\n onPressEnter((ev.target as HTMLInputElement).value);\r\n }\r\n }}\r\n onClick={handleClick}\r\n {...getVariant('input')}\r\n className={`filter ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLInputElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n name={filter.id as string}\r\n />\r\n );\r\n }\r\n\r\n return filter.options ? (\r\n <Select\r\n aria-readonly={filter.readonly}\r\n disabled={filter.readonly}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n value={value}\r\n className={`\"filter\" ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLSelectElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n onClick={handleClick}\r\n sx={getFieldErrorStyles(!filter.error)}\r\n name={filter.id as string}\r\n >\r\n {options}\r\n </Select>\r\n ) : (\r\n <Input\r\n aria-readonly={filter.readonly}\r\n readOnly={filter.readonly}\r\n value={value}\r\n type={(filter.type === 'N' ? 'number' : filter.type) ?? 'text'}\r\n placeholder={filter.placeholder}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter') {\r\n handleBlur(ev);\r\n if (onPressEnter)\r\n onPressEnter((ev.target as HTMLInputElement).value);\r\n }\r\n }}\r\n onClick={handleClick}\r\n {...getVariant('input')}\r\n className={`filter ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLInputElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n name={filter.id as string}\r\n />\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport const ApiaFilter = React.memo(React.forwardRef(NoMemoApiaFilter));\r\n","import { Box, BoxProps, Close, getVariant } from '@apia/theme';\r\n\r\ntype TLabelBoxVariant = 'normal' | 'selected';\r\n\r\nexport interface ILabelBox {\r\n className?: string;\r\n label: string;\r\n tooltip?: string;\r\n closeTooltip?: string;\r\n onClose?: () => unknown;\r\n variant?: TLabelBoxVariant;\r\n}\r\n\r\ntype TLabelBox = ILabelBox & BoxProps;\r\n\r\nexport const LabelBox = ({\r\n className,\r\n label,\r\n tooltip,\r\n closeTooltip,\r\n onClose,\r\n variant,\r\n ...props\r\n}: TLabelBox) => {\r\n return (\r\n <Box\r\n {...props}\r\n title={tooltip}\r\n className={`labelBox ${className ?? ''} ${variant || 'normal'}`}\r\n {...getVariant('layout.common.boxes.labelBox')}\r\n >\r\n <Box className=\"labelAndIcon\" as=\"span\">\r\n {label}\r\n </Box>\r\n {onClose && (\r\n <Box>\r\n <Close\r\n type=\"button\"\r\n className=\"closeButton\"\r\n onClick={onClose}\r\n title={closeTooltip}\r\n variant=\"icon-outline-danger\"\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { Box, Heading, getVariant } from '@apia/theme';\r\nimport { ReactNode, useState } from 'react';\r\nimport { IconButton } from '../../forms';\r\n\r\nexport const ContainerWithHeader = ({\r\n title,\r\n children,\r\n footerChildren,\r\n onClose,\r\n additionalButtons,\r\n}: {\r\n title: string;\r\n children: ReactNode;\r\n footerChildren?: ReactNode;\r\n additionalButtons?: ReactNode;\r\n onClose?: () => void;\r\n}) => {\r\n const [isFullScreen, setIsFullScreen] = useState(false);\r\n\r\n const handleExpandClick = () => {\r\n setIsFullScreen((prev) => !prev);\r\n };\r\n return (\r\n <Box\r\n className={`container ${isFullScreen ? 'fullScreen' : ''}`}\r\n {...getVariant('layout.common.components.containers.containerWithHeader')}\r\n >\r\n <Box className=\"container__header\">\r\n <Heading as=\"h2\">{title}</Heading>\r\n <Box className=\"container__rightButtons\">\r\n {additionalButtons}\r\n <IconButton\r\n className=\"container__rightButtons__maximizedBtn\"\r\n variant=\"outline\"\r\n icon={isFullScreen ? 'Minimize' : 'Maximize'}\r\n onClick={() => handleExpandClick()}\r\n />\r\n {onClose && (\r\n <IconButton\r\n variant=\"outline-danger\"\r\n icon=\"Close\"\r\n onClick={() => onClose()}\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n <Box className=\"container__content\">{children}</Box>\r\n {footerChildren && (\r\n <Box className=\"container__footer\">{footerChildren}</Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { ThemeUICSSObject, focusOutline, spacing } from '@apia/theme';\r\n\r\nconst collapsiblePanel: ThemeUICSSObject = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: spacing(2),\r\n '.collapsiblePanel__label': {\r\n display: 'flex',\r\n gap: spacing(2),\r\n p: '1px',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n\r\n '.collapsiblePanel__label__button': {\r\n display: 'flex',\r\n gap: spacing(2),\r\n p: '1px',\r\n alignItems: 'center',\r\n '&:focus': focusOutline,\r\n color: 'palette.text.primary',\r\n },\r\n },\r\n};\r\n\r\nexport default collapsiblePanel;\r\n","import React from 'react';\r\nimport { Box, Button } from '@apia/theme';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport isFunction from 'lodash-es/isFunction';\r\nimport {\r\n customEvents,\r\n persistentStorage,\r\n enableChildrenFocus,\r\n disableChildrenFocus as disableChildrenFocusMethod,\r\n useUpdateEffect,\r\n} from '@apia/util';\r\nimport { getVariant, injectStyles } from '@apia/theme';\r\nimport AnimateHeight from 'react-animate-height';\r\nimport collapsiblePanel from './collapsiblePanel';\r\nimport { ICollapsiblePanel } from './types';\r\nimport { Icon } from '@apia/icons';\r\n\r\ninjectStyles('layout.common.components.collapsiblePanel', collapsiblePanel);\r\n\r\nexport const CollapsiblePanel = React.forwardRef<\r\n HTMLDivElement,\r\n ICollapsiblePanel\r\n>(\r\n (\r\n {\r\n children,\r\n className,\r\n closedIcon = 'ArrowDownThin',\r\n collapsed,\r\n defaultCollapsed,\r\n disableChildrenFocus,\r\n iconSize = '20px',\r\n id,\r\n onClose,\r\n onOpen,\r\n openIcon = 'ArrowRightThin',\r\n label,\r\n rememberCollapsedState,\r\n titleButtons,\r\n minHeight = 0,\r\n 'aria-hidden': ariaHidden,\r\n collapseIconToRight,\r\n },\r\n outerRef,\r\n ) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const prefix = React.useMemo(() => (id ? '' : uniqueId()), []);\r\n const actualId = `${prefix}_${id ?? 'collapsiblePanel'}`;\r\n\r\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\r\n rememberCollapsedState\r\n ? ((persistentStorage[`collapsiblePanel${actualId}`] ??\r\n defaultCollapsed ??\r\n collapsed) as boolean)\r\n : (defaultCollapsed ??\r\n collapsed ??\r\n (persistentStorage[`collapsiblePanel${actualId}`] as boolean)),\r\n );\r\n\r\n const [ref, setRef] = React.useState<HTMLDivElement | null>(null);\r\n\r\n const callOnOpen = React.useCallback(\r\n (updateState: unknown, ev?: React.MouseEvent) => {\r\n const onOpenResult = onOpen ? onOpen(ev) : null;\r\n if (onOpenResult) {\r\n void onOpenResult.then((result) => {\r\n if (result) if (updateState) setIsCollapsed((current) => !current);\r\n });\r\n } else if (updateState) setIsCollapsed((current) => !current);\r\n },\r\n [onOpen],\r\n );\r\n\r\n useUpdateEffect(() => {\r\n if (collapsed !== undefined) setIsCollapsed(collapsed);\r\n if (collapsed === false) callOnOpen(false);\r\n }, [collapsed]);\r\n\r\n useUpdateEffect(() => {\r\n if (isCollapsed) {\r\n if (onClose) onClose();\r\n persistentStorage[`collapsiblePanel${actualId}`] = true;\r\n if (ref && disableChildrenFocus)\r\n disableChildrenFocusMethod(\r\n ref.querySelector('.collapsiblePanel__content') as HTMLElement,\r\n );\r\n } else {\r\n persistentStorage[`collapsiblePanel${actualId}`] = false;\r\n if (ref && disableChildrenFocus)\r\n enableChildrenFocus(\r\n ref.querySelector('.collapsiblePanel__content') as HTMLElement,\r\n );\r\n }\r\n }, [isCollapsed]);\r\n\r\n React.useEffect(() => {\r\n const handleCustomFocus = () => setIsCollapsed(false);\r\n ref\r\n ?.querySelector('.collapsiblePanel__content')\r\n ?.addEventListener(customEvents.focus, handleCustomFocus);\r\n return () => {\r\n ref\r\n ?.querySelector('.collapsiblePanel__content')\r\n ?.removeEventListener(customEvents.focus, handleCustomFocus);\r\n };\r\n }, [id, isCollapsed, onClose, onOpen, ref]);\r\n\r\n return (\r\n <Box\r\n className={`collapsiblePanel ${className ?? ''}`}\r\n {...getVariant('layout.common.components.collapsiblePanel')}\r\n ref={(el: HTMLDivElement) => {\r\n if (isFunction(outerRef)) outerRef(el);\r\n setRef(el);\r\n }}\r\n >\r\n <Box className=\"collapsiblePanel__label\">\r\n <Button\r\n {...getVariant('inherit')}\r\n aria-expanded={!isCollapsed}\r\n onClick={(ev) => callOnOpen(true, ev)}\r\n type=\"button\"\r\n className=\"collapsiblePanel__label__button\"\r\n >\r\n {!collapseIconToRight && (\r\n <>\r\n {isCollapsed ? (\r\n <Icon title=\"\" icon={openIcon} size={iconSize} />\r\n ) : (\r\n <Icon title=\"\" icon={closedIcon} size={iconSize} />\r\n )}\r\n </>\r\n )}\r\n <span className=\"title\">{label}</span>\r\n {collapseIconToRight && (\r\n <>\r\n {isCollapsed ? (\r\n <Icon title=\"\" icon={openIcon} size={iconSize} />\r\n ) : (\r\n <Icon title=\"\" icon={closedIcon} size={iconSize} />\r\n )}\r\n </>\r\n )}\r\n </Button>\r\n {titleButtons}\r\n </Box>\r\n <AnimateHeight\r\n id={actualId}\r\n duration={150}\r\n height={isCollapsed ? minHeight : 'auto'}\r\n sx={{ '&>div': { display: 'block ' } }}\r\n aria-hidden={ariaHidden ?? isCollapsed}\r\n className=\"collapsiblePanel__content\"\r\n >\r\n {children}\r\n </AnimateHeight>\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nCollapsiblePanel.displayName = 'CollapsiblePanel';\r\n","import { KeyboardEvent, MouseEvent, ReactNode, createContext } from 'react';\r\nimport {\r\n TActionsMap,\r\n TUseProperties,\r\n TDistinctorProperties,\r\n} from '@apia/dom-store';\r\nimport { TListboxState, TRowDistinctions } from './common';\r\nimport { operations } from './operations';\r\nimport { TOnConfirmSelection, TOnSelectionChange } from '.';\r\nimport { BoxProps } from '@apia/theme';\r\n\r\nexport type TListbox = {\r\n children: ReactNode | ReactNode[];\r\n className?: string;\r\n /**\r\n * Permite remover los estilos por defecto de la lista a fin de personalizar\r\n * su aspecto\r\n */\r\n unstyled?: boolean;\r\n onClickNode?: (ev: MouseEvent<HTMLElement>) => unknown;\r\n onDoubleClickNode?: (ev: MouseEvent<HTMLElement>) => unknown;\r\n /**\r\n * Este evento es lanzado cuando el usuario estando en foco en la lista\r\n * presiona:\r\n *\r\n * - Enter si la selección múltiple está deshabilitada\r\n * - ctrl+Enter si la selección múltiple está habilitada\r\n */\r\n onConfirmSelection?: (ev: TOnConfirmSelection) => unknown;\r\n onPressEnterOnNode?: (ev: KeyboardEvent<HTMLElement>) => unknown;\r\n onPressKeyOnNode?: (ev: KeyboardEvent<HTMLElement>) => unknown;\r\n onSelectionChange?: (ev: TOnSelectionChange) => unknown;\r\n /**\r\n * onKeyDown e id no son permitidas dado que se usan para generar el\r\n * comportamiento correcto del componente\r\n */\r\n ulProps?: Omit<BoxProps, 'id' | 'onKeyDown' | 'sx'>;\r\n} & Partial<\r\n Pick<\r\n TListboxState,\r\n | 'allowMultipleCharacterSearch'\r\n | 'allowSelection'\r\n | 'allowSingleCharacterSearch'\r\n | 'isMultipleSelection'\r\n | 'searchFunction'\r\n | 'startsWithFunction'\r\n | 'showSearchbox'\r\n >\r\n>;\r\n\r\nexport type TListboxContext = {\r\n getState: () => TListboxState;\r\n id: string;\r\n listboxActions: TActionsMap<TListboxState, typeof operations>;\r\n useListbox: TUseProperties<\r\n TListboxState,\r\n {\r\n row: [\r\n (\r\n distinctions: TRowDistinctions,\r\n state: TListboxState,\r\n ) => TDistinctorProperties,\r\n ];\r\n searchbox: [\r\n (distinctions: null, state: TListboxState) => TDistinctorProperties,\r\n ];\r\n listbox: [\r\n (distinctions: null, state: TListboxState) => TDistinctorProperties,\r\n ];\r\n }\r\n >;\r\n variant: string;\r\n} & Pick<\r\n TListbox,\r\n | 'onClickNode'\r\n | 'onConfirmSelection'\r\n | 'onDoubleClickNode'\r\n | 'onPressEnterOnNode'\r\n | 'onPressKeyOnNode'\r\n>;\r\n\r\nconst ListboxContext = createContext<TListboxContext>({} as TListboxContext);\r\n\r\nexport { ListboxContext };\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n FC,\r\n MouseEvent,\r\n ReactNode,\r\n memo,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n} from 'react';\r\nimport { ListboxContext } from './ListboxContext';\r\nimport { BoxProps } from '@apia/theme';\r\nimport { decodeHTMLEntities } from '@apia/util';\r\n\r\nexport type TListboxItem = {\r\n children?: ReactNode;\r\n rowIndex?: number;\r\n} & BoxProps & {\r\n /**\r\n * El label se usa en aria-label por motivos de accesibilidad y además en\r\n * la funcionalidad de búsqueda.\r\n */\r\n label: string;\r\n };\r\n\r\nexport const ListboxItem: FC<TListboxItem> = memo(\r\n ({ children, rowIndex: outerRowIndex, label, ...domProps }) => {\r\n const {\r\n getState,\r\n listboxActions,\r\n onDoubleClickNode,\r\n onClickNode,\r\n useListbox,\r\n } = useContext(ListboxContext);\r\n const rowIndex = useMemo(() => outerRowIndex ?? -1, [outerRowIndex]);\r\n const ref = useListbox<HTMLLIElement>('row', { rowIndex });\r\n\r\n return (\r\n <>\r\n {domProps.className?.includes('separator') && (\r\n <li className=\"separator\"></li>\r\n )}\r\n <li\r\n {...(domProps as any)}\r\n className={`${\r\n domProps.className\r\n ?.split(' ')\r\n .filter((current) => current !== 'separator')\r\n .join(' ') ?? ''\r\n } listbox__row`}\r\n ref={ref}\r\n role=\"option\"\r\n onDoubleClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n onDoubleClickNode?.({\r\n ...ev,\r\n target: (ev.target as HTMLElement).closest(\r\n '[role=\"option\"]',\r\n ) as HTMLElement,\r\n });\r\n },\r\n [onDoubleClickNode],\r\n )}\r\n onMouseDown={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n onClickNode?.({\r\n ...ev,\r\n target: (ev.target as HTMLElement).closest(\r\n '[role=\"option\"]',\r\n ) as HTMLElement,\r\n });\r\n if (\r\n (getState().isMultipleSelection && ev.shiftKey) ||\r\n ev.detail > 1\r\n )\r\n ev.preventDefault();\r\n listboxActions.updateFocusByClickEvent({\r\n rowIndex,\r\n isCtrlKey: ev.ctrlKey,\r\n isShiftKey: ev.shiftKey,\r\n });\r\n },\r\n [getState, listboxActions, onClickNode, rowIndex],\r\n )}\r\n aria-label={label}\r\n title={useMemo(() => decodeHTMLEntities(label), [label])}\r\n >\r\n {children}\r\n </li>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nListboxItem.displayName = 'ListboxItem';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * Type-ahead is a behavior pattern which helps the user in the lists and trees\r\n * (and literally says: \"especially those with more than seven options\")\r\n * navigation. The literal description in Wai-Aria documentation is:\r\n *\r\n * - Type a character: focus moves to the next item with a name that starts\r\n * with the typed character.\r\n *\r\n * - Type multiple characters in rapid succession:\r\n * focus moves to the next item with a name that starts with the string of\r\n * characters typed.\r\n *\r\n * It is a little arbitrary what is rapid succession. As I couln't find any\r\n * documentation about what rapid succession means, I will make some tests in\r\n * order to determine what is more comfortable to accomplish one situation or\r\n * the other.\r\n *\r\n * To callibrate this function it is suficient to override the frequency\r\n * parameter, which after some tests I understand is best at 2.5 (keys per\r\n * second).\r\n */\r\n\r\nimport { EventEmitter } from '@apia/util';\r\nimport { KeyboardEvent } from 'react';\r\n\r\nclass WaiTypeAhead extends EventEmitter<{\r\n multipleKeys: string;\r\n singleKey: string;\r\n typeUpdate: string;\r\n}> {\r\n frequency = 2.5; // Keys per second\r\n timeout = 0;\r\n typing = '';\r\n\r\n constructor(props?: {\r\n onMultipleKeys?: (value: string) => unknown;\r\n onSingleKey?: (value: string) => unknown;\r\n onTypeUpdate?: (value: string) => unknown;\r\n }) {\r\n super();\r\n\r\n const { onMultipleKeys, onSingleKey, onTypeUpdate } = props ?? {};\r\n\r\n if (onMultipleKeys) this.on('multipleKeys', onMultipleKeys);\r\n if (onSingleKey) this.on('singleKey', onSingleKey);\r\n if (onTypeUpdate) this.on('typeUpdate', onTypeUpdate);\r\n }\r\n\r\n #restoreTimeout() {\r\n clearTimeout(this.timeout);\r\n\r\n this.timeout = setTimeout(\r\n this.#shout.bind(this),\r\n 1000 / this.frequency,\r\n ) as any;\r\n }\r\n\r\n #shout({ clear } = { clear: true }) {\r\n if (this.typing.length === 1) {\r\n this.emit('singleKey', this.typing);\r\n } else if (this.typing.length > 1) {\r\n this.emit('multipleKeys', this.typing);\r\n }\r\n if (clear) {\r\n this.typing = '';\r\n }\r\n }\r\n\r\n type(ev: KeyboardEvent) {\r\n if (ev.key.match(/^[\\p{L}\\d ]$/u)) {\r\n ev.preventDefault();\r\n this.typing = this.typing + ev.key;\r\n this.emit('typeUpdate', this.typing);\r\n this.#restoreTimeout();\r\n } else if (ev.code === 'Backspace') {\r\n ev.preventDefault();\r\n this.typing = this.typing.slice(0, -1);\r\n this.emit('typeUpdate', this.typing);\r\n this.#restoreTimeout();\r\n }\r\n }\r\n}\r\n\r\nexport { WaiTypeAhead };\r\n","import {\r\n FC,\r\n KeyboardEvent,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n} from 'react';\r\nimport { ListboxContext, TListbox } from './ListboxContext';\r\nimport { Box } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { WaiTypeAhead } from '../waiAriaHelpers';\r\n\r\nconst ListboxKeyhandler: FC<\r\n {\r\n children: ReactNode;\r\n className: string;\r\n } & TListbox['ulProps']\r\n> = ({ children, className }) => {\r\n const {\r\n listboxActions,\r\n id,\r\n getState,\r\n onConfirmSelection,\r\n onPressEnterOnNode,\r\n onPressKeyOnNode,\r\n variant,\r\n } = useContext(ListboxContext);\r\n\r\n const typer = useMemo(\r\n () =>\r\n getState().showSearchbox\r\n ? null\r\n : new WaiTypeAhead({\r\n onMultipleKeys(characters) {\r\n listboxActions.searchElementsByStartingCharacters({\r\n characters,\r\n });\r\n },\r\n onSingleKey(characters) {\r\n listboxActions.searchElementsByStartingCharacters({\r\n characters,\r\n });\r\n },\r\n }),\r\n [getState, listboxActions],\r\n );\r\n\r\n const shoutConfirmSelection = useCallback(\r\n (ev: KeyboardEvent) => {\r\n onConfirmSelection?.({\r\n originalEvent: ev,\r\n selectedElements: !getState().allowSelection\r\n ? []\r\n : getState().selectedRows.map(\r\n (current) =>\r\n document.querySelector<HTMLElement>(\r\n `#${id}__row__${current}`,\r\n ) as HTMLElement,\r\n ),\r\n focusedElement: document.querySelector<HTMLElement>(\r\n `#${id}__row__${getState().focusedRow}`,\r\n ) as HTMLElement,\r\n });\r\n },\r\n [getState, id, onConfirmSelection],\r\n );\r\n\r\n return (\r\n <Box\r\n {...getVariant(variant)}\r\n className={className}\r\n id={id}\r\n onKeyDown={useCallback(\r\n (ev: KeyboardEvent) => {\r\n const cell = (ev.target as HTMLElement)\r\n .closest<HTMLElement>('.listbox__list')\r\n ?.querySelector<HTMLElement>('.listbox__row.focused');\r\n if (!cell)\r\n throw new Error(\r\n 'There is no cell on keydown event, it must be an error.',\r\n );\r\n\r\n const state = getState();\r\n onPressKeyOnNode?.({ ...ev, target: cell, currentTarget: cell });\r\n\r\n if (ev.code === 'Enter') {\r\n onPressEnterOnNode?.({ ...ev, target: cell, currentTarget: cell });\r\n }\r\n\r\n if (ev.isDefaultPrevented() || ev.isPropagationStopped()) return;\r\n\r\n if (\r\n [\r\n 'ArrowRight',\r\n 'ArrowLeft',\r\n 'ArrowDown',\r\n 'ArrowUp',\r\n 'PageUp',\r\n 'PageDown',\r\n ].includes(ev.code) ||\r\n (['Home', 'End'].includes(ev.code) && ev.ctrlKey) ||\r\n // La selección múltiple cuando no se muestra el searchbox se hace\r\n // con espacio\r\n (['Space'].includes(ev.code) &&\r\n state.isMultipleSelection &&\r\n !state.showSearchbox) ||\r\n // La selección múltiple siempre puede hacerse con Enter\r\n (['Enter'].includes(ev.code) && state.isMultipleSelection) ||\r\n (['KeyA'].includes(ev.code) &&\r\n state.isMultipleSelection &&\r\n ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n\r\n switch (ev.code) {\r\n case 'KeyA':\r\n listboxActions.selectAll();\r\n break;\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'next',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'previous',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'Home':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'first',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'End':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'last',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'Enter':\r\n if (ev.ctrlKey) {\r\n shoutConfirmSelection(ev);\r\n }\r\n break;\r\n case 'Space':\r\n listboxActions.updateFocusBySpaceEvent({\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'PageUp':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'pageUp',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'PageDown':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'pageDown',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n }\r\n } else if (\r\n ev.code === 'Enter' &&\r\n (!state.allowSelection || !state.isMultipleSelection)\r\n ) {\r\n shoutConfirmSelection(ev);\r\n } else if (typer) {\r\n typer.type(ev);\r\n }\r\n },\r\n [\r\n getState,\r\n listboxActions,\r\n onPressEnterOnNode,\r\n onPressKeyOnNode,\r\n shoutConfirmSelection,\r\n typer,\r\n ],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { ListboxKeyhandler };\r\n","import { ChangeEvent, FC, ReactNode, useCallback, useContext } from 'react';\r\nimport { ListboxContext } from './ListboxContext';\r\nimport { useDebouncedCallback } from '@apia/util';\r\nimport { Box, BoxProps, Input } from '@apia/theme';\r\n\r\nconst Combobox: FC<{ children: ReactNode } & BoxProps> = ({\r\n children,\r\n ...props\r\n}) => {\r\n const { id, listboxActions, useListbox } = useContext(ListboxContext);\r\n const run = useDebouncedCallback((ev: ChangeEvent<HTMLInputElement>) => {\r\n listboxActions.filter({ searchString: ev.target.value });\r\n });\r\n\r\n const ref = useListbox<HTMLInputElement>('searchbox', null);\r\n\r\n return (\r\n <>\r\n <Input\r\n ref={ref}\r\n type=\"text\"\r\n id={`${id}__searchbox`}\r\n placeholder=\"Search...\"\r\n aria-autocomplete=\"list\"\r\n aria-controls={`${id}__list__container`}\r\n role=\"combobox\"\r\n aria-expanded\r\n aria-haspopup=\"listbox\"\r\n onChange={run}\r\n autoComplete=\"off\"\r\n />\r\n <Box\r\n as=\"ul\"\r\n id={`${id}__list__container`}\r\n role=\"listbox\"\r\n className=\"listbox__list\"\r\n {...props}\r\n onClick={useCallback(() => {\r\n if (\r\n document.activeElement !==\r\n document.getElementById(`${id}__searchbox`)\r\n )\r\n document.getElementById(`${id}__searchbox`)?.focus();\r\n }, [id])}\r\n >\r\n {children}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport { Combobox };\r\n","import { focusOutline } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n '&:focus-within': {\r\n '.listbox__list': {\r\n outline: 'none',\r\n },\r\n\r\n '.focused': focusOutline,\r\n\r\n '&.withSearchbox': {\r\n '.focused': {\r\n outline: '1px solid',\r\n outlineColor: 'palette.border.field',\r\n outlineOffset: 0,\r\n },\r\n '.listbox__searchbox': focusOutline,\r\n },\r\n },\r\n\r\n '.listbox__list': {\r\n listStyle: 'none',\r\n m: 0,\r\n p: 0,\r\n },\r\n\r\n '&.withSearchbox': {\r\n '.listbox__list': {\r\n maxHeight: 'calc(100vh - 80px)',\r\n overflow: 'auto',\r\n },\r\n },\r\n\r\n '.listbox__row': {\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n\r\n '&:hover': (theme) => {\r\n return {\r\n ...theme.palette.getOneState(\r\n { backgroundColor: 'palette.background.paper' },\r\n 'hover',\r\n ),\r\n cursor: 'pointer',\r\n };\r\n },\r\n },\r\n};\r\n","import { Draft, TKeysDefine } from '@apia/dom-store';\r\nimport { TListboxState, makeRowKey } from './common';\r\nimport { addBoundary, getIndex } from '@apia/util';\r\n\r\ntype TListboxOperation<Payload> = (\r\n state: Draft<TListboxState>,\r\n payload: Payload,\r\n keys: TKeysDefine,\r\n) => void;\r\n\r\nconst filter: TListboxOperation<{\r\n searchString: string;\r\n}> = makeOperation((state, { searchString }, keys) => {\r\n let focusChanged = false;\r\n const rows = new Array(state.rowsCount).fill(1).map((_, i) => i);\r\n\r\n const shownRows: number[] = [];\r\n const hiddenRows = rows.filter((_, i) => {\r\n const el = document.getElementById(`${state.id}__row__${i}`);\r\n if (!el) {\r\n console.warn('Element not found', `${state.id}__row__${i}`);\r\n return false;\r\n }\r\n\r\n const matches = state.searchFunction(el.ariaLabel ?? '', searchString);\r\n\r\n if (matches) {\r\n el.style.display = 'block';\r\n } else {\r\n el.style.display = 'none';\r\n }\r\n\r\n if (matches) shownRows.push(i);\r\n else if (state.focusedRow === i) {\r\n focusChanged = true;\r\n }\r\n\r\n return !matches;\r\n });\r\n keys.set(hiddenRows.map((current) => makeRowKey(current)));\r\n state.hiddenRows = hiddenRows;\r\n state.shownRows = shownRows;\r\n\r\n if (focusChanged) {\r\n for (const row of rows) {\r\n if (!hiddenRows.includes(row)) {\r\n state.focusedRow = row;\r\n keys.push(makeRowKey(row));\r\n keys.push(makeRowKey(state.focusedRow));\r\n break;\r\n }\r\n }\r\n }\r\n});\r\n\r\nfunction makeOperation<T>(operation: TListboxOperation<T>) {\r\n const method: TListboxOperation<T> = (state, payload, keys) => {\r\n keys.push('searchbox');\r\n keys.push('listbox');\r\n operation(state, payload, keys);\r\n };\r\n return method;\r\n}\r\n\r\nconst moveFocusAndToggleSelection: TListboxOperation<{\r\n isShiftKey: boolean;\r\n which: 'next' | 'previous' | 'first' | 'last' | 'pageUp' | 'pageDown';\r\n}> = makeOperation((state, { isShiftKey, which }, keys) => {\r\n if (state.shownRows.length <= 1) {\r\n keys.push(makeRowKey(state.focusedRow));\r\n state.focusedRow = state.shownRows[0];\r\n\r\n if (state.shownRows.length === 1) keys.push(makeRowKey(state.focusedRow));\r\n\r\n return;\r\n }\r\n\r\n switch (which) {\r\n case 'first':\r\n {\r\n const newFocused = state.shownRows[0];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n const selectedElements = new Array(state.focusedRow + 1)\r\n .fill(1)\r\n .map((_, i) => i);\r\n keys.set(selectedElements.map((_, i) => makeRowKey(i)));\r\n state.selectedRows = selectedElements;\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n case 'last':\r\n {\r\n const newFocused = state.shownRows[state.shownRows.length - 1];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n const selectedElements = new Array(\r\n state.rowsCount - state.focusedRow,\r\n )\r\n .fill(1)\r\n .map((_, i) => i + Math.min(newFocused, state.focusedRow));\r\n keys.push(...selectedElements.map((i) => makeRowKey(i)));\r\n state.selectedRows = selectedElements;\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n case 'previous':\r\n case 'next':\r\n case 'pageDown':\r\n case 'pageUp':\r\n {\r\n const sum = getIndex(\r\n [-1, 1, -10, 10],\r\n [\r\n which === 'previous',\r\n which === 'next',\r\n which === 'pageUp',\r\n which === 'pageDown',\r\n ],\r\n );\r\n\r\n const currentIndex = state.shownRows.findIndex(\r\n (current) => state.focusedRow === current,\r\n );\r\n const newFocused =\r\n state.shownRows[\r\n addBoundary({\r\n number: currentIndex + sum,\r\n min: 0,\r\n max: state.shownRows.length - 1,\r\n })\r\n ];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n if (state.selectedRows.includes(newFocused)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== newFocused,\r\n );\r\n } else {\r\n state.selectedRows.push(newFocused);\r\n }\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n }\r\n state.isEverythingSelected = false;\r\n});\r\n\r\nconst resetFocus: TListboxOperation<null> = makeOperation((state, _, keys) => {\r\n keys.push(makeRowKey(state.focusedRow));\r\n state.focusedRow = 0;\r\n keys.push(makeRowKey(0));\r\n});\r\n\r\nconst searchElementsByStartingCharacters: TListboxOperation<{\r\n characters: string;\r\n}> = makeOperation((state, payload, keys) => {\r\n const currentIndex = state.shownRows.findIndex(\r\n (current) => current === state.focusedRow,\r\n );\r\n\r\n function match(rowIndex: number) {\r\n keys.push(makeRowKey(state.focusedRow));\r\n\r\n state.focusedRow = rowIndex;\r\n\r\n if (!state.isMultipleSelection) {\r\n keys.push(...state.selectedRows.map((current) => makeRowKey(current)));\r\n state.selectedRows = [rowIndex];\r\n }\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n }\r\n\r\n function tryIndex(rowIndex: number) {\r\n const el = document.getElementById(`${state.id}__row__${rowIndex}`);\r\n if (!el) {\r\n console.warn('Element not found', `${state.id}__row__${rowIndex}`);\r\n return false;\r\n }\r\n\r\n const matches = state.startsWithFunction(\r\n el.ariaLabel ?? '',\r\n payload.characters,\r\n );\r\n\r\n if (matches) {\r\n match(state.shownRows[rowIndex]);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n for (let i = currentIndex + 1; i < state.shownRows.length; i++) {\r\n if (tryIndex(i)) return;\r\n }\r\n\r\n for (let i = 0; i < currentIndex; i++) {\r\n if (tryIndex(i)) return;\r\n }\r\n});\r\n\r\n/**\r\n * No actualiza ningún key porque al llamar a selectAll, todos los elementos\r\n * son afectados y el comportamiento por defecto del store es actualizar todo\r\n */\r\nconst selectAll: TListboxOperation<void> = makeOperation((state, _, keys) => {\r\n keys.push(...state.selectedRows.map(makeRowKey));\r\n if (state.isEverythingSelected) {\r\n state.isEverythingSelected = false;\r\n state.selectedRows = [];\r\n } else {\r\n state.isEverythingSelected = true;\r\n state.selectedRows = state.shownRows;\r\n }\r\n state.lastSelectedRow = state.focusedRow;\r\n keys.push(...state.shownRows.map(makeRowKey));\r\n});\r\n\r\nconst setState: TListboxOperation<\r\n Partial<TListboxState> & { affectedKeys: string[] }\r\n> = makeOperation((state, { affectedKeys, ...payload }, keys) => {\r\n const newRowsCount = payload.rowsCount ?? state.rowsCount;\r\n if (state.rowsCount < newRowsCount) {\r\n for (let i = state.rowsCount; i < (payload.rowsCount as number); i++) {\r\n state.shownRows.push(i);\r\n }\r\n } else if (state.rowsCount > newRowsCount) {\r\n state.shownRows = state.shownRows.filter(\r\n (current) => current < newRowsCount,\r\n );\r\n if (state.focusedRow > newRowsCount - 1) {\r\n state.focusedRow = newRowsCount - 1;\r\n keys.push(makeRowKey(state.focusedRow));\r\n }\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current < newRowsCount,\r\n );\r\n }\r\n\r\n Object.assign(state, payload);\r\n keys.set(affectedKeys);\r\n state.isEverythingSelected = false;\r\n});\r\n\r\nconst updateFocusByClickEvent: TListboxOperation<{\r\n rowIndex: number;\r\n isCtrlKey: boolean;\r\n isShiftKey: boolean;\r\n}> = makeOperation((state, payload, keys) => {\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(payload.rowIndex));\r\n\r\n state.focusedRow = payload.rowIndex;\r\n if (payload.isShiftKey) {\r\n updateFocusBySpaceEvent(state, { isShiftKey: payload.isShiftKey }, keys);\r\n } else {\r\n state.lastSelectedRow = payload.rowIndex;\r\n if (payload.isCtrlKey) {\r\n if (state.selectedRows.includes(payload.rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== payload.rowIndex,\r\n );\r\n } else {\r\n state.selectedRows.push(payload.rowIndex);\r\n }\r\n } else {\r\n keys.push(...state.selectedRows.map((current) => makeRowKey(current)));\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n }\r\n});\r\n\r\nconst updateFocusBySpaceEvent: TListboxOperation<{\r\n isShiftKey: boolean;\r\n}> = makeOperation((state, { isShiftKey }, keys) => {\r\n const rowIndex = state.focusedRow;\r\n keys.push(makeRowKey(rowIndex));\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n if (state.lastSelectedRow === -1) {\r\n state.selectedRows.push(rowIndex);\r\n } else {\r\n const newSelection = new Array(\r\n Math.abs(state.lastSelectedRow - rowIndex),\r\n )\r\n .fill(1)\r\n .map(\r\n (_, i) =>\r\n i +\r\n Math.min(rowIndex, state.lastSelectedRow) +\r\n (state.lastSelectedRow > rowIndex ? 0 : 1),\r\n );\r\n keys.push(...newSelection.map((current) => makeRowKey(current)));\r\n newSelection.forEach((current) => {\r\n if (!state.shownRows.includes(current)) return;\r\n\r\n if (state.selectedRows.includes(current)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (search) => search !== current,\r\n );\r\n } else {\r\n state.selectedRows.push(current);\r\n }\r\n });\r\n }\r\n } else {\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows.push(rowIndex);\r\n }\r\n }\r\n }\r\n state.lastSelectedRow = rowIndex;\r\n});\r\n\r\nconst operations = {\r\n filter,\r\n /**\r\n // eslint-disable-next-line comment-length/limit-multi-line-comments\r\n * **Este método debe llamarse solamente cuando se efectúan acciones desde el\r\n * teclado**. Su función es controlar el flujo correcto de foco y selección de\r\n * acuerdo a las especificaciones de wai-aria.\r\n */\r\n moveFocusAndToggleSelection,\r\n resetFocus,\r\n /**\r\n * Este método debe utilizarse para la búsqueda por caracter simple o\r\n * múltiple en cuanto a la implementación de las funcionalidades\r\n * especificadas por wai-aria.\r\n */\r\n searchElementsByStartingCharacters,\r\n /**\r\n * **Método empleado cuando se presiona ctrl+shift+A**. Su función es\r\n * controlar el flujo correcto de foco y selección de acuerdo a las\r\n * especificaciones de wai-aria.\r\n */\r\n selectAll,\r\n /**\r\n * Permite alterar el estado en forma arbitraria. Debe pasarse un array con\r\n * los keys afectados por la acción efectuada.\r\n */\r\n setState,\r\n /**\r\n * **Este método debe llamarse solamente cuando se efectúan acciones con el\r\n * mouse**. Su función es controlar el flujo correcto de foco y selección de\r\n * acuerdo a las especificaciones de wai-aria.\r\n */\r\n updateFocusByClickEvent,\r\n /**\r\n * **Este método debe llamarse solamente cuando se efectúan acciones con la\r\n * tecla espacio**. Su función es controlar el flujo correcto de foco y\r\n * selección de acuerdo a las especificaciones de wai-aria.\r\n */\r\n updateFocusBySpaceEvent,\r\n};\r\nexport { operations };\r\n","import { createFAsomeStore } from '@apia/dom-store';\r\nimport { useMemo } from 'react';\r\nimport { getInitialState, getDistinctors, keysMakers } from './common';\r\nimport { operations } from './operations';\r\nimport { TListbox } from './ListboxContext';\r\n\r\nexport function useStore(\r\n storeId: string,\r\n {\r\n allowMultipleCharacterSearch,\r\n allowSelection,\r\n allowSingleCharacterSearch,\r\n isMultipleSelection,\r\n searchFunction,\r\n showSearchbox,\r\n startsWithFunction,\r\n }: TListbox,\r\n) {\r\n return useMemo(() => {\r\n const newStore = createFAsomeStore({\r\n initialState: getInitialState({\r\n allowSelection: allowSelection ?? true,\r\n allowMultipleCharacterSearch:\r\n (allowMultipleCharacterSearch ?? true) && !showSearchbox,\r\n allowSingleCharacterSearch:\r\n (allowSingleCharacterSearch ?? true) && !showSearchbox,\r\n id: storeId,\r\n isMultipleSelection: !!isMultipleSelection,\r\n searchFunction,\r\n showSearchbox: showSearchbox ?? false,\r\n startsWithFunction,\r\n }),\r\n operations,\r\n distinctors: getDistinctors(storeId),\r\n keysMakers,\r\n });\r\n\r\n return newStore;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useMemo } from 'react';\r\nimport { TRegisterStateChangeListener } from '@apia/dom-store';\r\nimport { TListbox } from './ListboxContext';\r\nimport { TListboxState } from './common';\r\n\r\nexport function useShoutSelectionChange(\r\n onSelectionChange: TListbox['onSelectionChange'],\r\n registerCallback: TRegisterStateChangeListener<TListboxState>,\r\n) {\r\n useMemo(\r\n function shoutSelectionChange() {\r\n registerCallback((state, previousState) => {\r\n if (state.selectedRows !== previousState.selectedRows) {\r\n onSelectionChange?.({\r\n focusedElement: document.querySelector<HTMLElement>(\r\n `#${state.id}__row__${state.focusedRow}`,\r\n ) as HTMLElement,\r\n selectedElements: state.selectedRows.map((current) => {\r\n return document.querySelector<HTMLElement>(\r\n `#${state.id}__row__${current}`,\r\n ) as HTMLElement;\r\n }),\r\n });\r\n }\r\n });\r\n },\r\n [onSelectionChange, registerCallback],\r\n );\r\n}\r\n","import {\r\n useMemo,\r\n Children,\r\n isValidElement,\r\n cloneElement,\r\n ReactElement,\r\n} from 'react';\r\nimport { ListboxItem, TListboxItem } from './ListboxItem';\r\nimport { useStore } from './useStore';\r\n\r\nexport function useIndexedChildren(\r\n children: React.ReactNode | React.ReactNode[],\r\n listboxActions: ReturnType<typeof useStore>[0],\r\n) {\r\n return useMemo(\r\n function makeChildrenIndices() {\r\n listboxActions.resetFocus(null);\r\n\r\n return Children.map(children, (child, rowIndex) => {\r\n if (isValidElement(child) && child.type === ListboxItem) {\r\n return cloneElement<TListboxItem>(\r\n child as ReactElement<TListboxItem>,\r\n {\r\n rowIndex,\r\n },\r\n );\r\n }\r\n return child;\r\n });\r\n },\r\n [children, listboxActions],\r\n );\r\n}\r\n","import { TGetState } from '@apia/dom-store';\r\nimport { useCallback } from 'react';\r\nimport { TListboxState } from './common';\r\nimport { findScrollContainer } from '@apia/util';\r\n\r\nexport function useListboxAutofocus(\r\n storeId: string,\r\n getState: TGetState<TListboxState>,\r\n) {\r\n return {\r\n onClick: useCallback(() => {\r\n if (\r\n document.activeElement !==\r\n document.querySelector(`#${storeId} .listbox__list`)\r\n ) {\r\n const el = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__list`,\r\n );\r\n el?.focus({ preventScroll: true });\r\n el?.scrollIntoView({\r\n behavior: 'instant' as unknown as 'instant',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n }\r\n }, [storeId]),\r\n onFocus: useCallback(() => {\r\n const focusedRowId = getState().focusedRow + 1;\r\n const focusedRow = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__list .listbox__row:nth-child(${focusedRowId})`,\r\n );\r\n\r\n if (focusedRow) {\r\n focusedRow.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const scrollContainer = findScrollContainer(focusedRow);\r\n\r\n if (scrollContainer && scrollContainer !== document.body) {\r\n scrollContainer.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const elRect = focusedRow.getBoundingClientRect();\r\n const contRect = scrollContainer.getBoundingClientRect();\r\n\r\n if (elRect.top - contRect.top < elRect.height)\r\n scrollContainer.scrollTop -= elRect.height;\r\n }\r\n }\r\n }, [getState, storeId]),\r\n };\r\n}\r\n","import { Children, isValidElement, useMemo } from 'react';\r\nimport { ListboxItem } from './ListboxItem';\r\nimport { TActionsMap } from '@apia/dom-store';\r\nimport { TListboxState } from './common';\r\nimport { operations } from './operations';\r\n\r\nexport function useUpdateRowCount(\r\n children: React.ReactNode | React.ReactNode[],\r\n listboxActions: TActionsMap<TListboxState, typeof operations>,\r\n) {\r\n useMemo(\r\n function updateRowCount() {\r\n let count = 0;\r\n Children.forEach(children, (current) => {\r\n if (isValidElement(current) && current.type === ListboxItem) count++;\r\n });\r\n listboxActions.setState({ rowsCount: count, affectedKeys: [] });\r\n },\r\n [listboxActions, children],\r\n );\r\n}\r\n","import { useMemo } from 'react';\r\nimport { TListboxContext } from './ListboxContext';\r\n\r\nexport function useListboxContextValue(props: TListboxContext) {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return useMemo(() => props, [...Object.values(props)]);\r\n}\r\n","import { KeyboardEvent, memo, MouseEvent, useMemo } from 'react';\r\nimport { uniqueId } from './common';\r\nimport { ListboxItem } from './ListboxItem';\r\nimport { ListboxContext, TListbox } from './ListboxContext';\r\nimport { ListboxKeyhandler } from './ListboxKeyhandler';\r\nimport { Combobox } from './Combobox';\r\nimport { makeStyledComponent } from '@apia/theme';\r\nimport { Box } from '@apia/theme';\r\nimport { styles } from './listbox';\r\nimport { useStore } from './useStore';\r\nimport { useShoutSelectionChange } from './useShoutSelectionChange';\r\nimport { useIndexedChildren } from './useIndexedChildren';\r\nimport { useListboxAutofocus } from './useListboxAutofocus';\r\nimport { useUpdateRowCount } from './useUpdateRowCount';\r\nimport { useListboxContextValue } from './useListboxContextValue';\r\n\r\nexport type TOnConfirmSelection = {\r\n originalEvent: KeyboardEvent;\r\n\r\n selectedElements: HTMLElement[];\r\n focusedElement: HTMLElement;\r\n};\r\n\r\nexport type TOnSelectionChange = {\r\n focusedElement: HTMLElement;\r\n selectedElements: HTMLElement[];\r\n};\r\n\r\nexport type TOnClickNode = MouseEvent;\r\n\r\nexport type { TListbox };\r\n\r\nconst NoMemoListbox = makeStyledComponent<TListbox>(\r\n 'Listbox',\r\n 'layout.components.listbox',\r\n styles,\r\n (props: TListbox) => {\r\n const storeId = useMemo(() => uniqueId('Listbox'), []);\r\n const [listboxActions, useListbox, getState, registerCallback] = useStore(\r\n storeId,\r\n props,\r\n );\r\n\r\n useShoutSelectionChange(props.onSelectionChange, registerCallback);\r\n useUpdateRowCount(props.children, listboxActions);\r\n\r\n const indexedChildren = useIndexedChildren(props.children, listboxActions);\r\n const { onClick, onFocus } = useListboxAutofocus(storeId, getState);\r\n const ref = useListbox<HTMLElement>('listbox', null);\r\n const variant = props.unstyled ? '' : 'layout.components.listbox';\r\n const contextValue = useListboxContextValue({\r\n getState,\r\n id: storeId,\r\n listboxActions,\r\n onClickNode: props.onClickNode,\r\n onConfirmSelection: props.onConfirmSelection,\r\n onDoubleClickNode: props.onDoubleClickNode,\r\n onPressEnterOnNode: props.onPressEnterOnNode,\r\n onPressKeyOnNode: props.onPressKeyOnNode,\r\n useListbox,\r\n variant,\r\n });\r\n\r\n return (\r\n <ListboxContext.Provider value={contextValue}>\r\n <ListboxKeyhandler\r\n className={`listbox ${props.showSearchbox ? 'withSearchbox' : ''} ${\r\n props.className ?? ''\r\n }`}\r\n {...props.ulProps}\r\n >\r\n {props.showSearchbox ? (\r\n <Combobox {...props.ulProps}>{indexedChildren}</Combobox>\r\n ) : (\r\n <Box\r\n ref={ref}\r\n as=\"ul\"\r\n role=\"listbox\"\r\n tabIndex={0}\r\n onClick={onClick}\r\n onFocus={onFocus}\r\n {...props.ulProps}\r\n className={`listbox__list ${props?.ulProps?.className ?? ''}`}\r\n >\r\n {indexedChildren}\r\n </Box>\r\n )}\r\n </ListboxKeyhandler>\r\n </ListboxContext.Provider>\r\n );\r\n },\r\n true,\r\n);\r\n\r\nconst Listbox = memo(NoMemoListbox);\r\n\r\nexport { Listbox, ListboxItem };\r\n","import { BarLoader } from 'react-spinners';\r\nimport { Box, useThemeUI } from '@apia/theme';\r\n\r\nconst LinearLoader = () => {\r\n const theme = useThemeUI();\r\n return (\r\n <Box\r\n sx={{\r\n '*': { height: '6.5px !important' },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n zIndex: 'tooltip',\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n }}\r\n className=\"linearLoader\"\r\n >\r\n <BarLoader width=\"100%\" color={theme.theme.palette.primary.main} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LinearLoader;\r\n","import { getVariant } from '@apia/theme';\r\nimport { FC } from 'react';\r\nimport { Progress, Label } from '@apia/theme';\r\n\r\nexport interface IProgressBar {\r\n id: string;\r\n progress?: number;\r\n loading?: boolean;\r\n}\r\n\r\nconst ProgressBar: FC<IProgressBar> = ({\r\n id,\r\n progress = 0,\r\n loading = false,\r\n}) => {\r\n return (\r\n <>\r\n <Label\r\n htmlFor={id}\r\n sx={{\r\n display: loading ? 'block' : 'none',\r\n m: '0px',\r\n }}\r\n >\r\n {`${progress}%`}\r\n </Label>\r\n <Progress\r\n id={id}\r\n max={100}\r\n value={progress}\r\n {...getVariant('styles.progress')}\r\n sx={{\r\n display: loading ? 'block' : 'none',\r\n }}\r\n >\r\n {`${progress}%`}\r\n </Progress>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProgressBar;\r\n","import { getVariant, makeStyledComponent } from '@apia/theme';\r\nimport { Spinner } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n height: 'iconmd',\r\n width: 'iconmd',\r\n background: 'transparent',\r\n};\r\n\r\nconst LoaderSpinner = makeStyledComponent(\r\n 'LoaderSpinner',\r\n 'layout.common.components.loaderSpinner',\r\n styles,\r\n ({ className }: { className?: string }) => {\r\n return (\r\n <Spinner\r\n {...getVariant('layout.common.components.loaderSpinner')}\r\n className={className}\r\n />\r\n );\r\n },\r\n);\r\n\r\nexport default LoaderSpinner;\r\n","import { Box } from '@apia/theme';\r\nimport { keyframes } from '@emotion/react';\r\nconst shimmer = keyframes`\r\n 0% {\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n opacity: 0.4;\r\n }\r\n 100% {\r\n opacity: 0.8;\r\n }\r\n`;\r\n\r\nconst SkeletonItem = () => (\r\n <Box\r\n sx={{\r\n height: 20,\r\n bg: 'muted',\r\n mb: 2,\r\n borderRadius: 4,\r\n animation: `${shimmer} 1.5s infinite`,\r\n background: 'palette.gray.800',\r\n }}\r\n />\r\n);\r\n\r\nexport const ListSkeletonLoader = ({ items = 5 }) => (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>\r\n {Array.from({ length: items }).map((_, index) => (\r\n <SkeletonItem key={index} />\r\n ))}\r\n </Box>\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { LinearLoader } from '../loaders';\r\n\r\nexport const LinearSpinnerLock = ({ isLocked }: { isLocked: boolean }) =>\r\n isLocked ? (\r\n <Box\r\n className=\"locker\"\r\n style={{\r\n backgroundColor: 'rgb(128 128 128 / 0%)',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n position: 'fixed',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1200,\r\n transition: 'background-color 0.25s',\r\n }}\r\n ref={(el) => {\r\n if (el instanceof HTMLElement) {\r\n window.requestAnimationFrame(() => {\r\n el.style.backgroundColor = 'rgb(200 200 200 / 60%)';\r\n });\r\n }\r\n }}\r\n >\r\n <LinearLoader />\r\n </Box>\r\n ) : null;\r\n","import { TDistinctors } from '@apia/dom-store';\r\nimport { TCellDistinctions, TGridDistinctions, TState } from './types';\r\n\r\nexport const distinctors: TDistinctors<TState> = {\r\n grid: [\r\n (distinctors: TGridDistinctions, state) => {\r\n return {\r\n etc: {\r\n 'aria-activedescendant':\r\n distinctors.iconsCount > 0\r\n ? `${state.storeId}__${state.focusedRow}__${state.focusedColumn}`\r\n : undefined,\r\n role: 'grid',\r\n 'aria-rowcount': distinctors.rows,\r\n 'aria-colcount': distinctors.columns,\r\n id: state.storeId,\r\n },\r\n };\r\n },\r\n ],\r\n cell: [\r\n (distinctions: TCellDistinctions, state) => {\r\n const isFocused =\r\n state.focusedColumn === distinctions.columnIndex &&\r\n state.focusedRow === distinctions.rowIndex;\r\n return {\r\n etc: {\r\n id: `${state.storeId}__${distinctions.rowIndex}__${distinctions.columnIndex}`,\r\n },\r\n classList: {\r\n add: isFocused ? ['focused'] : undefined,\r\n remove: isFocused ? undefined : ['focused'],\r\n },\r\n };\r\n },\r\n (_: TState, state: TState) => {\r\n const focusedCell = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow}\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n focusedCell?.scrollIntoView({\r\n behavior: 'instant',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n },\r\n ],\r\n};\r\n","import { TDistinctors, TKeysMaker } from '@apia/dom-store';\r\nimport { TState } from './types';\r\n\r\nexport const makeCellKey = (distinctions: {\r\n columnIndex: number;\r\n rowIndex: number;\r\n}) => `${distinctions.columnIndex}__${distinctions.rowIndex}`;\r\n\r\nexport const keysMakers: TKeysMaker<TState, TDistinctors<TState>> = {\r\n cell: makeCellKey,\r\n grid: () => 'grid',\r\n};\r\n","import { noNaN } from '@apia/util';\r\nimport { makeCellKey } from './keysMaker';\r\nimport { TIconsListOperation, TState } from './types';\r\n\r\nfunction assignSelectedIndexId(state: TState) {\r\n const element = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow}\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n state.focusedId = element.dataset.id as string;\r\n }\r\n}\r\n\r\nconst arrowDown: TIconsListOperation<void> = (state: TState, _: void, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${\r\n state.focusedRow + 1\r\n }\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n )\r\n )\r\n return;\r\n\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow + 1,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedRow++;\r\n\r\n assignSelectedIndexId(state);\r\n};\r\nconst arrowUp: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (state.focusedRow > 1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow - 1,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedRow--;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n};\r\nconst arrowLeft: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (state.focusedColumn > 1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn - 1,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedColumn--;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n /**\r\n * Este bloque agrega el comportamiento de que, al presionar la flecha\r\n * derecha estando en el último ícono de una fila, salta a la fila\r\n * siguiente. El problema es que solamente funciona cuando las ids son\r\n * secuenciales, lo cual no siempre es cierto. Habría que agregar un sistema\r\n * de doble id para garantizar la secuencialidad de las ids usadas por este\r\n * método, independientemente de las ids provistas por el usuario del\r\n * componente.\r\n */\r\n /* else if (state.focusedRow > 1) {\r\n const focusedRow = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow - 1}\"]`,\r\n );\r\n\r\n if (focusedRow instanceof HTMLElement) {\r\n const colIndex = noNaN(\r\n focusedRow.querySelector('[aria-colIndex]:last-of-type')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: colIndex,\r\n rowIndex: state.focusedRow - 1,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedRow--;\r\n state.focusedColumn = colIndex;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n }\r\n } */\r\n};\r\nconst arrowRight: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${\r\n state.focusedRow\r\n }\"] [aria-colindex=\"${state.focusedColumn + 1}\"]`,\r\n )\r\n ) {\r\n /**\r\n * Este bloque agrega el comportamiento de que, al presionar la flecha\r\n * derecha estando en el último ícono de una fila, salta a la fila\r\n * siguiente. El problema es que solamente funciona cuando las ids son\r\n * secuenciales, lo cual no siempre es cierto. Habría que agregar un sistema\r\n * de doble id para garantizar la secuencialidad de las ids usadas por este\r\n * método, independientemente de las ids provistas por el usuario del\r\n * componente.\r\n */\r\n /* const newFocusedId = noNaN(state.focusedId) + 1;\r\n const element = document.querySelector(\r\n `#${state.storeId} [data-id=\"${newFocusedId}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n const rowIndex = noNaN(\r\n element.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n const colIndex = noNaN(\r\n element.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (rowIndex !== -1 && colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: colIndex,\r\n rowIndex: rowIndex,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n } */\r\n\r\n return;\r\n }\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn + 1,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedColumn++;\r\n assignSelectedIndexId(state);\r\n};\r\nconst setFocused: TIconsListOperation<{\r\n rowIndex: number;\r\n colIndex: number;\r\n}> = (state, payload, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${payload.rowIndex}\"] [aria-colindex=\"${payload.colIndex}\"]`,\r\n )\r\n )\r\n return;\r\n\r\n keys.set([\r\n makeCellKey({ columnIndex: payload.colIndex, rowIndex: payload.rowIndex }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedColumn = payload.colIndex;\r\n state.focusedRow = payload.rowIndex;\r\n\r\n assignSelectedIndexId(state);\r\n};\r\n\r\nconst recalculateIndexByResize: TIconsListOperation<void> = (\r\n state: TState,\r\n _: void,\r\n keys,\r\n) => {\r\n const element = document.querySelector(\r\n `#${state.storeId} [data-id=\"${state.focusedId}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n const rowIndex = noNaN(\r\n element.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n const colIndex = noNaN(\r\n element.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (rowIndex !== -1 && colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({ columnIndex: colIndex, rowIndex }),\r\n ]);\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n }\r\n }\r\n};\r\n\r\nexport const operations = {\r\n arrowDown,\r\n arrowLeft,\r\n arrowRight,\r\n arrowUp,\r\n setFocused,\r\n recalculateIndexByResize,\r\n};\r\n","import { TState } from './types';\r\n\r\nexport const getInitialState = (props: Pick<TState, 'storeId'>): TState => ({\r\n focusedColumn: 1,\r\n focusedRow: 1,\r\n focusedId: 0,\r\n ...props,\r\n});\r\n","import { createContext, useContext } from 'react';\r\nimport {\r\n TActionsMap,\r\n TDistinctorProperties,\r\n TGetState,\r\n TRegisterStateChangeListener,\r\n TUseProperties,\r\n} from '@apia/dom-store';\r\nimport { TCellDistinctions, TGridDistinctions, TState } from './types';\r\nimport { operations } from './operations';\r\n\r\nexport type TStoreContext = {\r\n actions: TActionsMap<TState, typeof operations>;\r\n useProps: TUseProperties<\r\n TState,\r\n {\r\n cell: [\r\n (\r\n distinctions: TCellDistinctions,\r\n state: TState,\r\n ) => TDistinctorProperties,\r\n ];\r\n grid: [\r\n (\r\n distinctions: TGridDistinctions,\r\n state: TState,\r\n ) => TDistinctorProperties,\r\n ];\r\n }\r\n >;\r\n getState: TGetState<TState>;\r\n registerStateChangeListener: TRegisterStateChangeListener<TState>;\r\n};\r\n\r\nexport const StoreContext = createContext<TStoreContext>({} as TStoreContext);\r\n\r\nexport const useIconsListStoreContext = () => {\r\n return useContext(StoreContext);\r\n};\r\n","import { createFAsomeStore } from '@apia/dom-store';\r\nimport { ReactNode, useCallback, useMemo } from 'react';\r\nimport { distinctors } from './distinctors';\r\nimport { operations } from './operations';\r\nimport { keysMakers } from './keysMaker';\r\nimport { getInitialState } from './state';\r\nimport { StoreContext, TStoreContext } from './context';\r\nimport { TState } from './types';\r\n\r\nexport const useStore = ({\r\n storeId,\r\n}: Pick<TState, 'storeId'>): [\r\n TStoreContext['actions'],\r\n TStoreContext['useProps'],\r\n TStoreContext['getState'],\r\n TStoreContext['registerStateChangeListener'],\r\n ({ children }: { children: ReactNode }) => JSX.Element,\r\n] => {\r\n const [actions, useProps, getState, registerStateChangeListener] = useMemo(\r\n () =>\r\n createFAsomeStore({\r\n initialState: getInitialState({\r\n storeId,\r\n }),\r\n distinctors,\r\n keysMakers,\r\n operations,\r\n }),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const ContextProvider = useCallback(\r\n ({ children }: { children: ReactNode }) => {\r\n return (\r\n <StoreContext.Provider\r\n value={{\r\n actions,\r\n useProps,\r\n getState,\r\n registerStateChangeListener,\r\n }}\r\n >\r\n {children}\r\n </StoreContext.Provider>\r\n );\r\n },\r\n [actions, getState, registerStateChangeListener, useProps],\r\n );\r\n\r\n return [\r\n actions,\r\n useProps,\r\n getState,\r\n registerStateChangeListener,\r\n ContextProvider,\r\n ];\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n FocusEvent,\r\n KeyboardEvent,\r\n MouseEvent,\r\n ReactNode,\r\n useCallback,\r\n useRef,\r\n} from 'react';\r\nimport { useIconsListStoreContext } from './store/context';\r\nimport { isChild, TId, noNaN } from '@apia/util';\r\nimport { TIcon, TIconsList } from './types';\r\nimport { ApiaUtil } from '../../objects/ApiaUtil';\r\n\r\nfunction findIcon(\r\n icons: TIcon[],\r\n arg: EventTarget | TId,\r\n): TIcon | null | undefined {\r\n const iconId =\r\n arg instanceof HTMLElement\r\n ? arg.closest<HTMLElement>('.iconsList__iconWrapper[data-id]')?.dataset\r\n ?.id\r\n : arg;\r\n\r\n if (iconId !== undefined) {\r\n const icon = icons.find((current) => String(current.id) === iconId);\r\n\r\n return icon ?? null;\r\n }\r\n return null;\r\n}\r\n\r\nexport const KeyHandler = ({\r\n children,\r\n icons,\r\n onIconClick,\r\n onIconDoubleClick,\r\n onIconGetDetails,\r\n onIconKeyDown,\r\n storeId,\r\n}: { children: ReactNode; storeId: TId } & Pick<\r\n TIconsList<any>,\r\n | 'icons'\r\n | 'onIconClick'\r\n | 'onIconDoubleClick'\r\n | 'onIconGetDetails'\r\n | 'onIconKeyDown'\r\n>) => {\r\n const { actions, getState } = useIconsListStoreContext();\r\n const timeoutId = useRef(-1);\r\n const currentIcon = useRef<TIcon | null | undefined>(null);\r\n\r\n const showIconDetails = useCallback(\r\n (icon: TIcon) => {\r\n if (onIconGetDetails) {\r\n ApiaUtil.instance.tooltips.open({\r\n attachToElement: () =>\r\n document.querySelector(\r\n `#${storeId} .iconsList__iconWrapper[data-id=\"${icon.id}\"]`,\r\n ) as HTMLElement,\r\n children: onIconGetDetails(icon),\r\n closeOnClick: false,\r\n minSize: { width: 200, height: 0 },\r\n });\r\n }\r\n },\r\n [onIconGetDetails, storeId],\r\n );\r\n\r\n const handleMouseEnter = useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n const icon = findIcon(icons, ev.target);\r\n\r\n if (icon !== currentIcon.current || icon === null || icon === undefined) {\r\n if (timeoutId.current !== -1) {\r\n clearTimeout(timeoutId.current);\r\n }\r\n\r\n timeoutId.current = window.setTimeout(() => {\r\n if (icon) {\r\n showIconDetails(icon);\r\n if (onIconClick && icon) {\r\n onIconClick(ev, icon);\r\n }\r\n }\r\n }, 100);\r\n\r\n currentIcon.current = icon;\r\n }\r\n },\r\n [icons, onIconClick, showIconDetails],\r\n );\r\n\r\n return (\r\n <Box\r\n className=\"iconsList__keyHandler\"\r\n tabIndex={0}\r\n onFocus={useCallback(\r\n (ev: FocusEvent) => {\r\n if (\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('iconsList__keyHandler'),\r\n )\r\n )\r\n return;\r\n const icon = findIcon(icons, getState().focusedId);\r\n if (icon) {\r\n showIconDetails(icon);\r\n }\r\n },\r\n [getState, icons, showIconDetails],\r\n )}\r\n onMouseOver={handleMouseEnter}\r\n onMouseLeave={useCallback(() => {\r\n currentIcon.current = null;\r\n }, [])}\r\n onMouseDown={useCallback(\r\n (ev: MouseEvent) => {\r\n if (ev.target instanceof HTMLElement) {\r\n const colIndex = noNaN(\r\n ev.target.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n const rowIndex = noNaN(\r\n ev.target.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n\r\n if (colIndex >= 0 && rowIndex >= 0) {\r\n actions.setFocused({\r\n colIndex,\r\n rowIndex,\r\n });\r\n }\r\n }\r\n },\r\n [actions],\r\n )}\r\n onClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n const icon = findIcon(icons, ev.target);\r\n\r\n if (onIconClick && icon) {\r\n onIconClick(ev, icon);\r\n }\r\n },\r\n [icons, onIconClick],\r\n )}\r\n onDoubleClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n if (onIconDoubleClick) {\r\n const icon = findIcon(icons, ev.target);\r\n if (icon) onIconDoubleClick(ev, icon);\r\n }\r\n },\r\n [icons, onIconDoubleClick],\r\n )}\r\n onKeyDown={useCallback(\r\n (ev: KeyboardEvent<HTMLElement>) => {\r\n function showIconByFocusChange() {\r\n const icon = findIcon(icons, getState().focusedId);\r\n\r\n if (icon) showIconDetails(icon);\r\n if (icon && onIconKeyDown) {\r\n onIconKeyDown(ev, icon);\r\n }\r\n }\r\n\r\n function shoutKeyDown() {\r\n const icon = findIcon(icons, getState().focusedId);\r\n if (icon && onIconKeyDown) {\r\n onIconKeyDown(ev, icon);\r\n }\r\n }\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n actions.arrowUp();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowDown':\r\n actions.arrowDown();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowRight':\r\n actions.arrowRight();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowLeft':\r\n actions.arrowLeft();\r\n showIconByFocusChange();\r\n break;\r\n default:\r\n shoutKeyDown();\r\n break;\r\n }\r\n },\r\n [actions, getState, icons, onIconKeyDown, showIconDetails],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { focusOutline } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n '&, *': {\r\n textAlign: 'center',\r\n },\r\n\r\n '.iconsList__icon__image__wrapper': {\r\n boxShadow: '1px 1px 3px #0001',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n\r\n '.iconsList__icon__image': {\r\n maxWidth: 'calc(100% - 4px)',\r\n },\r\n\r\n '.iconsList__icon__wrapper': {\r\n p: 2,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 3,\r\n\r\n '&:hover': (theme) => {\r\n return {\r\n ...theme.palette.getOneState(\r\n { backgroundColor: 'palette.background.paper' },\r\n 'hover',\r\n ),\r\n };\r\n },\r\n },\r\n\r\n '.iconsList__icon__label': {\r\n wordBreak: 'break-word',\r\n display: '-webkit-box',\r\n WebkitLineClamp: '3',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n lineHeight: '20px',\r\n },\r\n\r\n '.iconsList__keyHandler:focus': {\r\n outline: 'none',\r\n\r\n '.focused .iconsList__icon__wrapper': {\r\n ...focusOutline,\r\n },\r\n },\r\n};\r\n","import { useMemo } from 'react';\r\nimport { TIcon } from './types';\r\n\r\nexport function getBreakpoints(blockWidth: number) {\r\n return Array(Math.floor(4000 / blockWidth))\r\n .fill(1)\r\n .map((_, i) => (i + 1) * blockWidth);\r\n}\r\n\r\nexport function useStyles({\r\n containerWidth,\r\n iconWidth,\r\n breakPoint,\r\n verticalGap,\r\n removeHorizontalPadding,\r\n}: {\r\n containerWidth: number;\r\n iconWidth: number;\r\n breakPoint: number;\r\n verticalGap?: number;\r\n removeHorizontalPadding?: boolean;\r\n}) {\r\n const gap =\r\n (containerWidth - iconWidth * breakPoint) /\r\n (breakPoint + (removeHorizontalPadding ? -1 : 1));\r\n const sx = useMemo(\r\n () => ({\r\n justifyContent: 'space-evenly',\r\n gridTemplateColumns: `repeat(${breakPoint}, 1fr)`,\r\n rowGap: verticalGap ?? 0,\r\n columnGap: `${gap}px`,\r\n px: removeHorizontalPadding ? 0 : `${gap}px`,\r\n }),\r\n [removeHorizontalPadding, breakPoint, gap, verticalGap],\r\n );\r\n\r\n return sx;\r\n}\r\n\r\nexport const justToFillTheRow = 'JUST TO FILL THE ROW';\r\n\r\nexport function getRowIcons<P>({\r\n breakPoint,\r\n icons,\r\n i,\r\n}: {\r\n breakPoint: number;\r\n icons: TIcon<P>[];\r\n i: number;\r\n}) {\r\n const actualIcons: (string | TIcon<P>)[] = icons.slice(\r\n i * breakPoint,\r\n (i + 1) * breakPoint,\r\n );\r\n if (actualIcons.length < breakPoint)\r\n actualIcons.push(\r\n ...(Array(breakPoint - actualIcons.length).fill(\r\n justToFillTheRow,\r\n ) as string[]),\r\n );\r\n\r\n return actualIcons;\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { TIconRenderer } from './types';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const IconRendererContext = createContext<TIconRenderer<any> | null>(\r\n null,\r\n);\r\n\r\nexport function useIconRendererContext<\r\n P extends Record<string, unknown> = Record<string, unknown>,\r\n>() {\r\n const context = useContext(IconRendererContext);\r\n\r\n if (!context) throw new Error('There is no IconRendererContext');\r\n\r\n return context as TIconRenderer<P>;\r\n}\r\n","import { TIcon } from '.';\r\nimport { Box } from '@apia/theme';\r\nimport { useMemo } from 'react';\r\nimport { useIconsListStoreContext } from './store/context';\r\nimport { useIconRendererContext } from './context';\r\n\r\nexport const Icon = (\r\n props: TIcon & { rowIndex: number; colIndex: number; width: number },\r\n) => {\r\n const { useProps } = useIconsListStoreContext();\r\n\r\n const ref = useProps<HTMLElement>('cell', {\r\n columnIndex: props.colIndex,\r\n rowIndex: props.rowIndex,\r\n });\r\n\r\n const ContextRenderer = useIconRendererContext();\r\n const Renderer = props.iconRenderer || ContextRenderer;\r\n\r\n return (\r\n <Box\r\n ref={ref}\r\n role=\"gridcell\"\r\n data-id={props.id}\r\n data-test-id={props.id}\r\n className={`iconsList__iconWrapper ${props.className ?? ''}`}\r\n aria-label={props.ariaLabel}\r\n sx={useMemo(\r\n () => ({\r\n width: `${props.width}px`,\r\n\r\n '.iconsList__icon__image__wrapper': {\r\n height: `${props.width - 4}px`,\r\n },\r\n\r\n '.iconsList__icon__image': {\r\n maxHeight: `${props.width - 32}px`,\r\n maxWidth: `${props.width - 32}px`,\r\n },\r\n }),\r\n [props.width],\r\n )}\r\n aria-colindex={props.colIndex}\r\n >\r\n <Renderer {...props} />\r\n </Box>\r\n );\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { TIcon } from '.';\r\nimport { Icon } from './Icon';\r\nimport { justToFillTheRow } from './util';\r\n\r\nexport const IconWrapper = <P extends Record<string, unknown>>({\r\n icon,\r\n iconWidth,\r\n rowIndex,\r\n colIndex,\r\n}: {\r\n icon: string | TIcon<P>;\r\n iconWidth: number;\r\n rowIndex: number;\r\n colIndex: number;\r\n}) => {\r\n return icon === justToFillTheRow ? (\r\n <Box sx={{ width: `${iconWidth}px` }} className=\"fill__the__row\" />\r\n ) : (\r\n <Icon\r\n rowIndex={rowIndex}\r\n colIndex={colIndex}\r\n width={iconWidth}\r\n {...(icon as TIcon<any>)}\r\n />\r\n );\r\n};\r\n","import { Icon } from '@apia/icons';\r\nimport { TIconRenderer } from '../types';\r\nimport { Box, Image } from '@apia/theme';\r\nimport { memo } from 'react';\r\n\r\nconst DefaultIconRendererNoMemo: TIconRenderer = (props) => {\r\n if (!props.icon && !props.imageUrl) {\r\n console.error({ props });\r\n console.error('The icon has no imageUrl nor icon defined');\r\n }\r\n\r\n return (\r\n <Box\r\n title={String(props.ariaLabel) || props.label}\r\n className=\"iconsList__icon__wrapper\"\r\n >\r\n <Box className=\"iconsList__icon__image__wrapper\">\r\n {props.imageUrl && (\r\n <Image\r\n className=\"iconsList__icon__image\"\r\n src={props.imageUrl}\r\n role=\"none\"\r\n alt=\"\"\r\n />\r\n )}\r\n {props.icon && <Icon icon={props.icon} title={props.ariaLabel} />}\r\n </Box>\r\n <Box className=\"iconsList__icon__label\" title={props.ariaLabel}>\r\n {props.label}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const DefaultIconRenderer = memo(DefaultIconRendererNoMemo);\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport { Box, Grid } from '@apia/theme';\r\nimport {\r\n ForwardedRef,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport { makeResponsiveComponent } from '../responsive';\r\nimport { useStore } from './store/useStore';\r\nimport { uniqueId } from '../ListBox/common';\r\nimport { makeStyledComponent } from '@apia/theme';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { styles } from './styles';\r\nimport { getBreakpoints, getRowIcons, useStyles } from './util';\r\nimport { IconWrapper } from './IconWrapper';\r\nimport { DefaultIconRenderer } from './renderers/DefaultIconRenderer';\r\nimport { TIconsList, TIcon, TIconRenderer } from './types';\r\nimport { IconRendererContext } from './context';\r\nimport { useLatest, usePrevious } from '@apia/util';\r\nimport { shallowEqual } from '@apia/store';\r\n\r\nexport type { TIcon, TIconRenderer, TIconsList };\r\n\r\nconst IconsListNonForwarded = <P extends Record<string, unknown>>(\r\n props: TIconsList<P>,\r\n ref: ForwardedRef<HTMLDivElement>,\r\n) => {\r\n const propsRef = useLatest(props);\r\n let render: () => void = () => {};\r\n const previousProps = usePrevious(props);\r\n if (!shallowEqual(props, previousProps.current)) {\r\n setTimeout(() => render(), 0);\r\n }\r\n\r\n const ResponsiveContainer = useMemo(() => {\r\n const iconWidth = propsRef.current.iconWidth ?? 100;\r\n const minGap = propsRef.current.minHorizontalGap ?? 30;\r\n const blockWidth = iconWidth + minGap;\r\n const styledComponent = (styledComponentProps: unknown) => {\r\n const { breakPoint, containerWidth } = styledComponentProps as {\r\n breakPoint: number;\r\n containerWidth: number;\r\n };\r\n const [, doRender] = useState(true);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n render = useCallback(() => doRender((current) => !current), []);\r\n const storeId = useMemo(() => uniqueId('IconsList'), []);\r\n const [actions, useProps, , , Context] = useStore({ storeId });\r\n const rows = Math.ceil(propsRef.current.icons.length / breakPoint);\r\n const sx = useStyles({\r\n breakPoint,\r\n containerWidth,\r\n iconWidth: propsRef.current.iconWidth ?? 100,\r\n verticalGap: propsRef.current.verticalGap,\r\n removeHorizontalPadding: propsRef.current.removeHorizontalPadding,\r\n });\r\n\r\n useEffect(() => {\r\n actions.recalculateIndexByResize();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [breakPoint]);\r\n const IconRenderer = propsRef.current.iconRenderer ?? DefaultIconRenderer;\r\n const gridRef = useProps('grid', {\r\n columns: breakPoint,\r\n iconsCount: propsRef.current.icons.length,\r\n rows,\r\n });\r\n\r\n return (\r\n <IconRendererContext.Provider value={IconRenderer}>\r\n <Context>\r\n <KeyHandler\r\n icons={propsRef.current.icons}\r\n onIconClick={propsRef.current.onIconClick}\r\n onIconDoubleClick={propsRef.current.onIconDoubleClick}\r\n onIconGetDetails={propsRef.current.onIconGetDetails}\r\n onIconKeyDown={propsRef.current.onIconKeyDown}\r\n storeId={storeId}\r\n >\r\n <Box ref={gridRef}>\r\n {Array(rows)\r\n .fill(1)\r\n .map((_, i) => {\r\n const icons = getRowIcons({\r\n breakPoint,\r\n i,\r\n icons: propsRef.current.icons,\r\n });\r\n return (\r\n <Grid\r\n aria-rowindex={i + 1}\r\n role=\"row\"\r\n key={i}\r\n ref={ref}\r\n sx={sx}\r\n >\r\n {icons.map((current, j) => (\r\n <IconWrapper\r\n key={uniqueId(String(j + i))}\r\n colIndex={j + 1}\r\n icon={current}\r\n iconWidth={propsRef.current.iconWidth ?? 100}\r\n rowIndex={i + 1}\r\n />\r\n ))}\r\n </Grid>\r\n );\r\n })}\r\n </Box>\r\n </KeyHandler>\r\n </Context>\r\n </IconRendererContext.Provider>\r\n );\r\n };\r\n\r\n const Component = makeResponsiveComponent({\r\n breakPoints: getBreakpoints(blockWidth),\r\n Component: makeStyledComponent(\r\n 'IconsList',\r\n 'layout.common.components.iconsList',\r\n styles,\r\n styledComponent,\r\n ),\r\n debounce: 50,\r\n });\r\n\r\n return Component;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (previousProps.current?.iconWidth !== props.iconWidth) {\r\n const iconWidth = props.iconWidth ?? 100;\r\n const minGap = props.minHorizontalGap ?? 30;\r\n\r\n const blockWidth = iconWidth + minGap;\r\n setTimeout(\r\n () =>\r\n ResponsiveContainer.setBreakpoints.current(getBreakpoints(blockWidth)),\r\n 0,\r\n );\r\n }\r\n\r\n return <ResponsiveContainer />;\r\n};\r\n\r\nIconsListNonForwarded.displayName = 'IconsList';\r\n\r\nexport const IconsList = forwardRef(\r\n IconsListNonForwarded,\r\n) as typeof IconsListNonForwarded;\r\n\r\nexport { DefaultIconRenderer };\r\n","import { type ComponentType, lazy } from 'react';\r\n\r\n/**\r\n * Permite importar un componente en forma dinámica con ruta relativa a\r\n * /customComponents\r\n */\r\nexport function importComponent<T = unknown>(path: string) {\r\n return lazy<ComponentType<T>>(() => {\r\n return new Promise<{\r\n default: ComponentType<T>;\r\n }>((resolve) => {\r\n import(/* webpackInclude: /\\.tsx?$/ */ `/customComponents/${path}`)\r\n .then((result: { default: { default: ComponentType<T> } }) => {\r\n if (result?.default?.default) resolve(result.default);\r\n else if (result?.default) resolve(result as any);\r\n else\r\n resolve({\r\n default: () => <>Something went wrong when importing component</>,\r\n });\r\n })\r\n .catch((error: unknown) => {\r\n resolve({\r\n default: () => {\r\n console.error(error);\r\n return <>Error</>;\r\n },\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\nimport {\r\n createContext,\r\n useContext,\r\n ReactNode,\r\n useEffect,\r\n useState,\r\n} from 'react';\r\nimport { TItemState } from '../accordion/types';\r\n\r\ntype TClickListener = () => unknown;\r\n\r\nexport class ToolbarController extends EventEmitter<{\r\n pressEnter: string;\r\n updateItemState: string;\r\n}> {\r\n eventListeners: Record<string, TClickListener[]> = {};\r\n itemsState: Record<string, TItemState> = {};\r\n\r\n hooks = {\r\n useItemState: (id: string, initialState: TItemState) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n useEffect(() => {\r\n this.itemsState[id] = initialState;\r\n this.on('updateItemState', (evId) => {\r\n if (evId === id) {\r\n setState({ ...this.itemsState[id] });\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return state;\r\n },\r\n };\r\n\r\n setItemState = (id: string, newState: Partial<TItemState>) => {\r\n this.itemsState[id] = { ...this.itemsState[id], ...newState };\r\n this.emit('updateItemState', id);\r\n };\r\n\r\n Context = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ToolbarControllerContext.Provider value={this}>\r\n {children}\r\n </ToolbarControllerContext.Provider>\r\n );\r\n };\r\n}\r\n\r\nexport const ToolbarControllerContext = createContext<ToolbarController | null>(\r\n null,\r\n);\r\n\r\nexport const useToolbarControllerContext = () => {\r\n const context = useContext(ToolbarControllerContext);\r\n\r\n if (!context) throw new Error('There is no Toolbar controller context');\r\n\r\n return context;\r\n};\r\n","import { getVariant } from '@apia/theme';\r\nimport { ISimpleButton, SimpleButton } from '../forms';\r\n\r\nexport const ToolbarTextButton = (props: ISimpleButton) => {\r\n return (\r\n <SimpleButton\r\n {...props}\r\n className={`toolbar__textButton ${props?.className ?? ''}`}\r\n {...(props.variant ? getVariant(props.variant) : null)}\r\n >\r\n {props.children}\r\n </SimpleButton>\r\n );\r\n};\r\n","import { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useToolbarControllerContext } from './ToolbarController';\r\nimport { TToolbarIconButton } from './types';\r\nimport { useMount, usePrevious } from '@apia/util';\r\nimport { IconButton } from '../forms';\r\nimport { TItemState } from '../accordion/types';\r\n\r\nexport const ToolbarIconButton = ({\r\n id,\r\n action,\r\n actionSource,\r\n allowToggle,\r\n className,\r\n defaultToggled,\r\n disabled,\r\n icon,\r\n iconSize,\r\n isLoading: outerIsLoading,\r\n title,\r\n toggled: toggledProp,\r\n}: TToolbarIconButton) => {\r\n const [innerIsToggled, setInnerIsToggled] = useState<boolean>(\r\n toggledProp ?? (allowToggle ? (defaultToggled ?? false) : false),\r\n );\r\n const [isDisabled, setIsDisabled] = useState(!!disabled);\r\n const context = useToolbarControllerContext();\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const previousIsLoading = usePrevious(outerIsLoading);\r\n if (previousIsLoading.current !== outerIsLoading)\r\n setIsLoading(!!outerIsLoading);\r\n\r\n const lastDisabledProp = usePrevious(disabled);\r\n if (lastDisabledProp.current !== disabled) {\r\n setIsDisabled(!!disabled);\r\n }\r\n\r\n /**\r\n * Si la prop toggled cambia y no está undefined, se debe actualizar el\r\n * estado interno.\r\n */\r\n const lastToggledProp = useRef<boolean | undefined>(toggledProp);\r\n if (\r\n toggledProp !== undefined &&\r\n innerIsToggled !== toggledProp &&\r\n lastToggledProp.current !== toggledProp\r\n ) {\r\n lastToggledProp.current = toggledProp;\r\n setInnerIsToggled(toggledProp);\r\n }\r\n\r\n const handleClick = useCallback(async () => {\r\n setIsLoading(true);\r\n try {\r\n if (lastToggledProp.current !== undefined) {\r\n await action(\r\n { isToggled: !lastToggledProp.current, isLoading },\r\n context,\r\n );\r\n } else if (allowToggle) {\r\n let isToggled = false;\r\n setInnerIsToggled((current) => {\r\n isToggled = !current;\r\n return isToggled;\r\n });\r\n await action({ isToggled, isLoading }, context);\r\n } else {\r\n await action({ isToggled: false, isLoading }, context);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n setIsLoading(false);\r\n }, [action, allowToggle, context, isLoading]);\r\n\r\n /**\r\n * Se maneja el uso de teclado para hacer click sobre el elemento\r\n */\r\n useEffect(() => {\r\n const unsuscribe1 = context.on('updateItemState', (evId) => {\r\n if (evId === id) {\r\n setInnerIsToggled(!!context.itemsState[evId].toggled);\r\n setIsDisabled(!!context.itemsState[evId].disabled);\r\n }\r\n });\r\n const unsuscribe2 = context.on('pressEnter', (evId) => {\r\n if (evId === id) void handleClick();\r\n });\r\n\r\n return () => {\r\n unsuscribe1();\r\n unsuscribe2();\r\n };\r\n }, [context, id, handleClick]);\r\n\r\n useMount(() => {\r\n if (context.itemsState[id]) {\r\n if (context.itemsState[id].disabled !== undefined) {\r\n setIsDisabled(!!context.itemsState[id].disabled);\r\n }\r\n if (context.itemsState[id].toggled !== undefined) {\r\n setInnerIsToggled(!!context.itemsState[id].toggled);\r\n }\r\n } else {\r\n const o: TItemState = context.itemsState[id];\r\n context.itemsState[id] = {\r\n disabled: isDisabled,\r\n toggled: innerIsToggled,\r\n ...o,\r\n };\r\n }\r\n });\r\n\r\n return (\r\n <IconButton\r\n className={`toolbar__button ${innerIsToggled ? 'toggled' : ''} ${className ?? ''}`}\r\n data-id={id}\r\n data-test-id={id}\r\n disabled={isDisabled}\r\n icon={icon}\r\n onClick={actionSource !== 'mousedown' ? handleClick : undefined}\r\n isLoading={isLoading}\r\n onMouseDown={actionSource === 'mousedown' ? handleClick : undefined}\r\n size={iconSize ?? 'Md'}\r\n title={title}\r\n variant=\"icon-outline\"\r\n />\r\n );\r\n};\r\n","import { FieldLabel } from '../forms';\r\nimport { TToolInput } from './types';\r\nimport { Input } from '@apia/theme';\r\n\r\nexport const ToolbarInput = (tool: TToolInput) => {\r\n const input = <Input className=\"toolbar__input\" {...tool.inputProps} />;\r\n\r\n if (tool.label) return <FieldLabel label={tool.label}>{input}</FieldLabel>;\r\n\r\n return input;\r\n};\r\n","import { Box } from '@apia/theme';\r\n\r\nexport const ToolbarSeparator = () => {\r\n return <Box className=\"toolbar__separator\"> </Box>;\r\n};\r\n","import { Select, SelectProps, getVariant } from '@apia/theme';\r\n\r\nexport const ToolbarSelect = (props: SelectProps) => {\r\n return (\r\n <Select\r\n {...props}\r\n className={`toolbar__select ${props?.className ?? ''}`}\r\n {...(props.variant ? getVariant(props.variant) : null)}\r\n >\r\n {props.children}\r\n </Select>\r\n );\r\n};\r\n","import { useMount } from '@apia/util';\r\nimport { TToolbarIconButton } from './types';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { ReactNode, useMemo } from 'react';\r\nimport { ToolbarController } from './ToolbarController';\r\nimport { ToolbarTextButton } from './ToolbarTextButton';\r\nimport { ToolbarIconButton } from './ToolbarIconButton';\r\nimport { ToolbarInput } from './ToolbarInput';\r\nimport { ToolbarSeparator } from './ToolbarSeparator';\r\nimport { ToolbarSelect } from './ToolbarSelect';\r\n\r\nconst Toolbar = ({\r\n children,\r\n getController,\r\n}: {\r\n children: ReactNode;\r\n /**\r\n * El controlador permite gestionar el estado de los distintos elementos de\r\n * la toolbar\r\n */\r\n getController?: (newController: ToolbarController) => unknown;\r\n}) => {\r\n const controller = useMemo(() => new ToolbarController(), []);\r\n\r\n useMount(() => {\r\n getController?.(controller);\r\n });\r\n\r\n return (\r\n <controller.Context>\r\n <Box\r\n className=\"toolbar\"\r\n {...getVariant('layout.common.components.toolbar')}\r\n >\r\n {children}\r\n </Box>\r\n </controller.Context>\r\n );\r\n};\r\n\r\nexport type { TToolbarIconButton as TToolDefinition };\r\nexport {\r\n ToolbarIconButton,\r\n ToolbarInput,\r\n ToolbarTextButton,\r\n Toolbar,\r\n ToolbarController,\r\n ToolbarSeparator,\r\n ToolbarSelect,\r\n};\r\n","import { EventEmitter } from '@apia/util';\r\nimport {\r\n Children,\r\n ReactElement,\r\n ReactNode,\r\n createContext,\r\n isValidElement,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n useRef,\r\n} from 'react';\r\nimport { useSubscription } from '@apia/util';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { TSortableListItem } from './SortableListItem';\r\n\r\ntype THover = { id: string; after: boolean };\r\n\r\nfunction getTargetItem(ev: Event) {\r\n return (ev.target as HTMLElement).closest(\r\n '.sortableList__item',\r\n ) as HTMLElement;\r\n}\r\n\r\nexport class SortableListHandler {\r\n #emitter = new EventEmitter<{ hover: THover; sort: null }>();\r\n\r\n #items: ReactElement<{ id: string }>[] = [];\r\n\r\n updateChildren = (items: ReactNode) => {\r\n this.#items = Children.toArray(items).filter((el): el is ReactElement =>\r\n isValidElement(el),\r\n );\r\n };\r\n\r\n #moveItem = (movingId: string, idBefore: string, after: boolean) => {\r\n if (movingId === idBefore) return;\r\n\r\n const itemIndex = this.#items.findIndex(\r\n (search) => search.props.id === movingId,\r\n );\r\n const item = this.#items.splice(itemIndex, 1)![0]!;\r\n const insertIndex = this.#items.findIndex(\r\n (search) => search.props.id === idBefore,\r\n );\r\n\r\n this.#items.splice(insertIndex + (after ? 1 : 0), 0, item);\r\n this.#emitter.emit('sort', null);\r\n };\r\n\r\n useItemEvents = () => {\r\n const unsuscribe = useRef(() => {});\r\n const ref = useCallback((el: HTMLElement) => {\r\n unsuscribe.current();\r\n\r\n if (el) {\r\n const handleDragEnd = (ev: DragEvent) => {\r\n getTargetItem(ev).classList.remove('dragging');\r\n };\r\n\r\n const handleDrop = (ev: DragEvent) => {\r\n const target = getTargetItem(ev);\r\n\r\n this.#moveItem(\r\n ev.dataTransfer!.getData('text'),\r\n target.id,\r\n target.classList.contains('after'),\r\n );\r\n\r\n target.classList.remove('dragover');\r\n target.classList.remove('after');\r\n };\r\n\r\n const handleDragLeave = (ev: DragEvent) => {\r\n getTargetItem(ev).classList.remove('dragover');\r\n };\r\n\r\n const handleDragOver = (ev: DragEvent) => {\r\n ev.preventDefault();\r\n // eslint-disable-next-line no-param-reassign\r\n ev.dataTransfer!.dropEffect = 'move';\r\n getTargetItem(ev).classList.add('dragover');\r\n\r\n const bounding = getTargetItem(ev).getBoundingClientRect();\r\n if (ev.clientY - bounding.top > bounding.height / 2)\r\n getTargetItem(ev).classList.add('after');\r\n else getTargetItem(ev).classList.remove('after');\r\n };\r\n\r\n document.addEventListener('dragend', handleDragEnd);\r\n el.addEventListener('drop', handleDrop);\r\n el.addEventListener('dragleave', handleDragLeave);\r\n el.addEventListener('dragover', handleDragOver);\r\n\r\n unsuscribe.current = () => {\r\n document.removeEventListener('dragend', handleDragEnd);\r\n el.removeEventListener('drop', handleDrop);\r\n el.removeEventListener('dragleave', handleDragLeave);\r\n el.removeEventListener('dragover', handleDragOver);\r\n };\r\n }\r\n }, []);\r\n\r\n return ref;\r\n };\r\n\r\n useSortChange = (onSortChange?: (items: ReactElement[]) => unknown) => {\r\n useSubscription({\r\n makeSubscription: () => {\r\n return this.#emitter.on('sort', () => {\r\n onSortChange?.([...this.#items]);\r\n });\r\n },\r\n });\r\n };\r\n\r\n useWrapperEvents = () => {\r\n const unsuscribe = useRef(() => {});\r\n const ref = useCallback((el: HTMLElement) => {\r\n unsuscribe.current();\r\n\r\n if (el) {\r\n const handleDrag = (ev: DragEvent) => {\r\n const target = getTargetItem(ev);\r\n\r\n if (ev.dataTransfer) {\r\n // eslint-disable-next-line no-param-reassign\r\n ev.dataTransfer.effectAllowed = 'all';\r\n ev.dataTransfer.setData('text', target.id);\r\n target.classList.add('dragging');\r\n }\r\n };\r\n\r\n el.addEventListener('dragstart', handleDrag);\r\n\r\n unsuscribe.current = () => {\r\n el.removeEventListener('dragstart', handleDrag);\r\n };\r\n }\r\n }, []);\r\n\r\n return ref;\r\n };\r\n}\r\n\r\nconst con = createContext<SortableListHandler>({} as SortableListHandler);\r\n\r\nexport const SortableListContext = ({\r\n boxProps,\r\n children,\r\n onSortChange,\r\n}: {\r\n boxProps?: BoxProps;\r\n children: ReactNode;\r\n onSortChange?: (items: ReactElement<TSortableListItem>[]) => unknown;\r\n}) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const handler = useMemo(() => new SortableListHandler(), []);\r\n handler.useSortChange(onSortChange);\r\n handler.updateChildren(children);\r\n\r\n return (\r\n <Box\r\n {...boxProps}\r\n as={boxProps?.as ?? 'ul'}\r\n className={`sortableList ${boxProps?.className ?? ''}`}\r\n ref={handler.useWrapperEvents()}\r\n >\r\n <con.Provider value={handler}>{children}</con.Provider>\r\n </Box>\r\n );\r\n};\r\n\r\nexport function useSortableListHandler() {\r\n return useContext(con);\r\n}\r\n\r\nexport type { TSortableListItem };\r\n","import { Box, BoxProps } from '@apia/theme';\r\nimport { ReactNode, memo } from 'react';\r\nimport { useSortableListHandler } from './SortableListHandler';\r\n\r\nexport type TSortableListItem = {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n additionalProps?: any;\r\n boxProps?: Omit<BoxProps, 'id'>;\r\n id: string;\r\n children: ReactNode;\r\n};\r\n\r\nexport const SortableListItem = memo(\r\n ({ boxProps, id, children }: TSortableListItem) => {\r\n return (\r\n <Box\r\n {...boxProps}\r\n as={boxProps?.as ?? 'li'}\r\n className={`sortableList__item ${boxProps?.className ?? ''}`}\r\n draggable\r\n id={id}\r\n ref={useSortableListHandler().useItemEvents()}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { BoxProps, makeStyledComponent } from '@apia/theme';\r\nimport { Children, ReactElement, ReactNode } from 'react';\r\nimport { SortableListContext } from './SortableListHandler';\r\nimport { SortableListItem, TSortableListItem } from './SortableListItem';\r\n\r\nexport const UnstyledSortableList = ({\r\n boxProps,\r\n children,\r\n onSortChange,\r\n}: {\r\n boxProps?: BoxProps;\r\n children: ReactNode;\r\n onSortChange?: (items: ReactElement<TSortableListItem>[]) => unknown;\r\n}) => {\r\n Children.forEach(children, (el) => {\r\n if ((el as ReactElement<TSortableListItem>)?.type !== SortableListItem)\r\n throw new Error(\r\n `Every children of a SortableList must be of type SortableListItem`,\r\n );\r\n });\r\n\r\n return (\r\n <SortableListContext onSortChange={onSortChange} boxProps={boxProps}>\r\n {children}\r\n </SortableListContext>\r\n );\r\n};\r\n\r\nexport const SortableList = makeStyledComponent(\r\n 'SortableList',\r\n 'layout.common.components.sortableList',\r\n {\r\n '.sortableList': { display: 'flex', flexDirection: 'column' },\r\n '.sortableList__item': {\r\n cursor: 'pointer',\r\n },\r\n '.dragging': {\r\n opacity: '0.3',\r\n },\r\n '.dragover': { position: 'relative' },\r\n '.dragover:after': {\r\n display: 'block',\r\n content: '\"\"',\r\n position: 'absolute',\r\n height: '4px',\r\n left: '0',\r\n top: '-4px',\r\n bottom: 'auto',\r\n width: '100%',\r\n backgroundColor: 'palette.primary.main',\r\n zIndex: 9,\r\n },\r\n '.dragover.after:after': {\r\n top: 'auto',\r\n bottom: '-4px',\r\n },\r\n },\r\n UnstyledSortableList,\r\n);\r\n\r\nexport { SortableListItem };\r\n","import { FileIcon } from '@apia/icons';\r\nimport { Box, Close, getVariant, ThemeUIStyleObject } from '@apia/theme';\r\nimport { forwardRef, useState } from 'react';\r\nimport { IconButton, TIconButton } from '../forms';\r\n\r\nexport const FileCard = forwardRef(\r\n (\r\n {\r\n name,\r\n iconsSize,\r\n additionalButtons,\r\n className,\r\n sx,\r\n width = 'fit-content',\r\n handleClose,\r\n onDoubleClick,\r\n onClick,\r\n onDropFiles,\r\n previewProps,\r\n }: {\r\n name: string;\r\n iconsSize?: 'sm' | 'md' | 'lg' | 'xl';\r\n additionalButtons?: TIconButton[];\r\n className?: string;\r\n sx?: ThemeUIStyleObject;\r\n width?: string;\r\n handleClose?: (f: string) => void;\r\n onDoubleClick?: () => void;\r\n onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\r\n onDropFiles?: (files: File[]) => void;\r\n previewProps?: {\r\n hasPreview?: boolean;\r\n previewUrl?: string;\r\n };\r\n },\r\n ref,\r\n ) => {\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.fileCard')}\r\n sx={{\r\n ...sx,\r\n width,\r\n ...(isDragOver && onDropFiles\r\n ? {\r\n border: '2px dashed #1976d2!important',\r\n backgroundColor: '#f5faff!important',\r\n }\r\n : {}),\r\n }}\r\n ref={ref}\r\n key={name}\r\n className={`fileCard ${className ?? ''}`}\r\n onDoubleClick={onDoubleClick}\r\n onClick={onClick}\r\n title={name}\r\n tabIndex={0}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(true);\r\n }}\r\n onDragLeave={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(false);\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(false);\r\n if (onDropFiles && e.dataTransfer?.files?.length) {\r\n const files = Array.from(e.dataTransfer.files);\r\n onDropFiles(files);\r\n }\r\n }}\r\n >\r\n <Box className=\"fileCard__container\">\r\n <Box className=\"fileCard__content\">\r\n <FileIcon docName={name} iconSize={iconsSize} />\r\n <Box as=\"span\" className=\"fileCard__name\">\r\n {name}\r\n </Box>\r\n </Box>\r\n <Box className=\"fileCard__additionalButtons\">\r\n {additionalButtons?.map((c) => {\r\n return (\r\n <IconButton\r\n iconSize={'Md'}\r\n {...c}\r\n className={`fileCard__additionalButton ${c.className ?? ''}`}\r\n />\r\n );\r\n })}\r\n </Box>\r\n {handleClose && (\r\n <Close\r\n type=\"button\"\r\n className=\"fileCard__delete\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleClose(name);\r\n }}\r\n />\r\n )}\r\n </Box>\r\n {previewProps?.hasPreview && previewProps?.previewUrl && (\r\n <Box className=\"fileCard__preview\">\r\n <img src={previewProps.previewUrl} alt={name} />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box, getVariant, Progress, ThemeUIStyleObject } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport React, { MouseEvent, useRef, useState } from 'react';\r\nimport { IconButton } from '../forms';\r\n\r\nexport const Dropzone = ({\r\n sx,\r\n className,\r\n messageError,\r\n progress = 0,\r\n defaultLabel = getLabel('btnUploadClass').text,\r\n draggingLabel = getLabel('lblDroping').text,\r\n onClick,\r\n onChange,\r\n handleInfoButton,\r\n}: {\r\n sx?: ThemeUIStyleObject;\r\n className?: string;\r\n messageError?: string;\r\n progress?: number;\r\n defaultLabel?: string;\r\n draggingLabel?: string;\r\n onClick?: (e: MouseEvent) => void;\r\n onChange?: (e: File[]) => any;\r\n handleInfoButton?: (e: MouseEvent) => void;\r\n}) => {\r\n const innerSx = messageError\r\n ? { borderLeft: '2px solid', borderColor: 'danger' }\r\n : {};\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleClick = (ev: MouseEvent) => {\r\n onClick?.(ev);\r\n\r\n if (!ev.defaultPrevented) {\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n };\r\n\r\n const [isDragging, setIsDragging] = useState(false);\r\n const handleDragStart = (_e: React.DragEvent<HTMLDivElement>) => {\r\n setIsDragging(true);\r\n };\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.execution.components.uploader.dropzone')}\r\n className=\"dropzone__container\"\r\n >\r\n <Box\r\n tabIndex={0}\r\n sx={{ ...innerSx, sx }}\r\n className={`dropzone ${className ?? ''}`}\r\n onClick={handleClick}\r\n onKeyDown={(ev) => {\r\n if (ev.code === 'Enter' || ev.code === 'Space') {\r\n handleClick(ev as any);\r\n }\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n\r\n const newFiles = Array.from(e.dataTransfer.files);\r\n setIsDragging(false);\r\n onChange?.(newFiles);\r\n }}\r\n onDragEnter={handleDragStart}\r\n onDragLeave={handleDragLeave}\r\n onDragOver={handleDragOver}\r\n >\r\n {progress > 0 && progress < 100 && (\r\n <Progress max={100} value={progress} className=\"progressBar\" />\r\n )}\r\n {messageError ? (\r\n <Box color=\"danger\">{messageError}</Box>\r\n ) : isDragging ? (\r\n draggingLabel\r\n ) : (\r\n defaultLabel\r\n )}\r\n\r\n <input\r\n multiple\r\n type=\"file\"\r\n ref={fileInputRef}\r\n style={{ display: 'none' }}\r\n onChange={(e) => {\r\n e.preventDefault();\r\n\r\n if (e.target.files) {\r\n const newFiles = Array.from([...e.target.files]);\r\n onChange?.(newFiles);\r\n e.target.value = '';\r\n }\r\n }}\r\n />\r\n </Box>\r\n {handleInfoButton && (\r\n <IconButton\r\n className=\"info\"\r\n iconSize={'Sm'}\r\n icon=\"Info\"\r\n onMouseEnter={handleInfoButton}\r\n onClick={handleClick}\r\n />\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { makeAutoObservable } from 'mobx';\r\nimport { Dropzone } from './Dropzone';\r\nimport { Box } from '@apia/theme';\r\nimport { FileCard } from './FileCard';\r\nimport { ApiaUtil } from '../../objects';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { uniqueId } from '@apia/util';\r\n\r\nexport type TUploadedFile = { id: string | number; name: string };\r\n\r\nexport type TUploadInProgress = {\r\n abortController?: AbortController;\r\n error?: string;\r\n id: string;\r\n file: File;\r\n progress: number;\r\n};\r\n\r\ntype TUploadHandlerState = {\r\n inProgressFiles: TUploadInProgress[];\r\n uploadedFiles: TUploadedFile[];\r\n};\r\n\r\nexport type TUploadHandlerProps = {\r\n initialFiles: TUploadedFile[];\r\n isMultiple?: boolean;\r\n /**\r\n * Must return the uploaded file instance if everything went ok.\r\n *\r\n * Must return a string if an error message must be placed in the uploading file to mark it\r\n * as with error.\r\n *\r\n * Must return null to remove the upload in progress without adding it to uploaded fiels.\r\n */\r\n onUpload(file: TUploadInProgress): Promise<TUploadedFile | string | null>;\r\n /**\r\n * Must return true if the file was deleted in the remote server.\r\n *\r\n * Must return a string containing an error message if something went wrong. This message\r\n * will be thrown as a notification.\r\n *\r\n * Must return null if nothing has to be done.\r\n */\r\n onDelete(file: TUploadedFile): Promise<true | string | null>;\r\n};\r\n\r\nexport class UploadHandler {\r\n state: TUploadHandlerState = { inProgressFiles: [], uploadedFiles: [] };\r\n\r\n constructor(public props: TUploadHandlerProps) {\r\n makeAutoObservable(this);\r\n\r\n this.state.uploadedFiles = this.props.initialFiles;\r\n }\r\n\r\n delete(file: TUploadedFile) {\r\n this.props.onDelete(file).then((res) => {\r\n if (res === true) {\r\n this.state.uploadedFiles = this.state.uploadedFiles.filter(\r\n (c) => c !== file,\r\n );\r\n } else if (typeof res === 'string') {\r\n ApiaUtil.instance.notifications.notify({\r\n message: res,\r\n });\r\n }\r\n });\r\n }\r\n\r\n start(files: File[]) {\r\n files.forEach((file) => {\r\n const newUpload: TUploadInProgress = {\r\n abortController: new AbortController(),\r\n id: uniqueId('file_upload'),\r\n file,\r\n progress: 0,\r\n };\r\n this.state.inProgressFiles.push(newUpload);\r\n this.props.onUpload(newUpload).then((res) => {\r\n this.state.inProgressFiles = this.state.inProgressFiles.filter(\r\n (c) => c.id !== newUpload.id,\r\n );\r\n\r\n if (typeof res === 'string') {\r\n ApiaUtil.instance.notifications.notify({\r\n message: res,\r\n icon: '',\r\n });\r\n } else if (res) {\r\n this.state.uploadedFiles.push(res);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport const Uploader = observer(({ handler }: { handler: UploadHandler }) => {\r\n return (\r\n <Box className=\"file_uploader\">\r\n <Box className=\"file_uploader__dropzone\">\r\n {(handler.props.isMultiple ||\r\n (handler.state.uploadedFiles.length === 0 &&\r\n handler.state.inProgressFiles.length === 0)) && (\r\n <Dropzone\r\n onChange={(ev) => {\r\n handler.start(ev);\r\n }}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"file_uploader__in_progress\">\r\n {handler.state.inProgressFiles.map((c) => (\r\n <Dropzone\r\n progress={c.progress}\r\n messageError={c.error}\r\n key={c.file.name}\r\n />\r\n ))}\r\n </Box>\r\n <Box className=\"file_uploader__files_list\">\r\n {handler.state.uploadedFiles.map((c) => (\r\n <FileCard\r\n name={c.name}\r\n key={c.id}\r\n handleClose={() => handler.delete(c)}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n","import React, { useState, createRef } from 'react';\r\nimport { Box, Input, Select, useBreakpointIndex } from '@apia/theme';\r\nimport { getLabel, noNaN } from '@apia/util';\r\nimport { TTooltip, ApiaUtil } from '../../objects';\r\nimport { IconButton, SimpleButton } from '../forms';\r\n\r\nconst defaultLabels = Object.freeze({\r\n totalRecords: window.GNR_TOT_RECORDS,\r\n totalRecordsReached: window.GNR_TOT_RECORDS_REACHED,\r\n maximize: window.LBL_MAXIMIZE,\r\n minimize: window.LBL_MINIMIZE,\r\n information: window.BTN_FILE_INFO_TOOLTIP,\r\n deleteFilters: window.BTN_DELETE_FILTERS,\r\n refresh: window.NAV_REFRESH,\r\n firstPage: window.NAV_FIRST_PAGE,\r\n previousPage: window.NAV_PREVIOUS_PAGE,\r\n lastPage: window.NAV_LAST_PAGE,\r\n nextPage: window.NAV_NEXT_PAGE,\r\n pageInputInstructions: window.NAV_INPUT_LABEL,\r\n page: window.PAGE,\r\n moreData: window.QUERY_MORE_DATA,\r\n});\r\n\r\nexport interface IPagination {\r\n appliedFilters?: number;\r\n /**\r\n * Este valor determina si el boton de eliminar filtros debe mostrarse como si hubieran filtros sin aplicar (en caso de que haya filtros aplicados por defecto) o si debe mostrarse como si todos los filtros con valor estan aplicados a la busqueda actual. Se deberia verificar con el slice de redux correspondiente a la tabla.\r\n */\r\n areAllFiltersApplied?: boolean;\r\n\r\n className?: string;\r\n currentPage: number | string;\r\n disabled?: boolean;\r\n disableReduced?: boolean;\r\n hideInfo?: boolean;\r\n hideMaximizeButton?: boolean;\r\n hideRefreshButton?: boolean;\r\n isLoading?: boolean;\r\n /**\r\n * Valor obtenido del buttonsSlice para bloquear los botones de la paginacion mientras se estan ejecutando acciones\r\n */\r\n isPerforming?: boolean;\r\n /**\r\n * Si se pasa un método onDeleteFilters, aparece el botón \"Eliminar filtros\"\r\n * cerca del refresh\r\n */\r\n onDeleteFilters?: () => unknown;\r\n onPageChange: (page: number) => unknown;\r\n onRefresh: (page: number) => unknown;\r\n pageCount: number | string;\r\n reachedMax?: boolean | undefined;\r\n hasMore?: boolean | undefined;\r\n /**\r\n * Si la cantidad de registros se obtiene desde un lugar distinto de Redux,\r\n * se puede pasar como number directamente\r\n */\r\n recordsCount?: number;\r\n showMaximizeOnSmallBreakpoints?: boolean;\r\n variant?: 'primary' | 'secondary' | 'datagrid';\r\n\r\n onMaximize?: () => unknown;\r\n isMaximized?: boolean;\r\n labels?: Partial<typeof defaultLabels>;\r\n}\r\n\r\nconst NoMemoPagination = ({\r\n appliedFilters,\r\n areAllFiltersApplied,\r\n className,\r\n currentPage,\r\n disabled,\r\n disableReduced,\r\n hasMore,\r\n hideInfo,\r\n hideMaximizeButton,\r\n hideRefreshButton,\r\n isLoading,\r\n isPerforming,\r\n onDeleteFilters,\r\n onPageChange,\r\n onRefresh,\r\n pageCount,\r\n recordsCount: outerRecordsCount,\r\n reachedMax,\r\n showMaximizeOnSmallBreakpoints,\r\n variant = 'primary',\r\n isMaximized,\r\n onMaximize,\r\n labels,\r\n}: IPagination) => {\r\n const numberPageCount = Number(pageCount);\r\n const numberCurrentPage = Number(currentPage);\r\n const breakPoint = useBreakpointIndex();\r\n const recordsCount = outerRecordsCount;\r\n\r\n const definedLabels = Object.assign({}, defaultLabels, labels);\r\n\r\n const [hasNoValue, setHasNoValue] = useState<boolean>(false);\r\n\r\n const InputRef = createRef<HTMLInputElement>();\r\n\r\n const options = [];\r\n for (let i = 1; i <= numberPageCount; i++) {\r\n options.push(i);\r\n }\r\n\r\n const [infoButtonRef, setInfoButtonRef] = React.useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n const recordsCountLabel = `${definedLabels.totalRecords}: ${recordsCount}`;\r\n const tooltipProps: TTooltip = React.useMemo(\r\n () => ({\r\n text:\r\n breakPoint <= 3\r\n ? `${recordsCountLabel}.${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && definedLabels.totalRecordsReached) ||\r\n (hasMore && definedLabels.moreData)\r\n }`\r\n : `${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && definedLabels.totalRecordsReached) ||\r\n (hasMore && definedLabels.moreData)\r\n }`,\r\n attachToElement: { current: infoButtonRef! },\r\n closeOnClickOut: true,\r\n }),\r\n [\r\n breakPoint,\r\n definedLabels.moreData,\r\n definedLabels.totalRecordsReached,\r\n hasMore,\r\n infoButtonRef,\r\n reachedMax,\r\n recordsCountLabel,\r\n ],\r\n );\r\n return (\r\n <Box\r\n as=\"nav\"\r\n variant={`layout.common.components.pagination.${variant}`}\r\n aria-label={getLabel('lblQryParamPag').text}\r\n className={`pagination ${\r\n numberPageCount <= 1 && !disableReduced ? 'onlyRefresh' : ''\r\n } ${className ?? ''}`}\r\n >\r\n <Box className=\"pagination__leftToolbar\">\r\n {!hideMaximizeButton &&\r\n (showMaximizeOnSmallBreakpoints || breakPoint > 4) && (\r\n <IconButton\r\n variant={'icon'}\r\n className=\"pagination__fullScreenButton\"\r\n onClick={onMaximize}\r\n icon={!isMaximized ? 'Maximize' : 'Minimize'}\r\n title={\r\n !isMaximized ? definedLabels.maximize : definedLabels.minimize\r\n }\r\n aria-label={\r\n !isMaximized ? definedLabels.maximize : definedLabels.minimize\r\n }\r\n iconSize={'Md'}\r\n />\r\n )}\r\n {!hideInfo && (\r\n <>\r\n {(((reachedMax || hasMore) && breakPoint > 3) || breakPoint <= 3) &&\r\n className !== 'grid__pagination' ? (\r\n <IconButton\r\n variant={'icon-primary'}\r\n icon=\"Info\"\r\n className={`pagination__information ${\r\n reachedMax || hasMore ? 'pagination__alertInfo' : ''\r\n }`}\r\n onClick={() => ApiaUtil.instance.tooltips.open(tooltipProps)}\r\n ref={setInfoButtonRef}\r\n iconSize={'Md'}\r\n aria-label={definedLabels.information}\r\n title={definedLabels.information}\r\n />\r\n ) : (\r\n ''\r\n )}\r\n {breakPoint > 3 && (\r\n <Box\r\n as=\"span\"\r\n className=\"recordsCounter pagination__deleteLabels\"\r\n title={recordsCountLabel}\r\n >\r\n {recordsCount !== -1 &&\r\n `${definedLabels.totalRecords}: ${recordsCount} `}\r\n </Box>\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n\r\n <Box className=\"pagination__controls\">\r\n {(numberPageCount > 0 || disableReduced) && (\r\n <>\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage === 1 ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n title={definedLabels.firstPage}\r\n aria-label={definedLabels.firstPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(1);\r\n }}\r\n icon=\"First\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled || numberCurrentPage <= 1 || isLoading || isPerforming\r\n }\r\n title={definedLabels.previousPage}\r\n aria-label={definedLabels.previousPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(numberCurrentPage - 1);\r\n }}\r\n icon=\"Previous\"\r\n iconSize={'Sm'}\r\n />\r\n {breakPoint > 2 && (\r\n <Box className=\"input\">\r\n <Input\r\n className=\"pagination__controls__input\"\r\n aria-label={definedLabels.pageInputInstructions}\r\n title={`${definedLabels.page}: ${numberCurrentPage} `}\r\n ref={InputRef}\r\n value={hasNoValue ? '' : numberCurrentPage}\r\n onKeyDown={(ev) => {\r\n const regex = /([0-9])|(Backspace)|(Tab)/;\r\n if (!ev.key.match(regex)) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n if (ev.key === 'Enter') {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n onPageChange(numberCurrentPage);\r\n }\r\n }}\r\n onBlur={() => {\r\n onPageChange(numberCurrentPage);\r\n }}\r\n onFocus={(ev) => {\r\n ev.currentTarget.select();\r\n }}\r\n onChange={(ev) => {\r\n setHasNoValue(ev.target.value === '');\r\n if (ev.target.value !== '') {\r\n onPageChange(\r\n Math.max(\r\n 1,\r\n Math.min(\r\n noNaN(Number(ev.currentTarget.value)),\r\n pageCount as number,\r\n ),\r\n ),\r\n );\r\n }\r\n }}\r\n disabled={disabled || isLoading || isPerforming}\r\n />{' '}\r\n /{' '}\r\n <Box\r\n as=\"span\"\r\n title={\r\n recordsCount !== -1\r\n ? `${definedLabels.totalRecords} ${recordsCount}`\r\n : definedLabels.pageInputInstructions\r\n }\r\n >\r\n {pageCount}\r\n </Box>\r\n </Box>\r\n )}\r\n {breakPoint <= 2 && (\r\n <Select\r\n className=\"pagination__selectPage\"\r\n // menuplacement=\"top\"\r\n value={numberCurrentPage}\r\n onChange={(e) => {\r\n onPageChange(Number(e.target.value));\r\n }}\r\n >\r\n <option disabled>Total: {numberPageCount}</option>\r\n {options.map((current) => {\r\n return <option key={current}>{current}</option>;\r\n })}\r\n </Select>\r\n )}\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n title={definedLabels.nextPage}\r\n aria-label={definedLabels.nextPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(numberCurrentPage + 1);\r\n }}\r\n icon=\"Next\"\r\n iconSize={'Sm'}\r\n />\r\n\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n type=\"button\"\r\n title={definedLabels.lastPage}\r\n aria-label={definedLabels.lastPage}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n onClick={() => {\r\n onPageChange(numberPageCount);\r\n }}\r\n icon=\"Last\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n <Box className=\"pagination__rightToolbar\">\r\n {(!hideRefreshButton || onDeleteFilters) && (\r\n <>\r\n {onDeleteFilters && (\r\n <SimpleButton\r\n disabled={isPerforming}\r\n className=\"pagination__deleteFiltersButton\"\r\n data-test-id=\"btn-clear-filters\"\r\n onClick={onDeleteFilters}\r\n >\r\n {breakPoint > 3 && (\r\n <Box as=\"span\" className=\"pagination__deleteLabels\">\r\n {definedLabels.deleteFilters}\r\n </Box>\r\n )}\r\n <Box\r\n as=\"span\"\r\n className={`pagination__appliedFiltersLabel ${\r\n areAllFiltersApplied ? '' : 'withFilters'\r\n }`}\r\n >\r\n {appliedFilters}\r\n </Box>\r\n </SimpleButton>\r\n )}\r\n {!hideRefreshButton && (\r\n <IconButton\r\n title={definedLabels.refresh}\r\n aria-label={definedLabels.refresh}\r\n onClick={() => onRefresh(numberCurrentPage)}\r\n icon=\"Refresh\"\r\n iconSize={'Md'}\r\n disabled={disabled || isLoading}\r\n variant={'icon-primary'}\r\n isLoading={isPerforming}\r\n className=\"pagiantion__refreshIcon\"\r\n data-test-id=\"btn-refresh\"\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const Pagination = React.memo(NoMemoPagination);\r\n","import { Command } from './Templater';\r\n\r\nexport interface IReplacer<ContentType, ReturnType> {\r\n /**\r\n * This regExp will be used by the templater to determine if it should call\r\n * the parse function or not.\r\n */\r\n match: RegExp;\r\n /**\r\n * The parse method should take the RegExpMatchArray and the value of the\r\n * original attribute and return whatever the replacer is intended for.\r\n * */\r\n parse: (result: RegExpMatchArray, value: ContentType) => ReturnType;\r\n}\r\n\r\n/**\r\n * The Attribute parsers are intended to parse some attributes whose names\r\n * match in one of the following array items' match property. If the match\r\n * property matches the attribute name, the parse function will be called with\r\n * the result of the match and the original Value passed to that attribute.\r\n * This way, it can be modified not only the name but the value as well.\r\n */\r\nconst AttributeParsers: IReplacer<\r\n string,\r\n { newName: string; newValue: unknown }[] | null\r\n>[] = [\r\n /**\r\n * Allows to pass javascript event handlers through the format\r\n * onEventDispatched, the main difficulty is that the html parser returns the\r\n * attributes with lowercase, that's why any attribute of the type\r\n * onEventDispatched will be passed to the component as onEventdispatched\r\n * (note the lowercase 'd').\r\n */\r\n {\r\n match: /^(?:data-)?on(.*)$/i,\r\n parse([, originalAction], value) {\r\n if (value.match(/^__contextMethod/))\r\n return [\r\n {\r\n newName: `on${originalAction[0].toUpperCase()}${originalAction.slice(\r\n 1,\r\n )}`,\r\n newValue: value,\r\n },\r\n ];\r\n\r\n let newName = `on${originalAction\r\n .charAt(0)\r\n .toUpperCase()}${originalAction.slice(1)}`;\r\n\r\n const composedEvent = originalAction.match(/^(mouse|key|double)(.*)$/i);\r\n if (composedEvent) {\r\n newName = `on${composedEvent[1]\r\n .charAt(0)\r\n .toUpperCase()}${composedEvent[1].slice(1)}${composedEvent[2]\r\n .charAt(0)\r\n .toUpperCase()}${composedEvent[2].slice(1)}`;\r\n }\r\n\r\n return [\r\n {\r\n newName,\r\n newValue: (ev: unknown) => {\r\n const evalString = value.replace(/return [^;\\n\\r]+/, '');\r\n\r\n const f = eval(evalString) as (ev: unknown) => void;\r\n\r\n f(ev);\r\n },\r\n },\r\n ];\r\n },\r\n },\r\n {\r\n /**\r\n * Allows to pass style objects as JSON strings\r\n */\r\n match: /^data-style$/,\r\n parse(_match, value) {\r\n try {\r\n return [{ newName: 'style', newValue: JSON.parse(value) }];\r\n } catch (e) {\r\n console.error({ value, e });\r\n }\r\n return null;\r\n },\r\n },\r\n {\r\n /**\r\n * Allows conditional rendering of a component\r\n */\r\n match: /^data-render$/,\r\n parse(_match, originalValue) {\r\n if (originalValue !== '' && !JSON.parse(originalValue)) {\r\n throw new Command('COMMAND: PREVENT_RENDERING');\r\n }\r\n return [\r\n {\r\n newName: 'data-render',\r\n newValue: undefined,\r\n },\r\n ];\r\n },\r\n },\r\n {\r\n /**\r\n * Allow to pass json data as property to the components\r\n */\r\n match: /^data-json-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, name], originalValue) => {\r\n try {\r\n return [\r\n {\r\n newName: name,\r\n newValue: JSON.parse(originalValue) as unknown,\r\n },\r\n ];\r\n } catch (e) {\r\n console.info(`Prop: ${name}, originalValue: ${originalValue}`);\r\n console.error(e);\r\n return null;\r\n }\r\n },\r\n },\r\n {\r\n match: /^data(?:-dom)?-variant$/,\r\n parse(_, newValue) {\r\n return [\r\n { newName: 'data-variant', newValue },\r\n { newName: 'variant', newValue },\r\n ];\r\n },\r\n },\r\n {\r\n match: /^data-dom-([a-zA-Z][\\w_]*)/i,\r\n parse([, name], newValue) {\r\n return [{ newName: `data-${name}`, newValue }];\r\n },\r\n },\r\n {\r\n /**\r\n * Change all the attributes whose name matches with data-(name) to just\r\n * name\r\n */\r\n match: /^data-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, newName], newValue) => [{ newName, newValue }],\r\n },\r\n /**\r\n * Allows to pass conditional data to a component. It accepts as value a JSON\r\n * string with the following structure:\r\n *\r\n * data-condition-NAME_OF_ATTRIBUTE=`\r\n * {\r\n * \"condition\": CONDITION,\r\n * \"NAME_OF_ATTRIBUTE\": VALUE_TO_PASS_TO_THE_COMPONENT\r\n * }\r\n *\r\n * Where:\r\n * - NAME_OF_ATTRIBUTE can be anything you want, the only limitations are\r\n * the attribute names limitations. - CONDITION will be evaluated with a\r\n * ternary conditional, if it parses to true the value will be passed or\r\n * hidden elsewhere - VALUE_TO_PASS_TO_THE_COMPONENT Since all the attribute\r\n * will be parsed with JSON, the value to pass can be anything that\r\n * can be parsed this way.\r\n */\r\n {\r\n match: /^data-condition-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, newName], value) => {\r\n try {\r\n const parsedValue = JSON.parse(value) as Record<string, unknown>;\r\n return [\r\n {\r\n newName,\r\n newValue: parsedValue.condition ? parsedValue[newName] : undefined,\r\n },\r\n ];\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n return null;\r\n },\r\n },\r\n {\r\n match: /^tabindex/i,\r\n parse(_, newValue) {\r\n return [{ newName: 'tabIndex', newValue }];\r\n },\r\n },\r\n];\r\n\r\nexport default AttributeParsers;\r\n","/**\r\n * The PathShortcuts are intended to make it easier to write the path to a\r\n * component in the JSP file. They must match with the beginning of the\r\n * data-component attribute.\r\n */\r\nconst PathShortcuts: Record<string, string> = {};\r\n\r\nexport default PathShortcuts;\r\n","/**\r\n * All the keys included in the following array will be removed from the\r\n * attributes of the parsed components.\r\n */\r\nconst AttributeFilters = ['data-template', 'data-component', 'style'];\r\n\r\nexport default AttributeFilters;\r\n","/**\r\n * The AttributeReplacers return new names for some\r\n * attributes.\r\n */\r\nconst AttributeReplacers: Record<string, string> = {\r\n // Common html props\r\n class: 'className',\r\n colspan: 'colSpan',\r\n for: 'htmlFor',\r\n readonly: 'readOnly',\r\n autocomplete: 'autoComplete',\r\n\r\n // Chart button\r\n chartid: 'chartId',\r\n\r\n // Dynamic button\r\n apiaprops: 'apiaProps',\r\n\r\n // Profiles props\r\n\r\n // Users administration\r\n isglobal: 'isGlobal',\r\n iscreate: 'isCreate',\r\n ldapfull: 'ldapFull',\r\n passwordprops: 'passwordProps',\r\n\r\n // Validation fields\r\n initialvalue: 'initialValue',\r\n submitvalueparser: 'submitValueParser',\r\n validationclass: 'validationClass',\r\n validationfunction: 'validationFunction',\r\n validationrules: 'validationRules',\r\n allowpickbeforetoday: 'allowPickBeforeToday',\r\n evtmetafilters: 'evtMetaFilters',\r\n trafreemetafilters: 'traFreeMetaFilters',\r\n\r\n // Documents info modal\r\n allowdownload: 'allowDownload',\r\n\r\n // Documents upload modal\r\n allowpickfromdirectories: 'allowPickFromDirectories',\r\n allowpickfrommonitor: 'allowPickFromMonitor',\r\n\r\n // Document Info modal\r\n frommonitor: 'fromMonitor',\r\n showhistory: 'showHistory',\r\n showdownloadinfo: 'showDownloadInfo',\r\n showpermissions: 'showPermissions',\r\n // LangPicker\r\n currentlang: 'currentLang',\r\n\r\n // Change Dates Modal\r\n dateinputname: 'dateInputName',\r\n initiallyexpanded: 'initiallyExpanded',\r\n\r\n buttonsactions: 'buttonsActions',\r\n\r\n // Reports\r\n reportname: 'reportName',\r\n};\r\n\r\nexport default AttributeReplacers;\r\n","import { domToReact, Element } from 'html-react-parser';\r\nimport { cloneDeep } from 'lodash-es';\r\nimport * as React from 'react';\r\nimport { ICommentReplacerData } from './CommentsParsers';\r\nimport { IAlterDefaultOptions, parseOptions } from './Templater';\r\n\r\nconst ComplexReplacements: ((\r\n domNode: Element,\r\n Component: React.ComponentType,\r\n customOptions?: IAlterDefaultOptions,\r\n commentsData?: ICommentReplacerData,\r\n) => React.ReactNode)[] = [\r\n (domNode, _, customOptions, commentsData) => {\r\n if (\r\n domNode.attribs['data-prevent-parse'] &&\r\n domNode.attribs['data-prevent-parse'].trim() === 'true'\r\n ) {\r\n return null;\r\n }\r\n if (\r\n domNode.attributes.find((current) => current.name === 'data-fragment')\r\n ) {\r\n const children = domToReact(\r\n cloneDeep(domNode.children),\r\n parseOptions(customOptions, commentsData),\r\n );\r\n return <>{children}</>;\r\n }\r\n return false;\r\n },\r\n];\r\n\r\nexport default ComplexReplacements;\r\n","import {\r\n Image,\r\n Input,\r\n Box,\r\n Container,\r\n Button,\r\n HeadingProps,\r\n Heading,\r\n Label,\r\n Paragraph,\r\n Select,\r\n} from '@apia/theme';\r\n\r\nconst TagReplacers = {\r\n div: Box,\r\n button: Button,\r\n container: Container,\r\n h1: (props: HeadingProps) => <Heading as=\"h1\" {...props} />,\r\n h2: (props: HeadingProps) => <Heading as=\"h2\" {...props} />,\r\n h3: (props: HeadingProps) => <Heading as=\"h3\" {...props} />,\r\n h4: (props: HeadingProps) => <Heading as=\"h4\" {...props} />,\r\n h5: (props: HeadingProps) => <Heading as=\"h5\" {...props} />,\r\n h6: (props: HeadingProps) => <Heading as=\"h6\" {...props} />,\r\n img: Image,\r\n label: Label,\r\n input: Input,\r\n p: Paragraph,\r\n select: Select,\r\n table: (props: HeadingProps) => <Box as=\"table\" {...props} />,\r\n};\r\n\r\nexport default TagReplacers;\r\n","const contextMethods: Record<string, Record<string, () => unknown>> = {};\r\n\r\nexport default contextMethods;\r\n","import contextMethods from './contextMethods';\r\n\r\n/**\r\n * The AttributeValueParsers are intended to\r\n * parse some attibutes depending on their values\r\n * instead of their names.\r\n */\r\nconst AttributeValueParsers = (currentValue: unknown) => {\r\n if (currentValue === 'true') return true;\r\n if (currentValue === 'false') return false;\r\n\r\n if (typeof currentValue === 'string') {\r\n const result = currentValue.match(/^__contextMethod\\.(\\w+)\\.(\\w+)$/);\r\n if (result) {\r\n return contextMethods[result[1]][result[2]];\r\n }\r\n }\r\n return currentValue;\r\n};\r\n\r\nexport default AttributeValueParsers;\r\n","import { ReactNode } from 'react';\r\n\r\ninterface IErrorWithMessage {\r\n message: string;\r\n}\r\nexport function isMessage(error: unknown): error is IErrorWithMessage {\r\n return !!(typeof error === 'object' && error && 'message' in error);\r\n}\r\nexport function processCommand(command: string) {\r\n return Commands[command]();\r\n}\r\nconst Commands = {\r\n PREVENT_RENDERING: () => null,\r\n} as Record<string, () => ReactNode>;\r\n\r\nexport default Commands;\r\n","import { cloneDeep } from 'lodash-es';\r\nimport React from 'react';\r\nimport { Spinner } from 'theme-ui';\r\nimport { IReplacer } from './AttributeParsers';\r\nimport { importTemplaterComponent, parseShortcut } from './Templater';\r\n\r\nexport interface ICommentReplacerData {\r\n customShortcuts: string[][];\r\n SuspenseComponent: React.FunctionComponent;\r\n}\r\n\r\nconst CommentsParsers: IReplacer<ICommentReplacerData, ICommentReplacerData>[] =\r\n [\r\n {\r\n /**\r\n * This parser allows to put a comment with the structure:\r\n * <!-- addRoute<newName,path/to/the/components> -->\r\n * And then use it in replacement of the path:\r\n *\r\n * @example\r\n *\r\n * <!-- addRoute<modals,path/to/the/modals> -->\r\n * <div data-component=\"modals/Info\">...\r\n */\r\n match: /addRoute *<(.{2,}),(.+)>/,\r\n parse(result, commentsData) {\r\n const routeShourtcut = result[1];\r\n const routePath = result[2];\r\n const newData = cloneDeep(commentsData);\r\n newData.customShortcuts.push([\r\n parseShortcut(routeShourtcut),\r\n routePath,\r\n ]);\r\n return newData;\r\n },\r\n },\r\n {\r\n /**\r\n * This parser allows anybody to put a comment with the structure:\r\n * <!-- SuspenseComponent<path/to/Component> --> or\r\n * <!-- SuspenseComponent<null> -->\r\n * which will result in a custom for the lazy components.\r\n */\r\n match: /SuspenseComponent *<(\\w+)>/,\r\n parse(result, commentsData) {\r\n const responseData = commentsData;\r\n if (result[1].toLowerCase() === 'spinner')\r\n responseData.SuspenseComponent = Spinner;\r\n else\r\n responseData.SuspenseComponent = importTemplaterComponent(result[1]);\r\n return responseData;\r\n },\r\n },\r\n ];\r\n\r\nexport default CommentsParsers;\r\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\nimport { lazy, ComponentType, ElementType, Suspense } from 'react';\r\nimport * as React from 'react';\r\nimport parse, {\r\n HTMLReactParserOptions,\r\n Element,\r\n domToReact,\r\n} from 'html-react-parser';\r\nimport { Box } from 'theme-ui';\r\nimport { cloneDeep, isFunction, uniqueId } from 'lodash-es';\r\nimport AttributeParsers from './AttributeParsers';\r\nimport PathShortcuts from './PathShortcuts';\r\nimport AttributeFilters from './AttributeFilters';\r\nimport AttributeReplacers from './AttributeReplacers';\r\nimport ComplexReplacements from './ComplexReplacements';\r\nimport TagReplacers from './TagReplacers';\r\nimport AttributeValueParsers from './AttributeValueParsers';\r\nimport { isMessage, processCommand } from './Commands';\r\nimport CommentsParsers, { ICommentReplacerData } from './CommentsParsers';\r\nimport contextMethods from './contextMethods';\r\n\r\nconst parameters = {\r\n performance: {\r\n measureTime: false,\r\n },\r\n};\r\n\r\nconsole.time('Templater parse');\r\nconsole.time('Templater pre screen unlock');\r\nlet templaterTimer: number;\r\n\r\nexport function importTemplaterComponent(path: string) {\r\n return lazy<ComponentType<unknown>>(() => {\r\n return new Promise<{\r\n default: ComponentType<unknown>;\r\n }>((resolve) => {\r\n import(\r\n /* webpackChunkName: \"[request]\" */\r\n /* webpackInclude: /\\.tsx?$/ */\r\n /* webpackPreload: true */\r\n /* webpackExclude: /projectAnalysisTree/ */\r\n `/src/dynamic/${path}`\r\n )\r\n .then((result: unknown) => {\r\n resolve(result as any);\r\n })\r\n .catch((error: unknown) => {\r\n resolve({\r\n default: () => {\r\n console.error(error);\r\n throw new Error(\r\n `The above error ocurred at component ${path}, does it exist?`,\r\n );\r\n },\r\n });\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function parseShortcut(shortcut: string) {\r\n if ('^($)[.'.indexOf(shortcut) !== -1) return `\\\\${shortcut}`;\r\n return shortcut;\r\n}\r\nconst parsedShortcuts: string[][] = Object.entries(PathShortcuts).map(\r\n ([shortcut, path]) => {\r\n return [parseShortcut(shortcut), path];\r\n },\r\n);\r\n\r\nconst Wrapper = ({\r\n children,\r\n onMount,\r\n}: {\r\n children: React.ReactNode;\r\n onMount?: () => void;\r\n}) => {\r\n React.useEffect(() => {\r\n if (onMount) {\r\n onMount();\r\n }\r\n return () => {};\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return children;\r\n};\r\n\r\nexport interface IAlterDefaultOptions {\r\n /**\r\n * It's possible to replace some attributes and parse the value with\r\n * a specific replacement function you provide, in order to provide\r\n * custom behavior to the template.\r\n *\r\n * @example\r\n *\r\n * attributeParsers: [\r\n * {\r\n * match: /^data-say-([\\w]+)$/,\r\n * parse: (matchResult, originalValue) => ({ newName: 'onLoad', newValue:\r\n * () => alert(matchResult[1]) })\r\n * }\r\n * ]\r\n */\r\n attributeParsers?: typeof AttributeParsers;\r\n /**\r\n * It's possible to replace some attributes with this property. Each\r\n * attribute will be searched in the dictionary and if it's found,\r\n * then it will be replaced with the value which pairs that key.\r\n *\r\n * @example\r\n *\r\n * attributesReplacement: {\r\n * class: 'className' // Very common in react, it's implemented by default\r\n * }\r\n */\r\n attributesReplacement?: Record<string, string>;\r\n /**\r\n * With this parameter the templater shouts to the console the important\r\n * events it goes through.\r\n */\r\n debug?: boolean;\r\n /**\r\n * It's possible to filter some attributes passing an array of undesired\r\n * values\r\n *\r\n * @example\r\n *\r\n * filterAttributes: ['data-dangerous']\r\n */\r\n filterAttributes?: string[];\r\n /**\r\n * WARNING: If\r\n *\r\n * The props object can be accessed from the template, in this way,\r\n * it's possible to pass any kind of javascript data to be used\r\n * when generating the template's structure.\r\n */\r\n props?: Record<string, unknown>;\r\n}\r\n\r\nexport interface IDownloadAndParseTemplateByName extends IAlterDefaultOptions {\r\n avoidCache?: boolean;\r\n /**\r\n * The request parameters is an object that will be sent as queryString\r\n * to the server.\r\n */\r\n requestParameters: Record<string, unknown>;\r\n}\r\n\r\nexport type TTemplateParser = (document: Document) => void;\r\n\r\ndeclare global {\r\n interface Window {\r\n onPreParseTemplate: TTemplateParser;\r\n }\r\n}\r\n\r\nexport const Command = Error;\r\n\r\nfunction makeEmptyCommentsData(): ICommentReplacerData {\r\n return { customShortcuts: [], SuspenseComponent: () => null };\r\n}\r\n\r\nexport const parseOptions = (\r\n customOptions?: IAlterDefaultOptions,\r\n commentsData?: ICommentReplacerData,\r\n): HTMLReactParserOptions => {\r\n let actualCommentsData = commentsData ?? makeEmptyCommentsData();\r\n\r\n return {\r\n trim: true,\r\n replace: (domNode) => {\r\n if (customOptions?.debug) console.log(domNode);\r\n if (domNode.type.toLowerCase() === 'comment') {\r\n CommentsParsers.forEach((parser) => {\r\n const matchResult = ((domNode as any).data as string).match(\r\n parser.match,\r\n );\r\n if (matchResult) {\r\n actualCommentsData = parser.parse(matchResult, actualCommentsData);\r\n }\r\n });\r\n }\r\n if (domNode instanceof Element && domNode.attribs) {\r\n let componentName = domNode.attribs['data-component'];\r\n\r\n if (componentName) {\r\n actualCommentsData.customShortcuts.forEach(\r\n ([shortcut, replacement]) => {\r\n if (componentName.match(new RegExp(`^${shortcut}.+`))) {\r\n componentName =\r\n replacement + componentName.slice(shortcut.length);\r\n }\r\n },\r\n );\r\n parsedShortcuts.forEach(([shortcut, replacement]) => {\r\n if (componentName.match(new RegExp(`^${shortcut}.+`))) {\r\n componentName =\r\n replacement + componentName.slice(shortcut.length);\r\n }\r\n });\r\n\r\n if (componentName.startsWith('@'))\r\n componentName = componentName.slice(1);\r\n }\r\n\r\n try {\r\n const Component = componentName\r\n ? importTemplaterComponent(componentName)\r\n : (TagReplacers[domNode.name as keyof typeof TagReplacers] ??\r\n ((props: unknown) => (\r\n <Box as={domNode.name as ElementType} {...(props as any)} />\r\n )));\r\n\r\n for (let i = 0; i < ComplexReplacements.length; i++) {\r\n const complexReplacement = ComplexReplacements[i];\r\n const result = complexReplacement(\r\n domNode,\r\n Component,\r\n customOptions,\r\n commentsData,\r\n );\r\n if (result !== false) return <Suspense>{result}</Suspense>;\r\n }\r\n\r\n [\r\n ...AttributeFilters,\r\n ...(customOptions?.filterAttributes ?? []),\r\n ].forEach((att) => {\r\n // eslint-disable-next-line no-param-reassign\r\n delete domNode.attribs[att];\r\n });\r\n\r\n const props = Object.entries(domNode.attribs).reduce(\r\n (dictionary, [initialName, initialValue]) => {\r\n const name = initialName;\r\n const value = initialValue;\r\n let hasParsed = false;\r\n const returnDictionary = { ...dictionary };\r\n for (let i = 0; i < AttributeParsers.length; i++) {\r\n const parser = AttributeParsers[i];\r\n const match = name.match(parser.match);\r\n if (customOptions?.debug) console.log(parser.match, match);\r\n if (match) {\r\n const parsed = parser.parse(match, value);\r\n if (customOptions?.debug) console.log(parser.match, parsed);\r\n if (parsed) {\r\n parsed.forEach(({ newName, newValue }) => {\r\n const finalName =\r\n {\r\n ...AttributeReplacers,\r\n ...(customOptions?.attributesReplacement ?? {}),\r\n }[newName] ?? newName;\r\n returnDictionary[finalName] =\r\n AttributeValueParsers(newValue);\r\n });\r\n hasParsed = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (!hasParsed) {\r\n const newName =\r\n {\r\n ...AttributeReplacers,\r\n ...(customOptions?.attributesReplacement ?? {}),\r\n }[name] ?? name;\r\n returnDictionary[newName] = AttributeValueParsers(value);\r\n }\r\n\r\n return returnDictionary;\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n\r\n const children: React.ReactNode = domToReact(\r\n cloneDeep(domNode.children),\r\n parseOptions(customOptions, actualCommentsData),\r\n );\r\n\r\n delete props.children;\r\n\r\n const { onComponentload } = props as { onComponentload?: () => void };\r\n if (onComponentload) {\r\n delete props.onComponentload;\r\n }\r\n\r\n if (parameters.performance.measureTime) {\r\n clearTimeout(templaterTimer);\r\n templaterTimer = setTimeout(() => {\r\n console.timeEnd('Templater parse');\r\n }, 150) as any;\r\n }\r\n\r\n if ((actualCommentsData as any).SuspenseComponent) {\r\n if (onComponentload) {\r\n return (\r\n <Suspense>\r\n <Wrapper onMount={onComponentload}>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Wrapper>\r\n </Suspense>\r\n );\r\n }\r\n return (\r\n <Suspense>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Suspense>\r\n );\r\n }\r\n if (onComponentload)\r\n return (\r\n <Wrapper onMount={onComponentload}>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Wrapper>\r\n );\r\n return (\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n );\r\n } catch (e) {\r\n if (isMessage(e)) {\r\n const match = e.message.match(/COMMAND: *(\\w[\\w\\d_-]*)/);\r\n if (match) {\r\n return processCommand(match[1]);\r\n }\r\n }\r\n console.error(e);\r\n }\r\n }\r\n return domNode as any;\r\n },\r\n htmlparser2: { lowerCaseAttributeNames: false },\r\n };\r\n};\r\n\r\nclass Templater {\r\n private static _instance: Templater | null = null;\r\n public static get instance() {\r\n if (!this._instance) {\r\n this._instance = new Templater();\r\n }\r\n return this._instance!;\r\n }\r\n\r\n isDownloadingTemplate = false;\r\n\r\n templates: Record<string, string> = {};\r\n\r\n private constructor() {\r\n this.initTemplates();\r\n }\r\n\r\n private initTemplates() {\r\n const templates = [\r\n ...document.querySelectorAll('[data-template]'),\r\n ] as HTMLElement[];\r\n const templatesObject = templates.reduce((dictionary, template) => {\r\n const name = template.getAttribute('data-template');\r\n if (!name) return dictionary;\r\n return {\r\n ...dictionary,\r\n [name]: this.parseContent(name, template.outerHTML, {}),\r\n };\r\n }, {});\r\n templates.forEach((template) => template.remove());\r\n this.templates = templatesObject;\r\n }\r\n\r\n /**\r\n * This method parses the string looking for <script class=\"context\"> tags\r\n * and placeholders, run that code and make the replacements in the template\r\n * string.\r\n *\r\n * @param content The HTML string\r\n */\r\n private parseContent(\r\n templateName: string,\r\n content: string,\r\n props: Record<string, unknown>,\r\n ) {\r\n function shoutError(error: string) {\r\n console.error('%cParse template error', 'font-size: 16px; margin: 10px');\r\n throw new Error(`${error} at template ${templateName}`);\r\n }\r\n let context: Record<string, string> = {};\r\n let newContent = content\r\n .replaceAll(\r\n /data-json-([\\w_-]+)=\"([^\"]+)\"/g,\r\n (_, propName: string, propValue: string) => {\r\n return `data-json-${propName}='${propValue.replaceAll(\r\n \"'\",\r\n ''',\r\n )}'`;\r\n },\r\n )\r\n .replaceAll(\r\n /<script [^>]*class=\"context\"[^>]*>([\\s\\S]*?)<\\/script>/g,\r\n (_, scriptContent) => {\r\n if ((scriptContent as string).match(/window[^=;]*=/))\r\n throw new Error('Assignment to window is forbidden');\r\n\r\n try {\r\n context = {\r\n ...context,\r\n ...(eval(`{\r\n let context = JSON.parse(\\`${JSON.stringify(context).replaceAll(\r\n '\"',\r\n '\\\\\"',\r\n )}\\`);\r\n ${scriptContent as string};\r\n context\r\n }`) as Record<string, string>),\r\n };\r\n } catch (e) {\r\n console.info(`Script contents: ${scriptContent as string}`);\r\n console.info(`Props`, props);\r\n shoutError(e as any);\r\n }\r\n return '';\r\n },\r\n );\r\n\r\n const contextId = uniqueId();\r\n\r\n const replacementVars = { context, props };\r\n Object.entries(replacementVars).forEach(([varName, varContent]) => {\r\n if (varContent)\r\n Object.entries(varContent).forEach(([key, value]) => {\r\n if (isFunction(value)) {\r\n if (!contextMethods[contextId]) contextMethods[contextId] = {};\r\n const methodId = uniqueId();\r\n contextMethods[contextId][methodId] = value;\r\n newContent = newContent.replaceAll(\r\n new RegExp(`{{\\\\s*(${varName})\\\\??.${key}\\\\s*}}`, 'g'),\r\n `__contextMethod.${contextId}.${methodId}`,\r\n );\r\n } else\r\n newContent = newContent.replaceAll(\r\n new RegExp(`{{\\\\s*(${varName})\\\\??.${key}\\\\s*}}`, 'g'),\r\n value !== undefined ? (value as string) : '',\r\n );\r\n });\r\n });\r\n\r\n newContent = newContent.replaceAll(\r\n /{{\\s*(context|props)\\?.([_$a-zA-Z]\\w+)\\s*}}/g,\r\n '',\r\n );\r\n\r\n const result = newContent.match(\r\n /\\{\\{(context|props)\\.([_$a-zA-Z]\\w+)\\\\s*}}/,\r\n );\r\n\r\n if (result) shoutError(`${result[1]}.${result[2]} is undefined`);\r\n\r\n return newContent;\r\n }\r\n\r\n /**\r\n * This method takes a template from the HTML Document and parses it to React\r\n * Components.\r\n *\r\n * @param name The name of the template you are looking for, it must be specified as\r\n * data-template=\"name\" in the HTML element you want to use as template.\r\n * @param options This argument allows you to alter the behavior of the parser, for example\r\n * to replace some attribute names, parse some attributes with a custom parser function or\r\n * discard some attributes. See the type IAlterDefaultOptions to get more information\r\n *\r\n * @returns A ReactComponent as the result of the parsed HTML template.\r\n */\r\n getTemplateByName(name: string, options?: IAlterDefaultOptions) {\r\n if (!this.templates[name])\r\n throw new Error('There is no template with such name, ', name as any);\r\n const component = this.#actuallyParse(\r\n this.parseContent(name, this.templates[name], options?.props as any),\r\n parseOptions(options),\r\n );\r\n return component;\r\n }\r\n\r\n /**\r\n * This method parses a string in HTML to React Components.\r\n *\r\n * @param content The HTML string to parse to React Components\r\n * @param options This argument allows you to alter the behavior of the parser, for example\r\n * to replace some attribute names, parse some attributes with a custom parser function or\r\n * discard some attributes. See the type IAlterDefaultOptions to get more information\r\n *\r\n * @returns A ReactComponent as the result of the parsed HTML template.\r\n */\r\n parseString(content: string, options?: IAlterDefaultOptions) {\r\n return this.#actuallyParse(\r\n this.parseContent('parseStringTemplate', content, options?.props as any),\r\n parseOptions(options),\r\n );\r\n }\r\n\r\n #actuallyParse = (\r\n html: string,\r\n options?: HTMLReactParserOptions,\r\n ): string | JSX.Element | JSX.Element[] => {\r\n let actualHTML = html;\r\n\r\n if (window.onPreParseTemplate) {\r\n const parser = new DOMParser();\r\n const document = parser.parseFromString(html, 'text/html');\r\n\r\n window.onPreParseTemplate?.(document);\r\n\r\n actualHTML = document.body.innerHTML;\r\n }\r\n\r\n return parse(actualHTML, options);\r\n };\r\n}\r\n\r\nexport { Templater };\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { memo } from 'react';\r\nimport { Templater } from '../../../templater/Templater';\r\nimport { Remarkable } from 'remarkable';\r\n\r\nconst MDRenderer = ({ str }: { str: string }) => {\r\n return (\r\n <Box {...getVariant('layout.common.markdown')}>\r\n {Templater.instance.parseString(\r\n new Remarkable({ linkTarget: '_blank' }).render(str),\r\n )}\r\n </Box>\r\n );\r\n};\r\nexport default memo(MDRenderer);\r\n","import { Icon, TIconName } from '@apia/icons';\r\nimport { Box, Close, getVariant, Switch, SwitchProps } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { getLabel, toBoolean } from '@apia/util';\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface ISwitchBox {\r\n align?: 'right' | 'left';\r\n className?: string;\r\n disabled?: boolean;\r\n icon?: TIconName;\r\n label: string;\r\n notSwitchedLabel?: boolean;\r\n onClose?: () => unknown;\r\n onSwitch?: (switched: boolean) => unknown;\r\n switchedLabel?: string;\r\n switchProps?: SwitchProps;\r\n value?: boolean;\r\n}\r\n\r\nexport const SwitchCard = observer(\r\n ({\r\n align = 'left',\r\n icon,\r\n label,\r\n notSwitchedLabel,\r\n onClose,\r\n onSwitch,\r\n switchedLabel,\r\n switchProps,\r\n value,\r\n disabled,\r\n }: ISwitchBox) => {\r\n const [isSwitched, setIsSwitched] = useState(toBoolean(value));\r\n\r\n // Keep internal state in sync if the parent changes the `value` prop.\r\n useEffect(() => {\r\n setIsSwitched(toBoolean(value));\r\n }, [value]);\r\n\r\n const handleSwitchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.checked;\r\n setIsSwitched(newValue);\r\n if (onSwitch) {\r\n onSwitch(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Box\r\n className=\"switch__card\"\r\n {...getVariant('layout.common.components.switchCard')}\r\n >\r\n {align === 'left' && (\r\n <Switch\r\n disabled={disabled}\r\n checked={isSwitched}\r\n {...switchProps}\r\n onChange={handleSwitchChange}\r\n />\r\n )}\r\n <Box className=\"label__container\" title={label}>\r\n {icon && <Icon name={icon} title=\"\" />}\r\n {label}\r\n </Box>\r\n {((switchedLabel && isSwitched) || align === 'right' || onClose) && (\r\n <Box className=\"switch__container\">\r\n {!notSwitchedLabel &&\r\n (isSwitched\r\n ? getLabel('lblCanUpdate').text\r\n : getLabel('lblCannotUpdate').text)}\r\n {align === 'right' && (\r\n <Switch\r\n disabled={disabled}\r\n checked={isSwitched}\r\n {...switchProps}\r\n onChange={handleSwitchChange}\r\n className=\"switch\"\r\n title={\r\n isSwitched\r\n ? getLabel('lblCanUpdate').text\r\n : getLabel('lblCannotUpdate').text\r\n }\r\n />\r\n )}\r\n {onClose && !disabled && (\r\n <Close disabled={disabled} onClick={onClose} />\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport { SwitchCard } from './SwitchCard';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from './Permissions';\r\n\r\nconst PermissionsList = observer(() => {\r\n const controller = usePermissionsContext();\r\n const state = controller.permissions;\r\n\r\n return (\r\n <Box className=\"permissions__list\">\r\n {state.users && state.users.length > 0 && (\r\n <>\r\n <span>{getLabel('sbtUsers').text}</span>\r\n <Box as=\"ul\">\r\n {state.users.map((c) => {\r\n return (\r\n <Box as=\"li\" key={c.userId}>\r\n <SwitchCard\r\n disabled={controller.disabled}\r\n label={c.userLogin}\r\n align=\"right\"\r\n icon=\"User2\"\r\n onClose={() =>\r\n controller.onChangeUsers(\r\n controller.permissions.users.filter(\r\n (s) => s.userId !== c.userId,\r\n ),\r\n )\r\n }\r\n onSwitch={(isSwitched) => (c.canUpdate = isSwitched)}\r\n value={c.canUpdate}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </>\r\n )}\r\n {state.pools && state.pools.length > 0 && (\r\n <>\r\n <span>{getLabel('lblPool').text}</span>\r\n <Box as=\"ul\">\r\n {state.pools.map((c) => {\r\n return (\r\n <Box as=\"li\" key={c.poolName}>\r\n <SwitchCard\r\n label={c.poolName}\r\n align=\"right\"\r\n icon=\"Groups\"\r\n onClose={() =>\r\n controller.onChangePools(\r\n controller.permissions.pools.filter(\r\n (s) => s.poolId !== c.poolId,\r\n ),\r\n )\r\n }\r\n onSwitch={(isSwitched) => (c.canUpdate = isSwitched)}\r\n value={c.canUpdate}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nexport default PermissionsList;\r\n","import { makeApiaUsersModal2 } from '@apia/api';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from '../Permissions';\r\nimport { SimpleButton } from '../../forms';\r\n\r\nexport const UserModalBtn = observer(() => {\r\n const context = usePermissionsContext();\r\n\r\n return (\r\n <SimpleButton\r\n disabled={context.disabled}\r\n variant=\"outline\"\r\n onClick={() => {\r\n makeApiaUsersModal2()\r\n .openModal({\r\n title: window.LBL_ADD_USER,\r\n })\r\n .then((selected) => {\r\n context.onChangeUsers(\r\n selected.reduce(\r\n (acc, c) => {\r\n const newItem = {\r\n userId: c.row.id,\r\n userLogin: String(c.row.cells[0].children),\r\n canUpdate: false,\r\n };\r\n\r\n if (!acc.some((c) => c.userId === newItem.userId)) {\r\n acc.push(newItem);\r\n }\r\n return acc;\r\n },\r\n [...context.permissions.users],\r\n ),\r\n );\r\n });\r\n }}\r\n >\r\n {getLabel('btnAddUser').text}\r\n </SimpleButton>\r\n );\r\n});\r\n","import { makeApiaPoolsModals2 } from '@apia/api';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from '../Permissions';\r\nimport { SimpleButton } from '../../forms';\r\n\r\nexport const PoolModalBtn = observer(() => {\r\n const context = usePermissionsContext();\r\n\r\n return (\r\n <SimpleButton\r\n disabled={context.disabled}\r\n variant=\"outline\"\r\n onClick={() => {\r\n makeApiaPoolsModals2()\r\n .openModal({\r\n title: window.LBL_ADD_GROUP,\r\n })\r\n .then((selected) => {\r\n context.onChangePools(\r\n selected.reduce(\r\n (acc, c) => {\r\n const newItem = {\r\n poolId: c.row.id,\r\n poolName: String(c.row.cells[0].children),\r\n canUpdate: false,\r\n };\r\n\r\n if (!acc.some((c) => c.poolId === newItem.poolId)) {\r\n acc.push(newItem);\r\n }\r\n return acc;\r\n },\r\n [...context.permissions.pools],\r\n ),\r\n );\r\n });\r\n }}\r\n >\r\n {getLabel('btnAddPool').text}\r\n </SimpleButton>\r\n );\r\n});\r\n","import { Box, getVariant, Select } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport PermissionsList from './PermissionsList';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { UserModalBtn } from './modals/UserModalBtn';\r\nimport { PoolModalBtn } from './modals/PoolModalBtn';\r\nimport { createContext, useContext } from 'react';\r\nimport { CollapsiblePanel } from '../collapsiblePanel';\r\n\r\nexport type TPickUserForPermissions = {\r\n userId: string;\r\n userLogin: string;\r\n canUpdate: boolean;\r\n};\r\n\r\nexport type TPickPoolForPermissions = {\r\n poolId: string;\r\n poolName: string;\r\n canUpdate: boolean;\r\n};\r\n\r\ntype TPermissionsContext = {\r\n disabled?: boolean;\r\n onChangePools: (u: TPickPoolForPermissions[]) => unknown;\r\n onChangeUsers: (u: TPickUserForPermissions[]) => unknown;\r\n permissions: {\r\n pools: TPickPoolForPermissions[];\r\n users: TPickUserForPermissions[];\r\n };\r\n};\r\n\r\nconst PermissionsContext = createContext<null | TPermissionsContext>(null);\r\nexport function usePermissionsContext() {\r\n return useContext(PermissionsContext)!;\r\n}\r\n\r\nexport const Permissions = observer(\r\n ({\r\n everyonePermissionsValue,\r\n collapsePermissions,\r\n disabled,\r\n onChangeEveryonePermissions,\r\n onChangeUsers,\r\n onChangePools,\r\n permissions,\r\n }: TPermissionsContext & {\r\n everyonePermissionsValue: 'R' | 'M' | '';\r\n collapsePermissions?: boolean;\r\n onChangeEveryonePermissions: (value: 'R' | 'M' | '') => unknown;\r\n }) => {\r\n return (\r\n <CollapsiblePanel\r\n label={<span>{getLabel('lblPer').text}</span>}\r\n id=\"permissions\"\r\n collapseIconToRight\r\n closedIcon=\"ArrowUpThin\"\r\n openIcon=\"ArrowDownThin\"\r\n className=\"uploader__permissions\"\r\n collapsed={collapsePermissions}\r\n >\r\n <PermissionsContext.Provider\r\n value={{\r\n onChangeUsers,\r\n onChangePools,\r\n permissions,\r\n disabled,\r\n }}\r\n >\r\n <Box {...getVariant('layout.common.components.uploader.permissions')}>\r\n <label className=\"uploader__permissions_selection\">\r\n <Box>\r\n <span>{getLabel('lblTod').text}</span>\r\n <Select\r\n disabled={disabled}\r\n onChange={(ev) => {\r\n onChangeEveryonePermissions(\r\n ev.target.value as 'R' | 'M' | '',\r\n );\r\n }}\r\n value={everyonePermissionsValue}\r\n >\r\n <option value=\"M\">{getLabel('lblPerMod').text}</option>\r\n <option value=\"R\">{getLabel('lblPerVer').text}</option>\r\n <option value={''}>{getLabel('lblAccessDenied').text}</option>\r\n </Select>\r\n </Box>\r\n <UserModalBtn />\r\n <PoolModalBtn />\r\n </label>\r\n <PermissionsList />\r\n </Box>\r\n </PermissionsContext.Provider>\r\n </CollapsiblePanel>\r\n );\r\n },\r\n);\r\n","import React, { useContext } from 'react';\r\nimport TabsController, { Tab } from './tabsController';\r\n\r\nexport const TabsContext = React.createContext<TabsController | null>(null);\r\n\r\nexport function defaultOnRequestClose() {\r\n return new Promise((resolve) => {\r\n resolve(true);\r\n });\r\n}\r\n\r\nexport function useTabsContext() {\r\n return React.useContext(TabsContext);\r\n}\r\n\r\nexport function useTabsController() {\r\n return useContext(TabsContext);\r\n}\r\n\r\nexport const CurrentTabContext = React.createContext<Tab | null>(null);\r\n\r\nexport function useCurrentTab() {\r\n return React.useContext(CurrentTabContext);\r\n}\r\n","import {\r\n ControlledMenu,\r\n MenuDivider,\r\n MenuItem,\r\n useMenuState,\r\n} from '@szhsin/react-menu';\r\nimport React from 'react';\r\nimport { useTabsContext } from './util';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nconst ContextMenu = observer(\r\n ({\r\n anchorPoint,\r\n isOpen,\r\n onClose,\r\n targetId,\r\n }: {\r\n anchorPoint: {\r\n x: number;\r\n y: number;\r\n };\r\n isOpen: boolean;\r\n onClose: () => unknown;\r\n targetId: string;\r\n }) => {\r\n const [menuProps, toggleMenu] = useMenuState();\r\n React.useEffect(() => {\r\n toggleMenu(isOpen);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isOpen]);\r\n\r\n const controller = useTabsContext()!;\r\n\r\n const closeOthers = React.useCallback(() => {\r\n void controller.closeOthers(targetId);\r\n }, [controller, targetId]);\r\n\r\n const closeToLeft = React.useCallback(() => {\r\n void controller.closeToLeft(targetId);\r\n }, [controller, targetId]);\r\n\r\n const closeToRight = React.useCallback(() => {\r\n void controller.closeToRight(targetId);\r\n }, [controller, targetId]);\r\n\r\n const firstNonFixedTab = controller.tabsList.find(\r\n (current) => !current.state.isFixed,\r\n );\r\n\r\n let lastNonFixedTab: string | null = null;\r\n if (controller.tabsList)\r\n for (let i = controller.tabsList.length - 1; i >= 0; i--) {\r\n if (!controller.tabsList[i].state.isFixed) {\r\n lastNonFixedTab = controller.tabsList[i].id;\r\n break;\r\n }\r\n }\r\n\r\n const nonFixedTabsLength =\r\n controller.tabsList?.filter((current) => !current.state.isFixed).length ??\r\n 0;\r\n\r\n return (\r\n <ControlledMenu\r\n {...menuProps}\r\n anchorPoint={anchorPoint}\r\n onClose={onClose}\r\n portal={{ target: document.getElementById('AppModals') as Element }}\r\n >\r\n {controller.state.allowDetach && (\r\n <>\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n window.open(\r\n controller.getTab(targetId)?.state.additionalProps.url,\r\n );\r\n controller.getTab(targetId)?.close?.(true);\r\n }, [controller, targetId])}\r\n >\r\n {window.BTN_DETACH || 'notFoundDetach'}\r\n </MenuItem>\r\n <MenuDivider />\r\n </>\r\n )}\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n void controller!.closeTab(targetId);\r\n }, [controller, targetId])}\r\n >\r\n {window.BTN_CLOSE}\r\n </MenuItem>\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n void controller!.closeAll();\r\n }, [controller])}\r\n >\r\n {getLabel('lblCloseAll').text}\r\n </MenuItem>\r\n {firstNonFixedTab?.id !== targetId && (\r\n <MenuItem onClick={closeToLeft}>\r\n {getLabel('lblCloseToLeft').text}\r\n </MenuItem>\r\n )}\r\n {lastNonFixedTab !== targetId && (\r\n <MenuItem onClick={closeToRight}>\r\n {getLabel('lblCloseToRight').text}\r\n </MenuItem>\r\n )}\r\n {nonFixedTabsLength > 1 && (\r\n <MenuItem onClick={closeOthers}>\r\n {getLabel('lblCloseOthers').text}\r\n </MenuItem>\r\n )}\r\n </ControlledMenu>\r\n );\r\n },\r\n);\r\n\r\nexport default ContextMenu;\r\n","import React, { MouseEvent } from 'react';\r\nimport { TTabLabelRenderer } from '../types';\r\nimport { useTabsContext } from '../util';\r\nimport { Icon, TIconName, isIconName } from '@apia/icons';\r\nimport { Checkbox, IconButton, SimpleButton } from '../../components';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nfunction makeIcon(name: TIconName) {\r\n return function IconComponent() {\r\n return <Icon title=\"\" name={name} />;\r\n };\r\n}\r\n\r\nexport const DefaultTabsLabelRenderer: TTabLabelRenderer = observer(\r\n ({ tab }) => {\r\n const controller = useTabsContext();\r\n const ActualIcon = React.useMemo(() => {\r\n if (tab.state.icon) {\r\n if (isIconName(tab.state.icon)) {\r\n return makeIcon(tab.state.icon);\r\n }\r\n return tab.state.icon;\r\n }\r\n return function C() {\r\n return null;\r\n };\r\n }, [tab.state.icon]);\r\n\r\n const handleClose = React.useCallback(\r\n (ev: MouseEvent) => {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n controller?.closeTab(tab.id);\r\n },\r\n [controller, tab.id],\r\n );\r\n\r\n const handleMouseDown = React.useCallback(\r\n (ev: MouseEvent) => {\r\n if (ev.button === 1) {\r\n tab.close();\r\n } else if (ev.button === 0) tab.open();\r\n },\r\n [tab],\r\n );\r\n\r\n return (\r\n <>\r\n <>\r\n {tab.controller.state.isMultiple && (\r\n <Checkbox\r\n onChange={(ev) => {\r\n tab.toggle(ev.target.checked);\r\n }}\r\n checked={tab.state.isOpen}\r\n />\r\n )}\r\n {tab.state.isIconTab ? (\r\n <IconButton\r\n onMouseDown={handleMouseDown}\r\n className=\"tabs__item__button\"\r\n as=\"div\"\r\n icon={tab.state.icon as TIconName}\r\n variant=\"null\"\r\n iconSize=\"Sm\"\r\n size=\"Lg\"\r\n />\r\n ) : (\r\n <SimpleButton\r\n onMouseDown={handleMouseDown}\r\n className=\"tabs__item__button\"\r\n data-test-id={`tab-button-${tab.controller.id}-${tab.id}`}\r\n variant=\"null\"\r\n as=\"div\"\r\n >\r\n <ActualIcon />\r\n {tab.state.labelIcon}\r\n {tab.state.label}\r\n </SimpleButton>\r\n )}\r\n </>\r\n\r\n {tab.state.isClosable && (\r\n <IconButton\r\n as=\"div\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }}\r\n onClick={handleClose}\r\n className=\"tabs__item__close\"\r\n icon=\"Close\"\r\n variant=\"null\"\r\n title={\r\n getLabel('lblCloseSpecificTab', {\r\n text: { TOK1: tab.state.label },\r\n }).text\r\n }\r\n size=\"Lg\"\r\n iconSize=\"Sm\"\r\n />\r\n )}\r\n </>\r\n );\r\n },\r\n);\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport React, { useRef } from 'react';\r\nimport { customEvents, getSpecificParent } from '@apia/util';\r\nimport { DefaultTabsLabelRenderer } from './renderers/DefaultTabsLabelRenderer';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Tab } from './tabsController';\r\nimport { Box } from '@apia/theme';\r\n\r\nconst Item = observer(({ tab }: { tab: Tab }) => {\r\n const Renderer = React.useMemo(\r\n () => tab.state.labelRenderer ?? DefaultTabsLabelRenderer,\r\n [tab.state.labelRenderer],\r\n );\r\n\r\n const uns = useRef(() => {});\r\n const ref = React.useRef<HTMLButtonElement>({} as HTMLButtonElement);\r\n useUpdateEffect(() => {\r\n if (tab.state.isFocused) {\r\n ref.current?.focus({\r\n preventScroll: true,\r\n });\r\n }\r\n }, [tab.state.isFocused]);\r\n React.useEffect(() => {\r\n if (tab.state.isOpen) {\r\n const scrollParent = getSpecificParent(ref.current, (current) =>\r\n current.classList.contains('tabs__list'),\r\n ) as HTMLElement;\r\n\r\n scrollParent?.scroll({\r\n left: ref.current.offsetLeft - 100,\r\n });\r\n }\r\n }, [tab.state.isOpen]);\r\n\r\n const boxProps = {\r\n className: `tabs__item__wrapper ${tab.state.isOpen ? 'open' : ''} ${\r\n tab.state.isDisabled ? 'disabled' : ''\r\n }`,\r\n title: tab.state.title ?? tab.state.label,\r\n 'aria-controls': `tabpanel-${tab.controller.id}-${tab.state.id}`,\r\n 'aria-selected': tab.state.isOpen ?? false,\r\n id: `tab-${tab.controller.id}-${tab.id}`,\r\n tabIndex: tab.state.isOpen ? 0 : -1,\r\n role: 'tab',\r\n variant: 'inherit',\r\n };\r\n\r\n return (\r\n <Box\r\n data-id={tab.id}\r\n ref={(el) => {\r\n uns.current();\r\n ref.current = el;\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n tab.open();\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n {...boxProps}\r\n >\r\n <Renderer tab={tab} />\r\n </Box>\r\n );\r\n});\r\n\r\nexport default Item;\r\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\r\nimport { useTabsContext } from '../util';\r\n\r\nexport function useShowScrollButtons(): [\r\n boolean,\r\n Dispatch<SetStateAction<HTMLDivElement | null>>,\r\n] {\r\n const [showScrollButtons, setShowScrollButtons] = useState(false);\r\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\r\n const controller = useTabsContext();\r\n\r\n useEffect(() => {\r\n if (ref && controller) {\r\n const observer = new MutationObserver(([{ addedNodes }]) => {\r\n const fixedTabsElement = ref.querySelector('.tabsList__fixedTabs');\r\n const hasFixedTabsScroll =\r\n (fixedTabsElement?.clientWidth ?? 0) <\r\n (fixedTabsElement?.scrollWidth ?? 0);\r\n const nonFixedTabsElement = ref.querySelector('.tabs__list');\r\n const hasFixedNonTabsScroll =\r\n (nonFixedTabsElement?.clientWidth ?? 0) <\r\n (nonFixedTabsElement?.scrollWidth ?? 0);\r\n\r\n setShowScrollButtons(hasFixedTabsScroll || hasFixedNonTabsScroll);\r\n\r\n if (addedNodes) {\r\n (ref.querySelector('.tabs__list') as HTMLElement).scrollLeft =\r\n 9999999;\r\n }\r\n });\r\n observer.observe(ref, { childList: true, subtree: true });\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }\r\n\r\n return () => {};\r\n }, [controller, ref]);\r\n\r\n return [showScrollButtons, setRef];\r\n}\r\n","import React, { ReactNode } from 'react';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport ContextMenu from './ContextMenu';\r\nimport Item from './Item';\r\nimport { useTabsContext } from './util';\r\nimport { getLabel, getSpecificParent } from '@apia/util';\r\nimport { IconButton } from '../components';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { useShowScrollButtons } from './hooks/useShowScrollButtons';\r\n\r\nexport const TabsList = observer(\r\n ({\r\n arrowsBehavior = 'focus',\r\n children,\r\n showContextMenu = false,\r\n }: {\r\n arrowsBehavior?: 'open' | 'focus';\r\n children?: Record<'beforeFixedTabs', ReactNode>;\r\n showContextMenu?: boolean;\r\n }) => {\r\n const controller = useTabsContext();\r\n const [showScrollButtons, setRef] = useShowScrollButtons();\r\n\r\n const onClickPrev = React.useCallback(() => {\r\n if (arrowsBehavior === 'focus') controller?.focusPreviousTab();\r\n if (arrowsBehavior === 'open') controller?.openPreviousTab();\r\n }, [arrowsBehavior, controller]);\r\n\r\n const onClickNext = React.useCallback(() => {\r\n if (arrowsBehavior === 'focus') controller?.focusNextTab();\r\n if (arrowsBehavior === 'open') controller?.openNextTab();\r\n }, [arrowsBehavior, controller]);\r\n\r\n const [anchorPoint, setAnchorPoint] = React.useState({ x: 0, y: 0 });\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [targetId, setTargetId] = React.useState<string>('');\r\n\r\n if (!controller) return null;\r\n\r\n const tabs = controller.tabsList;\r\n\r\n const fixedTabs = (tabs ?? []).filter((current) => current.state.isFixed);\r\n const nonFixedTabs = (tabs ?? []).filter(\r\n (current) => !current.state.isFixed,\r\n );\r\n\r\n return (\r\n <Box\r\n id={`tabsList-${controller.id}`}\r\n className=\"tabsList__wrapper\"\r\n role=\"tablist\"\r\n {...getVariant('layout.common.tabs.primary')}\r\n ref={setRef}\r\n >\r\n {children?.beforeFixedTabs}\r\n <Box className=\"tabsList__fixedTabs\">\r\n {fixedTabs.map((current) => (\r\n <Item key={current.id} tab={current} />\r\n ))}\r\n </Box>\r\n {showContextMenu && (\r\n <ContextMenu\r\n anchorPoint={anchorPoint}\r\n isOpen={isOpen}\r\n onClose={React.useCallback(() => setIsOpen(false), [])}\r\n targetId={targetId}\r\n />\r\n )}\r\n <Box\r\n className={`noScrollbar tabs__list ${\r\n controller.props.orientation === 'vertical' ? 'vertical' : ''\r\n }`}\r\n onContextMenu={React.useCallback((e: React.MouseEvent) => {\r\n const tabElement = getSpecificParent(\r\n e.target as HTMLElement,\r\n (current) => current.classList.contains('tabs__item__wrapper'),\r\n );\r\n if (tabElement) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setTargetId(tabElement.dataset.id as string);\r\n setAnchorPoint({ x: e.clientX, y: e.clientY });\r\n setIsOpen(true);\r\n }\r\n }, [])}\r\n >\r\n {nonFixedTabs.map((current) => (\r\n <Item key={current.id} tab={current} />\r\n ))}\r\n </Box>\r\n {showScrollButtons && (\r\n <>\r\n <IconButton\r\n aria-label={getLabel('lblTogglePrevTab').text}\r\n className=\"tabs__switch__left\"\r\n icon=\"ArrowLeft\"\r\n iconSize=\"Xs\"\r\n onClick={onClickPrev}\r\n title={getLabel('lblTogglePrevTab').text}\r\n {...getVariant('icon-primary')}\r\n />\r\n <IconButton\r\n aria-label={getLabel('lblToggleNextTab').text}\r\n className=\"tabs__switch__right\"\r\n icon=\"ArrowRight\"\r\n iconSize=\"Xs\"\r\n onClick={onClickNext}\r\n title={getLabel('lblToggleNextTab').text}\r\n {...getVariant('icon-primary')}\r\n />\r\n </>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { TTab, TTabsListState, TabsControllerProps } from './types';\r\nimport { getLabel, getSpecificParent, isChild } from '@apia/util';\r\nimport { ApiaUtil } from '../objects/ApiaUtil';\r\nimport { makeAutoObservable, observable } from 'mobx';\r\n\r\nexport class Tab<TabType extends TTab = TTab> {\r\n constructor(\r\n public state: TabType,\r\n public controller: TabsController<TabType>,\r\n ) {\r\n makeAutoObservable(this, { state: observable });\r\n }\r\n\r\n get id() {\r\n return this.state.id;\r\n }\r\n\r\n /**\r\n * El parámetro force evita que se muestre cartel de confirmación al usuario cuando puede haber pérdida de datos.\r\n */\r\n async close(force?: boolean) {\r\n return this.controller.closeTab(this.state.id, force);\r\n }\r\n\r\n open(closeOthers?: boolean) {\r\n this.controller.openTab(this.id, closeOthers);\r\n }\r\n\r\n remove() {\r\n this.controller.remove(this.id);\r\n }\r\n\r\n toggle(isShown?: boolean) {\r\n this.controller.toggleTab(this.state.id, isShown);\r\n }\r\n}\r\n\r\nexport type TAppendBehavior = Partial<{\r\n closeOthers: boolean;\r\n insertAfterId: string;\r\n}>;\r\n\r\nexport default class TabsController<TabType extends TTab = TTab> {\r\n state: TTabsListState<TabType> = {\r\n isMultiple: false,\r\n openTabsHistory: new Set(),\r\n tabs: new Map(),\r\n timestamp: 0,\r\n showAtLeastOneTab: false,\r\n listenFocusEvents: true,\r\n allowDetach: false,\r\n };\r\n\r\n getActiveTab() {\r\n return this.activeTab;\r\n }\r\n /**\r\n * Es el tab que está abierto\r\n */\r\n get activeTab() {\r\n const tabs = [...this.state.openTabsHistory];\r\n\r\n return tabs[tabs.length - 1];\r\n }\r\n\r\n getTab(id: string) {\r\n return this.state.tabs.get(id);\r\n }\r\n\r\n get tabsList() {\r\n return [...this.state.tabs.values()];\r\n }\r\n\r\n constructor(\r\n public id: string,\r\n public props: Omit<TabsControllerProps<TabType>, 'id'>,\r\n ) {\r\n Object.assign(this.state, props.initialState ?? {});\r\n\r\n props.initialTabs?.forEach((tab) => this.append(tab));\r\n if (props.initialTabs && props.initialTabs.length > 0)\r\n this.focusTab(props.initialTabs[0].id);\r\n\r\n makeAutoObservable(this);\r\n }\r\n\r\n #innerAppend(tab: TabType, behavior?: TAppendBehavior) {\r\n const tabsArray = [...this.state.tabs.values()];\r\n\r\n const afterId =\r\n behavior?.insertAfterId ?? tabsArray[tabsArray.length - 1]?.id;\r\n for (let i = 0; i <= tabsArray.length; i++) {\r\n if (!tabsArray[i] || tabsArray[i]?.id === afterId) {\r\n tabsArray.splice(i + 1, 0, new Tab(tab, this));\r\n break;\r\n }\r\n }\r\n\r\n this.state.tabs = new Map(tabsArray.map((c) => [c.id, c]));\r\n\r\n if (tab.isOpen) {\r\n this.openTab(tab.id, behavior?.closeOthers);\r\n this.focusTab(tab.id, behavior?.closeOthers);\r\n }\r\n\r\n this.checkAtLeastOneOpen();\r\n }\r\n\r\n /**\r\n * Obviamente agrega un tab al listado de tabs\r\n */\r\n append(tab: TabType, behavior?: TAppendBehavior) {\r\n if (this.getTab(tab.id)) {\r\n void ApiaUtil.instance.dialogs\r\n .confirm({\r\n children: getLabel('msgTabIsOpen').text,\r\n title: getLabel('titMsgWarning').text,\r\n })\r\n .then((hasConfirmed) => {\r\n if (hasConfirmed)\r\n this.#innerAppend(\r\n {\r\n ...tab,\r\n id: `${tab.id}_${uniqueId()}`,\r\n additionalProps: tab.additionalProps ?? {},\r\n } as TabType,\r\n behavior,\r\n );\r\n });\r\n } else this.#innerAppend(tab, behavior);\r\n }\r\n\r\n async closeAll(closeFixedTabsAsWell = false, force = false) {\r\n for (const tab of this.tabsList) {\r\n if (!tab.state.isFixed || closeFixedTabsAsWell) {\r\n tab.close(force);\r\n }\r\n }\r\n }\r\n\r\n closeOpenTab(force?: boolean) {\r\n const openTab = this.activeTab;\r\n openTab?.close(force);\r\n }\r\n\r\n async closeToRight(targetId: string, force?: boolean) {\r\n const tabsList = this.tabsList;\r\n const startIndex = tabsList.findIndex((c) => c.state.id === targetId);\r\n\r\n if (startIndex >= 0) {\r\n for (let i = startIndex + 1; i < tabsList.length; i++) {\r\n tabsList[i].close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeToLeft(targetId: string, force?: boolean) {\r\n const tabsList = this.tabsList;\r\n const startIndex = tabsList.findIndex((c) => c.state.id === targetId);\r\n\r\n if (startIndex >= 0) {\r\n for (let i = startIndex - 1; i >= 0; i--) {\r\n await tabsList[i].close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeOthers(targetId: string, force?: boolean) {\r\n for await (const tab of this.tabsList) {\r\n if (tab.state.id !== targetId) {\r\n await tab.close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeTab(tabId: string, force = false) {\r\n const tab = this.getTab(tabId);\r\n const tabProps = tab?.state;\r\n\r\n if (tab && tabProps) {\r\n if (!tabProps.isClosable && !force) return false;\r\n\r\n const { onBeforeClose } = tabProps;\r\n if (onBeforeClose) {\r\n const canClose = await onBeforeClose();\r\n const message =\r\n canClose === false ? getLabel('msgPerDatIng').text : canClose;\r\n if (message !== true && !force) {\r\n const hasConfirmed = await ApiaUtil.instance.dialogs.confirm({\r\n children: message,\r\n title: getLabel('lbl_atention').text,\r\n });\r\n if (!hasConfirmed) return false;\r\n }\r\n }\r\n\r\n this.state.openTabsHistory.delete(tab);\r\n this.getActiveTab()?.open();\r\n this.state.tabs.delete(tab.id);\r\n\r\n this.props?.onCloseTab?.(tab);\r\n }\r\n return true;\r\n }\r\n\r\n private checkAtLeastOneOpen() {\r\n if (\r\n this.state.showAtLeastOneTab &&\r\n !this.tabsList.find((c) => c.state.isOpen)\r\n ) {\r\n this.openTab(this.tabsList[0].id);\r\n }\r\n }\r\n\r\n remove(tabId: string) {\r\n this.state.openTabsHistory.delete(this.state.tabs.get(tabId)!);\r\n this.state.tabs.delete(tabId);\r\n if (this.state.openTabsHistory.size === 0 && this.state.showAtLeastOneTab) {\r\n this.tabsList[0]?.open();\r\n }\r\n }\r\n\r\n async toggleTab(tabId: string, isShown?: boolean) {\r\n const willBeOpen = isShown || !this.getTab(tabId)?.state.isOpen;\r\n\r\n if (willBeOpen) {\r\n this.openTab(tabId, false);\r\n } else {\r\n if (\r\n !this.state.showAtLeastOneTab ||\r\n this.tabsList.find((c) => c.state.isOpen && c.id !== tabId)\r\n )\r\n this.getTab(tabId)!.state.isOpen = false;\r\n }\r\n }\r\n\r\n focusNextTab() {\r\n const tabsList = this.tabsList;\r\n const focusedIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (focusedIndex === tabsList.length - 1 || focusedIndex === -1)\r\n return null;\r\n\r\n const newFocusIndex: number = focusedIndex + 1;\r\n this.focusTab(tabsList[newFocusIndex].id);\r\n\r\n return tabsList[newFocusIndex];\r\n }\r\n\r\n focusPreviousTab() {\r\n const tabsList = this.tabsList;\r\n const focusedIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (focusedIndex <= 0) return null;\r\n\r\n const newFocusIndex: number = focusedIndex - 1;\r\n this.focusTab(tabsList[newFocusIndex].id);\r\n\r\n return tabsList[newFocusIndex];\r\n }\r\n\r\n focusTab(tabId: string, closeOthers?: boolean) {\r\n this.openTab(tabId, closeOthers);\r\n }\r\n\r\n getTabElement(tabId: string) {\r\n return document.querySelector(`#tabpanel-${this.id}-${tabId}`);\r\n }\r\n\r\n handleKeyDown(ev: React.KeyboardEvent) {\r\n if (\r\n !isChild(\r\n ev.target as HTMLElement,\r\n (current) => current.id === `tabsList-${this.id}`,\r\n )\r\n )\r\n return;\r\n\r\n switch (ev.code) {\r\n case 'ArrowDown':\r\n case 'ArrowRight': {\r\n if (\r\n (this.props?.orientation === 'horizontal' &&\r\n ev.code === 'ArrowDown') ||\r\n (this.props?.orientation === 'vertical' && ev.code === 'ArrowRight')\r\n )\r\n return;\r\n\r\n this.focusNextTab();\r\n\r\n break;\r\n }\r\n case 'ArrowUp':\r\n case 'ArrowLeft': {\r\n if (\r\n (this.props.orientation === 'horizontal' && ev.code === 'ArrowUp') ||\r\n (this.props.orientation === 'vertical' && ev.code === 'ArrowLeft')\r\n )\r\n return;\r\n\r\n this.focusPreviousTab();\r\n\r\n break;\r\n }\r\n case 'Delete': {\r\n const tabId = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => !!current.getAttribute('data-id'),\r\n )?.getAttribute('data-id');\r\n\r\n if (tabId) {\r\n if (!this.getTab(tabId)?.state.isClosable) return;\r\n\r\n void this.closeTab(tabId);\r\n }\r\n break;\r\n }\r\n case 'Enter':\r\n case 'Space': {\r\n const tabId = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => !!current.getAttribute('data-id'),\r\n )?.getAttribute('data-id');\r\n\r\n if (tabId) {\r\n this.openTab(tabId);\r\n }\r\n\r\n break;\r\n }\r\n case 'End': {\r\n this.openTab(this.tabsList[this.tabsList.length - 1].id);\r\n break;\r\n }\r\n case 'Home': {\r\n this.focusTab(this.tabsList[0].id);\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n openNextTab() {\r\n const tabsList = this.tabsList;\r\n const openIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (openIndex == tabsList.length - 1) return null;\r\n\r\n const newOpenIndex: number = openIndex + 1;\r\n this.openTab(tabsList[newOpenIndex].id);\r\n\r\n return tabsList[newOpenIndex];\r\n }\r\n\r\n openPreviousTab() {\r\n const tabsList = this.tabsList;\r\n const openIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (openIndex <= 0) return null;\r\n\r\n const newOpenIndex: number = openIndex - 1;\r\n this.openTab(tabsList[newOpenIndex].id);\r\n\r\n return tabsList[newOpenIndex];\r\n }\r\n\r\n /**\r\n * Se utiliza para hacer que el tab aparezca visible en el listado\r\n */\r\n openTab(tabId: string, closeOthers?: boolean) {\r\n const tab = this.getTab(tabId);\r\n if (!tab) {\r\n console.warn(`There is no tab with such id: ${tabId}`);\r\n } else {\r\n try {\r\n if (closeOthers !== false) {\r\n this.state.tabs.forEach((c) => {\r\n c.state.isOpen = false;\r\n });\r\n }\r\n } catch (e) {\r\n e; // No hay ningún tab abierto, no me importa\r\n }\r\n tab.state.isOpen = true;\r\n tab.state.isFocused = true;\r\n document\r\n .querySelector<HTMLElement>(`.tabs__item__wrapper[data-id=\"${tab.id}\"]`)\r\n ?.focus();\r\n tab.state.onFocus?.(tab);\r\n if (this.state.openTabsHistory.has(tab)) {\r\n this.state.openTabsHistory.delete(tab);\r\n }\r\n this.state.openTabsHistory.add(tab);\r\n this.checkAtLeastOneOpen();\r\n }\r\n }\r\n}\r\n","import { useDeferredValue, useRef } from 'react';\r\nimport { Box, BoxProps, getVariant } from '@apia/theme';\r\nimport { CurrentTabContext, useTabsContext } from './util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Tab } from './tabsController';\r\nimport { Accordion, AccordionItem, LoaderSpinner } from '../components';\r\nimport { customEvents } from '@apia/util';\r\n\r\nconst InnerRenderer = observer(({ tab }: { tab: Tab }) => {\r\n const state = tab.state;\r\n const Render = useDeferredValue(state.content);\r\n let accordion = null;\r\n const tabContent = (\r\n <Box className=\"tabs__Item\" sx={{ height: '100%' }}>\r\n <Render tab={tab} />\r\n {state.isLoading && (\r\n <Box className=\"tabs__content__spinner__wrapper\">\r\n <LoaderSpinner />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n if (tab.state.asAccordion)\r\n accordion = (\r\n <AccordionItem\r\n id={tab.id}\r\n key={tab.id}\r\n defaultExpanded={true}\r\n buttonProps={{\r\n ariaLabel: tab.state.label,\r\n label: tab.state.label,\r\n }}\r\n >\r\n {tabContent}\r\n </AccordionItem>\r\n );\r\n\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <Box\r\n aria-hidden={!state.isOpen}\r\n aria-labelledby={`tab-${tab.controller.id}-${state.id}`}\r\n className={`tabs__content ${state.isOpen ? 'open' : ''}`}\r\n data-id={state.id}\r\n id={`tabpanel-${tab.controller.id}-${state.id}`}\r\n data-test-id={`tab-content-${tab.controller.id}-${state.id}`}\r\n key={state.id}\r\n role=\"tabpanel\"\r\n sx={{\r\n display: state.isOpen ? undefined : 'none',\r\n }}\r\n ref={(el) => {\r\n uns.current();\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n if (tab.controller.state.listenFocusEvents !== false) {\r\n tab.open();\r\n }\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n >\r\n {accordion ?? tabContent}\r\n </Box>\r\n );\r\n});\r\n\r\nexport const TabsContent = observer((props: Omit<BoxProps, 'children'>) => {\r\n const controller = useTabsContext();\r\n\r\n if (!controller) return null;\r\n\r\n return (\r\n <Accordion\r\n className=\"tabs__content__wrapper\"\r\n {...getVariant('layout.common.tabs.primary.content')}\r\n {...props}\r\n >\r\n {controller.tabsList.map((tab) => {\r\n return (\r\n <CurrentTabContext.Provider value={tab} key={tab.id}>\r\n <InnerRenderer tab={tab} />\r\n </CurrentTabContext.Provider>\r\n );\r\n })}\r\n </Accordion>\r\n );\r\n});\r\n","import React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport TabsController from './tabsController';\r\nimport { TabsContext } from './util';\r\nimport { useMount } from '@apia/util';\r\nimport { TTab, TabsControllerProps } from './types';\r\n\r\nconst NonForwardedTabs = (\r\n {\r\n id,\r\n getController,\r\n initialTabs,\r\n orientation,\r\n initialState,\r\n ...props\r\n }: TabsControllerProps<TTab> & Omit<BoxProps, 'id' | 'as' | 'role'>,\r\n ref: React.ForwardedRef<HTMLDivElement>,\r\n) => {\r\n const [handler, setHandler] = React.useState<TabsController | null>(null);\r\n\r\n useMount(() => {\r\n const newHandler = new TabsController(String(id), {\r\n initialTabs,\r\n orientation: orientation || 'horizontal',\r\n initialState,\r\n });\r\n setHandler(newHandler);\r\n getController?.(newHandler);\r\n });\r\n\r\n if (!handler) return null;\r\n\r\n return (\r\n <TabsContext.Provider value={handler}>\r\n <Box\r\n {...props}\r\n onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n handler.handleKeyDown(ev);\r\n }}\r\n ref={ref}\r\n />\r\n </TabsContext.Provider>\r\n );\r\n};\r\n\r\nexport const Tabs = React.forwardRef<\r\n HTMLDivElement,\r\n TabsControllerProps<TTab> & Omit<BoxProps, 'id' | 'as' | 'role'>\r\n>(NonForwardedTabs) as unknown as typeof NonForwardedTabs;\r\n","import * as React from 'react';\r\nimport { Box, ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport interface IAsidePanel {\r\n title?: string;\r\n toolTip?: string;\r\n children: React.ReactNode;\r\n columns?: number;\r\n spacer?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const AsidePanel = ({\r\n title,\r\n toolTip,\r\n children,\r\n columns = 2,\r\n spacer,\r\n className,\r\n}: IAsidePanel) => {\r\n const contentSx: ThemeUICSSObject = React.useMemo(\r\n () => ({\r\n gridTemplateColumns: `${Array(columns).fill('1fr').join(' ')} `,\r\n }),\r\n [columns],\r\n );\r\n\r\n return (\r\n <Box as=\"fieldset\" className={`asidePanel ${className ?? ''}`}>\r\n {title && <legend title={toolTip}>{title}</legend>}\r\n {spacer !== false && <Box className=\"spacer\" />}\r\n <Box className=\"asidePanel__content\" sx={contentSx}>\r\n {children}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n","import { IconButton } from '../components';\r\n\r\nexport function isFavoriteIcon() {\r\n return typeof window.functionId !== 'undefined' || !!window.helpUrl;\r\n}\r\n\r\nexport const FavoriteIcon = () => {\r\n return <IconButton icon=\"Star\" />;\r\n};\r\n","import { Label as Lbl, LabelProps } from '@apia/theme';\r\n\r\nexport const Label = ({ variant, ...props }: LabelProps) => (\r\n <Lbl sx={{ variant }} {...props} />\r\n);\r\n","import { useBreakpointIndex } from '@apia/theme';\r\nimport { EventEmitter } from '@apia/util';\r\nimport React from 'react';\r\n\r\nexport interface IMenuDefinition {\r\n menu: React.ReactNode;\r\n stage: string;\r\n}\r\n\r\ntype TMenuEvents = {\r\n updateMenu: React.ReactNode;\r\n};\r\n\r\nclass MenuController extends EventEmitter<TMenuEvents> {\r\n #currentStage = '';\r\n\r\n #menues: IMenuDefinition[] = [];\r\n\r\n on<K extends keyof TMenuEvents>(\r\n eventName: K,\r\n fn: (ev: TMenuEvents[K]) => unknown,\r\n ) {\r\n super.on(eventName, fn);\r\n const currentMenu = this.#menues.find(\r\n (current) => current.stage === this.#currentStage,\r\n )?.menu;\r\n if (currentMenu) fn(currentMenu);\r\n return () => this.off(eventName, fn);\r\n }\r\n\r\n getCurrent() {\r\n return (\r\n this.#menues.find((current) => current.stage === this.#currentStage)\r\n ?.menu ?? null\r\n );\r\n }\r\n\r\n remove(stage: string) {\r\n this.#menues = this.#menues.filter((current) => current.stage !== stage);\r\n\r\n if (stage === this.#currentStage) {\r\n this.#currentStage = this.#menues[this.#menues.length - 1]?.stage ?? null;\r\n this.#shout();\r\n }\r\n }\r\n\r\n setMenu(definition: IMenuDefinition) {\r\n this.#menues.push(definition);\r\n this.#currentStage = definition.stage;\r\n this.#shout();\r\n return () => {\r\n this.remove(definition.stage);\r\n };\r\n }\r\n\r\n #shout() {\r\n this.emit(\r\n 'updateMenu',\r\n this.#menues.find((current) => current.stage === this.#currentStage)\r\n ?.menu,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * El menú controller pretende solucionar el problema de tener múltiples menúes\r\n * para distintas pantallas dentro del mismo flujo de trabajo. El problema\r\n * original surge en administración de grupos. Al presionar modificar se\r\n * cambia de pantalla y por lo tanto de menú, pero se sigue estando en el mismo\r\n * flujo y se pretende que al presionar regresar, se restaure el menú original.\r\n * Todo esto sin afectar la responsividad de los mismos.\r\n *\r\n * Para solucionar esta problemática, se introduce este controlador, cuyo\r\n * funcionamiento es muy sencillo. Cada vez que un componente quiere setear un\r\n * menú para una pantalla particular, hace uso del método\r\n * menuController.setMenu.\r\n *\r\n * Una vez que la pantalla se está desmontando, debe desmontar su menú haciendo\r\n * uso del método menuController.remove.\r\n *\r\n * Mediante el hook useMenu provisto en este documento, se puede hacer uso del\r\n * menú actual, sin preocuparse de la existencia de varios elementos que\r\n * coincidan.\r\n */\r\nexport const menuController = new MenuController();\r\n\r\n/**\r\n * Este hook permite insertar el menú en un componente.\r\n */\r\nexport function useMenu(breakPoints?: number[], initialMenu?: IMenuDefinition) {\r\n const [menu, setMenu] = React.useState<React.ReactNode>(null);\r\n const currentBreakpoint = useBreakpointIndex();\r\n\r\n React.useEffect(() => {\r\n const unsuscribe = menuController.on('updateMenu', (newMenu) => {\r\n setMenu(newMenu);\r\n });\r\n\r\n if (initialMenu) menuController.setMenu(initialMenu);\r\n\r\n return () => {\r\n unsuscribe();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n if (breakPoints && !breakPoints.includes(currentBreakpoint)) return null;\r\n\r\n return menu;\r\n}\r\n","import { Box, BoxProps } from '@apia/theme';\r\n\r\n/**\r\n * Con el código comentado dentro de FooterButtons se hace\r\n * que se muestren los botones cuando se está haciendo scroll\r\n * hacia abajo.\r\n */\r\n\r\n/**\r\n *\r\n */\r\nexport const FooterButtons = (props: BoxProps) => {\r\n /* const isScrollingDown = useMatchScrollDirection('down');\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n const sx = React.useMemo<ThemeUIStyleObject>(\r\n () => ({\r\n ...(isScrollingDown\r\n ? {\r\n bottom: 0,\r\n }\r\n : { bottom: '-5000px' }),\r\n position: 'fixed',\r\n }),\r\n [isScrollingDown],\r\n ); */\r\n\r\n return (\r\n <>\r\n {/* <Portal>\r\n <Box sx={sx} {...props} />\r\n </Portal> */}\r\n <Box {...props} />\r\n </>\r\n );\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Este aside aparece en la vista twoColumnList en los\r\n * breakpoints de vista móvil.\r\n */\r\n\r\nexport const AccordionAside = () => {\r\n const children = useMenu([1, 2, 3]);\r\n return children;\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Este aside aparece por defecto en los breakpoints\r\n * de desktop.\r\n */\r\n\r\nexport const Aside = () => {\r\n const children = useMenu([5, 6, 7]);\r\n return <>{children}</>;\r\n};\r\n","import React from 'react';\r\nimport { uniqueId } from 'lodash-es';\r\nimport { Box } from '@apia/theme';\r\nimport { menuController, IMenuDefinition } from '../menuController';\r\n\r\ntype TAsideLoader = Partial<IMenuDefinition> & {\r\n children: React.ReactNode;\r\n variant?: string;\r\n};\r\n\r\nexport const AsideLoader = (definition: TAsideLoader) => {\r\n React.useEffect(() => {\r\n const variant = definition.variant ?? 'twoColumnsAside';\r\n\r\n const unregister = menuController.setMenu({\r\n menu: (\r\n <Box className=\"ApplicationMenu\" variant={`layout.${variant}`}>\r\n {definition.menu ?? definition.children}\r\n </Box>\r\n ),\r\n stage: definition.stage ?? uniqueId(),\r\n });\r\n\r\n return () => {\r\n unregister();\r\n };\r\n }, [\r\n definition.children,\r\n definition.menu,\r\n definition.stage,\r\n definition.variant,\r\n ]);\r\n\r\n return null;\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Aside del template twoColumns. Breakpoints: 0,1,2.\r\n *\r\n * Este aside aparece por defecto en la vista móvil del\r\n * twoColumns.\r\n */\r\n\r\nexport const BodyAside = () => {\r\n const children = useMenu([1, 2, 3]);\r\n return children;\r\n};\r\n","import { useScroll } from 'ahooks';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { useMenu } from '../menuController';\r\nimport { getLabel, useMatchScrollDirection } from '@apia/util';\r\nimport { AccordionItem } from '../../components';\r\n\r\n/**\r\n * Aside del template twoColumns. Breakpoints: 0,1,2.\r\n *\r\n * Este aside es el que aparece cuando el usuario hizo scroll\r\n * en la vista responsiva, y luego hizo scroll hacia arriba.\r\n */\r\n\r\nexport const FloatingAside = () => {\r\n const isScrollingUp = useMatchScrollDirection('up');\r\n const [hasScrolledEnough, setHasScrolledEnough] = React.useState(false);\r\n\r\n useScroll(document, ({ top }) => {\r\n const menu = document.getElementById('BodyAside') as HTMLDivElement;\r\n if (!menu) return false;\r\n\r\n let computedStyle = 0;\r\n if (window.getComputedStyle(menu).paddingTop.match(/\\d+/)) {\r\n computedStyle =\r\n Number(\r\n (\r\n window.getComputedStyle(menu).paddingTop.match(/\\d+/) as [string]\r\n )[0],\r\n ) +\r\n Number(\r\n (\r\n window.getComputedStyle(menu).paddingBottom.match(/\\d+/) as string[]\r\n )[0],\r\n );\r\n }\r\n\r\n const boxTop = menu.offsetHeight + menu.offsetTop + computedStyle;\r\n\r\n if (hasScrolledEnough !== boxTop < top) setHasScrolledEnough(boxTop < top);\r\n\r\n return false;\r\n });\r\n\r\n const children = useMenu([1, 2, 3]);\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n if (!children) return null;\r\n\r\n return (\r\n <Portal>\r\n <Box\r\n {...getVariant('layout.twoColumnsAside.floatingResponsive')}\r\n className={isScrollingUp && hasScrolledEnough ? '' : 'hidden'}\r\n >\r\n <AccordionItem\r\n defaultExpanded={false}\r\n buttonProps={{\r\n label: getLabel('lblMnuOpc').text,\r\n ariaLabel: getLabel('lblMnuOpc').title,\r\n }}\r\n id=\"floatingMenuAccordion\"\r\n {...getVariant('tabPrimary')}\r\n >\r\n {isScrollingUp && hasScrolledEnough && children}\r\n </AccordionItem>\r\n </Box>\r\n </Portal>\r\n );\r\n};\r\n","import { useBreakpointIndex, Box, getVariant } from '@apia/theme';\r\nimport { useMatchScrollDirection } from '@apia/util';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\n\r\nexport const FooterResponsiveButtons = ({\r\n breakpoint = 4,\r\n children,\r\n className,\r\n}: {\r\n breakpoint?: number;\r\n children: React.ReactNode;\r\n className?: string;\r\n}) => {\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n const appBreakpoint = useBreakpointIndex();\r\n const shouldShow =\r\n useMatchScrollDirection('down') && breakpoint >= appBreakpoint;\r\n\r\n if (Array.isArray(children) && children.length === 0) return null;\r\n\r\n return (\r\n <Portal>\r\n <Box\r\n as=\"aside\"\r\n {...getVariant('layout.footerResponsiveButtons')}\r\n className={`${className ?? ''} ${shouldShow ? 'visible' : 'hidden'}`}\r\n >\r\n {children}\r\n </Box>\r\n </Portal>\r\n );\r\n};\r\n","import {\r\n useBreakpointIndex,\r\n Box,\r\n ThemeUICSSObject,\r\n getVariant,\r\n} from '@apia/theme';\r\nimport React, { useState } from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { useMenu } from '../menuController';\r\nimport { IconButton } from '../../components';\r\n\r\n/**\r\n * Este aside solamente aparece en el breakpoint 3 y es el que\r\n * se muestra en el menú de hamburguesa.\r\n */\r\n\r\nexport const HamburguerMenu = ({\r\n container = '.TitleContainer',\r\n header = 'MainHeader',\r\n forceVisibility,\r\n}: {\r\n container?: string;\r\n forceVisibility?: boolean;\r\n header?: string;\r\n}) => {\r\n const [hamburguerRef, setHamburguerRef] = React.useState<HTMLElement | null>(\r\n null,\r\n );\r\n const [menuRef, setMenuRef] = React.useState<HTMLElement | null>(null);\r\n\r\n const [menuCoords, setMenuCoords] = React.useState<\r\n ThemeUICSSObject | undefined\r\n >(undefined);\r\n const [hamburguerCoords, setHamburguerCoords] =\r\n React.useState<ThemeUICSSObject | null>(null);\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n clickOutsideToHide: false,\r\n escToHide: false,\r\n });\r\n\r\n React.useLayoutEffect(() => {\r\n const unsuscribers: (() => unknown)[] = [];\r\n if (hamburguerRef) {\r\n const resize = () => {\r\n const bounding = (\r\n document.querySelector(container) as HTMLElement\r\n ).getBoundingClientRect();\r\n\r\n if (!hamburguerRef || bounding.height === 0) return;\r\n\r\n const hamburguerHeight = 40;\r\n\r\n const hamburguerTop =\r\n bounding.top +\r\n bounding.height / 2 -\r\n hamburguerHeight / 2 +\r\n window.scrollY;\r\n\r\n const shouldOpenBelow = bounding.top <= window.innerHeight / 3;\r\n\r\n const menuTop = shouldOpenBelow\r\n ? hamburguerTop + hamburguerHeight + 10\r\n : 10;\r\n const menuRight = shouldOpenBelow ? 10 : 60;\r\n const maxHeight = shouldOpenBelow\r\n ? window.innerHeight - menuTop - 50\r\n : window.innerHeight - 50;\r\n\r\n setMenuCoords({\r\n right: `${menuRight}px`,\r\n top: `${menuTop}px`,\r\n maxHeight: `${maxHeight}px`,\r\n overflow: 'auto',\r\n });\r\n setHamburguerCoords({\r\n right: `${10}px`,\r\n top: `${hamburguerTop}px`,\r\n });\r\n };\r\n\r\n const observer = new ResizeObserver(resize);\r\n\r\n observer.observe(document.getElementById(header) as HTMLElement);\r\n\r\n unsuscribers.push(() => void observer.disconnect());\r\n\r\n resize();\r\n }\r\n\r\n return () => unsuscribers.forEach((unsuscribe) => unsuscribe());\r\n }, [container, hamburguerRef, header, menuRef]);\r\n\r\n const children = useMenu([4, 5, 6, 7]);\r\n\r\n const iconSx = React.useMemo(\r\n () =>\r\n hamburguerCoords\r\n ? ({\r\n position: 'fixed',\r\n zIndex: 'menu',\r\n ...hamburguerCoords,\r\n } as ThemeUICSSObject)\r\n : undefined,\r\n [hamburguerCoords],\r\n );\r\n\r\n const menuSx = React.useMemo(\r\n () =>\r\n menuCoords\r\n ? ({\r\n position: 'fixed',\r\n zIndex: 'menu',\r\n ...menuCoords,\r\n } as ThemeUICSSObject)\r\n : undefined,\r\n [menuCoords],\r\n );\r\n\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 5 });\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n return (\r\n <>\r\n <Box\r\n id=\"HamburguerIconWrapper\"\r\n className={`HamburguerIconWrapper ${forceVisibility ? 'forced' : ''}`}\r\n ref={setHamburguerRef}\r\n as=\"aside\"\r\n aria-label={window.LBL_OPTIONS_VAR}\r\n >\r\n <IconButton\r\n sx={iconSx}\r\n icon={'Hamburguer'}\r\n className=\"hamburguerIcon\"\r\n onClick={() => setIsVisible((s) => !s)}\r\n aria-label={window.LBL_OPEN_MENU}\r\n />\r\n </Box>\r\n <Portal>\r\n <Box>\r\n <CSSTransition\r\n in={isVisible}\r\n timeout={150}\r\n classNames=\"hamburguerMenu\"\r\n >\r\n <Box\r\n ref={setMenuRef}\r\n {...getVariant('layout.twoColumnsAside.hamburguerMenu')}\r\n className=\"hamburguerMenu\"\r\n sx={menuSx}\r\n as=\"aside\"\r\n aria-label={window.LBL_OPTIONS_AND_TABS}\r\n >\r\n {(breakpoint === 4 || forceVisibility) && children}\r\n </Box>\r\n </CSSTransition>\r\n </Box>\r\n </Portal>\r\n </>\r\n );\r\n};\r\n","import { FaBars } from '@meronex/icons/fa';\r\nimport { useBreakpointIndex, Box, IconButton, getVariant } from '@apia/theme';\r\nimport usePortal from 'react-cool-portal';\r\nimport { FavoriteIcon } from '../FavoriteIcon';\r\n\r\nexport const HeaderButtons = () => {\r\n const breakPoint = useBreakpointIndex();\r\n const shouldShowAsFloat = breakPoint === 3;\r\n\r\n const { Portal: FloatPortal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n return (\r\n <Box className=\"iconsBar\">\r\n {breakPoint >= 4 && <FavoriteIcon />}\r\n {shouldShowAsFloat && (\r\n <FloatPortal>\r\n <Box {...getVariant('layout.twoColumnsAside.hamburguer')}>\r\n <IconButton\r\n title={window.TOGGLE_MENU}\r\n aria-label={window.TOGGLE_MENU}\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n }}\r\n className=\"toggleMenu\"\r\n >\r\n <FaBars />\r\n </IconButton>\r\n </Box>\r\n </FloatPortal>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant, Heading, Image } from '@apia/theme';\r\nimport { HeaderButtons } from './HeaderButtons';\r\n\r\ninterface IHeader {\r\n title: string;\r\n description?: string;\r\n image?: string;\r\n}\r\n\r\nexport const Header = ({ title, description, image: imageUrl }: IHeader) => {\r\n return (\r\n <header>\r\n <Box className=\"imageTitleAndDescription\">\r\n <Box className=\"image\">\r\n <Image src={imageUrl ?? ''} role=\"presentation\" alt=\"\" />\r\n </Box>\r\n <Box className=\"titleAndDescription\">\r\n <Heading {...getVariant('text.title')} as=\"h1\">\r\n <Box as=\"span\">{title}</Box>\r\n </Heading>\r\n <Box as=\"p\" className=\"description\">\r\n {description ?? ''}\r\n </Box>\r\n </Box>\r\n </Box>\r\n <HeaderButtons />\r\n </header>\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const ShowResponsive = ({\r\n show = [true],\r\n children,\r\n display = 'block',\r\n}: {\r\n display?: string;\r\n show?: boolean[];\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <Box sx={{ display: show.map((def) => (def ? display : 'none')) }}>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { useBreakpointIndex } from '@apia/theme';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { FavoriteIcon } from '../FavoriteIcon';\r\n\r\nexport const CenteredHeaderButtons = () => {\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 4 });\r\n\r\n const { Portal: Portal1 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'ResponsiveButtons',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n const { Portal: Portal2 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'HamburguerIconWrapper',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n const { Portal: Portal3 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'RelatedButtonsContainer',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n\r\n const icon = React.useMemo(() => <FavoriteIcon />, []);\r\n\r\n if (breakpoint < 3) return <Portal1>{icon}</Portal1>;\r\n if (breakpoint === 3) return <Portal2>{icon}</Portal2>;\r\n return <Portal3>{icon}</Portal3>;\r\n};\r\n","import { isObservable, observable, reaction } from 'mobx';\r\nimport { makeObservable, toJS } from 'mobx';\r\nimport { IParameter, ParameterObject, TParameterType } from './types';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport class Parameter<T extends IParameter = IParameter>\r\n implements ParameterObject\r\n{\r\n public state: T & { validationError?: string };\r\n\r\n public component?: string;\r\n\r\n constructor(\r\n params: T & {\r\n component?: string;\r\n },\r\n ) {\r\n this.component = params.component;\r\n this.state = params;\r\n this.state.type = this.state.type.toLowerCase() as TParameterType;\r\n this.state.values = this.state.values || [];\r\n this.removeEmptyValues();\r\n\r\n if (!isObservable(this.state)) {\r\n makeObservable<Parameter<T>, 'state'>(this, {\r\n state: observable,\r\n });\r\n }\r\n\r\n reaction(\r\n () => this.state.values,\r\n () => delete this.state.validationError,\r\n );\r\n }\r\n\r\n clear() {\r\n this.state.values.splice(0, this.state.values.length);\r\n }\r\n\r\n getValues() {\r\n return this.state.values;\r\n }\r\n\r\n private removeEmptyValues() {\r\n this.state.values = this.state.values.filter((x) => !!x);\r\n }\r\n\r\n setValue(value: string, index?: number) {\r\n //this.removeEmptyValues();\r\n index !== null && index !== undefined\r\n ? (this.state.values[index] = value)\r\n : (this.state.values = [value]);\r\n }\r\n\r\n addValue(value: string) {\r\n this.removeEmptyValues();\r\n this.state.values[this.state.values.length] = value;\r\n }\r\n\r\n setValues(values: string[], index = 0) {\r\n this.removeEmptyValues();\r\n values.forEach((x, i) => (this.state.values[index + i] = x));\r\n for (let i = values.length; i < this.state.values.length; i++) {\r\n delete this.state.values[i];\r\n }\r\n }\r\n\r\n removeValue(value: string) {\r\n this.state.values = this.getValues().filter((x) => !!x && x !== value);\r\n }\r\n\r\n asPayloadElement() {\r\n return this.state.type === 'label' ? null : toJS(this.state.values);\r\n }\r\n\r\n includes(value: string) {\r\n return this.state.values.includes(value);\r\n }\r\n\r\n validate() {\r\n const isValid = !this.state.required || !!this.state.values[0];\r\n this.state.validationError = isValid\r\n ? undefined\r\n : getLabel('msgReqField').text;\r\n return isValid;\r\n }\r\n\r\n setComponent(component?: string) {\r\n this.component = component;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { ParameterRenderer } from './types';\r\nimport { useRef, ReactNode, Suspense, useMemo } from 'react';\r\nimport {\r\n Checkbox,\r\n FieldErrorMessage,\r\n FieldLabel,\r\n importComponent,\r\n} from '../components';\r\nimport { Parameter } from './Parameter';\r\nimport { Heading, Input, Select, Textarea } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const ParameterRender = observer(\r\n ({\r\n index = 0,\r\n omitLabel = false,\r\n parameter,\r\n }: {\r\n index: number;\r\n omitLabel?: boolean;\r\n parameter: Parameter;\r\n }) => {\r\n const Label = useMemo(\r\n () =>\r\n omitLabel && parameter.state.type !== 'check'\r\n ? ({ children }: { children: ReactNode }) => <>{children}</>\r\n : FieldLabel,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n const error = parameter.state.validationError && (\r\n <FieldErrorMessage name={parameter.state.name}>\r\n {parameter.state.validationError}\r\n </FieldErrorMessage>\r\n );\r\n const componentRef = useRef<ParameterRenderer | null>(null);\r\n\r\n if (parameter.component) {\r\n componentRef.current =\r\n componentRef.current ||\r\n (importComponent(parameter.component!) as ParameterRenderer);\r\n\r\n return (\r\n <Suspense fallback={null}>\r\n <componentRef.current parameter={parameter} index={index} />\r\n {error}\r\n </Suspense>\r\n );\r\n } else if (parameter.state.type === 'input') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Input\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(ev.target.value, index);\r\n }}\r\n value={parameter.state.values[index] ?? ''}\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'text_area') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Textarea\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n const values: string[] = [];\r\n let lastIndex = 0;\r\n do {\r\n const finishIndex = Math.min(\r\n lastIndex + 240,\r\n ev.target.value.length,\r\n );\r\n values.push(ev.target.value.slice(lastIndex, finishIndex));\r\n lastIndex += 240;\r\n } while (lastIndex < ev.target.value.length);\r\n\r\n parameter.setValues(\r\n values.map((x) => (x !== null ? x : '')),\r\n index,\r\n );\r\n }}\r\n value={parameter.state.values.join('')}\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'check') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Checkbox\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(String(ev.target.checked), index);\r\n }}\r\n checked={parameter.state.values[index] === 'true'}\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'combo') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Select\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(ev.target.value, index);\r\n }}\r\n value={parameter.state.values[index]}\r\n >\r\n {arrayOrArray(parameter.state.possibleValues).map((c) => (\r\n <option value={c.value}>{c.text}</option>\r\n ))}\r\n </Select>\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'mdl_attribute') {\r\n console.warn('There is no renderer for type mdl_attribute');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_doc_type') {\r\n console.warn('There is no renderer for type mdl_doc_type');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_metadata') {\r\n console.warn('There is no renderer for type mdl_metadata');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_entity') {\r\n console.warn('There is no renderer for type mdl_entity');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_connector') {\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_completion_model') {\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_embeddings_model') {\r\n return null;\r\n } else if (parameter.state.type === 'hidden') {\r\n return null;\r\n } else if (parameter.state.type === 'label') {\r\n return (\r\n <Heading\r\n sx={{ my: 5, fontSize: '19px !important' }}\r\n title={parameter.state.description}\r\n as=\"h5\"\r\n >\r\n {parameter.state.title}\r\n </Heading>\r\n );\r\n }\r\n\r\n console.warn('Cannot render parameter of type', parameter.state.type);\r\n\r\n return null;\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ParameterRender } from './ParameterRender';\r\nimport { Box, Button } from '@apia/theme';\r\nimport { ParametersGroupRenderer } from './types';\r\nimport { toJS } from 'mobx';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ParametersTable: ParametersGroupRenderer = observer(\r\n ({ group }) => {\r\n const maxIndex = Math.max(\r\n ...Object.values(group.parameters).map((p) => p.state.values.length),\r\n );\r\n const indices = Array.from({ length: maxIndex }, (_, i) => i);\r\n\r\n return (\r\n <Box\r\n as=\"table\"\r\n variant=\"layout.common.tables.secondary\"\r\n sx={{\r\n gridColumn: 'span 4',\r\n }}\r\n >\r\n <thead>\r\n <tr>\r\n {Object.values(group.parameters).map((p) =>\r\n p.state.type !== 'hidden' ? (\r\n <th sx={toJS(p.state.cssProps?.TH)} key={p.state.name}>\r\n {p.state.title}\r\n </th>\r\n ) : null,\r\n )}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {indices.map((index) => (\r\n <tr\r\n key={index}\r\n onClick={() => {\r\n group.selection.clear();\r\n group.selection.add(index);\r\n }}\r\n className={group.selection.has(index) ? 'selected' : ''}\r\n >\r\n {Object.entries(group.parameters).map(([name, parameter]) =>\r\n parameter.state.type !== 'hidden' ? (\r\n <td key={name}>\r\n <ParameterRender\r\n omitLabel\r\n index={index}\r\n parameter={parameter}\r\n />\r\n </td>\r\n ) : null,\r\n )}\r\n </tr>\r\n ))}\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td colSpan={Object.keys(group.parameters).length}>\r\n <Button\r\n onClick={() => {\r\n Object.values(group.parameters)[0]?.state.values.push('');\r\n }}\r\n >\r\n {getLabel('btnAgr').text}\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n for (let i = maxIndex; i >= 0; i--) {\r\n if (group.selection.has(i)) {\r\n Object.values(group.parameters).forEach((c) =>\r\n c.state.values.splice(i, 1),\r\n );\r\n }\r\n }\r\n group.selection.clear();\r\n }}\r\n >\r\n {getLabel('btnDel').text}\r\n </Button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Parameter } from '.';\r\n\r\nimport { ITableParameterProps } from './types';\r\n\r\nexport class TableParameter extends Parameter<ITableParameterProps> {\r\n constructor(params: ITableParameterProps) {\r\n super(params);\r\n\r\n this.state.cssProps = params.cssProps ?? { TH: {} };\r\n }\r\n}\r\n","import { makeObservable } from 'mobx';\r\nimport { observable } from 'mobx';\r\nimport { IParameter, ITableParameterProps, ParameterObject } from './types';\r\nimport { TableParameter } from './TableParameter';\r\n\r\nexport class ParametersGroup implements ParameterObject {\r\n component?: string;\r\n name: string;\r\n parameters: Record<string, TableParameter>;\r\n selection: Set<number> = new Set();\r\n\r\n constructor(params: {\r\n name: string;\r\n parameters: Record<string, IParameter>;\r\n component?: string;\r\n }) {\r\n this.component = params.component;\r\n this.name = params.name;\r\n this.parameters = Object.fromEntries(\r\n Object.entries(params.parameters).map(([name, param]) => [\r\n name,\r\n new TableParameter(param as ITableParameterProps),\r\n ]),\r\n );\r\n\r\n makeObservable(this, {\r\n parameters: observable,\r\n selection: observable,\r\n });\r\n }\r\n\r\n removeAll() {\r\n Object.values(this.parameters).forEach((p) => p.clear());\r\n }\r\n\r\n asPayloadElement(): Record<string, any> {\r\n return Object.keys(this.parameters).reduce<Record<string, any>>(\r\n (prev, current) => {\r\n const elem = this.parameters[current].asPayloadElement();\r\n elem && (prev[current] = elem);\r\n return prev;\r\n },\r\n {},\r\n );\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IParameter, IParametersGroup, ParameterObject } from '.';\r\nimport { Parameter } from './Parameter';\r\nimport { ParametersGroup } from './ParametersGroup';\r\n\r\nexport function isParametersGroup(\r\n param: IParameter | IParametersGroup,\r\n): param is IParametersGroup {\r\n return (param as IParametersGroup).parameters !== undefined;\r\n}\r\n\r\nexport class ParametersStore {\r\n private static instance: ParametersStore;\r\n public static getInstance() {\r\n if (!ParametersStore.instance) {\r\n ParametersStore.instance = new ParametersStore();\r\n }\r\n return ParametersStore.instance;\r\n }\r\n\r\n private parameters: Record<string, Record<string, ParameterObject>> = {};\r\n\r\n private constructor() {\r\n makeObservable<ParametersStore, 'parameters'>(this, {\r\n parameters: observable,\r\n });\r\n }\r\n\r\n /**\r\n * Takes the string generated by the ParametersStore in the server\r\n * and assigns it to the current parameters\r\n */\r\n fromResponse(owner: string, response: string) {\r\n const params = JSON.parse(response) as Record<\r\n string,\r\n IParameter | IParametersGroup\r\n >;\r\n\r\n Object.entries(params).forEach(([name, param]) => {\r\n if (!this.parameters[owner]) {\r\n this.parameters[owner] = {};\r\n }\r\n\r\n if (isParametersGroup(param)) {\r\n this.parameters[owner][name] = new ParametersGroup(param);\r\n } else {\r\n this.parameters[owner][name] = new Parameter(param);\r\n }\r\n });\r\n }\r\n\r\n public static getParametersFromResponse(response: string) {\r\n const parsed = JSON.parse(response) as Record<\r\n string,\r\n IParameter | IParametersGroup\r\n >;\r\n const newParameters: Record<string, ParameterObject> = {};\r\n\r\n Object.entries(parsed).forEach(([name, param]) => {\r\n if (isParametersGroup(param)) {\r\n newParameters[name] = new ParametersGroup(param);\r\n } else {\r\n newParameters[name] = new Parameter(param);\r\n }\r\n });\r\n return newParameters;\r\n }\r\n\r\n public static getParametersFromObject(\r\n response: Record<string, IParameter | IParametersGroup>,\r\n ) {\r\n const newParameters: Record<string, ParameterObject> = {};\r\n\r\n Object.entries(response).forEach(([name, param]) => {\r\n if (param instanceof Parameter || param instanceof ParametersGroup) {\r\n newParameters[name] = param;\r\n } else {\r\n if (isParametersGroup(param)) {\r\n newParameters[name] = new ParametersGroup(param);\r\n } else {\r\n newParameters[name] = new Parameter(param);\r\n }\r\n }\r\n });\r\n return newParameters;\r\n }\r\n\r\n /**\r\n * Returns the parameters for a given owner name.\r\n */\r\n getParameters(ownerName: string) {\r\n return this.parameters[ownerName];\r\n }\r\n\r\n /**\r\n * Returns an object that can be used to submit the parameters to the server\r\n * in a format that the ParametersStore in the server expects.\r\n */\r\n getSubmitValue(owner: string) {\r\n const submitObject: Record<string, string[]> = {};\r\n\r\n Object.values(this.parameters[owner]).forEach((p) => {\r\n if (p instanceof Parameter) {\r\n submitObject[p.state.name] = p.getValues();\r\n } else if (p instanceof ParametersGroup) {\r\n for (const [name, param] of Object.entries(p.parameters)) {\r\n submitObject[name] = param.getValues();\r\n }\r\n }\r\n });\r\n\r\n return JSON.stringify(submitObject);\r\n }\r\n\r\n /**\r\n * Resets the parameters store.\r\n */\r\n reset() {\r\n this.parameters = {};\r\n }\r\n\r\n public static validate(parameters: Record<string, ParameterObject>) {\r\n let isValid = true;\r\n let firstInvalid: Parameter | null = null;\r\n\r\n for (const p of Object.values(parameters)) {\r\n if (p instanceof Parameter) {\r\n isValid = p.validate() && isValid;\r\n if (!firstInvalid && !isValid) {\r\n firstInvalid = p;\r\n }\r\n } else if (p instanceof ParametersGroup) {\r\n for (const pg of Object.values(p.parameters)) {\r\n isValid = pg.validate() && isValid;\r\n if (!firstInvalid && !isValid) {\r\n firstInvalid = pg;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (firstInvalid) {\r\n document\r\n .querySelector<HTMLElement>(`[name=\"${firstInvalid.state.name}\"]`)\r\n ?.focus();\r\n }\r\n\r\n return isValid;\r\n }\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ParameterRender } from './ParameterRender';\r\nimport { ParametersTable } from './ParametersTable';\r\nimport { ParametersGroup } from './ParametersGroup';\r\nimport { Parameter } from './Parameter';\r\nimport { importComponent } from '../components';\r\nimport { ParameterObject, ParametersGroupRenderer } from './types';\r\nimport { ReactNode, Suspense } from 'react';\r\nimport { ParametersStore } from './ParametersStore';\r\nimport { uniqueId } from '@apia/util';\r\n\r\ntype ParametersMap = Record<string, ParameterObject>;\r\n\r\nexport const Parameters = observer(\r\n ({\r\n label,\r\n ownerName,\r\n parameters,\r\n }: {\r\n label?: ReactNode;\r\n ownerName?: string;\r\n parameters?: ParametersMap;\r\n }) => {\r\n const params =\r\n parameters ??\r\n ParametersStore.getInstance().getParameters(ownerName ?? '');\r\n\r\n if (!params) return;\r\n return (\r\n <>\r\n {label}\r\n {Object.entries(params).map(([, c]) => {\r\n if (c instanceof Parameter) {\r\n return (\r\n <ParameterRender\r\n index={0}\r\n parameter={c}\r\n key={uniqueId(c.state.name)}\r\n />\r\n );\r\n } else if (c instanceof ParametersGroup) {\r\n if (c.component) {\r\n const Component = importComponent(\r\n c.component,\r\n ) as ParametersGroupRenderer;\r\n return (\r\n <Suspense fallback={null}>\r\n <Component group={c} key={c.name} />\r\n </Suspense>\r\n );\r\n } else {\r\n return <ParametersTable group={c} key={c.name} />;\r\n }\r\n }\r\n })}\r\n </>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IFilterCondition, TFilterOp, TFilterValueType } from './types';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FilterDTO } from './FilterDTO';\r\nimport { Select } from '@apia/theme';\r\n\r\nexport class FilterConditionDTO {\r\n state: IFilterCondition = { label: '', op: '' as TFilterOp };\r\n parent: FilterDTO;\r\n private allowedOps: Set<TFilterOp> = new Set();\r\n private static opLabels: Record<TFilterOp, { text: string; title: string }> =\r\n {\r\n CONTAINS: getLabel('lblFilLik'),\r\n DISTINCT: getLabel('lblFilNotEqu'),\r\n ENDS_WITH: getLabel('lblFilLikLef'),\r\n EQUAL: getLabel('lblFilEqu'),\r\n NOT_CONTAINS: getLabel('lblFilNotLik'),\r\n NOT_ENDS_WITH: getLabel('lblFilNotLikLef'),\r\n NOT_STARTS_WITH: getLabel('lblFilNotLikRig'),\r\n STARTS_WITH: getLabel('lblFilLikRig'),\r\n NOT_NULL: getLabel('lblFilNotNull'),\r\n NULL: getLabel('lblFilNull'),\r\n LOWER_THAN: getLabel('lblFilLowerThan'),\r\n LOWER_OR_EQUAL_THAN: getLabel('lblFilLowerOrEqualThan'),\r\n GREATER_THAN: getLabel('lblFilGreaterThan'),\r\n GREATER_OR_EQUAL_THAN: getLabel('lblFilGreaterOrEqualThan'),\r\n IN: getLabel('lblFilIn'),\r\n NOT_IN: getLabel('lblFilNotIn'),\r\n RANGE: getLabel('lblFilRange'),\r\n };\r\n constructor(\r\n props: IFilterCondition,\r\n type: TFilterValueType,\r\n parent: FilterDTO,\r\n ) {\r\n switch (type) {\r\n case 'S':\r\n [\r\n 'CONTAINS',\r\n 'DISTINCT',\r\n 'ENDS_WITH',\r\n 'EQUAL',\r\n 'NOT_CONTAINS',\r\n 'NOT_ENDS_WITH',\r\n 'NOT_STARTS_WITH',\r\n 'STARTS_WITH',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n case 'D':\r\n [\r\n 'EQUAL',\r\n 'DISTINCT',\r\n 'LOWER_THAN',\r\n 'LOWER_OR_EQUAL_THAN',\r\n 'GREATER_THAN',\r\n 'GREATER_OR_EQUAL_THAN',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n 'RANGE',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n case 'N':\r\n [\r\n 'EQUAL',\r\n 'DISTINCT',\r\n 'LOWER_THAN',\r\n 'LOWER_OR_EQUAL_THAN',\r\n 'GREATER_THAN',\r\n 'GREATER_OR_EQUAL_THAN',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n 'RANGE',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n }\r\n this.state = props;\r\n this.parent = parent;\r\n this.state.label = this.getLabelByFilterOp().text;\r\n makeObservable(this, { state: observable, parent: observable });\r\n }\r\n\r\n getLabelByFilterOp() {\r\n return FilterConditionDTO.opLabels[this.state.op];\r\n }\r\n\r\n getOpMap() {\r\n return Object.keys(FilterConditionDTO.opLabels).reduce<\r\n Record<TFilterOp, { text: string; title: string }>\r\n >(\r\n (acc, key) => {\r\n if (this.allowedOps.has(key as TFilterOp)) {\r\n acc[key as TFilterOp] = FilterConditionDTO.opLabels[key as TFilterOp];\r\n }\r\n return acc;\r\n },\r\n {} as Record<TFilterOp, { text: string; title: string }>,\r\n );\r\n }\r\n\r\n setOp(op: TFilterOp) {\r\n if (\r\n (this.state.op === 'NULL' || this.state.op === 'NOT_NULL') &&\r\n op !== 'NOT_NULL' &&\r\n op !== 'NULL'\r\n ) {\r\n this.parent.setValue('');\r\n }\r\n this.state.op = op;\r\n }\r\n\r\n Component = observer(() => {\r\n return (\r\n <Select\r\n name=\"filterCondition\"\r\n onChange={(ev) => this.setOp(ev.target.value as TFilterOp)}\r\n >\r\n {Object.entries(this.getOpMap()).map(([key, value], idx) => {\r\n return (\r\n <option\r\n selected={this.state.op === key}\r\n key={`${key}_${idx}`}\r\n value={key}\r\n >\r\n {value.text}\r\n </option>\r\n );\r\n })}\r\n </Select>\r\n );\r\n });\r\n}\r\n","import { action, observable, toJS } from 'mobx';\r\nimport { makeObservable } from 'mobx';\r\nimport {\r\n IFilterDTOState,\r\n IFilterValue,\r\n TFilterOp,\r\n TFilterPayload,\r\n TFilterType,\r\n TFilterValue,\r\n TVisualizationType,\r\n} from './types';\r\nimport { FilterConditionDTO } from './FilterConditionDTO';\r\nimport { FiltersStore } from './FiltersStore';\r\nimport { Box, BoxProps, Input, InputProps } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FC, ReactNode } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { Checkbox, FieldErrorMessage, IconButton } from '../components';\r\n\r\nexport class FilterDTO<T extends IFilterDTOState = IFilterDTOState> {\r\n type: string = 'filter';\r\n public state: T;\r\n isTd: boolean;\r\n ref: HTMLElement | null = null;\r\n\r\n constructor(params: T, filterType?: TFilterType, isTd: boolean = true) {\r\n this.state = params;\r\n filterType && (this.state.filterType = filterType);\r\n if (params.filterCondition && typeof params.filterCondition === 'string') {\r\n this.state.filterCondition = new FilterConditionDTO(\r\n {\r\n op: params.filterCondition as any as TFilterOp,\r\n },\r\n params.valueType,\r\n this,\r\n );\r\n }\r\n if (\r\n this.state.value &&\r\n (this.state.filterCondition.state.op === 'IN' ||\r\n this.state.filterCondition.state.op === 'NOT_IN' ||\r\n this.state.filterCondition.state.op === 'RANGE')\r\n ) {\r\n this.state.multipleValue = (String(this.state.value) ?? '').split(',');\r\n this.state.value = undefined;\r\n }\r\n this.state.visualizationType =\r\n params.visualizationType.toUpperCase() as TVisualizationType;\r\n this.state.hasFixedType = !!this.state.valueType;\r\n makeObservable(this, {\r\n state: observable,\r\n setValue: action,\r\n });\r\n this.isTd = isTd;\r\n }\r\n\r\n private isCheckBox() {\r\n return (\r\n this.state.filterCondition.state.op === 'NULL' ||\r\n this.state.filterCondition.state.op === 'NOT_NULL'\r\n );\r\n }\r\n\r\n getStoreValue() {\r\n return ['IN', 'NOT_IN', 'RANGE'].includes(\r\n this.state.filterCondition.state.op,\r\n )\r\n ? this.state.multipleValue?.filter((c) => !!c).join(',')\r\n : this.state.value;\r\n }\r\n\r\n getValue() {\r\n if (!this.state.value && this.isCheckBox()) {\r\n if (!FiltersStore.getFilter(this.state.name, 'F')) {\r\n this.state.value = String((this.state.value as string) === 'true');\r\n } else {\r\n this.state.value = 'true';\r\n }\r\n }\r\n return this.state.value;\r\n }\r\n\r\n getValueTypeLabel() {\r\n switch (this.state.valueType) {\r\n case 'D':\r\n return getLabel('lblDate').text;\r\n case 'N':\r\n return getLabel('lblNum').text;\r\n case 'S':\r\n return getLabel('lblStr').text;\r\n default:\r\n return this.state.valueType;\r\n }\r\n }\r\n\r\n setMultipleValue(value: string | Date | number, idx?: number) {\r\n if (!this.state.multipleValue) {\r\n this.state.multipleValue = [];\r\n }\r\n\r\n if (this.state.multipleValue) {\r\n if (idx !== undefined) {\r\n this.state.multipleValue[idx] = value;\r\n } else {\r\n this.state.multipleValue.push(this.state.value as TFilterValue);\r\n }\r\n }\r\n }\r\n\r\n setValue(value: string | number | Date) {\r\n this.state.value = value;\r\n }\r\n\r\n private resolveMultipleValueInPayload() {\r\n if (\r\n this.state.filterCondition.state.op === 'IN' ||\r\n this.state.filterCondition.state.op === 'NOT_IN'\r\n ) {\r\n return this.state.multipleValue?.join(',');\r\n } else if (this.state.filterCondition.state.op === 'RANGE') {\r\n return this.state.multipleValue?.slice(0, 2).join(',');\r\n }\r\n }\r\n\r\n asPayloadElement() {\r\n const aux: TFilterPayload = toJS(this.state) as any as TFilterPayload;\r\n aux.filterCondition = this.state.filterCondition.state.op;\r\n aux.multipleValue && (aux.value = this.resolveMultipleValueInPayload());\r\n\r\n return aux;\r\n }\r\n\r\n asFilterValue(): IFilterValue | null {\r\n const value = this.state.multipleValue\r\n ? this.resolveMultipleValueInPayload()\r\n : this.state.value;\r\n return value\r\n ? {\r\n condition: this.state.filterCondition.state.op,\r\n value,\r\n type: this.state.valueType,\r\n }\r\n : null;\r\n }\r\n\r\n public getInputType() {\r\n return this.state.valueType === 'N'\r\n ? 'number'\r\n : this.state.valueType === 'D'\r\n ? 'date'\r\n : 'text';\r\n }\r\n\r\n removeMultipleValue(value: TFilterValue) {\r\n this.state.multipleValue = (this.state.multipleValue ?? []).filter(\r\n (x) => x !== value,\r\n );\r\n }\r\n\r\n isUndefined(value: TFilterValue) {\r\n return !value || !(value !== 'undefined');\r\n }\r\n\r\n Component = observer(\r\n ({\r\n renderers,\r\n multipleInputBoxProps,\r\n }: {\r\n renderers?: {\r\n input?: FC<InputProps & { label?: string }>;\r\n };\r\n multipleInputBoxProps?: BoxProps;\r\n }) => {\r\n const value = this.getValue();\r\n const type = this.getInputType();\r\n let visualizationComponent: ReactNode = null;\r\n\r\n const error = this.state.validationError ? (\r\n <FieldErrorMessage>{this.state.validationError}</FieldErrorMessage>\r\n ) : null;\r\n\r\n const InputRenderer = renderers?.input || Input;\r\n\r\n switch (this.state.filterCondition.state.op) {\r\n case 'CONTAINS':\r\n case 'DISTINCT':\r\n case 'ENDS_WITH':\r\n case 'EQUAL':\r\n case 'NOT_CONTAINS':\r\n case 'NOT_ENDS_WITH':\r\n case 'NOT_STARTS_WITH':\r\n case 'STARTS_WITH':\r\n case 'GREATER_OR_EQUAL_THAN':\r\n case 'GREATER_THAN':\r\n case 'LOWER_OR_EQUAL_THAN':\r\n case 'LOWER_THAN': {\r\n visualizationComponent = (\r\n <InputRenderer\r\n onChange={(ev) => {\r\n this.setValue(ev.target.value);\r\n }}\r\n type={type}\r\n value={value as string}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n );\r\n break;\r\n }\r\n case 'IN':\r\n case 'NOT_IN':\r\n visualizationComponent = (\r\n <Box {...multipleInputBoxProps}>\r\n <InputRenderer\r\n onKeyDown={(ev) => {\r\n if (ev.key === 'Enter') {\r\n this.setMultipleValue(this.getValue() as TFilterValue);\r\n this.setValue('');\r\n }\r\n }}\r\n onChange={(ev) => {\r\n this.setValue(ev.target.value);\r\n ev.preventDefault();\r\n }}\r\n type={type}\r\n value={value as string}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n {[...(this.state.multipleValue ?? new Set())].map((x, idx) => (\r\n <Box {...multipleInputBoxProps} className=\"multiplesValuesBox\">\r\n <InputRenderer\r\n onChange={(ev) => {\r\n this.setMultipleValue(ev.target.value, idx);\r\n }}\r\n value={x as string}\r\n type={type}\r\n ></InputRenderer>\r\n <IconButton\r\n icon=\"Trash\"\r\n onClick={() => {\r\n this.removeMultipleValue(x as TFilterValue);\r\n }}\r\n ></IconButton>\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n break;\r\n case 'NOT_NULL':\r\n case 'NULL':\r\n // eslint-disable-next-line no-case-declarations\r\n const isFixed = this.state.filterType === 'F';\r\n isFixed && this.setValue('true');\r\n visualizationComponent = (\r\n <Checkbox\r\n disabled={isFixed}\r\n type=\"checkbox\"\r\n onChange={(ev) =>\r\n this.setValue(ev.target.checked ? 'true' : 'false')\r\n }\r\n checked={value === 'true'}\r\n ref={(el) => (this.ref = el)}\r\n ></Checkbox>\r\n );\r\n break;\r\n case 'RANGE':\r\n if (\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n this.isUndefined(this.state.multipleValue[0])\r\n ) {\r\n this.state.multipleValue[0] = '';\r\n }\r\n visualizationComponent = (\r\n <>\r\n <Box>\r\n {/*<Label>{getLabel('lblProEleFrom').text}</Label>*/}\r\n <InputRenderer\r\n value={\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n !this.isUndefined(this.state.multipleValue[0])\r\n ? (this.state.multipleValue[0] as any)\r\n : ''\r\n }\r\n label={getLabel('lblProEleTo').text}\r\n title={getLabel('lblProEleFrom').text}\r\n type={type}\r\n onChange={(ev) => {\r\n this.setMultipleValue(ev.target.value, 0);\r\n }}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n </Box>\r\n <Box>\r\n {/*<Label>{getLabel('lblProEleTo').text}</Label>*/}\r\n <InputRenderer\r\n value={\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n this.state.multipleValue[1]\r\n ? (this.state.multipleValue[1] as any)\r\n : ''\r\n }\r\n label={getLabel('lblProEleTo').text}\r\n title={getLabel('lblProEleTo').text}\r\n type={type}\r\n onChange={(ev) => {\r\n if ((this.state.multipleValue ?? []).length < 1) {\r\n this.setMultipleValue('', 0);\r\n }\r\n this.setMultipleValue(ev.target.value, 1);\r\n }}\r\n ></InputRenderer>\r\n </Box>\r\n </>\r\n );\r\n break;\r\n default:\r\n throw new Error(\r\n 'Unknown condition: ' + this.state.filterCondition.state.op,\r\n );\r\n }\r\n\r\n return (\r\n <Box variant=\"layout.design.semanticSearch.filterBox\">\r\n {!this.isTd && <span>{this.getLabel()}</span>}\r\n {visualizationComponent}\r\n {error}\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\n getLabel() {\r\n return `${this.state.title} (${this.state.filterCondition.state.label})`;\r\n }\r\n\r\n validate() {\r\n const storeValue = this.getStoreValue();\r\n const isValid =\r\n this.state.filterType === 'U' ||\r\n (storeValue !== undefined && storeValue !== '');\r\n\r\n this.state.validationError = isValid\r\n ? undefined\r\n : getLabel('msgReqField').text;\r\n\r\n return isValid;\r\n }\r\n\r\n clear() {\r\n this.state.value = '';\r\n this.state.multipleValue = [];\r\n }\r\n\r\n hasFilledValue() {\r\n return this.state.value || this.state.multipleValue?.some((x) => x);\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IFilterDTOState, TFilterType } from '.';\r\nimport { FilterDTO } from './FilterDTO';\r\nimport { IFilterValue } from './types';\r\n\r\nexport class FiltersStore {\r\n private static instance: FiltersStore = new FiltersStore();\r\n\r\n available: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n fixed: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n dynamic: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n\r\n private constructor() {\r\n makeObservable(this, {\r\n available: observable,\r\n fixed: observable,\r\n dynamic: observable,\r\n });\r\n }\r\n\r\n /**\r\n * Takes the string generated by the ParametersStore in the server\r\n * and assigns it to the current filters\r\n */\r\n public static getFiltersFromResponse(\r\n response: string,\r\n from: 'fixed' | 'dynamic' | 'available' = 'available',\r\n ) {\r\n const parsed = JSON.parse(response) as {\r\n available: Record<string, IFilterDTOState>;\r\n dynamic: Record<string, IFilterDTOState>;\r\n fixed: Record<string, IFilterDTOState>;\r\n };\r\n const newFilters: Record<string, FilterDTO> = {};\r\n\r\n Object.entries(parsed[from]).forEach(([name, param]) => {\r\n newFilters[name] = new FilterDTO(param);\r\n });\r\n return newFilters;\r\n }\r\n\r\n public static setFiltersFromObject(response: {\r\n available: Record<string, FilterDTO<IFilterDTOState>>;\r\n fixed: Record<string, FilterDTO<IFilterDTOState>>;\r\n dynamic: Record<string, FilterDTO<IFilterDTOState>>;\r\n }) {\r\n this.instance.available = this.getFiltersFromObject(response.available);\r\n this.instance.dynamic = this.getFiltersFromObject(response.dynamic);\r\n this.instance.fixed = this.getFiltersFromObject(response.fixed);\r\n }\r\n\r\n public static getFiltersFromObject(response: Record<string, FilterDTO>) {\r\n const newFilters: Record<string, FilterDTO> = {};\r\n\r\n Object.entries(response).forEach(([name, param]) => {\r\n if (!(param instanceof FilterDTO)) {\r\n param = new FilterDTO(param);\r\n }\r\n newFilters[name] = param;\r\n });\r\n return newFilters;\r\n }\r\n\r\n /**\r\n * Returns the filters for a given name.\r\n */\r\n static getFilter(name: string, type?: TFilterType) {\r\n return !type\r\n ? this.instance.available[name]\r\n : type === 'F'\r\n ? this.instance.fixed[name]\r\n : this.instance.dynamic[name];\r\n }\r\n\r\n /**\r\n * Set filter into store given owner name\r\n */\r\n static setFilter(\r\n value: FilterDTO<IFilterDTOState>,\r\n type?: TFilterType,\r\n replace = true,\r\n ) {\r\n const newFilter = new FilterDTO(value.state, type);\r\n if (!type) {\r\n this.instance.available[value.state.name] = newFilter;\r\n } else if (\r\n type === 'F' &&\r\n ((!replace && !this.instance.fixed[value.state.name]) || replace)\r\n ) {\r\n this.instance.fixed[value.state.name] = newFilter;\r\n } else if (\r\n type === 'U' &&\r\n ((!replace && !this.instance.dynamic[value.state.name]) || replace)\r\n ) {\r\n this.instance.dynamic[value.state.name] = newFilter;\r\n }\r\n }\r\n\r\n /**\r\n * Remove into store given owner name\r\n */\r\n static removeFilter(x: FilterDTO<IFilterDTOState>, type?: TFilterType) {\r\n if (!type) {\r\n delete this.instance.available[x.state.name];\r\n delete this.instance.fixed[x.state.name];\r\n delete this.instance.dynamic[x.state.name];\r\n } else if (type === 'U') {\r\n delete this.instance.dynamic[x.state.name];\r\n x.state.filterType = undefined as any as TFilterType;\r\n } else if (type === 'F') {\r\n delete this.instance.fixed[x.state.name];\r\n x.state.filterType = undefined as any as TFilterType;\r\n }\r\n }\r\n\r\n /**\r\n * Resets the parameters store.\r\n */\r\n static reset() {\r\n FiltersStore.instance.available = {};\r\n FiltersStore.instance.fixed = {};\r\n FiltersStore.instance.dynamic = {};\r\n }\r\n\r\n static size() {\r\n return Object.keys(FiltersStore.instance.available).length;\r\n }\r\n\r\n static setFilters(\r\n filters: Record<string, FilterDTO<IFilterDTOState>>,\r\n type?: TFilterType,\r\n ) {\r\n !type\r\n ? (this.instance.available = filters)\r\n : type === 'F'\r\n ? (this.instance.fixed = filters)\r\n : (this.instance.dynamic = filters);\r\n }\r\n\r\n static filters(type?: TFilterType) {\r\n return !type\r\n ? FiltersStore.instance.available\r\n : type === 'F'\r\n ? FiltersStore.instance.fixed\r\n : FiltersStore.instance.dynamic;\r\n }\r\n\r\n static parseFiltersAsFilterValue(values: FilterDTO[]) {\r\n return values.reduce((x: Record<string, IFilterValue>, y) => {\r\n const value = y.asFilterValue();\r\n if (value) {\r\n x[y.state.name] = value;\r\n }\r\n return x;\r\n }, {});\r\n }\r\n\r\n static getFiltersAsFilterValue(\r\n type?: TFilterType,\r\n ): Record<string, IFilterValue> {\r\n return FiltersStore.parseFiltersAsFilterValue(FiltersStore.values(type));\r\n }\r\n\r\n static getAllFilters(includeAvailable?: boolean) {\r\n const retList = [];\r\n includeAvailable &&\r\n retList.push(...Object.values(FiltersStore.instance.available));\r\n retList.push(...Object.values(FiltersStore.instance.fixed));\r\n retList.push(...Object.values(FiltersStore.instance.dynamic));\r\n return retList;\r\n }\r\n\r\n static values(type?: TFilterType) {\r\n return !type\r\n ? Object.values(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.values(FiltersStore.instance.fixed)\r\n : Object.values(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static entries(type?: TFilterType) {\r\n return !type\r\n ? Object.entries(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.entries(FiltersStore.instance.fixed)\r\n : Object.entries(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static keys(type?: TFilterType) {\r\n return !type\r\n ? Object.keys(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.keys(FiltersStore.instance.fixed)\r\n : Object.keys(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static async getFiltersById(id: number) {\r\n const response = /* await ApiaApi.post<{\r\n parameters: string;\r\n }>(\r\n makeApiaUrl({\r\n ajaxUrl: 'apia.design.SemanticSearchAction.run',\r\n action: 'getFiltersBySemSerId',\r\n id,\r\n }),\r\n );*/ {} as any;\r\n\r\n const filters = this.getFiltersFromResponse(\r\n response?.data?.parameters ?? '',\r\n 'dynamic',\r\n );\r\n Object.values(filters).forEach((x) => (x.isTd = false));\r\n return filters;\r\n }\r\n\r\n static asPayloadElement() {\r\n return FiltersStore.getAllFilters().map((x) => x.asPayloadElement());\r\n }\r\n\r\n static validate() {\r\n let isValid = true;\r\n let firstInvalid: FilterDTO | null = null;\r\n\r\n for (const f of FiltersStore.getAllFilters()) {\r\n isValid &&= f.validate();\r\n if (!isValid && !firstInvalid) {\r\n firstInvalid = f;\r\n }\r\n }\r\n\r\n firstInvalid?.ref?.focus();\r\n\r\n return isValid;\r\n }\r\n}\r\n"],"names":["__publicField","KeyHandler","keysMakers","getInitialState","React","uniqueId","Fragment","__privateAdd","__privateGet","__privateSet","__privateMethod","useBreakpointIndex","_maxId","__privateWrapper","props","_","Icon","fillZeros","fillThousandsZeros","decimalCount","decimalZeros","decimalSeparator","thousandsSeparator","regexpThousandsSeparator","regexpDecimalSeparator","_timeout","y","x","_emitter","_items","c","shallowEqual","IconButtonThemeUI","Checkbox","isChecked","useUpdateEffect","disableChildrenFocus","disableChildrenFocusMethod","_shout","shout_fn","styles","operations","useStore","Label","distinctors","value","newName","Spinner","result","Box","document","isFunction","content","Lbl","IconButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/accordion/context.ts","../src/components/accordion/handler.tsx","../src/components/accordion/KeyHandler.tsx","../src/components/ListBox/common.ts","../src/components/accordion/Accordion.tsx","../src/components/accordion/AccordionItemButton.tsx","../src/components/modals/hooks/useModal.tsx","../src/components/modals/layout/DialogHeader.tsx","../src/components/modals/ModalContext.ts","../src/components/modals/hooks/useEscapeKey.ts","../src/components/modals/hooks/useInitialFocus.ts","../src/components/modals/hooks/useStyleState.ts","../src/components/modals/windowModal/handleMouseMove.ts","../src/components/modals/windowModal/bringToTop.ts","../src/components/modals/WindowModal.tsx","../src/hooks/useBodyScrollLock.ts","../src/components/modals/Overlay.tsx","../src/components/modals/StaticModal.tsx","../src/components/modals/Modal.tsx","../src/objects/ApiaUtil/modals/OpenModal.tsx","../src/objects/ApiaUtil/modals/ApiaUtilModals.tsx","../src/objects/ApiaUtil/notifications/ApiaUtilNotifications.tsx","../src/objects/ApiaUtil/tabs/util.ts","../src/objects/ApiaUtil/tabs/ApiaUtilTabsController.tsx","../src/components/modals/DeadSessionModal.tsx","../src/components/modals/CalendarModal.tsx","../src/components/modals/layout/DialogButtonBar.tsx","../src/components/forms/buttons/SimpleButton.tsx","../src/components/modals/layout/Confirm.tsx","../src/components/dialogs/ConfirmModal.tsx","../src/components/dialogs/AlertModal.tsx","../src/objects/ApiaUtil/dialogs/ApiaUtilDialogs.tsx","../src/objects/ApiaUtil/parsers/parseStringToApiaNumber.ts","../src/objects/ApiaUtil/parsers/ApiaUtilParsers.ts","../src/objects/ApiaUtil/tooltips/ApiaUtilTooltip.ts","../src/objects/ApiaUtil/tooltips/AutomaticTooltip.ts","../src/objects/ApiaUtil/tooltips/tooltip/util.ts","../src/objects/ApiaUtil/tooltips/tooltip/Tooltip.tsx","../src/objects/ApiaUtil/tooltips/ApiaUtilTooltips.tsx","../src/objects/ApiaUtil/menu/ApiaUtilMenu.tsx","../src/objects/ApiaUtil/mouse/ApiaUtilMouse.ts","../src/objects/ApiaUtil/index.tsx","../src/objects/ScreenLocker/index.tsx","../src/components/forms/Autocomplete/Context.tsx","../src/components/forms/Autocomplete/OptionsBox.tsx","../src/components/forms/Autocomplete/store/AutocompleteController.tsx","../src/components/forms/Autocomplete/SearchBox.tsx","../src/components/forms/Autocomplete/Keyhandler.tsx","../src/components/forms/Autocomplete/index.tsx","../src/components/forms/AutogrowTextarea.tsx","../src/components/forms/buttons/BaseButton.tsx","../src/components/forms/buttons/IconButton.tsx","../src/components/buttons/useOtherTagButton.ts","../src/components/forms/Captcha.tsx","../src/components/forms/Checkbox.tsx","../src/components/forms/IconInput.tsx","../src/components/forms/CalModal.tsx","../src/components/forms/DateInput.tsx","../src/components/forms/FieldErrorMessage.tsx","../src/components/forms/NumberInput.tsx","../src/components/forms/RequiredMark.tsx","../src/components/forms/util/style.ts","../src/components/forms/FieldLabel.tsx","../src/components/accordion/defaultElements/Checkbox.tsx","../src/components/accordion/defaultElements/useIsChecked.ts","../src/components/responsive/AutoEllipsis.tsx","../src/components/responsive/makeResponsiveComponent.tsx","../src/components/accordion/defaultElements/DefaultAccordionItemButton.tsx","../src/components/accordion/AccordionItemContent.tsx","../src/components/accordion/AccordionItem.tsx","../src/components/apia/ApiaDateFilter.tsx","../src/components/apia/ApiaFilter.tsx","../src/components/boxes/LabelBox.tsx","../src/components/containers/ContainerWithHeader/index.tsx","../src/components/collapsiblePanel/collapsiblePanel.ts","../src/components/collapsiblePanel/index.tsx","../src/components/ListBox/ListboxContext.tsx","../src/components/ListBox/ListboxItem.tsx","../src/components/waiAriaHelpers/typeAhead.ts","../src/components/ListBox/ListboxKeyhandler.tsx","../src/components/ListBox/Combobox.tsx","../src/components/ListBox/listbox.ts","../src/components/ListBox/operations.ts","../src/components/ListBox/useStore.ts","../src/components/ListBox/useShoutSelectionChange.ts","../src/components/ListBox/useIndexedChildren.ts","../src/components/ListBox/useListboxAutofocus.ts","../src/components/ListBox/useUpdateRowCount.ts","../src/components/ListBox/useListboxContextValue.ts","../src/components/ListBox/index.tsx","../src/components/loaders/LinearLoader.tsx","../src/components/loaders/ProgressBar.tsx","../src/components/loaders/LoaderSpinner.tsx","../src/components/loaders/ListSkeletonLoader.tsx","../src/components/lock/LinearSpinnerLock.tsx","../src/components/IconsList/store/distinctors.ts","../src/components/IconsList/store/keysMaker.ts","../src/components/IconsList/store/operations.ts","../src/components/IconsList/store/state.ts","../src/components/IconsList/store/context.ts","../src/components/IconsList/store/useStore.tsx","../src/components/IconsList/KeyHandler.tsx","../src/components/IconsList/styles.ts","../src/components/IconsList/util.ts","../src/components/IconsList/context.tsx","../src/components/IconsList/Icon.tsx","../src/components/IconsList/IconWrapper.tsx","../src/components/IconsList/renderers/DefaultIconRenderer.tsx","../src/components/IconsList/index.tsx","../src/components/importComponent.tsx","../src/components/Toolbar/ToolbarController.tsx","../src/components/Toolbar/ToolbarTextButton.tsx","../src/components/Toolbar/ToolbarIconButton.tsx","../src/components/Toolbar/ToolbarInput.tsx","../src/components/Toolbar/ToolbarSeparator.tsx","../src/components/Toolbar/ToolbarSelect.tsx","../src/components/Toolbar/index.tsx","../src/components/SortableList/SortableListHandler.tsx","../src/components/SortableList/SortableListItem.tsx","../src/components/SortableList/index.tsx","../src/components/document/FileCard.tsx","../src/components/document/Dropzone.tsx","../src/components/document/Uploader.tsx","../src/components/pagination/index.tsx","../src/templater/AttributeParsers.ts","../src/templater/PathShortcuts.ts","../src/templater/AttributeFilters.ts","../src/templater/AttributeReplacers.ts","../src/templater/ComplexReplacements.tsx","../src/templater/TagReplacers.tsx","../src/templater/contextMethods.ts","../src/templater/AttributeValueParsers.ts","../src/templater/Commands.tsx","../src/templater/CommentsParsers.ts","../src/templater/Templater.tsx","../src/components/markdown/MDRenderer/index.tsx","../src/components/Permissions/SwitchCard.tsx","../src/components/Permissions/PermissionsList.tsx","../src/components/Permissions/modals/UserModalBtn.tsx","../src/components/Permissions/modals/PoolModalBtn.tsx","../src/components/Permissions/Permissions.tsx","../src/tabs/util.ts","../src/tabs/ContextMenu.tsx","../src/tabs/renderers/DefaultTabsLabelRenderer.tsx","../src/tabs/Item.tsx","../src/tabs/hooks/useShowScrollButtons.ts","../src/tabs/TabsList.tsx","../src/tabs/tabsController.ts","../src/tabs/Content.tsx","../src/tabs/Tabs.tsx","../src/layout/AsidePanel.tsx","../src/layout/FavoriteIcon.tsx","../src/layout/Label.tsx","../src/layout/menuController.tsx","../src/layout/portal/FooterButtons.tsx","../src/layout/TwoColumns/AccordionAside.tsx","../src/layout/TwoColumns/Aside.tsx","../src/layout/TwoColumns/AsideLoader.tsx","../src/layout/TwoColumns/BodyAside.tsx","../src/layout/TwoColumns/FloatingAside.tsx","../src/layout/TwoColumns/FooterResponsiveButtons.tsx","../src/layout/TwoColumns/HamburguerMenu.tsx","../src/layout/TwoColumns/HeaderButtons.tsx","../src/layout/TwoColumns/Header.tsx","../src/layout/TwoColumns/ShowResponsive.tsx","../src/layout/twoColumnsCentered/HeaderButtons.tsx","../src/parameterizable/Parameter.tsx","../src/parameterizable/ParameterRender.tsx","../src/parameterizable/ParametersTable.tsx","../src/parameterizable/TableParameter.tsx","../src/parameterizable/ParametersGroup.tsx","../src/parameterizable/ParametersStore.ts","../src/parameterizable/Parameters.tsx","../src/parameterizable/FilterConditionDTO.tsx","../src/parameterizable/FilterDTO.tsx","../src/parameterizable/FiltersStore.ts"],"sourcesContent":["import { TId } from '@apia/util';\r\nimport { createContext, useContext } from 'react';\r\nimport { TAccordionHandler } from '.';\r\n\r\nexport const AccordionContext = createContext<TAccordionHandler | null>(null);\r\nexport const AccordionItemContext = createContext<TId | null>(null);\r\n\r\nexport const useAccordionContext = () => {\r\n const context = useContext(AccordionContext);\r\n if (!context) throw new Error('There is no AccordionContext');\r\n return context;\r\n};\r\n","import { TId } from '@apia/util';\r\nimport { ReactNode, useContext, useEffect, useMemo, useState } from 'react';\r\nimport { AccordionContext, AccordionItemContext } from './context';\r\nimport { TItemState, TItemStateListener, TPropsListener } from './types';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { IAccordionProps } from './Accordion';\r\n\r\ntype TSelectionComparator<T> = (prev: T, next: T) => boolean;\r\n\r\ntype TItemUpdater =\r\n | Partial<TItemState>\r\n | ((currentProps: TItemState) => Partial<TItemState>);\r\n\r\nfunction makeItemStateSelectorHook(handler: AccordionHandler) {\r\n return function useItemStateSelector<T>(\r\n selector: (props: TItemState) => T,\r\n comparator: TSelectionComparator<T> = shallowEqual,\r\n ) {\r\n const id = handler.hooks.useItemId();\r\n const [state, setState] = useState<T>(selector(handler.itemsState[id]));\r\n\r\n handler.hooks.useItemStateUpdate((props) => {\r\n const newState = selector(props);\r\n if (!comparator(state, newState)) {\r\n setState(newState);\r\n }\r\n });\r\n\r\n return state;\r\n };\r\n}\r\n\r\nfunction makePropsSelectorHook(handler: AccordionHandler) {\r\n return function usePropsSelector<T>(\r\n selector: (props: IAccordionProps) => T,\r\n comparator: TSelectionComparator<T> = shallowEqual,\r\n ) {\r\n const [state, setState] = useState<T>(selector(handler.props));\r\n\r\n handler.hooks.usePropsUpdate((props) => {\r\n const newState = selector(props);\r\n if (!comparator(state, newState)) {\r\n setState(newState);\r\n }\r\n });\r\n\r\n return state;\r\n };\r\n}\r\n\r\nexport class AccordionHandler {\r\n itemsState: Record<TId, TItemState> = {};\r\n itemsStateListeners: Record<TId, TItemStateListener[]> = {};\r\n\r\n propsListeners: TPropsListener[] = [];\r\n\r\n constructor(\r\n public id: string,\r\n public props: IAccordionProps,\r\n ) {}\r\n\r\n registerItem(itemId: TId, initialState: TItemState) {\r\n if (!this.itemsState[itemId]) this.itemsState[itemId] = initialState;\r\n }\r\n\r\n toggleItem(itemId: TId, expanded?: boolean) {\r\n const isExpanded = expanded ?? !this.itemsState[itemId].isExpanded;\r\n if (this.props.singleExpand && isExpanded) {\r\n Object.keys(this.itemsState).forEach((current) => {\r\n if (current !== itemId) {\r\n this.udpateItem(current, { isExpanded: false });\r\n }\r\n });\r\n }\r\n this.udpateItem(itemId, { isExpanded });\r\n }\r\n\r\n unregisterItem(itemId: TId) {\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete this.itemsState[itemId];\r\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\r\n delete this.itemsStateListeners[itemId];\r\n }\r\n\r\n /**\r\n * Permite actualizar parcialmente el estado de un item\r\n */\r\n udpateItem(itemId: TId, updater: TItemUpdater) {\r\n const newProps =\r\n updater instanceof Function ? updater(this.itemsState[itemId]) : updater;\r\n\r\n Object.assign(this.itemsState[itemId], newProps);\r\n this.itemsStateListeners[itemId].forEach((current) =>\r\n current(this.itemsState[itemId]),\r\n );\r\n }\r\n\r\n updateProps(props: IAccordionProps) {\r\n this.props = { ...this.props, ...props };\r\n this.propsListeners.forEach((current) => current(props));\r\n }\r\n\r\n hooks = {\r\n useAccordionContextProvider: () => {\r\n const Provider = useMemo(\r\n () =>\r\n ({ children }: { children: ReactNode }) => (\r\n <AccordionContext.Provider value={this}>\r\n {children}\r\n </AccordionContext.Provider>\r\n ),\r\n [],\r\n );\r\n return Provider;\r\n },\r\n useItemContextProvider: (itemId: TId) => {\r\n const Provider = useMemo(\r\n () =>\r\n ({ children }: { children: ReactNode }) => (\r\n <AccordionItemContext.Provider value={itemId}>\r\n {children}\r\n </AccordionItemContext.Provider>\r\n ),\r\n [itemId],\r\n );\r\n return Provider;\r\n },\r\n useItemId: () => {\r\n const id = useContext(AccordionItemContext);\r\n if (id === null) throw new Error('There is no AccordionItemContext');\r\n return id;\r\n },\r\n useItemStateSelector: makeItemStateSelectorHook(this),\r\n useItemStateUpdate: (cb: TItemStateListener) => {\r\n const itemId = this.hooks.useItemId();\r\n useEffect(() => {\r\n if (!this.itemsStateListeners[itemId])\r\n this.itemsStateListeners[itemId] = [];\r\n this.itemsStateListeners[itemId].push(cb);\r\n\r\n return () => {\r\n this.itemsStateListeners[itemId] = this.itemsStateListeners[\r\n itemId\r\n ].filter((current) => current != cb);\r\n };\r\n }, [cb, itemId]);\r\n },\r\n usePropsSelector: makePropsSelectorHook(this),\r\n usePropsUpdate: (cb: TPropsListener) => {\r\n useEffect(() => {\r\n this.propsListeners.push(cb);\r\n return () => {\r\n this.propsListeners = this.propsListeners.filter(\r\n (current) => current !== cb,\r\n );\r\n };\r\n }, [cb]);\r\n },\r\n };\r\n}\r\n","import { Box, type BoxProps } from '@apia/theme';\r\nimport { useAccordionContext } from './context';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useCallback } from 'react';\r\n\r\nexport const KeyHandler = (props: BoxProps) => {\r\n const handler = useAccordionContext();\r\n\r\n const variant = handler.hooks.usePropsSelector((current) => current.variant);\r\n\r\n return (\r\n <Box\r\n {...props}\r\n ref={useCallback(\r\n (ref: HTMLElement | null) => {\r\n if (ref) {\r\n ref.addEventListener('keydown', (ev) => {\r\n if (\r\n (ev.target as HTMLElement).closest('.accordion__item__content')\r\n )\r\n return;\r\n\r\n const accordionItem = (ev.target as HTMLElement)?.closest(\r\n '.accordion__item',\r\n ) as HTMLElement;\r\n const accordion = (ev.target as HTMLElement)?.closest(\r\n '.accordion',\r\n );\r\n const allItems = [\r\n ...(accordion?.querySelectorAll('.accordion__item') ?? []),\r\n ];\r\n const currentIndex = allItems.findIndex(\r\n (current) => current === accordionItem,\r\n );\r\n\r\n if (ev.code === 'ArrowDown') {\r\n if (currentIndex < allItems.length - 1) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex + 1] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.focus();\r\n }\r\n } else if (ev.code === 'ArrowUp') {\r\n if (currentIndex > 0) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex - 1] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.focus();\r\n }\r\n } else if (ev.code === 'ArrowLeft') {\r\n if (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '[aria-expanded=\"true\"]',\r\n ) as HTMLElement\r\n ) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.click();\r\n }\r\n } else if (ev.code === 'ArrowRight') {\r\n if (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '[aria-expanded=\"false\"]',\r\n ) as HTMLElement\r\n ) {\r\n ev.preventDefault();\r\n (\r\n (allItems[currentIndex] as HTMLElement)?.querySelector(\r\n '.accordion__item__button',\r\n ) as HTMLElement\r\n )?.click();\r\n }\r\n } else if (ev.code === 'Space') {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n const id = accordionItem.dataset.id as string;\r\n handler.udpateItem(id, {\r\n isChecked: !handler.itemsState[id].isChecked,\r\n });\r\n }\r\n });\r\n }\r\n },\r\n [handler],\r\n )}\r\n {...(variant ? getVariant(variant) : undefined)}\r\n />\r\n );\r\n};\r\n","import { findScrollContainer } from '@apia/util';\r\nimport { TDistinctors } from '@apia/dom-store';\r\n\r\nexport type TRowDistinctions = {\r\n rowIndex: number;\r\n};\r\n\r\nexport type TListboxState = {\r\n /**\r\n * El múltipleSearch está de acuerdo a la especificación de wai-aria. Está\r\n * habilitado por defecto e implica que si el usuario presiona una \"rápida\r\n * sucesión\" (según palabras de wai-aria) de caracteres, se irá\r\n * alternando el foco entre los elementos que comiencen con la cadena\r\n * introducida.\r\n */\r\n allowMultipleCharacterSearch?: boolean;\r\n allowSelection: boolean;\r\n /**\r\n * El singleCharacterSearch está de acuerdo a la especificación de wai-aria.\r\n * Está habilitado por defecto e implica que si el usuario presiona una\r\n * \"lenta sucesión\" (según palabras de wai-aria) de caracteres, se irá\r\n * alternando el foco entre los elementos que comiencen con la letra\r\n * introducida.\r\n */\r\n allowSingleCharacterSearch?: boolean;\r\n focusedRow: number;\r\n hiddenRows: number[];\r\n id: string;\r\n isEverythingSelected: boolean;\r\n isMultipleSelection: boolean;\r\n lastSelectedRow: number;\r\n rowsCount: number;\r\n /**\r\n * La función de búsqueda debe tomar el label de un campo y el texto\r\n * introducido en el campo de búsqueda y determinar si el mismo debe ser\r\n * mostrado o no. Por defecto, se usa una función de matcheo estricto.\r\n */\r\n searchFunction: (label: string, searchString: string) => boolean;\r\n selectedRows: number[];\r\n shownRows: number[];\r\n showSearchbox: boolean;\r\n /**\r\n * Este método permite determinar si un elemento comienza con una cadena de\r\n * texto en particular. Por defecto se usa String.startsWith, sin embargo se\r\n * permite el pasaje de este método para situaciones particulares, ejemplo\r\n * si se deseara incluir elementos sin tomar en cuenta los espacios.\r\n */\r\n startsWithFunction: (label: string, searchString: string) => boolean;\r\n typing: string | null;\r\n};\r\n\r\nexport function makeRowKey(rowIndex: TRowDistinctions | number) {\r\n return `row_${typeof rowIndex === 'number' ? rowIndex : rowIndex.rowIndex}`;\r\n}\r\n\r\nlet uniqueidIndex = 0;\r\nexport function uniqueId(prefix?: string) {\r\n return `${prefix ?? ''}${uniqueidIndex++}`;\r\n}\r\n\r\nfunction getDistinctors(storeId: string): TDistinctors<TListboxState> {\r\n return {\r\n listbox: [\r\n (_: void, state) => {\r\n return {\r\n etc: {\r\n 'aria-activedescendant':\r\n state.shownRows.length > 0\r\n ? `${storeId}__row__${state.focusedRow}`\r\n : undefined,\r\n },\r\n };\r\n },\r\n ],\r\n row: [\r\n (distinctions: TRowDistinctions, state) => {\r\n return {\r\n classList: {\r\n add: [\r\n 'listbox__row',\r\n state.focusedRow === distinctions.rowIndex ? 'focused' : '',\r\n state.allowSelection &&\r\n state.selectedRows.includes(distinctions.rowIndex)\r\n ? 'selected'\r\n : '',\r\n ],\r\n remove: [\r\n state.focusedRow === distinctions.rowIndex ? '' : 'focused',\r\n state.allowSelection &&\r\n state.selectedRows.includes(distinctions.rowIndex)\r\n ? ''\r\n : 'selected',\r\n ],\r\n },\r\n dataset: {\r\n add: {\r\n focused: state.focusedRow === distinctions.rowIndex,\r\n },\r\n },\r\n etc: {\r\n ...(state.allowSelection\r\n ? {\r\n 'aria-selected': state.selectedRows.includes(\r\n distinctions.rowIndex,\r\n ),\r\n }\r\n : null),\r\n id: `${storeId}__row__${distinctions.rowIndex}`,\r\n },\r\n };\r\n },\r\n (prevState: TListboxState, nextState: TListboxState) => {\r\n const element = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__row[data-focused=\"true\"]`,\r\n );\r\n\r\n if (element) {\r\n element.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n\r\n if (prevState.focusedRow > nextState.focusedRow) {\r\n const scrollContainer = findScrollContainer(element);\r\n\r\n if (scrollContainer && scrollContainer !== document.body) {\r\n scrollContainer.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const elRect = element.getBoundingClientRect();\r\n const contRect = scrollContainer.getBoundingClientRect();\r\n\r\n if (elRect.top - contRect.top < elRect.height)\r\n scrollContainer.scrollTop -= elRect.height;\r\n }\r\n }\r\n }\r\n },\r\n ],\r\n searchbox: [\r\n (_: void, state) => {\r\n return {\r\n classList: { add: ['listbox__searchbox'] },\r\n etc: {\r\n 'aria-activedescendant':\r\n state.shownRows.length > 0\r\n ? `${storeId}__row__${state.focusedRow}`\r\n : undefined,\r\n },\r\n };\r\n },\r\n ],\r\n };\r\n}\r\nconst defaultState: Omit<\r\n TListboxState,\r\n 'id' | 'showSearchbox' | 'shownRows' | 'searchFunction' | 'startsWithFunction'\r\n> = {\r\n allowSelection: true,\r\n focusedRow: 0,\r\n hiddenRows: [],\r\n isEverythingSelected: false,\r\n isMultipleSelection: false,\r\n lastSelectedRow: -1,\r\n rowsCount: 0,\r\n selectedRows: [],\r\n typing: null,\r\n};\r\n\r\nconst keysMakers = {\r\n row: makeRowKey,\r\n listbox: () => 'listbox',\r\n searchbox: () => 'searchbox',\r\n};\r\n\r\nfunction getInitialState(\r\n initialState: Partial<TListboxState> &\r\n Pick<TListboxState, 'id' | 'showSearchbox'>,\r\n): TListboxState {\r\n return {\r\n ...defaultState,\r\n ...initialState,\r\n\r\n searchFunction:\r\n initialState.searchFunction ??\r\n ((label, searchString) => !!label.match(new RegExp(searchString))),\r\n\r\n startsWithFunction:\r\n initialState.startsWithFunction ??\r\n ((label, searchString) => {\r\n return label.startsWith(searchString);\r\n }),\r\n\r\n shownRows: new Array(initialState.rowsCount ?? 0).fill(1).map((_, i) => i),\r\n };\r\n}\r\n\r\nexport { getDistinctors, getInitialState, keysMakers };\r\n","import { useRef, FC, ReactNode, useEffect, useState, useMemo } from 'react';\r\nimport { AccordionHandler } from './handler';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { uniqueId } from '../ListBox/common';\r\n\r\nexport interface IAccordionProps {\r\n /**\r\n * Tiempo en ms que dura la animación. Por defecto se usa 150.\r\n */\r\n animationDuration?: number;\r\n children?: ReactNode;\r\n className?: string;\r\n getHandler?: (handler: AccordionHandler) => unknown;\r\n singleExpand?: boolean;\r\n /**\r\n * Por defecto usa la variante layout.common.components.accordion.primary\r\n */\r\n variant?: string;\r\n}\r\n\r\nexport const Accordion: FC<IAccordionProps> = ({\r\n animationDuration = 150,\r\n children,\r\n className,\r\n getHandler,\r\n variant = 'layout.common.components.accordion.primary',\r\n singleExpand = false,\r\n}) => {\r\n const id = useMemo(() => uniqueId(), []);\r\n\r\n const [handler] = useState(() => {\r\n return new AccordionHandler(id, {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n singleExpand,\r\n });\r\n });\r\n const propsRef = useRef({\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n });\r\n if (\r\n !shallowEqual(\r\n {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n },\r\n propsRef.current,\r\n )\r\n ) {\r\n propsRef.current = {\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n };\r\n handler.updateProps({\r\n animationDuration,\r\n children,\r\n getHandler,\r\n variant,\r\n });\r\n }\r\n\r\n const Provider = handler.hooks.useAccordionContextProvider();\r\n\r\n useEffect(() => {\r\n getHandler?.(handler);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [getHandler, handler]);\r\n\r\n return (\r\n <Provider>\r\n <KeyHandler className={`accordion ${className ?? ''}`}>\r\n {children}\r\n </KeyHandler>\r\n </Provider>\r\n );\r\n};\r\n","import { ReactNode } from 'react';\r\n\r\nexport type TAccordionItemButton = {\r\n children?: ReactNode;\r\n};\r\n\r\nexport const AccordionItemButton = ({ children }: TAccordionItemButton) => {\r\n return <>{children}</>;\r\n};\r\n","import { useUpdateEffect } from '@apia/util';\r\nimport React from 'react';\r\nimport usePortal, { Args } from 'react-cool-portal';\r\nimport { TModal } from '../Modal';\r\n\r\nexport type TUseModalConfiguration = Pick<TModal, 'onClose' | 'onExited'> & {\r\n debugPerformanceName?: string;\r\n isDefaultOpen?: boolean;\r\n onOpen?: () => unknown;\r\n portalArgs?: Omit<Args, 'containerId'>;\r\n preFetcher?: () => Promise<void>;\r\n};\r\n\r\n/**\r\n * Este hook provee una forma muy sencilla de utilizar nuestro modal. Provee\r\n * varias funcionalidades interesantes para poder manipular el modal en\r\n * distintas circunstancias:\r\n *\r\n * Objeto parámetro:\r\n *\r\n * - **defaultOpen**, Boolean, si es true el modal aparecerá abierto al montar\r\n * y sino aparecerá cerrado.\r\n * - **onOpen**: Event listener que será llamado en el momento exacto en que la\r\n * orden de apertura del modal fue dada.\r\n * - **onClose**: Event listener que será llamado en el momento exacto en que\r\n * el modal es cerrado, ya sea por un click en el overlay o porque la tecla\r\n * escape fue presionada.\r\n * - **onExited**, Event listener que será llamado luego de que la animación de\r\n * cierre del modal terminó.\r\n * - **preFetcher**, este método deberá devolver una promesa y en dicha promesa\r\n * deberá realizar cualquier operación que fuera necesaria antes de abrir el\r\n * modal, ejemplo: cargar la información que el modal debe mostrar. Si este\r\n * método es pasado, será llamado antes de abrir el modal y la vista se pondrá\r\n * en modo de carga (la propiedad isLoading devuelta y la propiedad isLoading\r\n * del OpenModalContextProvider estarán en true), hasta que la promesa sea\r\n * resuelta, momento en que se abrirá el modal e isLoading será puesto en false.\r\n * - **portalArgs**, objeto de configuración aceptado por el hook usePortal de\r\n * **react-cool-portal**.\r\n *\r\n * Objeto devuelto:\r\n *\r\n * - Para un modal en donde el botón de abrir el modal esté inserto dentro del\r\n * componente que lo utiliza, se devuelven los métodos **show** y **hide**.\r\n * - Para un modal en donde el botón de abrir el modal esté fuera del\r\n * componente, se devuelve **openModalContextValue**, que es el valor que debe\r\n * pasarse al contexto de tipo OpenModalContextProvider, un contexto que\r\n * puede ser utilizado para renderizar el botón encargado de abrir el modal,\r\n * fuera del alcance del componente que define el modal en sí. Se muestra un\r\n * ejemplo más abajo.\r\n * - Todos los demás elementos devueltos son para pasar directamente al modal,\r\n * entre ellos se encuentran las propiedades que el modal utiliza para saber si\r\n * debe estar abierto, los event listeners correspondientes y un portal, que el\r\n * modal usará para mostrarse dentro del área de modales, lo cual es sumamente\r\n * importante para que el focusController funcione correctamente.\r\n *\r\n * @see OpenModalContextProvider\r\n * @see usePortal\r\n *\r\n * @example\r\n *\r\n const { openModalContextValue, ...modalProps } = useModal(\r\n React.useMemo(() => ({\r\n onClose: () => console.log(\"Al presionar en cerrar.\"),\r\n onExited: () => console.log(\"Al terminar la animación de cierre.\"),\r\n onOpen: () => console.log(\"Al abrir.\"),\r\n }), [])\r\n );\r\n\r\n return (\r\n <OpenModalContext.Provider value={openModalContextValue}>\r\n <OpenModalContext.Consumer>\r\n {({ isLoading, show }) => (\r\n <Button isLoading={isLoading} onClick={show}>Open modal</Button>\r\n )}\r\n </OpenModalContext.Consumer>\r\n <Modal shouldCloseOnEsc shouldCloseOnOverlayClick {...modalProps}>\r\n Hello world\r\n </Modal>\r\n </OpenModalContext.Provider>\r\n );\r\n */\r\nexport function useModal(configuration?: TUseModalConfiguration) {\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [isOpen, setIsOpen] = React.useState(\r\n configuration?.portalArgs?.defaultShow ??\r\n configuration?.isDefaultOpen ??\r\n false,\r\n );\r\n\r\n const {\r\n Portal,\r\n hide: hidePortal,\r\n show: showPortal,\r\n } = usePortal({\r\n ...configuration?.portalArgs,\r\n containerId: 'AppModals',\r\n autoRemoveContainer: false,\r\n escToHide: false,\r\n clickOutsideToHide: false,\r\n defaultShow: false,\r\n internalShowHide: false,\r\n });\r\n\r\n const hide = React.useCallback(() => {\r\n setIsOpen(false);\r\n if (configuration?.onClose) configuration.onClose();\r\n }, [configuration]);\r\n const show = React.useCallback(() => {\r\n if (configuration?.preFetcher) {\r\n setIsLoading(true);\r\n configuration\r\n .preFetcher()\r\n .then(() => {\r\n setIsOpen(true);\r\n setIsLoading(false);\r\n })\r\n .catch(console.error);\r\n } else setIsOpen(true);\r\n }, [configuration]);\r\n const onClose = React.useCallback(() => {\r\n setIsOpen(false);\r\n if (configuration?.onClose) configuration.onClose();\r\n }, [configuration]);\r\n const onExited = React.useCallback(() => {\r\n hidePortal();\r\n if (configuration?.onExited) configuration.onExited();\r\n }, [configuration, hidePortal]);\r\n const openModalContextValue = React.useMemo(() => {\r\n return {\r\n isLoading,\r\n show,\r\n };\r\n }, [isLoading, show]);\r\n\r\n useUpdateEffect(() => {\r\n if (isOpen) {\r\n if (configuration?.onOpen) configuration.onOpen();\r\n showPortal();\r\n }\r\n }, [isOpen]);\r\n\r\n return {\r\n hide,\r\n isLoading,\r\n isOpen,\r\n onClose,\r\n onExited,\r\n openModalContextValue,\r\n Portal,\r\n show,\r\n };\r\n}\r\n","import { Box, Close, Heading, useBreakpointIndex } from '@apia/theme';\r\nimport React, { FC } from 'react';\r\nimport { responsive, spacing } from '@apia/theme';\r\n\r\nexport interface IDialogHeader {\r\n className?: string;\r\n close: () => void;\r\n hideCloseButton?: boolean;\r\n id?: string;\r\n NavBar?: React.ReactNode;\r\n title?: string;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n BTN_CLOSE: string;\r\n }\r\n}\r\n\r\nconst DialogHeader: FC<IDialogHeader> = ({\r\n className,\r\n close,\r\n hideCloseButton,\r\n id,\r\n NavBar,\r\n title = '',\r\n}) => {\r\n const breakpointIndex = useBreakpointIndex();\r\n\r\n const Title = (\r\n <Heading\r\n as=\"h3\"\r\n sx={{\r\n wordBreak: 'break-word',\r\n m: '0',\r\n flex: '2 0',\r\n color: 'title',\r\n }}\r\n className=\"modal__title\"\r\n id={id ? `modal-${id}-title` : ''}\r\n >\r\n {title}\r\n </Heading>\r\n );\r\n\r\n const CloseButton = React.useMemo(\r\n () =>\r\n hideCloseButton ? null : (\r\n <Close\r\n role=\"button\"\r\n type=\"button\"\r\n aria-label={window.BTN_CLOSE}\r\n onClick={close}\r\n title={window.BTN_CLOSE}\r\n sx={{\r\n mr: 'unset',\r\n }}\r\n className=\"modal__closeButton\"\r\n data-test-id=\"close\"\r\n />\r\n ),\r\n [close, hideCloseButton],\r\n );\r\n\r\n const NavBarElement = NavBar && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n gap: responsive({ 0: 2, 1: '3px', 2: 2 }),\r\n justifyContent: 'end',\r\n flexDirection: responsive({ 0: 'row', 1: 'column', 3: 'row' }),\r\n width: responsive({ 0: 'auto', 1: '100%', 2: 'auto' }),\r\n flexBasis: 'max-content',\r\n height: '100%',\r\n }}\r\n className=\"modal__headerBar\"\r\n >\r\n {NavBar}\r\n </Box>\r\n );\r\n\r\n return breakpointIndex > 3 ? (\r\n <Box\r\n className={`${className} modal__header`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'start',\r\n mb: spacing(0),\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n gap: spacing(2),\r\n flexWrap: 'nowrap',\r\n }}\r\n >\r\n {Title}\r\n {NavBarElement}\r\n {CloseButton}\r\n </Box>\r\n ) : (\r\n <Box\r\n className={`${className} modal__header`}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: responsive({ 0: 'center', 2: 'end' }),\r\n mb: spacing(0),\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n gap: spacing(2),\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n width: '100%',\r\n }}\r\n >\r\n {Title}\r\n {CloseButton}\r\n </Box>\r\n {NavBarElement}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DialogHeader;\r\n","import { createContext, useContext } from 'react';\r\n\r\nexport type TModalContext = {\r\n changeTitle: (newTitle: string) => void;\r\n close: () => unknown;\r\n descriptionId: string;\r\n};\r\n\r\nexport const ModalContext = createContext<TModalContext | null>(null);\r\n\r\nexport function useModalContext() {\r\n const context = useContext(ModalContext);\r\n\r\n if (!context) throw new Error('There is no ModalContext');\r\n\r\n return context;\r\n}\r\n","import { useEffect } from 'react';\r\nimport { ApiaUtil } from '../../../objects';\r\n\r\n/**\r\n * Contorla la lógica encargada de cerrar el modal al presionar la tecla escape.\r\n */\r\nexport function useEscapeKey({\r\n closeHandler,\r\n id,\r\n isOpenInner,\r\n shouldCloseOnEsc,\r\n}: {\r\n id: string;\r\n closeHandler: () => void;\r\n isOpenInner: boolean;\r\n shouldCloseOnEsc?: boolean;\r\n}) {\r\n useEffect(() => {\r\n function handleEscape(event: KeyboardEvent) {\r\n if (event.code !== 'Escape') return;\r\n\r\n const notifications = [\r\n ...(document.querySelectorAll(\r\n '.notificationsFloatingList .notification',\r\n ) ?? []),\r\n ];\r\n if (notifications.length) {\r\n ApiaUtil.instance.notifications.closeAll();\r\n return;\r\n }\r\n\r\n const tooltips = [\r\n ...(document.querySelectorAll('.tooltip__wrapper') ?? []),\r\n ];\r\n if (tooltips.length) {\r\n return;\r\n }\r\n\r\n const overlays = [\r\n ...document.querySelectorAll('.overlay, .window__modal'),\r\n ];\r\n\r\n const modal = (event.target as HTMLElement).closest(`#modal__${id}`);\r\n if (modal) {\r\n /**\r\n * Funcionamiento para el WindowModal\r\n */\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n closeHandler();\r\n } else if (\r\n overlays.length > 0 &&\r\n (overlays[overlays.length - 1]?.id === id ||\r\n overlays[overlays.length - 1]?.id === `modal__${id}`)\r\n ) {\r\n /**\r\n * Legacy, para el StaticModal\r\n */\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n closeHandler();\r\n }\r\n }\r\n if (isOpenInner && shouldCloseOnEsc)\r\n document.addEventListener('keydown', handleEscape, false);\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape, false);\r\n };\r\n }, [shouldCloseOnEsc, isOpenInner, closeHandler, id]);\r\n}\r\n","import { useEffect } from 'react';\r\nimport { TModal } from '../Modal';\r\nimport { focus, focusSelector, getFocusSelector } from '@apia/util';\r\n\r\nexport function useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement,\r\n}: { isOpenInner: boolean; parentElement?: HTMLElement | null } & Pick<\r\n TModal,\r\n | 'noFocus'\r\n | 'initialFocusGetter'\r\n | 'initialFocusRef'\r\n | 'initialFocusConfiguration'\r\n>) {\r\n useEffect(\r\n () => {\r\n if (!noFocus && isOpenInner) {\r\n if (parentElement) {\r\n void focus.on(\r\n () => {\r\n if (initialFocusGetter) return initialFocusGetter(parentElement);\r\n if (initialFocusRef?.current)\r\n return (\r\n (initialFocusRef?.current || parentElement) as HTMLElement\r\n ).querySelector(focusSelector) as HTMLElement;\r\n return parentElement.querySelector(\r\n getFocusSelector(':not(.modal__closeButton)'),\r\n ) as HTMLElement;\r\n },\r\n { ...initialFocusConfiguration, focusEvenWhenScreenLocked: true },\r\n );\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [parentElement],\r\n );\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\nimport { SetStateAction, useCallback, useRef } from 'react';\r\n\r\ntype InitialStyleAssigner = (el: HTMLElement) => Partial<ThemeUICSSObject>;\r\ntype CSSState = Partial<ThemeUICSSObject>;\r\n\r\ntype UseStyleStateProps = {\r\n initialState?: CSSState | InitialStyleAssigner;\r\n onUpdateRef?: InitialStyleAssigner;\r\n};\r\n\r\nexport function applyStylesToElement(el: HTMLElement, styles: CSSState) {\r\n Object.entries(styles).forEach(([name, value]) => {\r\n try {\r\n el.style[name as 'width'] = value as any;\r\n } catch (e) {\r\n e; // Se intentó asignar un valor que no es correcto\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Este hook permite mantener un estado de estilos, para utilizar en un elemento del DOM.\r\n *\r\n * A diferencia de un setState común, al realizar setState en este hook no se re-renderiza el componente, sino que se aplican los estilos directamente en el DOM.\r\n *\r\n * Se garantiza además que estos estados no se perderán en los re-renderizados provocados por causas externas a este hook.\r\n */\r\nexport function useStyleState(props?: UseStyleStateProps) {\r\n const element = useRef<null | HTMLElement>(null);\r\n const state = useRef<CSSState>(\r\n typeof props?.initialState === 'object'\r\n ? props?.initialState\r\n : ({} as CSSState),\r\n );\r\n\r\n const applyStyles = useCallback(() => {\r\n applyStylesToElement(element.current!, state.current);\r\n }, []);\r\n\r\n const hasInitializedState = useRef(typeof props?.initialState !== 'function');\r\n return {\r\n ref: useCallback(\r\n (el: HTMLElement | null) => {\r\n element.current = el;\r\n if (el) {\r\n if (!hasInitializedState.current) {\r\n hasInitializedState.current = true;\r\n state.current = (props?.initialState as InitialStyleAssigner)(el);\r\n }\r\n\r\n if (props?.onUpdateRef) {\r\n state.current = props.onUpdateRef(el);\r\n }\r\n\r\n applyStyles();\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [applyStyles],\r\n ),\r\n setState: useCallback(\r\n (newState: SetStateAction<CSSState>) => {\r\n state.current =\r\n typeof newState === 'function' ? newState(state.current) : newState;\r\n applyStyles();\r\n },\r\n [applyStyles],\r\n ),\r\n };\r\n}\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\nimport { addBoundary } from '@apia/util';\r\nimport { MutableRefObject } from 'react';\r\nimport { applyStylesToElement } from '../hooks/useStyleState';\r\n\r\nexport function handleMouseMove({\r\n dragBounded,\r\n ev,\r\n initialPosition,\r\n initialMousePosition,\r\n modalMainElement,\r\n setStyle,\r\n}: {\r\n dragBounded?: boolean;\r\n ev: MouseEvent;\r\n initialPosition: MutableRefObject<null | DOMRect>;\r\n initialMousePosition: MutableRefObject<null | { x: number; y: number }>;\r\n modalMainElement: HTMLElement;\r\n setStyle: (newState: React.SetStateAction<Partial<ThemeUICSSObject>>) => void;\r\n}) {\r\n if (initialPosition.current) {\r\n ev.preventDefault();\r\n const diffX = ev.clientX - initialMousePosition.current!.x;\r\n const diffY = ev.clientY - initialMousePosition.current!.y;\r\n\r\n const currentSize = modalMainElement.getBoundingClientRect();\r\n\r\n const newLeft = addBoundary(\r\n initialPosition.current.left + diffX,\r\n 0,\r\n window.innerWidth - (dragBounded ? currentSize.width : 50),\r\n );\r\n const newTop = addBoundary(\r\n initialPosition.current.top + diffY,\r\n 0,\r\n window.innerHeight - (dragBounded ? currentSize.height : 50),\r\n );\r\n\r\n setStyle({\r\n left: `${newLeft}px`,\r\n top: `${newTop}px`,\r\n right: 'unset',\r\n bottom: 'unset',\r\n });\r\n\r\n const mainElement = modalMainElement;\r\n const headerElement = mainElement?.querySelector<HTMLElement>(\r\n '.window__modal .modal__header',\r\n );\r\n const modalContent = mainElement?.querySelector<HTMLElement>(\r\n '.window__modal .modal__content',\r\n );\r\n\r\n if (modalContent && mainElement) {\r\n const headerBounding = headerElement?.getBoundingClientRect();\r\n const contentBounding = mainElement.getBoundingClientRect();\r\n\r\n applyStylesToElement(modalContent, {\r\n maxHeight: `${window.innerHeight - newTop - (headerBounding?.height ?? 0)}px`,\r\n });\r\n\r\n mainElement.dataset.originalWidth =\r\n mainElement.dataset.originalWidth || String(contentBounding!.width);\r\n applyStylesToElement(mainElement, {\r\n maxWidth: `${Math.min(Number.parseInt(mainElement.dataset.originalWidth, 10), window.innerWidth - newLeft)}px`,\r\n });\r\n }\r\n }\r\n}\r\n","export function resetModalsPositions() {\r\n document.querySelectorAll<HTMLElement>('.window__modal').forEach((c) => {\r\n c.style.zIndex = '1200';\r\n });\r\n}\r\n\r\nexport function bringToTop(modalElement: HTMLElement) {\r\n document.querySelectorAll<HTMLElement>('.window__modal').forEach((c) => {\r\n if (c.querySelector<HTMLElement>('.modal__main') === modalElement) {\r\n c.style.zIndex = '1201';\r\n } else {\r\n c.style.zIndex = '1200';\r\n }\r\n });\r\n}\r\n","import {\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n Fragment,\r\n} from 'react';\r\nimport { TModal } from './Modal';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box, ThemeUICSSObject, getVariant } from '@apia/theme';\r\nimport DialogHeader from './layout/DialogHeader';\r\nimport { ModalContext } from './ModalContext';\r\nimport { useEscapeKey } from './hooks/useEscapeKey';\r\nimport { useInitialFocus } from './hooks/useInitialFocus';\r\nimport { getFocusSelector, useCombinedRefs } from '@apia/util';\r\nimport { useStyleState } from './hooks/useStyleState';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\nimport { handleMouseMove } from './windowModal/handleMouseMove';\r\nimport { bringToTop } from './windowModal/bringToTop';\r\n\r\nexport const WindowModal = forwardRef<HTMLDivElement, TModal>(\r\n (\r\n {\r\n animationDuration = 150,\r\n children = null,\r\n className,\r\n defaultPosition,\r\n dragBounded,\r\n hideCloseButton,\r\n id,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n isOpen = false,\r\n maxWidth,\r\n NavBar,\r\n noFocus,\r\n noHeader = false,\r\n onClose = () => {},\r\n onDragStart = () => {},\r\n onExited = () => {},\r\n Portal,\r\n shouldCloseOnEsc = true,\r\n size = 'md',\r\n title = '',\r\n variant,\r\n },\r\n ref,\r\n ) => {\r\n const innerId = useMemo(() => {\r\n return `Modal${uniqueId()}`;\r\n }, []);\r\n\r\n const lastTitle = useRef(title);\r\n const [innerTitle, setInnerTitle] = useState(title);\r\n if (lastTitle.current !== title && innerTitle !== title) {\r\n setInnerTitle(title);\r\n }\r\n const [isOpenInner, setIsOpen] = useState(isOpen);\r\n useEffect(() => {\r\n setIsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n const closeHandler = useCallback(() => {\r\n setIsOpen(false);\r\n onClose();\r\n }, [onClose]);\r\n\r\n const [parentElement, setParentElement] = useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n useEscapeKey({ closeHandler, id: innerId, isOpenInner, shouldCloseOnEsc });\r\n useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement,\r\n });\r\n\r\n const Wrapper = useMemo(() => {\r\n return Portal ?? Fragment;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const hasSetPosition = useRef(false);\r\n const { ref: stylesRef, setState: setStyle } = useStyleState({\r\n onUpdateRef(el) {\r\n const mainElement = el.querySelector<HTMLElement>('.modal__main');\r\n const bounding = mainElement!.getBoundingClientRect();\r\n\r\n const returnObject: Partial<ThemeUICSSObject> = {\r\n position: 'fixed',\r\n };\r\n\r\n if (!hasSetPosition.current && mainElement) {\r\n bringToTop(mainElement);\r\n hasSetPosition.current =\r\n !!defaultPosition || (!!bounding && bounding.width > 200);\r\n Object.assign(\r\n returnObject,\r\n defaultPosition ?? {\r\n left: `${window.innerWidth / 2 - (bounding?.width ?? 0) / 2}px`,\r\n top: `${window.innerHeight / 2 - (bounding?.height ?? 0) / 2}px`,\r\n },\r\n );\r\n }\r\n\r\n return returnObject;\r\n },\r\n });\r\n\r\n const unSubscribe = useRef(() => {});\r\n const initialPosition = useRef<null | DOMRect>(null);\r\n const initialMousePosition = useRef<null | { x: number; y: number }>(null);\r\n const assignRefs = useCombinedRefs(\r\n setParentElement as unknown as React.ForwardedRef<unknown>,\r\n ref as unknown as React.Ref<unknown>,\r\n stylesRef as unknown as React.Ref<unknown>,\r\n );\r\n\r\n return (\r\n <Wrapper>\r\n <ModalContext.Provider\r\n value={useMemo(() => {\r\n return {\r\n changeTitle: (newTitle) => {\r\n setInnerTitle(newTitle);\r\n },\r\n close: () => {\r\n closeHandler();\r\n },\r\n descriptionId: `${innerId}_Description`,\r\n };\r\n }, [closeHandler, innerId])}\r\n >\r\n <CSSTransition\r\n in={isOpen}\r\n timeout={animationDuration}\r\n classNames=\"modal\"\r\n appear\r\n unmountOnExit\r\n nodeRef={setParentElement as any}\r\n onExited={onExited}\r\n >\r\n <Box\r\n ref={assignRefs}\r\n className={`modal__variantWrapper window__modal ${className ?? ''}`}\r\n id={`modal__${innerId}`}\r\n {...(variant ? getVariant(variant) : {})}\r\n sx={{ zIndex: 'modal' }}\r\n >\r\n <FreeFocusInside>\r\n <Box\r\n id={id}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={title}\r\n aria-describedby={`${innerId}_Description`}\r\n aria-hidden=\"false\"\r\n className=\"modal__main\"\r\n // allows scrolling within element, despite body lock\r\n data-scroll-lock-scrollable\r\n sx={useMemo(() => {\r\n return {\r\n variant: `layout.common.modals.${size}`,\r\n ...(maxWidth !== undefined ? { maxWidth } : {}),\r\n };\r\n }, [maxWidth, size])}\r\n data-variant={`layout.common.modals.${size}`}\r\n ref={useCallback(\r\n (el: null | HTMLElement) => {\r\n unSubscribe.current();\r\n unSubscribe.current = () => {};\r\n\r\n if (el) {\r\n const handleMouseDown = (ev: MouseEvent) => {\r\n if (\r\n (ev.target as HTMLElement).closest?.(\r\n '[draggable=\"true\"]',\r\n ) ||\r\n !(ev.target as HTMLElement).closest?.(\r\n '.modal__header',\r\n )\r\n )\r\n return;\r\n\r\n if (\r\n (ev.target as HTMLElement).closest(\r\n getFocusSelector(),\r\n )\r\n )\r\n return;\r\n\r\n const res = onDragStart?.(ev);\r\n if (res === false) return;\r\n\r\n const rect = el.getBoundingClientRect();\r\n initialPosition.current = rect;\r\n initialMousePosition.current = {\r\n x: ev.clientX,\r\n y: ev.clientY,\r\n };\r\n\r\n bringToTop(\r\n (ev.target as HTMLElement).closest<HTMLElement>(\r\n '.modal__main',\r\n )!,\r\n );\r\n };\r\n const innerHandleMouseMove = (ev: MouseEvent) => {\r\n if (initialPosition.current) {\r\n handleMouseMove({\r\n dragBounded,\r\n ev,\r\n initialMousePosition,\r\n initialPosition,\r\n modalMainElement: el,\r\n setStyle,\r\n });\r\n }\r\n };\r\n\r\n const handleMouseUp = () => {\r\n initialPosition.current = null;\r\n };\r\n\r\n el.addEventListener('mousedown', handleMouseDown);\r\n document.addEventListener(\r\n 'mousemove',\r\n innerHandleMouseMove,\r\n );\r\n document.addEventListener('mouseup', handleMouseUp);\r\n\r\n unSubscribe.current = () => {\r\n el.removeEventListener('mousedown', handleMouseDown);\r\n document.removeEventListener(\r\n 'mousemove',\r\n innerHandleMouseMove,\r\n );\r\n document.removeEventListener(\r\n 'mouseup',\r\n handleMouseUp,\r\n );\r\n };\r\n }\r\n },\r\n [dragBounded, onDragStart, setStyle],\r\n )}\r\n >\r\n {!noHeader && (\r\n <DialogHeader\r\n NavBar={NavBar}\r\n title={innerTitle}\r\n close={closeHandler}\r\n hideCloseButton={hideCloseButton}\r\n id={`${innerId}_Header`}\r\n />\r\n )}\r\n <Box\r\n className=\"modal__content\"\r\n id={\r\n typeof children === 'string'\r\n ? `${innerId}_Description`\r\n : undefined\r\n }\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n </FreeFocusInside>\r\n </Box>\r\n </CSSTransition>\r\n </ModalContext.Provider>\r\n </Wrapper>\r\n );\r\n },\r\n);\r\n","import { useEffect } from 'react';\r\n\r\nclass BodyScrollLocker {\r\n #isLocked = false;\r\n #onChangeCb: () => unknown = () => {};\r\n #onDestroyCb: () => unknown = () => {};\r\n\r\n get isLocked() {\r\n return this.#isLocked;\r\n }\r\n\r\n destroy() {\r\n this.#onDestroyCb();\r\n }\r\n\r\n lock() {\r\n this.#isLocked = true;\r\n this.#onChangeCb();\r\n }\r\n\r\n unlock() {\r\n this.#isLocked = false;\r\n this.#onChangeCb();\r\n }\r\n\r\n onChange(cb: () => unknown) {\r\n this.#onChangeCb = cb;\r\n\r\n return () => (this.#onChangeCb = () => {});\r\n }\r\n\r\n onDestroy(cb: () => unknown) {\r\n this.#onDestroyCb = cb;\r\n\r\n return () => (this.#onDestroyCb = () => {});\r\n }\r\n}\r\n\r\nconst BodyScrollLock = new (class BodyScrollLockClass {\r\n lockers: BodyScrollLocker[] = [];\r\n #evaluate() {\r\n const willLock =\r\n this.lockers.filter((current) => current.isLocked).length > 0;\r\n\r\n document.body.style.maxHeight = '100vh';\r\n\r\n if (willLock && document.body.scrollHeight > document.body.clientHeight)\r\n document.body.style.paddingRight = '10px';\r\n\r\n document.body.style.overflow = willLock ? 'hidden' : 'auto';\r\n\r\n if (!(willLock && document.body.scrollHeight > document.body.clientHeight))\r\n document.body.style.paddingRight = '0px';\r\n }\r\n\r\n getLocker() {\r\n const locker = new BodyScrollLocker();\r\n locker.onChange(() => this.#evaluate());\r\n locker.onDestroy(() => {\r\n this.lockers = this.lockers.filter((current) => current !== locker);\r\n this.#evaluate();\r\n });\r\n this.lockers.push(locker);\r\n\r\n return locker;\r\n }\r\n})();\r\n\r\nexport function useBodyScrollLock(isLocked: boolean) {\r\n useEffect(() => {\r\n const locker = BodyScrollLock.getLocker();\r\n if (isLocked) locker.lock();\r\n else locker.unlock();\r\n\r\n return () => {\r\n locker.destroy();\r\n };\r\n }, [isLocked]);\r\n}\r\n","import * as React from 'react';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport ReactFocusLock, { FreeFocusInside } from 'react-focus-lock';\r\nimport { getVariant } from '@apia/theme';\r\nimport { useCombinedRefs } from '@apia/util';\r\nimport { useBodyScrollLock } from '../../hooks';\r\n\r\nexport interface IOverlay extends BoxProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n onOverlayClicked: (event: React.MouseEvent<HTMLDivElement>) => void;\r\n /**\r\n * Permite pasar un callback que será llamado una vez que el overlay termine\r\n * de cerrarse.\r\n */\r\n onExited: () => void;\r\n isOpen?: boolean;\r\n shouldAvoidInitialFocusTrap?: boolean;\r\n stretch?: boolean;\r\n transitionDuration?: number;\r\n}\r\n\r\nexport const Overlay = React.forwardRef<unknown, IOverlay>(\r\n (\r\n {\r\n children,\r\n className = '',\r\n onExited,\r\n onOverlayClicked,\r\n isOpen: open = false,\r\n shouldAvoidInitialFocusTrap,\r\n stretch,\r\n transitionDuration = 150,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const innerRef = React.useRef<HTMLDivElement>(null);\r\n const assignRefs = useCombinedRefs(innerRef, ref);\r\n useBodyScrollLock(open);\r\n return (\r\n <CSSTransition\r\n in={open}\r\n timeout={transitionDuration}\r\n onExited={onExited}\r\n classNames=\"overlayAnimation\"\r\n appear\r\n nodeRef={innerRef}\r\n unmountOnExit\r\n >\r\n <Box\r\n className={`${className} overlay`}\r\n ref={assignRefs}\r\n {...props}\r\n data-type=\"overlay\"\r\n role=\"presentation\"\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent<HTMLDivElement>) => {\r\n if (ev.target === innerRef.current) onOverlayClicked(ev);\r\n },\r\n [onOverlayClicked],\r\n )}\r\n {...getVariant(\r\n props.variant ??\r\n `layout.common.modals.overlay${stretch ? '--stretch' : ''}`,\r\n )}\r\n >\r\n <ReactFocusLock\r\n autoFocus={shouldAvoidInitialFocusTrap ? false : undefined}\r\n returnFocus\r\n crossFrame={false}\r\n >\r\n <FreeFocusInside>{children}</FreeFocusInside>\r\n </ReactFocusLock>\r\n </Box>\r\n </CSSTransition>\r\n );\r\n },\r\n);\r\n\r\nOverlay.displayName = 'Overlay';\r\n","import React, {\r\n useEffect,\r\n useState,\r\n useCallback,\r\n forwardRef,\r\n useRef,\r\n} from 'react';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box } from '@apia/theme';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport { useCombinedRefs } from '@apia/util';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Overlay } from './Overlay';\r\nimport DialogHeader from './layout/DialogHeader';\r\nimport { ModalContext } from './ModalContext';\r\nimport { TModal } from './Modal';\r\nimport { useEscapeKey } from './hooks/useEscapeKey';\r\nimport { useInitialFocus } from './hooks/useInitialFocus';\r\nimport { resetModalsPositions } from './windowModal/bringToTop';\r\n\r\nlet canCloseOnClick = true;\r\n\r\nexport const StaticModal = forwardRef(\r\n (\r\n {\r\n animationDuration = 150,\r\n children = null,\r\n className,\r\n hideCloseButton,\r\n id,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n isOpen = false,\r\n maxWidth,\r\n NavBar,\r\n noFocus,\r\n noHeader = false,\r\n onClose = () => {},\r\n onExited = () => {},\r\n Portal,\r\n shouldCloseOnEsc = true,\r\n shouldCloseOnOverlayClick = true,\r\n size = 'md',\r\n stretch,\r\n title = '',\r\n variant,\r\n }: Omit<TModal, 'asWindow'>,\r\n ref: React.Ref<HTMLDivElement>,\r\n ) => {\r\n const lastTitle = useRef(title);\r\n const [innerTitle, setInnerTitle] = useState(title);\r\n if (lastTitle.current !== title && innerTitle !== title) {\r\n setInnerTitle(title);\r\n }\r\n const [isOpenInner, setIsOpen] = useState(isOpen);\r\n const innerId = React.useMemo(() => {\r\n return `Modal${uniqueId()}`;\r\n }, []);\r\n\r\n useEffect(() => {\r\n setIsOpen(isOpen);\r\n }, [isOpen]);\r\n\r\n const closeHandler = useCallback(() => {\r\n setIsOpen(false);\r\n onClose();\r\n }, [onClose]);\r\n const [overlayElement, setInnerRef] = React.useState<HTMLElement>();\r\n const assignRefs = useCombinedRefs(\r\n setInnerRef as unknown as React.ForwardedRef<unknown>,\r\n ref as unknown as React.Ref<unknown>,\r\n ((el: HTMLElement) => {\r\n if (el) {\r\n resetModalsPositions();\r\n }\r\n }) as unknown as React.Ref<unknown>,\r\n );\r\n\r\n const overlayClickedHandle = (event: React.MouseEvent<HTMLDivElement>) => {\r\n if (shouldCloseOnOverlayClick && canCloseOnClick) {\r\n if (\r\n (event.target as HTMLDivElement).getAttribute('data-type') ===\r\n 'overlay'\r\n ) {\r\n closeHandler();\r\n }\r\n }\r\n\r\n canCloseOnClick = true;\r\n };\r\n\r\n useEscapeKey({ closeHandler, id: innerId, isOpenInner, shouldCloseOnEsc });\r\n useInitialFocus({\r\n isOpenInner,\r\n initialFocusConfiguration,\r\n initialFocusGetter,\r\n initialFocusRef,\r\n noFocus,\r\n parentElement: overlayElement,\r\n });\r\n\r\n const Wrapper = React.useMemo(() => {\r\n return Portal ?? React.Fragment;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const nodeRef = useRef<HTMLElement | null>(null);\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <ModalContext.Provider\r\n value={React.useMemo(() => {\r\n return {\r\n changeTitle: (newTitle) => {\r\n setInnerTitle(newTitle);\r\n },\r\n close: () => {\r\n closeHandler();\r\n },\r\n descriptionId: `${innerId}_Description`,\r\n };\r\n }, [closeHandler, innerId])}\r\n >\r\n <Wrapper>\r\n <Overlay\r\n onOverlayClicked={overlayClickedHandle}\r\n isOpen={isOpen}\r\n className={className}\r\n stretch={stretch}\r\n ref={assignRefs}\r\n onExited={onExited}\r\n id={innerId}\r\n shouldAvoidInitialFocusTrap={noFocus}\r\n >\r\n <CSSTransition\r\n in={isOpen}\r\n timeout={animationDuration}\r\n classNames=\"modal\"\r\n appear\r\n unmountOnExit\r\n nodeRef={nodeRef}\r\n >\r\n <Box\r\n ref={(el) => {\r\n nodeRef.current = el;\r\n uns.current();\r\n if (el) {\r\n const handleMouseDown = () => {\r\n canCloseOnClick = false;\r\n };\r\n const handleMouseUp = () => {\r\n canCloseOnClick = true;\r\n };\r\n el.addEventListener('mousedown', handleMouseDown);\r\n uns.current = () =>\r\n el.removeEventListener('mousedown', handleMouseDown);\r\n el.addEventListener('mouseup', handleMouseUp);\r\n uns.current = () =>\r\n el.removeEventListener('mouseup', handleMouseUp);\r\n }\r\n }}\r\n className=\"modal__variantWrapper\"\r\n {...(variant ? getVariant(variant) : {})}\r\n >\r\n <Box\r\n id={id}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={title}\r\n aria-describedby={`${innerId}_Description`}\r\n aria-hidden=\"false\"\r\n className=\"modal__main\"\r\n // allows scrolling within element, despite body lock\r\n data-scroll-lock-scrollable\r\n sx={React.useMemo(() => {\r\n return {\r\n variant: `layout.common.modals.${size}`,\r\n ...(maxWidth !== undefined ? { maxWidth } : {}),\r\n };\r\n }, [maxWidth, size])}\r\n data-variant={`layout.common.modals.${size}`}\r\n >\r\n {!noHeader && (\r\n <DialogHeader\r\n className=\"modal__header\"\r\n NavBar={NavBar}\r\n title={innerTitle}\r\n close={closeHandler}\r\n hideCloseButton={hideCloseButton}\r\n id={`${innerId}_Header`}\r\n />\r\n )}\r\n <Box\r\n className=\"modal__content\"\r\n id={\r\n typeof children === 'string'\r\n ? `${innerId}_Description`\r\n : undefined\r\n }\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </CSSTransition>\r\n </Overlay>\r\n </Wrapper>\r\n </ModalContext.Provider>\r\n );\r\n },\r\n);\r\n\r\nStaticModal.displayName = 'StaticModal';\r\n","import React, { forwardRef } from 'react';\r\nimport { IOnFocusConfiguration, TFocusRetriever } from '@apia/util';\r\nimport { TModalSize } from '../types';\r\nimport { IDialogHeader } from './layout/DialogHeader';\r\nimport { WindowModal } from './WindowModal';\r\nimport { StaticModal } from './StaticModal';\r\nimport { useBreakpointIndex } from '@theme-ui/match-media';\r\n\r\nexport type TModal = {\r\n animationDuration?: number;\r\n /**\r\n * Aplica solamente para modales que tengan draggable=true.\r\n */\r\n defaultPosition?: {\r\n left?: string;\r\n right?: string;\r\n top?: string;\r\n bottom?: string;\r\n };\r\n /**\r\n * Si esta variable está en true, el modal se comportará más como una ventana\r\n * que como un modal\r\n */\r\n draggable?: boolean;\r\n /*\r\n * Si esta variable está en true, no se podrá arrastrar el modal fuera de la ventana\r\n */\r\n dragBounded?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n id?: string;\r\n initialFocusConfiguration?: IOnFocusConfiguration;\r\n /**\r\n * Este retriever será pasado al método focus.on para realizar el foco en el\r\n * elemento inicial del modal.\r\n *\r\n * @see focus\r\n */\r\n initialFocusGetter?: (\r\n modalInnerRef: HTMLElement,\r\n ) => ReturnType<TFocusRetriever>;\r\n /**\r\n * Si se pasa un ref, el modal hará foco sobre el elemento una vez que haya\r\n * abierto.\r\n */\r\n initialFocusRef?: React.RefObject<unknown>;\r\n /**\r\n * Controla el estado del modal, indicando a la transición de apertura o\r\n * cierre que debe comenzar, dependiendo de si cambia a true o false\r\n * respectivamente.\r\n */\r\n isOpen?: boolean;\r\n maxWidth?: number | string;\r\n /**\r\n * Permite pasar un componente React que se mostrará a la derecha del título,\r\n * con el fin de incorporar botones en el header del modal.\r\n */\r\n NavBar?: React.ReactNode;\r\n noFocus?: boolean;\r\n noHeader?: boolean;\r\n /**\r\n * Permite definir un callback que será llamado solamente cuando el modal se\r\n * cierre por medio del click en el overlay, al presionar escape o mediante\r\n * el botón cerrar del header (La X).\r\n */\r\n onClose?: () => void;\r\n /**\r\n * Este método recibe el evento del mousedown utilizado para controllar el dragstart. Si el usuario devuelve false, el drag no será realizado.\r\n */\r\n onDragStart?: (ev: MouseEvent) => boolean;\r\n /**\r\n * Permite definir un callback que será llamado siempre que el modal se\r\n * cierre, una vez que la animación haya terminado.\r\n */\r\n onExited?: () => unknown;\r\n /**\r\n * Al pasar un Portal, el modal se abrirá dentro de éste y no directamente en\r\n * la posición actual dentro del árbol de componentes. Normalmente, este\r\n * Portal es pasado automáticamente por el hook useModal (No el de la\r\n * librería, sino el nuestro).\r\n *\r\n * @see useModal\r\n */\r\n Portal?: React.FC<{\r\n children: React.ReactNode;\r\n }>;\r\n /**\r\n * Si es true, el modal será cerrado al presionar escape.\r\n */\r\n shouldCloseOnEsc?: boolean;\r\n /**\r\n * Si es true, el modal será cerrado al hacer clic en el overlay.\r\n */\r\n shouldCloseOnOverlayClick?: boolean;\r\n size?: TModalSize;\r\n stretch?: boolean;\r\n title?: string;\r\n variant?: string;\r\n} & Pick<IDialogHeader, 'hideCloseButton'>;\r\n\r\nexport const Modal = forwardRef(\r\n (props: TModal, ref: React.Ref<HTMLDivElement>) => {\r\n const breakpoint = useBreakpointIndex();\r\n\r\n if (props.draggable && breakpoint > 3) {\r\n return <WindowModal {...props} ref={ref} />;\r\n }\r\n return <StaticModal {...props} ref={ref} />;\r\n },\r\n);\r\n\r\nModal.displayName = 'Modal';\r\n","import { usePrevious } from '@apia/util';\r\nimport { useModal } from '../../../components/modals/hooks/useModal';\r\nimport { Modal, TModal } from '../../../components/modals/Modal';\r\nimport { Confirm, IConfirm } from '../../../components';\r\nimport React, { useRef } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport type TOpenModal = Pick<\r\n TModal,\r\n | 'NavBar'\r\n | 'Portal'\r\n | 'children'\r\n | 'className'\r\n | 'hideCloseButton'\r\n | 'initialFocusGetter'\r\n | 'initialFocusConfiguration'\r\n | 'maxWidth'\r\n | 'noHeader'\r\n | 'onExited'\r\n | 'shouldCloseOnEsc'\r\n | 'shouldCloseOnOverlayClick'\r\n | 'size'\r\n | 'stretch'\r\n | 'title'\r\n | 'variant'\r\n | 'draggable'\r\n | 'onClose'\r\n | 'onDragStart'\r\n | 'defaultPosition'\r\n | 'dragBounded'\r\n> & {\r\n id?: string;\r\n children?: React.ReactNode;\r\n confirmProps?: Omit<IConfirm, 'onConfirmOk' | 'onConfirmCancel' | 'children'>;\r\n /**\r\n * Determina si el modal debe abrirse al ser montado o no.\r\n */\r\n isDefaultOpen?: boolean;\r\n /**\r\n * El método onConfirm permite pasar un callback que devuelva una promesa. En\r\n * caso de ser así, si esta promesa resuelve a true, el modal será cerrado o\r\n * en caso contrario permanecerá abierto. Es útil en situaciones en donde es\r\n * necesario corroborar una condición antes de cerrar el modal. En la\r\n * situación en que se decida mantener el modal abierto, está a cargo del\r\n * usuario del componente realizar las indicaciones visuales correspondientes\r\n * para indicar al usuario el motivo por el cual el modal no fue cerrado.\r\n */\r\n onConfirm?: () => Promise<boolean> | boolean | void;\r\n /**\r\n * El método onCancel será llamado siempre que un usuario cierre el modal,\r\n * excepto cuando haya presionado en onConfirm.\r\n */\r\n onCancel?: () => void;\r\n /**\r\n * Permite introducir html directamente dentro del contenedor del modal.\r\n */\r\n html?: string;\r\n};\r\n\r\nexport const OpenModal = (props: TOpenModal & { isOpen: boolean }) => {\r\n const modalProps = useModal({\r\n isDefaultOpen: true,\r\n onExited: props.onExited,\r\n onClose: props.onClose,\r\n });\r\n\r\n const previousOpenProp = usePrevious(props.isOpen);\r\n if (previousOpenProp.current !== props.isOpen && !props.isOpen) {\r\n modalProps.hide();\r\n }\r\n\r\n const hasConfirmed = useRef(false);\r\n\r\n const confirmProps = props.confirmProps;\r\n if (props.onConfirm || props.onCancel) {\r\n return (\r\n <Modal\r\n {...props}\r\n {...modalProps}\r\n onExited={() => {\r\n props.onClose?.();\r\n props.onExited?.();\r\n if (!hasConfirmed.current) {\r\n props.onCancel?.();\r\n }\r\n }}\r\n >\r\n <Confirm\r\n {...confirmProps}\r\n onConfirm={async () => {\r\n hasConfirmed.current = true;\r\n const res = await props.onConfirm?.();\r\n\r\n if (res !== false) {\r\n modalProps.hide();\r\n }\r\n }}\r\n onCancel={() => {\r\n modalProps.hide();\r\n }}\r\n children={\r\n props.html ? (\r\n <Box dangerouslySetInnerHTML={{ __html: props.html }} />\r\n ) : (\r\n props.children\r\n )\r\n }\r\n />\r\n </Modal>\r\n );\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n {...modalProps}\r\n children={\r\n props.html ? (\r\n <Box dangerouslySetInnerHTML={{ __html: props.html }} />\r\n ) : (\r\n props.children\r\n )\r\n }\r\n />\r\n );\r\n};\r\n","import { Fragment, ReactNode } from 'react';\r\nimport { OpenModal, TOpenModal } from './OpenModal';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport class ApiaUtilModalHandler {\r\n constructor(\r\n public close: () => void,\r\n public setProperties: (props: Partial<TOpenModal>) => unknown,\r\n public getProperties: () => TOpenModal,\r\n ) {}\r\n\r\n public setConfirmProps(props: Partial<TOpenModal['confirmProps']>) {\r\n this.setProperties({\r\n confirmProps: { ...this.getProperties().confirmProps, ...props },\r\n });\r\n }\r\n}\r\n\r\nexport class ApiaUtilModals {\r\n private overlays: { render: ReactNode; id: number }[] = [];\r\n private modals: (TOpenModal & { isOpen: boolean })[] = [];\r\n\r\n #maxId = 0;\r\n #maxOverlay = 0;\r\n\r\n constructor() {\r\n document.addEventListener('openModal', (event) => {\r\n const cevent = event as CustomEvent;\r\n this.open(cevent.detail as TOpenModal);\r\n });\r\n\r\n makeObservable<ApiaUtilModals, 'overlays' | 'modals'>(this, {\r\n overlays: observable,\r\n modals: observable,\r\n });\r\n }\r\n\r\n #innerClose = (id: string) => {\r\n this.modals = this.modals.filter((s) => s.id !== id);\r\n };\r\n\r\n close(id: string) {\r\n const modal = this.modals.find((s) => s.id === id);\r\n\r\n if (modal) {\r\n modal.onClose?.();\r\n modal.onExited?.();\r\n }\r\n\r\n this.#innerClose(id);\r\n }\r\n\r\n open(props: TOpenModal) {\r\n const id = props.id ?? `modal_${this.#maxId++}`;\r\n this.modals.push({\r\n ...props,\r\n id,\r\n isOpen: true,\r\n onClose: props.onClose,\r\n onExited: () => {\r\n props.onExited?.();\r\n this.#innerClose(id);\r\n },\r\n });\r\n\r\n return new ApiaUtilModalHandler(\r\n () => {\r\n this.close(id);\r\n },\r\n (props) => {\r\n Object.assign(this.modals.find((m) => m.id === id) ?? {}, props);\r\n },\r\n () => {\r\n return this.modals.find((m) => m.id === id)!;\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * The overlay method allows to append an element to the array of overlays, which will be rendered after any existent modal.\r\n *\r\n * This way, it's possible to add a completelly custom modal with no style, nor any custom behavior added by this controller.\r\n * \r\n * @example\r\n * \r\n * const portal = createPortal(\r\n <iframe\r\n style={{\r\n position: 'fixed',\r\n inset: 0,\r\n }}\r\n src={makeApiaUrl({\r\n action: 'editGrid',\r\n frmName: grid.getProperty('gridForm'),\r\n frmParent: grid.getForm().definition.frmParent,\r\n portalFormMode: false,\r\n editionMode: true,\r\n react: true,\r\n index,\r\n preventAsXmlParameter: true,\r\n ajaxUrl: 'apia.execution.FormAction.run',\r\n })}\r\n />,\r\n document.getElementById('AppModals') as HTMLElement,\r\n );\r\n\r\n ApiaUtil.instance.modals.overlay(portal);\r\n */\r\n overlay(o: ReactNode) {\r\n const id = this.#maxOverlay++;\r\n\r\n const overlay = { render: <Fragment key={id}>{o}</Fragment>, id };\r\n this.overlays.push(overlay);\r\n\r\n return () => {\r\n this.overlays = this.overlays.filter((c) => c.id !== id);\r\n };\r\n }\r\n\r\n Component = observer(() => {\r\n return (\r\n <>\r\n {this.modals.map((current) => (\r\n <OpenModal key={current.id} {...current} />\r\n ))}\r\n {this.overlays.map((c) => c.render)}\r\n </>\r\n );\r\n });\r\n}\r\n","import {\r\n NotificationsList,\r\n defaultNotifier,\r\n TNotificationId,\r\n INotification,\r\n TDispatchedNotification,\r\n TNotificationSelector,\r\n} from '@apia/notifications';\r\nimport type { ApiaUtil } from '..';\r\n\r\nexport class ApiaUtilNotifications {\r\n constructor(protected util: ApiaUtil) {}\r\n\r\n close = (id: TNotificationId | INotification) => {\r\n defaultNotifier.close(id);\r\n };\r\n\r\n closeAll = () => {\r\n defaultNotifier.closeAll();\r\n };\r\n\r\n notify = (notification: TDispatchedNotification): void => {\r\n if (notification.type === 'modal') {\r\n this.util.modals.open({\r\n size: 'flex',\r\n children: notification.message,\r\n title: notification.title || '',\r\n onConfirm: () => {},\r\n confirmProps: {\r\n hideCancelButton: true,\r\n },\r\n });\r\n } else {\r\n defaultNotifier.notify({\r\n ...notification,\r\n type: notification.type ?? 'warning',\r\n });\r\n }\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n useSelector = (selector: TNotificationSelector<any>) =>\r\n defaultNotifier.useSelector(selector);\r\n\r\n Component = () => {\r\n return <NotificationsList />;\r\n };\r\n}\r\n","import { ITabContainer } from '../types';\r\n\r\nexport function getIframe() {\r\n return window.frameElement as HTMLIFrameElement;\r\n}\r\n\r\nexport function getTabContainer() {\r\n const tabsController = getIframe()?.getReactTabsController?.();\r\n if (tabsController) return tabsController;\r\n\r\n const windowTop = window.top;\r\n const isIniFrame = windowTop?.document != null;\r\n let result: HTMLElement | typeof window.tabsController | null =\r\n document.getElementById('tabContainer');\r\n if (result === null && isIniFrame)\r\n result =\r\n windowTop.document.getElementById('tabContainer') ??\r\n windowTop.tabsController;\r\n\r\n return result as unknown as ITabContainer;\r\n}\r\n","import { TId } from '@apia/util';\r\nimport { getTabContainer } from './util';\r\nimport { Tab, TTab } from '../../../tabs';\r\n\r\nexport class ApiaUtilTabsController {\r\n get currentTab(): Tab<TTab> {\r\n try {\r\n return getTabContainer().getHandler().getActiveTab();\r\n } catch (e) {\r\n e;\r\n }\r\n\r\n return {\r\n async close(_?: boolean) {\r\n try {\r\n window.close();\r\n } catch (_) {\r\n //\r\n }\r\n return true;\r\n },\r\n remove() {\r\n this.close();\r\n },\r\n } as any;\r\n }\r\n\r\n closeTab(tabId: string, force?: boolean) {\r\n const tabContainer = getTabContainer();\r\n if (tabContainer !== null) {\r\n tabContainer.getTab(tabId)?.close(force);\r\n return;\r\n } else {\r\n try {\r\n window.close();\r\n } catch (_ignore) {\r\n //\r\n }\r\n }\r\n }\r\n\r\n getHandler() {\r\n return getTabContainer()?.getHandler();\r\n }\r\n\r\n /**\r\n * openApiaTab y openTab son sinónimos.\r\n */\r\n openTab(title: string, url: string): Promise<TId> {\r\n const tabContainer = getTabContainer();\r\n if (tabContainer !== null) {\r\n return tabContainer.addNewTab(title, url);\r\n }\r\n\r\n return new Promise((resolve) => resolve(''));\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useModal } from './hooks';\r\nimport { Modal } from './Modal';\r\nimport { Icon } from '@apia/icons';\r\nimport { Box, getVariant, Link } from '@apia/theme';\r\n\r\nexport const DeadSessionModal = ({ onClick }: { onClick: () => unknown }) => {\r\n const { Portal } = useModal();\r\n return (\r\n <Modal\r\n Portal={Portal}\r\n isOpen\r\n shouldCloseOnOverlayClick={false}\r\n shouldCloseOnEsc={false}\r\n hideCloseButton\r\n sx={React.useMemo(\r\n () => ({\r\n backgroundColor: 'palette.background.default',\r\n }),\r\n [],\r\n )}\r\n >\r\n <Box\r\n role=\"alert\"\r\n {...getVariant('layout.common.modals.deadSession')}\r\n className=\"deadSession\"\r\n >\r\n <Box className=\"textAndIcon\">\r\n <Icon title=\"\" size=\"iconLg\" name=\"Alert\" />\r\n {window.MSG_INVALID_SESSION}\r\n </Box>\r\n <Link\r\n className=\"goHomeLink\"\r\n href={window.CONTEXT}\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n ev.preventDefault();\r\n onClick();\r\n },\r\n [onClick],\r\n )}\r\n >\r\n {window.LBL_GOTO_LOGIN}\r\n </Link>\r\n </Box>\r\n </Modal>\r\n );\r\n};\r\n","import React, { ComponentType, Suspense, lazy } from 'react';\r\nimport { Modal, TModal } from './Modal';\r\n\r\nexport interface ICalendarModal extends TModal {\r\n handleClickDay: (date: Date) => void;\r\n onCancel: () => void;\r\n calValue?: Date;\r\n locale: string;\r\n}\r\n\r\nexport const CalendarModal = React.forwardRef<HTMLDivElement, ICalendarModal>(\r\n ({ handleClickDay, onCancel, calValue, locale, size, ...props }, ref) => {\r\n const Calendar = lazy(\r\n () =>\r\n import('react-calendar') as unknown as Promise<{\r\n default: ComponentType<any>;\r\n }>,\r\n );\r\n return (\r\n <Modal\r\n noHeader\r\n size={size ?? 'cal'}\r\n shouldCloseOnEsc\r\n shouldCloseOnOverlayClick\r\n ref={ref}\r\n {...props}\r\n initialFocusGetter={(modalRef) => {\r\n return modalRef?.querySelector(\r\n '.react-calendar__tile--active',\r\n ) as HTMLElement;\r\n }}\r\n >\r\n <Suspense fallback={null}>\r\n <Calendar\r\n onClickDay={handleClickDay}\r\n locale={locale}\r\n value={calValue ?? new Date()}\r\n nextLabel=\"›\"\r\n next2Label=\"»\"\r\n prevLabel=\"‹\"\r\n prev2Label=\"«\"\r\n />\r\n </Suspense>\r\n </Modal>\r\n );\r\n },\r\n);\r\n\r\nCalendarModal.displayName = 'CalendarModal';\r\n","import { getVariant } from '@apia/theme';\r\nimport * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport interface IDialogButtonBar {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const DialogButtonBar: React.FC<IDialogButtonBar> = ({\r\n children,\r\n className,\r\n}) => {\r\n return (\r\n <Box\r\n className={`${className ?? ''} buttonsBar`}\r\n {...getVariant('layout.common.modals.buttonsBar')}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { TIconType } from '@apia/icons';\r\nimport {\r\n getVariant,\r\n spacing,\r\n Box,\r\n Button,\r\n ButtonProps,\r\n Spinner,\r\n ThemeUICSSObject,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport * as React from 'react';\r\n\r\nexport interface ISimpleButton extends ButtonProps {\r\n buttonSx?: ThemeUICSSObject;\r\n icon?: TIconType;\r\n iconColor?: string;\r\n iconPosition?: 'left' | 'right';\r\n iconSize?: number;\r\n isLoading?: boolean;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: string;\r\n spinnerSize?: number;\r\n type?: 'button' | 'submit' | 'reset';\r\n}\r\n\r\nconst simpleButton: ThemeUICSSObject = {\r\n display: 'inline-flex',\r\n gap: spacing(3),\r\n position: 'relative',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n\r\n svg: {\r\n flexShrink: 0,\r\n path: {\r\n fill: 'currentColor',\r\n },\r\n },\r\n\r\n '.toggled': {\r\n backgroundColor: 'primary',\r\n },\r\n\r\n '.button__content': {\r\n overflowWrap: 'break-word',\r\n },\r\n\r\n /* PREPEND HERE */\r\n};\r\n\r\nexport const SimpleButton = React.forwardRef(\r\n (\r\n {\r\n buttonSx,\r\n children = null,\r\n className,\r\n disabled = false,\r\n icon,\r\n iconColor,\r\n iconPosition = 'left',\r\n iconSize,\r\n id,\r\n isLoading,\r\n name,\r\n onClick,\r\n size,\r\n spinnerSize = 16,\r\n sx,\r\n title,\r\n type = 'button',\r\n variant = 'primary',\r\n ...buttonProps\r\n }: ISimpleButton,\r\n ref: React.Ref<unknown>,\r\n ) => {\r\n const loadingSx = React.useMemo<ThemeUIStyleObject>(\r\n () => ({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }),\r\n [],\r\n );\r\n const spanSx = React.useMemo(\r\n () => ({\r\n color: isLoading ? 'transparent' : undefined,\r\n }),\r\n [isLoading],\r\n );\r\n const Icon = React.useMemo(() => icon, [icon]);\r\n\r\n return (\r\n <Button\r\n ref={ref as React.Ref<HTMLButtonElement>}\r\n id={id}\r\n name={name}\r\n title={title}\r\n aria-label={title}\r\n onClick={onClick}\r\n type={type}\r\n disabled={isLoading || disabled}\r\n className={className}\r\n {...getVariant(`${variant}${size !== 'md' && size ? `-${size}` : ''}`)}\r\n {...buttonProps}\r\n sx={{ ...simpleButton, ...buttonSx, ...sx }}\r\n >\r\n {Icon && iconPosition === 'left' && (\r\n <Icon title=\"\" size={iconSize} color={iconColor} />\r\n )}\r\n <Box as=\"span\" className=\"button__content\" sx={spanSx}>\r\n {children ?? title}\r\n </Box>\r\n {Icon && iconPosition === 'right' && (\r\n <Icon title=\"\" size={iconSize} color={iconColor} />\r\n )}\r\n {isLoading && (\r\n <Box className=\"spinner\" sx={loadingSx}>\r\n <Spinner size={spinnerSize} color=\"inherit\" />\r\n </Box>\r\n )}\r\n </Button>\r\n );\r\n },\r\n);\r\n\r\nSimpleButton.displayName = 'SimpleButton';\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { IConfirm } from '../../dialogs';\r\nimport { MouseEvent, useCallback } from 'react';\r\nimport { DialogButtonBar } from './DialogButtonBar';\r\nimport { SimpleButton } from '../../forms/buttons/SimpleButton';\r\nimport { useModalContext } from '../ModalContext';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const Confirm = ({\r\n children,\r\n additionalButtons,\r\n additionalButtonsOnRight,\r\n cancelButtonText: cancelText,\r\n className,\r\n confirmButtonText: confirmText,\r\n confirmButtonVariant = 'primary',\r\n contentRef,\r\n disabled,\r\n hideCancelButton,\r\n hideConfirmButton,\r\n isLoading,\r\n onCancel,\r\n onConfirm,\r\n variant,\r\n}: Omit<IConfirm, 'title'>) => {\r\n const { descriptionId } = useModalContext();\r\n\r\n const showsCancelButton = onCancel && !hideCancelButton;\r\n const showsConfirmButton = !hideConfirmButton;\r\n\r\n if (!showsCancelButton && showsConfirmButton) {\r\n confirmText = confirmText || getLabel('btnClose').text;\r\n } else if (showsConfirmButton) {\r\n confirmText = confirmText || getLabel('btnCon').text;\r\n cancelText = cancelText || getLabel('btnCan').text;\r\n }\r\n\r\n return (\r\n <Box\r\n {...getVariant(variant ?? 'layout.common.modals.confirm')}\r\n className={`${className ?? ''} confirm`}\r\n >\r\n <Box ref={contentRef} className=\"confirm__content\" id={descriptionId}>\r\n {children}\r\n </Box>\r\n <DialogButtonBar className=\"confirm__buttonBar\">\r\n <Box\r\n className=\"confirm__customButtons\"\r\n onClick={useCallback(\r\n (ev: MouseEvent) => {\r\n if ((ev.target as HTMLElement).closest('button')) onCancel?.();\r\n },\r\n [onCancel],\r\n )}\r\n >\r\n {additionalButtons}\r\n </Box>\r\n\r\n <Box className=\"confirm__defaultButtons\">\r\n <Box\r\n className=\"confirm__customButtonsOnRight\"\r\n onClick={useCallback(\r\n (ev: MouseEvent) => {\r\n if ((ev.target as HTMLElement).closest('button')) onCancel?.();\r\n },\r\n [onCancel],\r\n )}\r\n >\r\n {additionalButtonsOnRight}\r\n </Box>\r\n {showsConfirmButton && (\r\n <SimpleButton\r\n onClick={onConfirm}\r\n title={confirmText}\r\n variant={\r\n !showsCancelButton && showsConfirmButton\r\n ? 'outline'\r\n : confirmButtonVariant\r\n }\r\n disabled={isLoading ?? disabled}\r\n isLoading={isLoading}\r\n className=\"confirm__confirmButton\"\r\n type=\"submit\"\r\n data-test-id=\"confirm\"\r\n >\r\n {confirmText}\r\n </SimpleButton>\r\n )}\r\n {showsCancelButton && (\r\n <SimpleButton\r\n onClick={onCancel}\r\n title={cancelText}\r\n {...getVariant('secondary')}\r\n disabled={isLoading}\r\n className=\"confirm__cancelButton\"\r\n data-test-id=\"cancel\"\r\n >\r\n {cancelText}\r\n </SimpleButton>\r\n )}\r\n </Box>\r\n </DialogButtonBar>\r\n </Box>\r\n );\r\n};\r\n","import { Modal, useModal } from '../modals';\r\nimport { TApiaButtonType, TModalSize } from '../types';\r\nimport { ReactNode, Ref, useCallback, useRef } from 'react';\r\nimport { Confirm } from '../modals/layout/Confirm';\r\n\r\nexport interface IConfirm {\r\n additionalButtons?: ReactNode;\r\n additionalButtonsOnRight?: ReactNode;\r\n cancelButtonText?: string;\r\n children: ReactNode;\r\n className?: string;\r\n confirmButtonText?: string;\r\n confirmButtonVariant?: TApiaButtonType;\r\n contentRef?: Ref<HTMLDivElement>;\r\n disabled?: boolean;\r\n hideCancelButton?: boolean;\r\n hideConfirmButton?: boolean;\r\n isLoading?: boolean;\r\n onConfirm?: () => unknown;\r\n onCancel?: () => unknown;\r\n title?: string;\r\n size?: TModalSize;\r\n variant?: string;\r\n}\r\n\r\nexport const ConfirmModal = ({\r\n onConfirm,\r\n onCancel,\r\n title,\r\n size,\r\n ...props\r\n}: IConfirm): JSX.Element => {\r\n const hasConfirmed = useRef(false);\r\n\r\n const { hide, ...modalProps } = useModal({\r\n isDefaultOpen: true,\r\n onExited: () => {\r\n if (hasConfirmed.current) onConfirm?.();\r\n else onCancel?.();\r\n },\r\n });\r\n\r\n const handleCancel = useCallback(() => {\r\n hide();\r\n }, [hide]);\r\n\r\n const handleConfirm = useCallback(() => {\r\n hasConfirmed.current = true;\r\n hide();\r\n }, [hide]);\r\n\r\n return (\r\n <Modal\r\n {...modalProps}\r\n initialFocusGetter={useCallback(\r\n (current: HTMLElement) =>\r\n current.querySelector<HTMLElement>('.confirm__confirmButton'),\r\n [],\r\n )}\r\n title={title}\r\n size={size}\r\n >\r\n <Confirm {...props} onCancel={handleCancel} onConfirm={handleConfirm} />\r\n </Modal>\r\n );\r\n};\r\n","import { useCallback, useMemo } from 'react';\r\nimport { Confirm, Modal, useModal } from '../modals';\r\n\r\nexport interface IAlert {\r\n children: React.ReactNode;\r\n confirmButtonText?: string;\r\n onClose: () => void;\r\n title?: string;\r\n}\r\n\r\nexport const AlertModal = ({\r\n children,\r\n confirmButtonText,\r\n onClose,\r\n title,\r\n}: IAlert) => {\r\n const { hide, ...modalProps } = useModal({\r\n isDefaultOpen: true,\r\n onExited: onClose,\r\n });\r\n\r\n return (\r\n <Modal\r\n {...modalProps}\r\n sx={useMemo(\r\n () => ({\r\n '.modal__content .confirm__content': {\r\n overflow: 'visible',\r\n },\r\n }),\r\n [],\r\n )}\r\n initialFocusGetter={useCallback((ref: HTMLElement) => {\r\n return ref?.querySelector('.confirm__confirmButton') as HTMLElement;\r\n }, [])}\r\n title={title}\r\n >\r\n <Confirm\r\n onConfirm={useCallback(() => {\r\n hide();\r\n }, [hide])}\r\n confirmButtonText={confirmButtonText}\r\n >\r\n {children}\r\n </Confirm>\r\n </Modal>\r\n );\r\n};\r\n","import { ReactNode, useCallback } from 'react';\r\nimport {\r\n ConfirmModal,\r\n IConfirm,\r\n} from '../../../components/dialogs/ConfirmModal';\r\nimport { AlertModal } from '../../../components/dialogs/AlertModal';\r\nimport { makeAutoObservable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\ntype TApiaUtilConfirm = Pick<\r\n IConfirm,\r\n | 'additionalButtons'\r\n | 'additionalButtonsOnRight'\r\n | 'cancelButtonText'\r\n | 'children'\r\n | 'className'\r\n | 'confirmButtonText'\r\n | 'confirmButtonVariant'\r\n | 'contentRef'\r\n | 'hideCancelButton'\r\n | 'hideConfirmButton'\r\n | 'title'\r\n | 'size'\r\n | 'variant'\r\n>;\r\n\r\ntype TApiaUtilInnerConfirm = TApiaUtilConfirm & { id: string } & Pick<\r\n IConfirm,\r\n 'onCancel' | 'onConfirm'\r\n >;\r\n\r\ntype TAlert = {\r\n children: ReactNode;\r\n title: string;\r\n confirmButtonText?: string;\r\n};\r\n\r\ntype TApiaUtilInnerAlert = TAlert & { onClose: () => unknown; id: string };\r\n\r\nexport class ApiaUtilDialogs {\r\n #maxIdAlert = 0;\r\n #maxIdConfirm = 0;\r\n\r\n alerts: TApiaUtilInnerAlert[] = [];\r\n dialogs: TApiaUtilInnerConfirm[] = [];\r\n\r\n constructor() {\r\n makeAutoObservable(this);\r\n }\r\n\r\n alert(props: TAlert): Promise<void> {\r\n return new Promise((resolve) => {\r\n this.alerts.push({\r\n ...props,\r\n onClose: () => resolve(),\r\n id: `confirm${this.#maxIdAlert++}`,\r\n });\r\n });\r\n }\r\n\r\n confirm(props: TApiaUtilConfirm): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n this.dialogs.push({\r\n ...props,\r\n id: `confirm${this.#maxIdConfirm++}`,\r\n onCancel: () => resolve(false),\r\n onConfirm: () => resolve(true),\r\n });\r\n });\r\n }\r\n\r\n Component = observer(() => {\r\n const removeModal = useCallback(\r\n (which: TApiaUtilConfirm & { id: string }) => {\r\n this.dialogs = this.dialogs.filter((search) => search !== which);\r\n },\r\n [],\r\n );\r\n\r\n return (\r\n <>\r\n {this.alerts.map((current) => (\r\n <AlertModal {...current} key={current.id} />\r\n ))}\r\n {this.dialogs.map((current) => (\r\n <ConfirmModal\r\n {...current}\r\n key={current.id}\r\n onCancel={() => {\r\n removeModal(current);\r\n current.onCancel?.();\r\n }}\r\n onConfirm={() => {\r\n removeModal(current);\r\n current.onConfirm?.();\r\n }}\r\n />\r\n ))}\r\n </>\r\n );\r\n });\r\n}\r\n","function fillZeros(amount: number) {\r\n return Array(Math.max(0, amount)).fill(0).join('');\r\n}\r\n\r\nfunction fillThousandsZeros(value: number) {\r\n const stringValue = String(value);\r\n return `${fillZeros(3 - stringValue.length)}${String(value)}`;\r\n}\r\n\r\nconst decimalCount = Number(window.AMOUNT_DECIMAL_SEPARATOR);\r\nconst decimalZeros = Number(window.AMOUNT_DECIMAL_ZEROS);\r\nconst decimalSeparator = window.CHAR_DECIMAL_SEPARATOR;\r\nconst thousandsSeparator = window.CHAR_THOUS_SEPARATOR;\r\nconst regexpThousandsSeparator =\r\n thousandsSeparator === '.' ? '\\\\.' : thousandsSeparator;\r\nconst regexpDecimalSeparator =\r\n decimalSeparator === '.' ? '\\\\.' : decimalSeparator;\r\nconst shouldRound = false;\r\n\r\n/* \r\nfunction parseNumberInputValueToNumber(value: string): number {\r\n return Number.parseFloat(\r\n value.replaceAll(thousandsSeparator, '').replaceAll(decimalSeparator, '.'),\r\n );\r\n}\r\n\r\nfunction parseNumberValueToNumberInput(value: string | number): string {\r\n const stringNumber = String(value);\r\n const result = stringNumber.match(/(-?)(\\d+)(?:\\.(\\d+))?/);\r\n if (!result) return '';\r\n\r\n const isNegative = !!result[1];\r\n const integer = result[2];\r\n const decimals = result[3] as string | null;\r\n const decimalsString = decimals ? `${regexpDecimalSeparator}${decimals}` : '';\r\n\r\n return (\r\n parseStringToApiaNumber(\r\n `${isNegative ? '-' : ''}${integer}${decimalsString}`,\r\n ) ?? ''\r\n );\r\n} */\r\n\r\nexport function parseStringToApiaNumber(value: string): string | null {\r\n const result = value.match(\r\n new RegExp(\r\n `^(-)?((?:(?:\\\\d{1,3})${regexpThousandsSeparator}(?:\\\\d{3}${regexpThousandsSeparator})*(?:\\\\d{3}))?|(?:\\\\d*))(?:(?:${regexpDecimalSeparator})(\\\\d+))?$`,\r\n ),\r\n );\r\n if (!result) return null;\r\n\r\n const isNegative = !!result[1];\r\n let module = Number(result[2].replaceAll(thousandsSeparator, ''));\r\n const slicedDecimals = result[3]?.slice(0, decimalCount + 1) ?? '';\r\n const noZeroDecimals =\r\n (slicedDecimals\r\n ? `${String(\r\n Math.round(\r\n Number(\r\n `${slicedDecimals}${fillZeros(\r\n (shouldRound ? decimalCount + 1 : decimalCount) -\r\n slicedDecimals.length,\r\n )}`,\r\n ) / (shouldRound ? 10 : 1),\r\n ),\r\n )}`\r\n : ''\r\n )\r\n .slice(0, decimalCount)\r\n .match(/(\\d*[1-9])0*/)?.[1] ?? '';\r\n\r\n const decimalsString: string = `${noZeroDecimals}${fillZeros(\r\n decimalZeros - noZeroDecimals.length,\r\n )}`;\r\n\r\n const finalNumberString: string[] = [];\r\n while (module >= 1000) {\r\n module /= 1000;\r\n const truncedInteger = Math.trunc(module);\r\n finalNumberString.unshift(\r\n fillThousandsZeros(Math.round((module - truncedInteger) * 1000)),\r\n );\r\n module = truncedInteger;\r\n }\r\n finalNumberString.unshift(String(module));\r\n\r\n return `${isNegative ? '-' : ''}${finalNumberString.join(\r\n window.ADD_THOUSAND_SEPARATOR ? window.CHAR_THOUS_SEPARATOR : '',\r\n )}${decimalsString.length > 0 ? `${decimalSeparator}${decimalsString}` : ''}`;\r\n}\r\n","import { parseStringToApiaNumber } from './parseStringToApiaNumber';\r\n\r\nconst delimiters = [',', ';', '\\t', '|'];\r\nexport class ApiaUtilParsers {\r\n /**\r\n * Toma un número sin separadores de miles y lo devuelve en el formato\r\n * establecido por los parámetros de Apia para separadores de miles y\r\n * separadores de decimales.\r\n */\r\n addThousSeparator(nStr: string | number): string {\r\n // Apia Original Function\r\n let str = String(nStr);\r\n str += '';\r\n const x =\r\n window.CHAR_DECIMAL_SEPARATOR && str.split(window.CHAR_DECIMAL_SEPARATOR);\r\n let x1 = x?.[0];\r\n const x2 =\r\n x && x.length > 1 && window.CHAR_DECIMAL_SEPARATOR\r\n ? `${window.CHAR_DECIMAL_SEPARATOR}${x[1]}`\r\n : '';\r\n const rgx = /(\\d+)(\\d{3})/;\r\n while (x1 && rgx.test(x1)) {\r\n x1 =\r\n x1 &&\r\n window.CHAR_THOUS_SEPARATOR &&\r\n x1.replace(rgx, `$1${window.CHAR_THOUS_SEPARATOR}$2`);\r\n }\r\n return x1 ? `${x1}${x2}` : String(nStr);\r\n }\r\n\r\n #parseString(value: string): string {\r\n return parseStringToApiaNumber(value) || '';\r\n }\r\n\r\n /**\r\n * Toma un número y lo devuelve formateado con los parámetros de Apia\r\n */\r\n apiaNumber(pValue: number): number | string;\r\n /**\r\n * Toma una cadena de caracteres y lo parsea en el formato de Apia.\r\n * Esta cadena de caracteres podría venir por ejemplo de un evento\r\n * onChange en un campo de tipo input.\r\n */\r\n apiaNumber(pValue: string): string;\r\n apiaNumber(pValue: string | number): number | string {\r\n if (typeof pValue === 'string') {\r\n return this.#parseString(pValue);\r\n }\r\n // Apia Classic Original Function\r\n let value = '';\r\n try {\r\n value = pValue.toFixed(parseInt(window.AMOUNT_DECIMAL_SEPARATOR, 10));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n let s = value;\r\n if (!s.includes('.')) {\r\n if (window.ADD_THOUSAND_SEPARATOR) {\r\n s = this.addThousSeparator(s);\r\n }\r\n return s;\r\n }\r\n if (window.ADD_THOUSAND_SEPARATOR) {\r\n s = this.addThousSeparator(s.replace('.', window.CHAR_DECIMAL_SEPARATOR));\r\n } else {\r\n s = s.replace('.', window.CHAR_DECIMAL_SEPARATOR);\r\n }\r\n const int = s.split(window.CHAR_DECIMAL_SEPARATOR)[0];\r\n let decimals: string = s.split(window.CHAR_DECIMAL_SEPARATOR)[1];\r\n let decCount: number = decimals.length - 1;\r\n while (\r\n decCount >= parseInt(window.AMOUNT_DECIMAL_ZEROS, 10) &&\r\n decimals.charAt(decCount) === '0'\r\n ) {\r\n decimals = decimals.substring(0, decCount);\r\n decCount -= 1;\r\n }\r\n return (\r\n int +\r\n (decimals || decimals === '0'\r\n ? window.CHAR_DECIMAL_SEPARATOR + decimals\r\n : '')\r\n );\r\n }\r\n\r\n /**\r\n * Toma un número en formato Apia y lo devuelve como float en javascript.\r\n */\r\n jsNumber(value: string): number {\r\n // Apia Classic Original Function\r\n let re;\r\n if (window.CHAR_THOUS_SEPARATOR === '.')\r\n re = new RegExp(`\\\\${window.CHAR_THOUS_SEPARATOR}`, 'g');\r\n else\r\n re =\r\n window.CHAR_THOUS_SEPARATOR &&\r\n new RegExp(window.CHAR_THOUS_SEPARATOR, 'g');\r\n let aux = re && value.replace(re, '');\r\n aux =\r\n aux &&\r\n window.CHAR_DECIMAL_SEPARATOR &&\r\n aux.replace(window.CHAR_DECIMAL_SEPARATOR, '.');\r\n\r\n if (typeof aux !== 'string') {\r\n return parseFloat(value);\r\n }\r\n return aux ? parseFloat(aux) : parseFloat(value);\r\n }\r\n\r\n /**\r\n * Hay muchos valores que podrían querer ser interpretados como booleano\r\n *\r\n * Devuelve true si el valor coincide con true|T|t|1 y false si coincide con\r\n * false|F|f|0. Si no coincide con ninguna de éstas hace throw de un error.\r\n */\r\n parseBool(val: string): boolean {\r\n if (/^(?:true|T|t|1)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0)$/i.test(val)) return false;\r\n throw new Error('Property/Value is a boolean, try using true or false');\r\n }\r\n\r\n /**\r\n * Toma una estructura bidimensional y la convierte a csv, usando el método\r\n * String(...) sobre cada celda de datos.\r\n */\r\n toCsv(data: any[][], delimiter = ',') {\r\n return data.map((c) => c.map((d) => String(d)).join(delimiter)).join('\\n');\r\n }\r\n\r\n /**\r\n * Inspecciona las primeras filas de un array de strings, en búsqueda del mejor delimitador\r\n * para convertir esos strings a array de datos, que serán el resultado de haber interpretado\r\n * un documento CSV.\r\n */\r\n #findDelimiter(rows: string[]) {\r\n const maxColsByDelimiter: Record<string, number> = {};\r\n\r\n for (const delimiter of delimiters) {\r\n const headCols = rows[0].split(delimiter).length;\r\n\r\n let allTrue = true;\r\n for (let i = 1; i < Math.min(30, rows.length) && allTrue; i++) {\r\n allTrue = allTrue && headCols === rows[i].split(delimiter).length;\r\n }\r\n\r\n if (allTrue) {\r\n maxColsByDelimiter[delimiter] = headCols;\r\n }\r\n }\r\n\r\n let max = 0;\r\n let bestDelimiter: string | null = null;\r\n\r\n Object.entries(maxColsByDelimiter).forEach(([delimiter, count]) => {\r\n if (count > max) {\r\n max = count;\r\n bestDelimiter = delimiter;\r\n }\r\n });\r\n\r\n if (bestDelimiter !== null) {\r\n return bestDelimiter as string;\r\n }\r\n\r\n throw new Error(\r\n `Cannot determine delimiter, it's none of: ${delimiters.join(', ')}`,\r\n );\r\n }\r\n\r\n #parseCellValue(cellValue: string) {\r\n return cellValue.match(/^\\s*\"?([^\"]+)\"?[\\s\\r\\n]*$/)?.[1] ?? cellValue;\r\n }\r\n\r\n /**\r\n * Convierte un string a array de arrays, parseándolo en formato CSV, encontrando el delimitador en forma automática.\r\n */\r\n fromCsv(data: string): string[][] {\r\n const rows = data.split(/\\r?\\n\\r?/).filter((row) => !row.match(/^\\s*$/));\r\n const delimiter = this.#findDelimiter(rows);\r\n\r\n return rows.map((c) => {\r\n const a = c.split(delimiter);\r\n if (a[0][a[0].length - 1] === '') {\r\n a.pop();\r\n }\r\n return a.map((d) => this.#parseCellValue(d));\r\n });\r\n }\r\n}\r\n","import { TTooltip } from './tooltip';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ApiaUtilTooltip {\r\n id = `tooltip__${maxId++}`;\r\n\r\n constructor(\r\n public props: TTooltip,\r\n public close: () => void,\r\n ) {}\r\n}\r\n","import type { ApiaUtilTooltips } from './ApiaUtilTooltips';\r\nimport { TTooltip } from './tooltip';\r\n\r\nlet y = 0,\r\n x = 0;\r\ndocument?.addEventListener('mousemove', (ev) => {\r\n x = ev.clientX;\r\n y = ev.clientY;\r\n});\r\n\r\nexport class AutomaticTooltip {\r\n #timeout = 500;\r\n #tooltipTimeout = 0;\r\n #unsuscribe: (() => void) | null = null;\r\n\r\n ref = (el: HTMLElement | null) => {\r\n this.#unsuscribe?.();\r\n\r\n const listener = () => {\r\n clearTimeout(this.#tooltipTimeout);\r\n\r\n this.#tooltipTimeout = setTimeout(() => {\r\n if (this.#tooltip?.children)\r\n this.handler.open({\r\n closeOnMouseLeaveTooltip: true,\r\n closeOnEscape: true,\r\n closeOnScrollOut: true,\r\n ...this.#tooltip,\r\n anchorPoint: { left: x + 3, top: y + 3 },\r\n });\r\n }, this.#timeout) as unknown as number;\r\n };\r\n\r\n const reset = () => {\r\n clearTimeout(this.#tooltipTimeout);\r\n };\r\n\r\n if (el) {\r\n el.addEventListener('mousemove', listener);\r\n el.addEventListener('mouseleave', reset);\r\n\r\n this.#unsuscribe = () => {\r\n el.removeEventListener('mousemove', listener);\r\n el.removeEventListener('mouseleave', reset);\r\n };\r\n } else {\r\n this.#unsuscribe?.();\r\n reset();\r\n }\r\n };\r\n\r\n #tooltip: Partial<TTooltip> | null = null;\r\n\r\n constructor(\r\n tooltip: (Partial<TTooltip> & { timeout?: number }) | null = null,\r\n private handler: ApiaUtilTooltips,\r\n ) {\r\n this.#tooltip = tooltip;\r\n if (tooltip?.timeout !== undefined) {\r\n this.#timeout = tooltip?.timeout;\r\n }\r\n }\r\n\r\n update = (tooltip: Partial<TTooltip>) => {\r\n this.#tooltip = tooltip;\r\n };\r\n}\r\n","import { isChild } from '@apia/util';\r\nimport { TAttachToElement, TPosition, TTooltip } from './types';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\n\r\nexport function isAttachToElementAFunction(\r\n attachToElement: TAttachToElement,\r\n): attachToElement is () => HTMLElement {\r\n return (\r\n attachToElement instanceof Function &&\r\n getParamNames(attachToElement).length === 0\r\n );\r\n}\r\n\r\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\r\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\r\n\r\nexport function getParamNames(func: object) {\r\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\r\n const fnStr = func.toString().replace(STRIP_COMMENTS, '');\r\n let result: string[] | RegExpMatchArray | null = fnStr\r\n .slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')'))\r\n .match(ARGUMENT_NAMES);\r\n if (result === null) result = [];\r\n\r\n return result;\r\n}\r\n\r\nfunction determineAnchorPoint({\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n}: Pick<TTooltip, 'attachToElementAnchorPoint'> &\r\n Required<Pick<TTooltip, 'attachToElement'>>) {\r\n let actualAnchorPoint: TPosition = { left: 0, top: 0 };\r\n\r\n const element = isAttachToElementAFunction(attachToElement)\r\n ? attachToElement()\r\n : attachToElement.current;\r\n\r\n if (element) {\r\n const rect = element.getBoundingClientRect();\r\n\r\n const point = attachToElementAnchorPoint ?? 'topRight';\r\n\r\n switch (point) {\r\n case 'bottomLeft':\r\n actualAnchorPoint = {\r\n left: rect.left,\r\n top: rect.bottom,\r\n };\r\n break;\r\n case 'bottomRight':\r\n actualAnchorPoint = {\r\n left: rect.right,\r\n top: rect.bottom,\r\n };\r\n break;\r\n case 'center':\r\n actualAnchorPoint = {\r\n left: (rect.left + rect.right) / 2,\r\n top: (rect.bottom + rect.top) / 2,\r\n };\r\n break;\r\n case 'topLeft':\r\n actualAnchorPoint = {\r\n left: rect.left,\r\n top: rect.top,\r\n };\r\n break;\r\n case 'topRight':\r\n actualAnchorPoint = {\r\n left: rect.right,\r\n top: rect.top,\r\n };\r\n break;\r\n }\r\n } else {\r\n console.warn(\r\n 'Cannot resolve element, will use default positioning ',\r\n attachToElement,\r\n );\r\n }\r\n\r\n return actualAnchorPoint;\r\n}\r\n\r\nlet x = 0;\r\nlet y = 0;\r\ndocument.addEventListener('mousemove', (ev) => {\r\n x = ev.clientX;\r\n y = ev.clientY;\r\n});\r\n\r\nexport function calculateTooltipPosition({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n minSize,\r\n preferredOrientationX,\r\n preferredOrientationY,\r\n preferredSize = { height: 'auto', width: 'auto' },\r\n}: Pick<\r\n TTooltip,\r\n | 'anchorPoint'\r\n | 'attachToElement'\r\n | 'attachToElementAnchorPoint'\r\n | 'attachToMousePosition'\r\n | 'minSize'\r\n | 'preferredOrientationX'\r\n | 'preferredOrientationY'\r\n | 'preferredSize'\r\n>): ThemeUICSSObject {\r\n let actualAnchorPoint = anchorPoint;\r\n\r\n if (attachToMousePosition) {\r\n actualAnchorPoint = {\r\n left: x + 3,\r\n top: y + 3,\r\n };\r\n }\r\n\r\n if (attachToElement) {\r\n actualAnchorPoint = determineAnchorPoint({\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n });\r\n }\r\n\r\n if (actualAnchorPoint) {\r\n const availableBottomSpace = window.innerHeight - actualAnchorPoint.top;\r\n const availableTopSpace = actualAnchorPoint.top;\r\n const availableLeftSpace = actualAnchorPoint.left;\r\n const availableRightSpace = window.innerWidth - actualAnchorPoint.left;\r\n\r\n const isEnoughToRight =\r\n ((preferredSize?.width !== 'auto' ? preferredSize?.width : undefined) ??\r\n minSize?.width ??\r\n 0) <= availableRightSpace;\r\n const isEnoughToLeft =\r\n ((preferredSize?.width !== 'auto' ? preferredSize?.width : undefined) ??\r\n minSize?.width ??\r\n 0) <= availableLeftSpace;\r\n const isEnoughToBottom =\r\n ((preferredSize?.height !== 'auto' ? preferredSize?.height : undefined) ??\r\n minSize?.height ??\r\n 0) <= availableBottomSpace;\r\n const isEnoughToTop =\r\n ((preferredSize?.height !== 'auto' ? preferredSize?.height : undefined) ??\r\n minSize?.height ??\r\n 0) <= availableTopSpace;\r\n\r\n const preferredWidth =\r\n preferredSize.width === 'auto' ? Infinity : preferredSize.width;\r\n const preferredHeight =\r\n preferredSize.height === 'auto' ? Infinity : preferredSize.height;\r\n\r\n const position: ThemeUICSSObject = {\r\n '& > *': {\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'auto',\r\n },\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n width: preferredSize.width === 'auto' ? 'auto' : undefined,\r\n height: preferredSize.height === 'auto' ? 'auto' : undefined,\r\n };\r\n\r\n if (preferredOrientationX === 'left') {\r\n if (isEnoughToLeft) {\r\n position.maxWidth = Math.min(preferredWidth, availableLeftSpace);\r\n position.right = window.innerWidth - actualAnchorPoint.left;\r\n } else if (isEnoughToRight) {\r\n position.maxWidth = Math.min(preferredWidth, availableRightSpace);\r\n position.left = actualAnchorPoint.left;\r\n } else {\r\n position.left = 0;\r\n position.maxWidth = '100vw';\r\n }\r\n } else {\r\n if (isEnoughToRight) {\r\n position.maxWidth = Math.min(preferredWidth, availableRightSpace);\r\n position.left = actualAnchorPoint.left;\r\n } else if (isEnoughToLeft) {\r\n position.maxWidth = Math.min(preferredWidth, availableLeftSpace);\r\n position.right = window.innerWidth - actualAnchorPoint.left;\r\n } else {\r\n position.left = 0;\r\n position.maxWidth = '100vw';\r\n }\r\n }\r\n\r\n if (preferredOrientationY === 'top') {\r\n if (isEnoughToTop) {\r\n position.maxHeight = Math.min(preferredHeight, availableTopSpace);\r\n position.bottom = window.innerHeight - actualAnchorPoint.top;\r\n } else if (isEnoughToBottom) {\r\n position.maxHeight = Math.min(preferredHeight, availableBottomSpace);\r\n position.top = actualAnchorPoint.top;\r\n } else {\r\n position.maxHeight = '100vh';\r\n position.top = 0;\r\n }\r\n } else {\r\n if (isEnoughToBottom) {\r\n position.maxHeight = Math.min(preferredHeight, availableBottomSpace);\r\n position.top = actualAnchorPoint.top;\r\n } else if (isEnoughToTop) {\r\n position.maxHeight = Math.min(preferredHeight, availableTopSpace);\r\n position.bottom = window.innerHeight - actualAnchorPoint.top;\r\n } else {\r\n position.maxHeight = '100vh';\r\n position.top = 0;\r\n }\r\n }\r\n\r\n position.minHeight =\r\n typeof position.maxHeight === 'number'\r\n ? Math.min(position.maxHeight, minSize?.height ?? 0)\r\n : (minSize?.height ?? 0);\r\n position.minWidth =\r\n typeof position.minWidth === 'number'\r\n ? Math.min(position.minWidth, minSize?.width ?? 0)\r\n : (minSize?.width ?? 0);\r\n\r\n return position;\r\n }\r\n\r\n return { left: 0, top: 0, width: 'auto', height: 'auto' };\r\n}\r\n\r\nexport function useHandlers({\r\n attachToElement,\r\n closeOnClick,\r\n closeOnClickOut,\r\n closeOnEscape,\r\n closeOnMouseLeaveTooltip,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnScrollOut,\r\n onClose,\r\n}: Pick<\r\n TTooltip,\r\n | 'attachToElement'\r\n | 'closeOnClick'\r\n | 'closeOnClickOut'\r\n | 'closeOnEscape'\r\n | 'closeOnMouseLeaveTooltip'\r\n | 'closeOnMouseLeaveAttachedElement'\r\n | 'closeOnScrollOut'\r\n | 'onClose'\r\n>) {\r\n const hasInited = useRef(false);\r\n const close = useCallback(() => {\r\n onClose?.();\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n function handleEscape(ev: KeyboardEvent) {\r\n if (ev.code === 'Escape' && closeOnEscape !== false) {\r\n close();\r\n }\r\n }\r\n function handleMouseDownOut(ev: MouseEvent) {\r\n if (!hasInited.current) return;\r\n\r\n const actuallyCloseOnClickOut =\r\n (closeOnClickOut instanceof Function\r\n ? closeOnClickOut(ev)\r\n : closeOnClickOut) === true;\r\n\r\n if (\r\n actuallyCloseOnClickOut &&\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('tooltip__wrapper'),\r\n )\r\n ) {\r\n close();\r\n }\r\n }\r\n function handleScroll(ev: Event) {\r\n if (!hasInited.current) return;\r\n if (\r\n closeOnScrollOut &&\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('tooltip__wrapper'),\r\n )\r\n ) {\r\n close();\r\n }\r\n }\r\n\r\n function handleMouseLeave(event: MouseEvent) {\r\n const actuallyCloseOnMouseLeaveTooltip =\r\n closeOnMouseLeaveTooltip instanceof Function\r\n ? closeOnMouseLeaveTooltip(event)\r\n : closeOnMouseLeaveTooltip;\r\n\r\n const actuallyCloseOnMouseLeaveAttachedElement =\r\n closeOnMouseLeaveAttachedElement instanceof Function\r\n ? closeOnMouseLeaveAttachedElement(event)\r\n : closeOnMouseLeaveAttachedElement;\r\n\r\n if (\r\n !hasInited.current ||\r\n (!actuallyCloseOnMouseLeaveAttachedElement &&\r\n !actuallyCloseOnMouseLeaveTooltip)\r\n )\r\n return;\r\n\r\n const resolvedAttachToElement = attachToElement\r\n ? isAttachToElementAFunction(attachToElement)\r\n ? attachToElement()\r\n : attachToElement.current\r\n : null;\r\n\r\n const isTooltipTheTarget = isChild(\r\n event.target as HTMLElement,\r\n (current) => current.classList.contains('tooltip__wrapper'),\r\n );\r\n const isAttachedTheTarget = isChild(\r\n event.target as HTMLElement,\r\n (current) => current === resolvedAttachToElement,\r\n );\r\n\r\n const isTooltipRelated = isChild(\r\n event.relatedTarget as HTMLElement,\r\n (current) => current.classList.contains('tooltip__wrapper'),\r\n );\r\n\r\n const isAttachedRelated = isChild(\r\n event.relatedTarget as HTMLElement,\r\n (current) => current === resolvedAttachToElement,\r\n );\r\n\r\n if (isTooltipRelated || isAttachedRelated) return;\r\n if (isAttachedTheTarget && !actuallyCloseOnMouseLeaveAttachedElement)\r\n return;\r\n if (isTooltipTheTarget && !actuallyCloseOnMouseLeaveTooltip) return;\r\n\r\n if (isTooltipTheTarget || isAttachedTheTarget) close();\r\n }\r\n\r\n document.addEventListener('keydown', handleEscape);\r\n document.addEventListener('mousedown', handleMouseDownOut);\r\n document.addEventListener('scroll', handleScroll);\r\n document.addEventListener('mouseout', handleMouseLeave);\r\n\r\n setTimeout(() => {\r\n hasInited.current = true;\r\n }, 0);\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n document.removeEventListener('mousedown', handleMouseDownOut);\r\n document.removeEventListener('scroll', handleScroll);\r\n document.removeEventListener('mouseout', handleMouseLeave);\r\n };\r\n }, [\r\n attachToElement,\r\n close,\r\n closeOnClickOut,\r\n closeOnEscape,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnMouseLeaveTooltip,\r\n closeOnScrollOut,\r\n ]);\r\n\r\n return {\r\n handleOnClick: useCallback(\r\n (ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n if (closeOnClick) {\r\n close();\r\n }\r\n },\r\n [close, closeOnClick],\r\n ),\r\n };\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { TTooltip } from './types';\r\nimport { Box, ThemeUICSSObject } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { calculateTooltipPosition, useHandlers } from './util';\r\n\r\nexport const Tooltip = ({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n children,\r\n className,\r\n closeOnClick = false,\r\n closeOnClickOut = true,\r\n closeOnEscape = true,\r\n closeOnMouseLeaveTooltip = true,\r\n closeOnMouseLeaveAttachedElement = true,\r\n closeOnScrollOut = true,\r\n minSize,\r\n onClose,\r\n preferredOrientationX = 'right',\r\n preferredOrientationY = 'bottom',\r\n preferredSize = { height: 'auto', width: 'auto' },\r\n variant = 'layout.common.tooltips.primary',\r\n closeOthers,\r\n initialFocusGetter,\r\n ...dataset\r\n}: TTooltip) => {\r\n const calculatedPosition = calculateTooltipPosition({\r\n anchorPoint,\r\n attachToElement,\r\n attachToElementAnchorPoint,\r\n attachToMousePosition,\r\n minSize,\r\n preferredOrientationX,\r\n preferredOrientationY,\r\n preferredSize,\r\n });\r\n\r\n const sx = {\r\n position: 'fixed',\r\n ...calculatedPosition,\r\n } as ThemeUICSSObject;\r\n\r\n const { handleOnClick } = useHandlers({\r\n attachToElement,\r\n closeOnEscape,\r\n closeOnClickOut,\r\n closeOnClick,\r\n closeOnMouseLeaveTooltip,\r\n closeOnMouseLeaveAttachedElement,\r\n closeOnScrollOut,\r\n onClose,\r\n });\r\n\r\n return (\r\n <Box\r\n {...dataset}\r\n className={`tooltip__wrapper ${className ?? ''}`}\r\n {...getVariant(variant)}\r\n sx={sx}\r\n onClick={handleOnClick}\r\n ref={(el) => {\r\n if (el) {\r\n initialFocusGetter?.(el)?.focus();\r\n }\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { useMemo, useState } from 'react';\r\nimport { EventEmitter, useMount, useUnmount } from '@apia/util';\r\nimport { ApiaUtilTooltip } from './ApiaUtilTooltip';\r\nimport { AutomaticTooltip } from './AutomaticTooltip';\r\nimport { TTooltip, Tooltip } from './tooltip';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\n\r\nexport class ApiaUtilTooltips {\r\n #emitter = new EventEmitter<{\r\n changedList: ApiaUtilTooltip[];\r\n }>();\r\n tooltips: ApiaUtilTooltip[] = [];\r\n\r\n constructor() {\r\n document.addEventListener('keydown', (ev) => {\r\n if (\r\n ev.code === 'Escape' &&\r\n this.tooltips.find((c) => c.props.closeOnEscape !== false)\r\n ) {\r\n ev.stopImmediatePropagation();\r\n ev.preventDefault();\r\n\r\n this.tooltips = this.tooltips.filter(\r\n (current) => current.props.closeOnEscape === false,\r\n );\r\n this.#shoutChangedList();\r\n }\r\n });\r\n }\r\n\r\n #shoutChangedList = () => {\r\n this.#emitter.emit('changedList', [...this.tooltips]);\r\n };\r\n\r\n /**\r\n * Permite crear un tooltip que se abrirá automáticamente al estar parado\r\n * sobre un elemento durante 300ms\r\n */\r\n useHover = (tooltip?: Partial<TTooltip> & { timeout?: number }) => {\r\n let tt: AutomaticTooltip | undefined = undefined;\r\n\r\n tt = useMemo(() => {\r\n tt?.ref(null);\r\n return new AutomaticTooltip(tooltip ?? null, this);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [tooltip]);\r\n\r\n useUnmount(() => {\r\n tt?.ref(null);\r\n });\r\n\r\n return tt;\r\n };\r\n\r\n close = (id: string) => {\r\n this.tooltips = this.tooltips.filter((current) => current.id !== id);\r\n this.#shoutChangedList();\r\n };\r\n\r\n closeAll = () => {\r\n this.tooltips = [];\r\n this.#shoutChangedList();\r\n };\r\n\r\n open = (tooltip: TTooltip) => {\r\n const controller = new ApiaUtilTooltip(tooltip, () => {\r\n this.close(controller.id);\r\n controller.props.onClose?.();\r\n });\r\n\r\n if (tooltip.closeOthers !== false) {\r\n this.tooltips = [controller];\r\n } else {\r\n this.tooltips = [...this.tooltips, controller];\r\n }\r\n this.#shoutChangedList();\r\n\r\n return controller;\r\n };\r\n\r\n Component = () => {\r\n const [tooltips, setTooltips] = useState<ApiaUtilTooltip[]>(this.tooltips);\r\n\r\n useMount(() => {\r\n const unsuscribeToList = this.#emitter.on('changedList', (ev) => {\r\n setTooltips(ev);\r\n });\r\n\r\n return () => {\r\n unsuscribeToList();\r\n };\r\n });\r\n\r\n return (\r\n <FreeFocusInside\r\n {...({ sx: { position: 'relative', zIndex: 'tooltip' } } as any)}\r\n >\r\n {tooltips.map((current) => (\r\n <Tooltip\r\n {...current.props}\r\n onClose={() => {\r\n current.close();\r\n }}\r\n key={current.id}\r\n />\r\n ))}\r\n </FreeFocusInside>\r\n );\r\n };\r\n}\r\n","import { Icon, TIconName } from '@apia/icons';\r\nimport { Box } from '@apia/theme';\r\nimport { EventEmitter, useMount } from '@apia/util';\r\nimport {\r\n ControlledMenu,\r\n MenuItem,\r\n MenuItemProps,\r\n ControlledMenuProps,\r\n MenuDivider,\r\n SubMenu,\r\n} from '@szhsin/react-menu';\r\nimport { ReactNode, useCallback, useState } from 'react';\r\nimport { FreeFocusInside } from 'react-focus-lock';\r\n\r\nexport type TSubmenu = { label: string; items: TMenuItems };\r\n\r\nexport type TMenuItem =\r\n | (MenuItemProps & { icon?: TIconName; key: string })\r\n | 'separator'\r\n | TSubmenu;\r\n\r\nexport type TMenuItems = TMenuItem[];\r\n\r\nfunction isSubmenu(item: TMenuItem): item is TSubmenu {\r\n return Array.isArray((item as TSubmenu).items);\r\n}\r\n\r\nexport class ApiaUtilMenu {\r\n #emitter = new EventEmitter<{ toggle: boolean }>();\r\n #items: TMenuItems = [];\r\n menuProps: ControlledMenuProps | null = null;\r\n\r\n #hooks = {\r\n useIsOpen: (): [boolean, () => void] => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useMount(() => {\r\n return this.#emitter.on('toggle', setIsOpen);\r\n });\r\n\r\n return [\r\n isOpen,\r\n useCallback(() => {\r\n setIsOpen(false);\r\n }, []),\r\n ];\r\n },\r\n };\r\n\r\n close = () => {\r\n this.#emitter.emit('toggle', false);\r\n };\r\n\r\n open = ({\r\n menuProps,\r\n items,\r\n }: {\r\n menuProps: ControlledMenuProps;\r\n items: TMenuItems;\r\n }) => {\r\n this.#items = items;\r\n this.menuProps = menuProps;\r\n\r\n this.#emitter.emit('toggle', true);\r\n };\r\n\r\n #maxId = 0;\r\n\r\n #RenderMenu = (submenu: TSubmenu) => {\r\n const hasIcon = submenu.items.find(\r\n (c) => !!(c as { icon?: TIconName }).icon,\r\n );\r\n\r\n return (\r\n <>\r\n {submenu.items.map((current, i) => {\r\n if (current === 'separator')\r\n return <MenuDivider key={`separator${i}`} />;\r\n\r\n if (isSubmenu(current)) {\r\n return (\r\n <SubMenu\r\n label={current.label}\r\n className={hasIcon ? 'with-icon' : ''}\r\n key={`submenu${this.#maxId++}`}\r\n >\r\n {this.#RenderMenu(current)}\r\n </SubMenu>\r\n );\r\n }\r\n\r\n const children = hasIcon ? (\r\n <Box className=\"menu_item\">\r\n <Box className=\"icon_box\">\r\n {current.icon && (\r\n <Icon\r\n className=\"icon\"\r\n name={current.icon}\r\n title={current.title!}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"children_box\">\r\n {current.children as ReactNode}\r\n </Box>\r\n </Box>\r\n ) : (\r\n (current.children as ReactNode)\r\n );\r\n\r\n return (\r\n <MenuItem {...current} key={current.key}>\r\n {children}\r\n </MenuItem>\r\n );\r\n })}\r\n </>\r\n );\r\n };\r\n\r\n Component = () => {\r\n const [isOpen, close] = this.#hooks.useIsOpen();\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <FreeFocusInside>\r\n <ControlledMenu\r\n {...this.menuProps}\r\n state={isOpen ? 'open' : 'closed'}\r\n onClose={(ev) => {\r\n close();\r\n this.menuProps?.onClose?.(ev);\r\n }}\r\n >\r\n {this.#RenderMenu({ label: '', items: this.#items })}\r\n </ControlledMenu>\r\n </FreeFocusInside>\r\n );\r\n };\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport class ApiaUtilMouse extends EventEmitter<{\r\n updatePosition: { x: number; y: number };\r\n}> {\r\n x = 0;\r\n y = 0;\r\n\r\n get position() {\r\n return { x: this.x, y: this.y };\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n document.addEventListener('mousemove', (ev) => {\r\n this.x = ev.clientX;\r\n this.y = ev.clientY;\r\n\r\n this.emit('updatePosition', { x: this.x, y: this.y });\r\n });\r\n }\r\n}\r\n","import { ApiaUtilModals } from './modals/ApiaUtilModals';\r\nimport { ApiaUtilNotifications } from './notifications/ApiaUtilNotifications';\r\nimport { ApiaUtilTabsController } from './tabs/ApiaUtilTabsController';\r\nimport { ApiaUtilDialogs } from './dialogs/ApiaUtilDialogs';\r\nimport { ApiaUtilParsers } from './parsers/ApiaUtilParsers';\r\nimport { ApiaUtilTooltips } from './tooltips/ApiaUtilTooltips';\r\nimport { ApiaUtilMenu } from './menu/ApiaUtilMenu';\r\nimport { ApiaUtilMouse } from './mouse/ApiaUtilMouse';\r\n\r\nexport class ApiaUtil {\r\n static #instance: ApiaUtil;\r\n public static get instance() {\r\n if (!this.#instance) {\r\n this.#instance = new ApiaUtil();\r\n }\r\n\r\n return this.#instance;\r\n }\r\n\r\n private constructor() {\r\n this.dialogs = new ApiaUtilDialogs();\r\n this.menu = new ApiaUtilMenu();\r\n this.modals = new ApiaUtilModals();\r\n this.mouse = new ApiaUtilMouse();\r\n this.notifications = new ApiaUtilNotifications(this);\r\n this.parsers = new ApiaUtilParsers();\r\n this.tabs = new ApiaUtilTabsController();\r\n this.tooltips = new ApiaUtilTooltips();\r\n }\r\n\r\n dialogs: ApiaUtilDialogs;\r\n menu: ApiaUtilMenu;\r\n modals: ApiaUtilModals;\r\n mouse: ApiaUtilMouse;\r\n notifications: ApiaUtilNotifications;\r\n parsers: ApiaUtilParsers;\r\n tabs: ApiaUtilTabsController;\r\n tooltips: ApiaUtilTooltips;\r\n\r\n Component = () => {\r\n return (\r\n <>\r\n <this.dialogs.Component />\r\n <this.modals.Component />\r\n <this.notifications.Component />\r\n <this.tooltips.Component />\r\n <this.menu.Component />\r\n </>\r\n );\r\n };\r\n}\r\n","import { CSSProperties } from '@apia/theme';\r\nimport { StatefulEmitter } from '@apia/util';\r\n\r\ntype LockTypes = 'linear' | 'white' | 'common';\r\ntype Lock = {\r\n count: number;\r\n};\r\ntype LockOptions = Partial<{\r\n type: LockTypes;\r\n}>;\r\n\r\nexport class ScreenLocker {\r\n protected emitter = new StatefulEmitter<{\r\n locks: Record<LockTypes, Lock>;\r\n release: true;\r\n }>({\r\n locks: {\r\n common: { count: 0 },\r\n linear: { count: 0 },\r\n white: { count: 1 },\r\n },\r\n });\r\n\r\n lock = (options?: LockOptions) => {\r\n this.emitter.setState('locks', (s) => {\r\n const key = options?.type ?? 'common';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) + 1 },\r\n };\r\n });\r\n\r\n return () =>\r\n this.emitter.setState('locks', (s) => {\r\n const key = options?.type ?? 'common';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) - 1 },\r\n };\r\n });\r\n };\r\n\r\n protected hasReleased = false;\r\n /**\r\n * This method will work once, then, the action will be ignored. The ScreenLocker starts always locked on white, when this method is called, all listeners of onRelease will be called and the lock will be released.\r\n */\r\n release = () => {\r\n if (this.hasReleased) return;\r\n this.hasReleased = true;\r\n\r\n this.emitter.setState('locks', (s) => {\r\n const key = 'white';\r\n\r\n return {\r\n ...s,\r\n [key]: { count: (s[key].count ?? 0) - 1 },\r\n };\r\n });\r\n this.emitter.emit('release', true);\r\n };\r\n\r\n /**\r\n * This method notifies when the screenLock is released by the first time.\r\n */\r\n onRelease = this.emitter.on.bind(this.emitter, 'release');\r\n\r\n /**\r\n * This component is the responsible for putting the lock courtain in the browser when it's required. It must be used once per application.\r\n */\r\n Component = () => {\r\n const locks = this.emitter.useState('locks');\r\n\r\n const style: CSSProperties = {\r\n alignItems: 'center',\r\n display: 'flex',\r\n inset: 0,\r\n justifyContent: 'center',\r\n position: 'fixed',\r\n };\r\n\r\n if (locks.white.count) {\r\n return (\r\n <div\r\n style={{\r\n ...style,\r\n background: 'white',\r\n }}\r\n >\r\n White\r\n </div>\r\n );\r\n }\r\n\r\n if (locks.linear.count) {\r\n return <div style={style}>Linear</div>;\r\n }\r\n\r\n if (locks.common.count) {\r\n return <div style={style}>Common</div>;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { AutocompleteController } from './store/AutocompleteController';\r\n\r\nexport const AutocompleteContext = createContext<AutocompleteController | null>(\r\n null,\r\n);\r\n\r\nexport function useAutocompleteContext() {\r\n const context = useContext(AutocompleteContext);\r\n\r\n if (!context) throw new Error('There is no AutocompleteContext');\r\n\r\n return context;\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { Box } from '@apia/theme';\r\nimport { Fragment } from '@apia/theme/jsx-runtime';\r\n\r\nexport const OptionsBox = observer(() => {\r\n const handler = useAutocompleteContext();\r\n\r\n return (\r\n <Fragment>\r\n {handler.state.options.map((c, i) => {\r\n if (c.filtered) {\r\n return <Fragment key={c.value} />;\r\n } else {\r\n return (\r\n <Box\r\n className={`autocomplete__option ${handler.focusedIndex === i ? 'focused' : ''} ${handler.state.readOnly ? 'readOnly' : ''}`}\r\n key={c.value}\r\n onMouseDown={(ev) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n\r\n handler.setValue(c.value);\r\n handler.close();\r\n\r\n window.requestAnimationFrame(() => {\r\n handler\r\n .getAutocompleteBox()\r\n ?.querySelector<HTMLElement>('input')\r\n ?.focus();\r\n });\r\n }}\r\n data-value={c.value}\r\n >\r\n {c.label} \r\n </Box>\r\n );\r\n }\r\n })}\r\n </Fragment>\r\n );\r\n});\r\n","import { uniqueId } from 'lodash-es';\r\nimport { makeAutoObservable, reaction } from 'mobx';\r\nimport { ReactNode } from 'react';\r\nimport { ApiaUtil, ApiaUtilTooltip } from '../../../../objects';\r\nimport { AutocompleteContext } from '../Context';\r\nimport { OptionsBox } from '../OptionsBox';\r\nimport { TIconName } from '@apia/icons';\r\n\r\nexport type AutocompleteProps = {\r\n /**\r\n * Si este flag es true, la búsqueda se realiza con .toLowerCase() en el valor y en la cadena de búsqueda.\r\n */\r\n caseInsensitive?: boolean;\r\n icon?: TIconName;\r\n onChange?: (\r\n value: string,\r\n controller: AutocompleteController,\r\n ) => void | Promise<boolean>;\r\n /**\r\n * Si se pasa una función de búsqueda, cuando el usuario busque se llamará a esta función para determinar qué opciones deberán mostrarse.\r\n *\r\n * La función de búsqueda será llamada mediante un debounce con tiempo = state.searchDebounce (ms).\r\n *\r\n * Si no se pasa función de búsqueda, la comparación se realizará contra this.state.options, siguiendo el algoritmo descrito en AutocompleteOption.\r\n */\r\n onSearch?: (\r\n str: string,\r\n controller: AutocompleteController,\r\n ) => Promise<AutocompleteOption[]>;\r\n options: AutocompleteOption[];\r\n /**\r\n * Por defecto es 100ms.\r\n */\r\n searchDebounce?: number;\r\n readOnly?: boolean;\r\n} & AutocompleteBoxProps &\r\n Partial<Pick<AutocompleteState, 'disabled' | 'value'>>;\r\n\r\ntype AutocompleteBoxProps = Partial<{\r\n className: string;\r\n id: string;\r\n name: string;\r\n}>;\r\n\r\ntype AutocompleteState = {\r\n disabled: boolean;\r\n readOnly: boolean;\r\n focusedValue?: null | string;\r\n loading: boolean;\r\n showValue: string;\r\n value: string;\r\n width: number;\r\n};\r\n\r\n/**\r\n * El componente buscará dentro de las opciones disponibles cuando el usuario realice una búsqueda en el cuadro de texto. Para ello, compara cada opción contra str según:\r\n *\r\n * Si caseInsensitive===true, la comparación se hará en lowerCase.\r\n *\r\n * Si se pasa searchLabel, se compara contra searchLabel.\r\n * Sino, si label?.toString() está definido, se utiliza label?.toSring().\r\n * Sino, se utiliza value.\r\n *\r\n * Un se mostrará en los resultados si el algoritmo determina que (result_search_label).indexOf(str) !== -1.\r\n */\r\nexport type AutocompleteOption = {\r\n /**\r\n * @private\r\n *\r\n * Se utiliza para determinar si debe mostrarse o no.\r\n */\r\n filtered?: boolean;\r\n label: ReactNode;\r\n /**\r\n * Si se pasa searchLabel, será utilizado en vez de label. Si no se pasa, se hará label.toString() para realizar la búsqueda, que solamente tiene sentido cuando label es un primitivo.\r\n */\r\n searchLabel?: string;\r\n /**\r\n * @default Por defecto toma el valor ''\r\n */\r\n value: string;\r\n};\r\n\r\nexport class AutocompleteController {\r\n state: AutocompleteState & AutocompleteProps = {\r\n disabled: false,\r\n readOnly: false,\r\n id: uniqueId('autocomplete'),\r\n loading: false,\r\n options: [],\r\n searchDebounce: 100,\r\n showValue: '',\r\n value: '',\r\n width: 55,\r\n };\r\n\r\n constructor(properties: Partial<AutocompleteProps>) {\r\n Object.assign(this.state, properties);\r\n if (properties.value) {\r\n this.state.showValue = String(\r\n properties.options?.find((c) => c.value === properties.value)?.label,\r\n );\r\n this.state.focusedValue = properties.value;\r\n }\r\n\r\n makeAutoObservable(this, {\r\n getAutocompleteBox: false,\r\n getOptionByValue: false,\r\n });\r\n\r\n reaction(\r\n () => this.state.focusedValue,\r\n () => {\r\n if (this.state.focusedValue) {\r\n this.getOptionElement(this.state.focusedValue)?.scrollIntoView({\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n }\r\n },\r\n );\r\n }\r\n\r\n get focusedIndex() {\r\n const currentIndex = this.state.options.findIndex(\r\n (c) => c.value === this.state.focusedValue,\r\n );\r\n\r\n if (currentIndex === -1) {\r\n return 0;\r\n }\r\n\r\n return currentIndex;\r\n }\r\n\r\n get isOpen() {\r\n return !!this.getOptionsBox();\r\n }\r\n\r\n close(selectValue = true) {\r\n this.tooltipRef?.close();\r\n this.tooltipRef = null;\r\n if (!this.state.showValue) this.#actualSearch('');\r\n\r\n if (selectValue) {\r\n let currentValue = this.state.options.find(\r\n (c) => c.value === this.state.focusedValue,\r\n );\r\n if (!currentValue) {\r\n currentValue = this.state.options.find((c) => !c.filtered);\r\n }\r\n\r\n this.setValue(currentValue?.value || '');\r\n }\r\n }\r\n\r\n getAutocompleteBox() {\r\n return document.querySelector<HTMLElement>(\r\n `[data-autocomplete-box=\"${this.state.id!}\"]`,\r\n );\r\n }\r\n\r\n getOptionsBox() {\r\n return document.querySelector<HTMLElement>(\r\n `[data-autocomplete-options=\"${this.state.id!}\"]`,\r\n );\r\n }\r\n\r\n getOptionElement(value: string) {\r\n return this.getOptionsBox()?.querySelector<HTMLElement>(\r\n `.autocomplete__option[data-value=\"${value}\"]`,\r\n );\r\n }\r\n\r\n getOptionByValue(value: string) {\r\n return this.state.options.find((current) => current.value === value);\r\n }\r\n\r\n focusFirst() {\r\n const option = this.state.options.find((c) => !c.filtered);\r\n\r\n if (option) {\r\n if (this.isOpen) {\r\n this.state.focusedValue = option.value;\r\n this.state.showValue = option.label?.toString?.() || '';\r\n } else {\r\n this.setValue(option.value);\r\n }\r\n }\r\n }\r\n\r\n focusLast() {\r\n const option = this.state.options.findLast((c) => !c.filtered);\r\n\r\n if (option) {\r\n if (this.isOpen) {\r\n this.state.focusedValue = option.value;\r\n this.state.showValue = option.label?.toString?.() || '';\r\n } else {\r\n this.setValue(option.value);\r\n }\r\n }\r\n }\r\n\r\n focusNext(n = 1) {\r\n const option = this.state.options[this.focusedIndex];\r\n if (option) {\r\n let newFocusedOption: AutocompleteOption = option;\r\n\r\n for (let i = this.focusedIndex + 1; i < this.state.options.length; i++) {\r\n if (\r\n !this.state.options[i].filtered &&\r\n (--n === 0 || i === this.state.options.length - 1)\r\n ) {\r\n newFocusedOption = this.state.options[i];\r\n break;\r\n }\r\n }\r\n\r\n if (this.isOpen) {\r\n this.state.focusedValue = newFocusedOption.value;\r\n this.state.showValue = newFocusedOption.label?.toString?.() || '';\r\n } else {\r\n this.setValue(newFocusedOption.value);\r\n }\r\n }\r\n }\r\n\r\n focusPrevious(n = 1) {\r\n const option = this.state.options[this.focusedIndex];\r\n if (option) {\r\n let newFocusedOption: AutocompleteOption = option;\r\n\r\n for (let i = this.focusedIndex - 1; i >= 0; i--) {\r\n if (!this.state.options[i].filtered && (--n === 0 || i === 0)) {\r\n newFocusedOption = this.state.options[i];\r\n break;\r\n }\r\n }\r\n\r\n if (this.isOpen) {\r\n this.state.focusedValue = newFocusedOption.value;\r\n this.state.showValue = newFocusedOption.label?.toString?.() || '';\r\n } else {\r\n this.setValue(newFocusedOption.value);\r\n }\r\n }\r\n }\r\n\r\n open() {\r\n if (this.state.disabled) {\r\n return;\r\n }\r\n\r\n this.tooltipRef = ApiaUtil.instance.tooltips.open({\r\n attachToElement: () => {\r\n return this.getAutocompleteBox()!;\r\n },\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnClick: true,\r\n children: (\r\n <AutocompleteContext.Provider value={this}>\r\n <OptionsBox />\r\n </AutocompleteContext.Provider>\r\n ),\r\n onClose: () => {\r\n this.tooltipRef = null;\r\n this.close();\r\n },\r\n minSize: {\r\n height: Math.min(4, this.state.options.length) * 28,\r\n width: this.state.width,\r\n },\r\n preferredOrientationY: 'bottom',\r\n preferredOrientationX: 'right',\r\n attachToElementAnchorPoint: 'bottomLeft',\r\n variant: 'layout.common.components.autocomplete.optionsContainer',\r\n className: 'autocomplete__options__box',\r\n 'data-autocomplete-options': this.state.id!,\r\n });\r\n }\r\n\r\n toggleOpen() {\r\n if (this.isOpen) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n #actualSearch = async (str: string) => {\r\n if (this.state.onSearch) {\r\n if (str === '') this.state.value = '';\r\n const newOptions = await this.state.onSearch(str, this);\r\n this.state.options = newOptions;\r\n } else {\r\n this.state.options.forEach((c) => {\r\n if (this.state.caseInsensitive) {\r\n c.filtered =\r\n (c.searchLabel ?? c.label?.toString?.() ?? c.value)\r\n .toLowerCase()\r\n .indexOf(str.toLowerCase()) === -1;\r\n } else {\r\n c.filtered =\r\n (c.searchLabel ?? c.label?.toString?.() ?? c.value)?.indexOf(\r\n str,\r\n ) === -1;\r\n }\r\n\r\n if (this.getOptionByValue(this.state.focusedValue!)?.filtered) {\r\n this.state.focusedValue =\r\n this.state.options.find((c) => !c.filtered)?.value || null;\r\n }\r\n });\r\n }\r\n };\r\n\r\n #timeout: any = 0;\r\n search(str: string) {\r\n if (this.state.disabled) {\r\n return;\r\n }\r\n\r\n this.state.showValue = str;\r\n\r\n clearTimeout(this.#timeout);\r\n this.#timeout = setTimeout(() => {\r\n this.#actualSearch(str);\r\n }, 100);\r\n }\r\n\r\n selectFocused() {\r\n this.close();\r\n const newValue = this.state.focusedValue || this.state.options[0]?.value;\r\n\r\n if (newValue) {\r\n this.setValue(newValue);\r\n }\r\n }\r\n\r\n async setValue(\r\n value: string,\r\n props?: { fireOnChange?: boolean; force?: true },\r\n ) {\r\n if (\r\n (this.state.disabled ||\r\n this.state.readOnly ||\r\n (value === this.state.value && props?.fireOnChange !== false)) &&\r\n !props?.force\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedOption = this.state.options.find((c) => c.value === value);\r\n const newValue = selectedOption?.value || '';\r\n\r\n if (props?.fireOnChange !== false) {\r\n const onChangeResult = this.state.onChange?.(newValue, this);\r\n if (onChangeResult instanceof Promise) {\r\n if (!(await onChangeResult)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.state.value = newValue;\r\n this.state.focusedValue = this.state.value;\r\n this.state.showValue = selectedOption?.label?.toString?.() || '';\r\n }\r\n\r\n tooltipRef: ApiaUtilTooltip | null = null;\r\n}\r\n","import {\r\n Box,\r\n Input,\r\n InputProps,\r\n Select,\r\n Spinner,\r\n useBreakpointIndex,\r\n} from '@apia/theme';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Icon } from '@apia/icons';\r\nimport { useRef } from 'react';\r\n\r\nexport const SearchBox = observer((props: InputProps) => {\r\n const handler = useAutocompleteContext();\r\n const breakpoint = useBreakpointIndex();\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n return (\r\n <Box className=\"autocomplete__inputWrapper\">\r\n <input\r\n type=\"hidden\"\r\n name={handler.state.name}\r\n value={handler.state.value}\r\n />\r\n {breakpoint <= 3 ? (\r\n <Select\r\n disabled={handler.state.disabled}\r\n onChange={(ev) => {\r\n handler.setValue(ev.target.value);\r\n }}\r\n >\r\n {handler.state.options.map((c) => (\r\n <option key={c.value} value={c.value}>\r\n {c.label}\r\n </option>\r\n ))}\r\n </Select>\r\n ) : (\r\n <>\r\n <Input\r\n {...props}\r\n ref={inputRef}\r\n className={`autocomplete__search ${handler.state.disabled ? 'disabled' : ''} ${handler.state.readOnly ? 'readOnly' : ''}`}\r\n onChange={async (ev) => {\r\n handler.search(ev.target.value);\r\n }}\r\n onClick={() => {\r\n handler.state.width =\r\n inputRef.current?.getBoundingClientRect().width ??\r\n handler.state.width;\r\n\r\n handler.toggleOpen();\r\n }}\r\n onFocus={(ev) => {\r\n ev.target.setSelectionRange(0, ev.target.value.length);\r\n }}\r\n onBlur={() => {\r\n handler.close();\r\n }}\r\n value={handler.state.showValue}\r\n />\r\n <Box className=\"autocomplete__icons\">\r\n {handler.state.loading && (\r\n <Spinner className=\"autocomplete__loadingSpinner\" />\r\n )}\r\n <Icon\r\n title=\"\"\r\n name={handler.state?.icon || 'ArrowDown'}\r\n className=\"autocomplete__downArrow\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n );\r\n});\r\n","import { Box, BoxProps } from '@apia/theme';\r\nimport { useAutocompleteContext } from './Context';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const KeyHandler = observer((props: BoxProps) => {\r\n const handler = useAutocompleteContext();\r\n\r\n return (\r\n <Box\r\n {...props}\r\n className={`autocomplete__keyhandler ${props.className ?? ''}`}\r\n onKeyDown={(ev) => {\r\n props.onKeyDown?.(ev);\r\n\r\n if (!ev.isDefaultPrevented()) {\r\n if (ev.key.match(/^[a-z ]$/i)) {\r\n if (!handler.isOpen) {\r\n handler.open();\r\n }\r\n }\r\n\r\n switch (ev.code) {\r\n case 'ArrowDown':\r\n ev.preventDefault();\r\n handler.focusNext();\r\n break;\r\n case 'ArrowUp':\r\n ev.preventDefault();\r\n handler.focusPrevious();\r\n break;\r\n case 'Enter':\r\n case 'NumpadEnter':\r\n ev.preventDefault();\r\n\r\n if (handler.isOpen) {\r\n handler.selectFocused();\r\n } else {\r\n handler.open();\r\n }\r\n break;\r\n case 'End':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusLast();\r\n }\r\n break;\r\n case 'Escape':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n handler.close(false);\r\n }\r\n break;\r\n case 'Home':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusFirst();\r\n }\r\n break;\r\n case 'PageDown':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusNext(10);\r\n }\r\n break;\r\n case 'PageUp':\r\n if (handler.isOpen) {\r\n ev.preventDefault();\r\n handler.focusPrevious(10);\r\n }\r\n break;\r\n }\r\n }\r\n }}\r\n ></Box>\r\n );\r\n});\r\n","import { useState } from 'react';\r\nimport {\r\n AutocompleteController,\r\n AutocompleteProps,\r\n} from './store/AutocompleteController';\r\nimport { shallowEqual, usePrevious } from '@apia/util';\r\nimport { AutocompleteContext } from './Context';\r\nimport { getVariant, InputProps } from '@apia/theme';\r\nimport { SearchBox } from './SearchBox';\r\nimport { KeyHandler } from './Keyhandler';\r\n\r\nexport type AutocompleteCmpProps = {\r\n handler?: AutocompleteController;\r\n getHandler?: (handler: AutocompleteController) => unknown;\r\n properties?: AutocompleteProps;\r\n inputProps?: InputProps;\r\n boxProps?: React.HTMLAttributes<HTMLDivElement>;\r\n};\r\n\r\nexport const Autocomplete = (props: AutocompleteCmpProps) => {\r\n const [handler] = useState<AutocompleteController>(() => {\r\n const newHandler =\r\n props.handler ?? new AutocompleteController(props.properties ?? {});\r\n props.getHandler?.(newHandler);\r\n return newHandler;\r\n });\r\n\r\n const prevProps = usePrevious(props.properties);\r\n if (!shallowEqual(prevProps.current, props.properties) && handler?.state) {\r\n Object.assign(handler!.state, props.properties);\r\n if (\r\n prevProps.current?.value !== props.properties?.value &&\r\n props.properties?.value !== undefined\r\n ) {\r\n handler.setValue(props.properties.value, { fireOnChange: false });\r\n }\r\n }\r\n\r\n if (!handler) {\r\n return null;\r\n }\r\n\r\n return (\r\n <AutocompleteContext.Provider value={handler}>\r\n <KeyHandler\r\n {...props.boxProps}\r\n className={`autocomplete ${props.properties?.className || ''}`}\r\n data-autocomplete-box={handler.state.id}\r\n {...getVariant('layout.common.components.autocomplete')}\r\n >\r\n <SearchBox {...props.inputProps} />\r\n </KeyHandler>\r\n </AutocompleteContext.Provider>\r\n );\r\n};\r\n\r\nexport * from './store/AutocompleteController';\r\n","import { DetailedHTMLProps, TextareaHTMLAttributes } from 'react';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const AutogrowTextarea = observer(\r\n (\r\n props: DetailedHTMLProps<\r\n TextareaHTMLAttributes<HTMLTextAreaElement>,\r\n HTMLTextAreaElement\r\n > & { error?: boolean },\r\n ) => {\r\n const updateHeight = (el: HTMLTextAreaElement) => {\r\n const update = () => {\r\n const bounding = el.getBoundingClientRect();\r\n if (bounding.width > 0) {\r\n clearInterval(interval);\r\n\r\n const copy = el.cloneNode(true) as HTMLTextAreaElement;\r\n copy.style.opacity = '0';\r\n copy.style.position = 'fixed';\r\n copy.style.left = '-9999px';\r\n copy.style.width = `${bounding.width}px`;\r\n copy.style.height = '1px';\r\n\r\n document.body.append(copy);\r\n\r\n el.style.height = `${copy.scrollHeight + 5}px`;\r\n copy.remove();\r\n }\r\n };\r\n\r\n const interval = setInterval(update, 100);\r\n update();\r\n };\r\n\r\n return (\r\n <textarea\r\n {...props}\r\n className={`${props.className ?? ''} autogrow_textarea ${props.error ? 'invalid_field' : ''}`}\r\n onKeyDown={(ev) => {\r\n props?.onKeyDown?.(ev);\r\n if (!ev.isDefaultPrevented() && ev.code === 'Enter' && ev.ctrlKey) {\r\n (ev.target as HTMLElement)\r\n .closest<HTMLFormElement>('form')\r\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\r\n ?.click();\r\n }\r\n }}\r\n ref={(el) => {\r\n if (el instanceof HTMLTextAreaElement) {\r\n updateHeight(el);\r\n }\r\n }}\r\n onChange={(ev) => {\r\n props?.onChange?.(ev);\r\n updateHeight(ev.target as HTMLTextAreaElement);\r\n }}\r\n />\r\n );\r\n },\r\n);\r\n","import { Button, Spinner, Flex, ThemeUIStyleObject } from '@apia/theme';\r\nimport { TApiaButtonType } from '../../types';\r\nimport { getVariant, spacing } from '@apia/theme';\r\n\r\ninterface IBaseButton {\r\n text?: string;\r\n children?: string;\r\n loadingChildren?: string;\r\n id?: string;\r\n name?: string;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n variant?: TApiaButtonType | string;\r\n type?: 'button' | 'submit' | 'reset';\r\n SXProps?: ThemeUIStyleObject;\r\n}\r\n\r\n/**\r\n * The world's most **basic** button\r\n */\r\nexport const BaseButton = ({\r\n id,\r\n name,\r\n onClick = () => {},\r\n isLoading = false,\r\n loadingChildren,\r\n disabled = false,\r\n children = '',\r\n text = '',\r\n variant = 'primary',\r\n type = 'button',\r\n SXProps,\r\n ...buttonProps\r\n}: IBaseButton) => {\r\n return (\r\n <Button\r\n id={id}\r\n name={name}\r\n onClick={onClick}\r\n {...getVariant(variant)}\r\n type={type}\r\n title={children}\r\n disabled={isLoading || disabled}\r\n {...buttonProps}\r\n >\r\n <Flex\r\n as=\"span\"\r\n sx={{\r\n color: 'inherit',\r\n width: '100%',\r\n flexDirection: 'row',\r\n alignContent: 'center',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n gap: spacing(3),\r\n ...SXProps,\r\n }}\r\n >\r\n {isLoading && (\r\n <>\r\n <Spinner size={20} color=\"inherit\" />\r\n {loadingChildren}\r\n </>\r\n )}\r\n {!isLoading && (children || text)}\r\n </Flex>\r\n </Button>\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport {\r\n IconButton as IconButtonThemeUI,\r\n Spinner,\r\n IconButtonProps,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport { icons, TIconName, TIconType } from '@apia/icons';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nexport type TIconSize = number | 'Xs' | 'Sm' | 'Md' | 'Lg' | 'Xl';\r\n\r\nexport type TApiaIconButton =\r\n | 'icon'\r\n | 'icon-primary'\r\n | 'icon-outline'\r\n | 'icon-only';\r\n\r\nexport type TIconButton = Omit<IconButtonProps, 'sx'> &\r\n React.AriaAttributes & {\r\n className?: string;\r\n /**\r\n * Es posible pasar explícitamente un ícono o el nombre del ícono de\r\n * acuerdo a la librería de la aplicación. Ver Icon.tsx\r\n */\r\n icon: TIconType | TIconName;\r\n iconSize?: TIconSize;\r\n id?: string;\r\n disabled?: boolean;\r\n href?: string;\r\n isLoading?: boolean;\r\n isToggled?: boolean;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n onMouseOut?: React.MouseEventHandler<HTMLButtonElement>;\r\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\r\n size?: TIconSize;\r\n title?: string;\r\n variant?: string;\r\n 'data-test-id'?: string;\r\n };\r\n\r\n/**\r\n * Renderiza un botón con un ícono adentro.\r\n *\r\n * La variante por defecto de este componente es buttons.icon\r\n *\r\n * Si se pasa solamente size, el iconSize será\r\n */\r\nexport const IconButton = React.forwardRef(\r\n (\r\n {\r\n className,\r\n disabled = false,\r\n icon,\r\n iconSize: outerIconSize,\r\n id,\r\n isLoading = false,\r\n isToggled = false,\r\n href,\r\n onClick = () => {},\r\n onMouseOver = () => {},\r\n onMouseOut = () => {},\r\n size = 'Sm',\r\n title,\r\n type = 'button',\r\n variant = 'icon',\r\n ...rest\r\n }: TIconButton,\r\n ref: React.Ref<HTMLButtonElement>,\r\n ) => {\r\n const sizes = ['Xs', 'Sm', 'Md', 'Lg', 'Xl'];\r\n const iconSize =\r\n outerIconSize ?? sizes[Math.max(0, sizes.indexOf(size as string) - 1)];\r\n\r\n const sx: ThemeUIStyleObject = React.useMemo(() => {\r\n return {\r\n width: `icon${size}`,\r\n minWidth: `icon${size}`,\r\n height: `icon${size}`,\r\n minHeight: `icon${size}`,\r\n svg: {\r\n width: `icon${iconSize}`,\r\n minWidth: `icon${iconSize}`,\r\n height: `icon${iconSize}`,\r\n minHeight: `icon${iconSize}`,\r\n },\r\n };\r\n }, [iconSize, size]);\r\n\r\n const ActualIcon = React.useMemo(() => {\r\n return typeof icon === 'string' ? icons[icon] : icon;\r\n }, [icon]);\r\n\r\n return (\r\n <IconButtonThemeUI\r\n id={id}\r\n ref={ref}\r\n onClick={React.useCallback(\r\n (ev: React.MouseEvent<HTMLButtonElement>) => {\r\n if (href) window.open(href, '_blank');\r\n onClick?.(ev);\r\n },\r\n [href, onClick],\r\n )}\r\n onMouseOver={onMouseOver}\r\n onMouseOut={onMouseOut}\r\n {...getVariant(variant)}\r\n sx={sx}\r\n disabled={isLoading || disabled}\r\n className={`${className ?? ''} iconButton ${\r\n isToggled ? 'isToggled' : ''\r\n }`}\r\n title={title}\r\n aria-label={\r\n rest['aria-label'] ?? (rest.as !== undefined ? undefined : title)\r\n }\r\n type={rest.as !== undefined ? undefined : type}\r\n role={href ? 'link' : undefined}\r\n {...rest}\r\n >\r\n {isLoading ? <Spinner color=\"inherit\" /> : <ActualIcon />}\r\n </IconButtonThemeUI>\r\n );\r\n },\r\n);\r\n\r\nIconButton.displayName = 'IconButton';\r\n","import { getSpecificParent } from '@apia/util';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\n\r\n/**\r\n * Este hook está pensado para crear un botón utilizando un tag cualquiera.\r\n *\r\n * @example\r\n *\r\n * const buttonProps = useOtherTagButton(React.useMemo(()=>({\r\n * onClick(ev) { console.log(ev.target) },\r\n * onKeyDown(ev) { console.log(ev.code) }\r\n * }),[])\r\n *\r\n * return <div {...buttonProps}>Esto es un botón</div>\r\n */\r\nexport function useOtherTagButton(\r\n props?: Partial<{\r\n className?: string;\r\n onClick: React.MouseEventHandler;\r\n onKeyDown: React.KeyboardEventHandler;\r\n }>,\r\n) {\r\n const specificClass = React.useMemo(() => `otherTag${uniqueId()}`, []);\r\n\r\n const actualOnClick = React.useCallback(\r\n (ev: React.MouseEvent) => {\r\n props?.onClick?.(ev);\r\n },\r\n [props],\r\n );\r\n const actualOnKeyDown = React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n props?.onKeyDown?.(ev);\r\n if (ev.code === 'Enter' || ev.code === 'Space') {\r\n ev.preventDefault();\r\n const button = getSpecificParent(ev.target as HTMLElement, (current) =>\r\n current.classList.contains(specificClass),\r\n );\r\n if (button) button.click();\r\n }\r\n },\r\n [props, specificClass],\r\n );\r\n\r\n return {\r\n className: `${specificClass} ${props?.className ?? ''}`,\r\n onClick: actualOnClick,\r\n onKeyDown: actualOnKeyDown,\r\n role: 'button',\r\n tabIndex: 0,\r\n };\r\n}\r\n","import { Flex, Image, Input } from '@apia/theme';\r\nimport { useState } from 'react';\r\nimport { IconButton } from './buttons';\r\nimport { getVariant } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const Captcha = ({\r\n name,\r\n imageUrl,\r\n onChange,\r\n value,\r\n className,\r\n}: {\r\n name: string;\r\n className?: string;\r\n imageUrl: string;\r\n onChange: React.ChangeEventHandler<HTMLInputElement>;\r\n value: string;\r\n}) => {\r\n const [imgSrc, setImgSrc] = useState<string>(`${imageUrl}?t=${Date.now()}`);\r\n\r\n const handleSyncClick = () => {\r\n // IMG reload\r\n setImgSrc(`${imageUrl}?t=${Date.now()}`);\r\n };\r\n\r\n return (\r\n <Flex\r\n sx={{\r\n flexDirection: 'column',\r\n }}\r\n className=\"captcha__field\"\r\n {...getVariant('layout.common.forms.captcha')}\r\n >\r\n <Flex className=\"captcha__imageContainer\">\r\n <Image alt=\"\" src={imgSrc} />\r\n </Flex>\r\n <Flex className={`captcha__inputContainer ${className ?? ''}`}>\r\n <Input\r\n autoComplete=\"off\"\r\n name={name}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n\r\n <Flex className=\"captcha__buttons\">\r\n <IconButton\r\n icon=\"Refresh\"\r\n type=\"button\"\r\n aria-label={getLabel('lblCaptchaActivateAudio').text}\r\n onClick={handleSyncClick}\r\n ></IconButton>\r\n <IconButton\r\n icon=\"Volume\"\r\n type=\"button\"\r\n aria-label={getLabel('lblCaptchaActivateAudio').text}\r\n onClick={() => {}}\r\n ></IconButton>\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n );\r\n};\r\n","import {\r\n Button,\r\n ButtonProps,\r\n Input,\r\n InputProps,\r\n ThemeUIStyleObject,\r\n} from '@apia/theme';\r\nimport { TModify, getSpecificParent, useUpdateEffect } from '@apia/util';\r\nimport {\r\n ChangeEventHandler,\r\n forwardRef,\r\n MouseEventHandler,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Icon, TIconName } from '@apia/icons';\r\n\r\nexport type TCheckbox = TModify<\r\n ButtonProps,\r\n {\r\n background?: string;\r\n checked?: boolean;\r\n color?: string;\r\n defaultChecked?: boolean;\r\n icon?: TIconName;\r\n indeterminate?: boolean;\r\n native?: boolean;\r\n onChange?: ChangeEventHandler<HTMLInputElement>;\r\n readOnly?: boolean;\r\n required?: boolean;\r\n type?: string;\r\n }\r\n>;\r\n\r\nexport const Checkbox = forwardRef<HTMLButtonElement, TCheckbox>(\r\n (\r\n {\r\n disabled,\r\n icon = 'Check',\r\n indeterminate,\r\n name,\r\n native,\r\n onChange,\r\n readOnly,\r\n required,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [isChecked, setIsChecked] = useState(\r\n props.defaultChecked ?? props.checked ?? false,\r\n );\r\n\r\n const checkbox = useRef<HTMLInputElement>(null);\r\n\r\n useUpdateEffect(\r\n () => setIsChecked(props.checked ?? false),\r\n [props.checked],\r\n );\r\n\r\n const sx = useMemo(\r\n () => ({\r\n bg: props.background ?? undefined,\r\n color: props.color ?? undefined,\r\n '&[aria-checked=\"false\"]': {\r\n bg: props.background ?? undefined,\r\n color: 'transparent',\r\n },\r\n }),\r\n [props.background, props.color],\r\n );\r\n\r\n useEffect(() => {\r\n if (checkbox.current && indeterminate !== undefined)\r\n checkbox.current.indeterminate = indeterminate;\r\n }, [indeterminate]);\r\n\r\n const nativeSx = useMemo(\r\n () => ({ variant: 'forms.checkbox' }) as ThemeUIStyleObject,\r\n [],\r\n );\r\n\r\n return native ? (\r\n <input\r\n type=\"checkbox\"\r\n onClick={props.onClick as unknown as MouseEventHandler}\r\n aria-checked={isChecked}\r\n sx={nativeSx}\r\n ref={checkbox}\r\n disabled={disabled}\r\n name={name}\r\n checked={isChecked}\r\n onChange={(ev) => {\r\n if (props.checked === undefined) setIsChecked(ev.target.checked);\r\n if (onChange) onChange(ev);\r\n }}\r\n required={required}\r\n className={` ${props.className ?? ''} nativeCheckbox `}\r\n {...(props as unknown as InputProps)}\r\n />\r\n ) : (\r\n <>\r\n <Button\r\n {...props}\r\n onClick={(ev) => {\r\n if (readOnly) {\r\n return;\r\n }\r\n if (\r\n getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => (current as HTMLInputElement).type === 'button',\r\n )\r\n ) {\r\n if (props.onClick) props.onClick(ev);\r\n checkbox.current?.click();\r\n }\r\n }}\r\n type=\"button\"\r\n {...getVariant('forms.customCheckbox')}\r\n role=\"checkbox\"\r\n aria-checked={isChecked}\r\n sx={sx}\r\n ref={ref}\r\n disabled={disabled}\r\n >\r\n <Icon title=\"\" name={icon} size=\"32px\" />\r\n </Button>\r\n <Input\r\n type=\"checkbox\"\r\n sx={{ display: 'none' }}\r\n ref={checkbox}\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n }}\r\n name={name}\r\n checked={isChecked}\r\n onChange={(ev) => {\r\n if (props.checked === undefined) setIsChecked(ev.target.checked);\r\n if (onChange) onChange(ev);\r\n }}\r\n required={required}\r\n disabled={disabled}\r\n />\r\n </>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n","import { getVariant, Box, InputProps } from '@apia/theme';\r\nimport { isChild, useCombinedRefs } from '@apia/util';\r\nimport React from 'react';\r\nimport { TIconName, TIconType } from '@apia/icons';\r\nimport { IconButton } from './buttons';\r\nimport ReactInputMask from 'react-input-mask';\r\n\r\nexport interface IField {\r\n className?: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n readOnly?: boolean;\r\n}\r\n\r\nexport interface IIconInput extends IField {\r\n additionalButtons?: React.ReactNode;\r\n additionalButtonsPosition?: 'before' | 'after';\r\n buttonProps?: Partial<React.ComponentProps<typeof IconButton>>;\r\n buttonRef?: React.RefObject<HTMLButtonElement>;\r\n hideButton?: boolean;\r\n icon?: TIconType | TIconName;\r\n inputProps?: Partial<InputProps>;\r\n inputRef?: React.RefObject<HTMLInputElement>;\r\n mask?: string;\r\n onClick?: (ev: React.MouseEvent) => void;\r\n onBlur?: React.FocusEventHandler;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport const IconInput = ({\r\n additionalButtons,\r\n additionalButtonsPosition = 'before',\r\n buttonProps,\r\n buttonRef,\r\n className,\r\n disabled,\r\n hideButton,\r\n icon = 'Search',\r\n inputProps,\r\n inputRef,\r\n isLoading,\r\n mask,\r\n onClick,\r\n onBlur,\r\n readOnly,\r\n ...rest\r\n}: IIconInput) => {\r\n const { sx: inputSx, ...actualInputProps } = inputProps ?? {};\r\n const innerButtonRef = React.useRef<HTMLButtonElement>(null);\r\n const assignButtonRef = useCombinedRefs(buttonRef, innerButtonRef);\r\n\r\n const parentRef = React.useRef<HTMLElement | null>(null);\r\n const handleBlur = React.useCallback(\r\n (ev: React.FocusEvent) => {\r\n if (\r\n onBlur &&\r\n (!ev.relatedTarget ||\r\n (ev.relatedTarget &&\r\n !isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === parentRef.current,\r\n )))\r\n ) {\r\n Object.assign(ev.target, {\r\n value: ev.target\r\n .closest<HTMLElement>('.iconInput')!\r\n .querySelector<HTMLInputElement>('input')!.value,\r\n });\r\n onBlur(ev);\r\n }\r\n },\r\n [onBlur],\r\n );\r\n\r\n return (\r\n <Box\r\n {...getVariant('forms.iconInput')}\r\n ref={parentRef}\r\n onBlur={handleBlur}\r\n className={`${className ?? ''} iconInput`}\r\n >\r\n <ReactInputMask\r\n mask={mask ?? ''}\r\n disabled={isLoading || disabled}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ref={inputRef as any}\r\n readOnly={readOnly}\r\n sx={{ variant: 'forms.input', ...inputSx }}\r\n data-variant=\"forms.input\"\r\n {...rest}\r\n {...actualInputProps}\r\n maxLength={mask ? undefined : inputProps?.maxLength}\r\n />\r\n {additionalButtonsPosition === 'before' && additionalButtons}\r\n {!hideButton && (\r\n <IconButton\r\n onClick={onClick}\r\n icon={icon}\r\n disabled={disabled}\r\n isLoading={isLoading}\r\n ref={assignButtonRef as React.Ref<HTMLButtonElement>}\r\n {...buttonProps}\r\n />\r\n )}\r\n {additionalButtonsPosition === 'after' && additionalButtons}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport React from 'react';\r\nimport Calendar from 'react-calendar';\r\n\r\nexport interface ICalModal {\r\n handleClickDay: (date: Date) => void;\r\n calValue?: Date;\r\n locale: string;\r\n}\r\n\r\nconst CalModal = React.forwardRef<HTMLDivElement, ICalModal>(\r\n ({ handleClickDay, calValue, locale }) => {\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.datePicker')}\r\n className=\"datePicker\"\r\n >\r\n <Calendar\r\n onClickDay={handleClickDay}\r\n locale={locale}\r\n value={calValue || new Date()}\r\n nextLabel=\"›\"\r\n next2Label=\"»\"\r\n prevLabel=\"‹\"\r\n prev2Label=\"«\"\r\n />\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nexport default CalModal;\r\n","import {\r\n ChangeEvent,\r\n MouseEvent,\r\n FocusEvent,\r\n MutableRefObject,\r\n useMemo,\r\n} from 'react';\r\nimport { FaCalendarAlt } from '@meronex/icons/fa';\r\nimport { getDateFormat, getLabel, TDateFormat, uniqueId } from '@apia/util';\r\nimport { IconInput } from './IconInput';\r\nimport { Box, Close, getVariant } from '@apia/theme';\r\nimport { makeAutoObservable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ApiaUtil } from '../../objects';\r\nimport CalModal from './CalModal';\r\nimport dayjs from 'dayjs';\r\n\r\nconst DEFAULT_LOCALE = window.LANG_CODE;\r\nconst DEFAULT_MASK_PLACEHOLDER = '_';\r\n\r\nconst dateFormat: TDateFormat = getDateFormat();\r\n\r\nconst getMaskForDateFormat = (): string => {\r\n if (dateFormat === 'YYYY/MM/DD') return '9999/99/99';\r\n return '99/99/9999';\r\n};\r\n\r\nexport type TDateProps = {\r\n className?: string;\r\n disabled?: boolean;\r\n id?: string;\r\n readonly?: boolean;\r\n\r\n // Specific props\r\n onBlur?: (date: string | null, ev?: FocusEvent<HTMLElement>) => unknown;\r\n /**\r\n * If a Promise<false> is returned, the value change is not accepted\r\n * and a msgInvalidDate error message is emitted.\r\n */\r\n onChange?: (date: string | null) => void | Promise<string | null>;\r\n onError?: (error: string) => unknown;\r\n value?: string;\r\n\r\n inputRef?: MutableRefObject<any>;\r\n props?: React.HTMLAttributes<HTMLInputElement>;\r\n};\r\n\r\nclass DateInputController {\r\n props: Pick<TDateProps, 'onBlur' | 'onChange' | 'onError' | 'id'> = {};\r\n state: Pick<TDateProps, 'disabled' | 'readonly' | 'value'> = {};\r\n _ref: HTMLElement | null = null;\r\n\r\n error = false;\r\n inputValue = '';\r\n value: Date | null = null;\r\n\r\n constructor() {\r\n this.props.id = uniqueId('date-input');\r\n\r\n makeAutoObservable(this);\r\n }\r\n\r\n clear() {\r\n if (!this.state.disabled) {\r\n this.setValueFromString('');\r\n this.focus();\r\n }\r\n }\r\n\r\n focus() {\r\n if (!this.state.disabled) {\r\n const input = this._ref?.querySelector<HTMLInputElement>('input');\r\n if (input) {\r\n input.focus();\r\n setTimeout(() => {\r\n window.requestAnimationFrame(() => {\r\n input.setSelectionRange(0, input.value.length);\r\n });\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n ref(el: HTMLElement | null) {\r\n this._ref = el;\r\n }\r\n\r\n get calendarElementId() {\r\n return `DateModal${this.props.id}`;\r\n }\r\n\r\n private isInsidePicker(el?: HTMLElement) {\r\n return !!el?.closest(\r\n `#${CSS.escape(this.props.id ?? '')}, #${CSS.escape(this.calendarElementId)}`,\r\n );\r\n }\r\n\r\n onBlur(ev: FocusEvent<HTMLElement, Element>) {\r\n if (!this.state.disabled) {\r\n if (!this.isInsidePicker(ev.relatedTarget as HTMLElement)) {\r\n if (this.error) {\r\n this.inputValue = '';\r\n this.value = null;\r\n this.error = false;\r\n }\r\n\r\n this.props.onBlur?.(this.inputValue, ev);\r\n }\r\n }\r\n }\r\n\r\n onInputChange(ev: ChangeEvent<HTMLInputElement>) {\r\n this.setValueFromString(ev.target.value);\r\n }\r\n\r\n private onCalendarSelect(value: Date) {\r\n this.setValue(value);\r\n }\r\n\r\n openCalendar(ev: MouseEvent<any, any>) {\r\n if (!this.state.disabled) {\r\n const tooltip = ApiaUtil.instance.tooltips.open({\r\n attachToElement() {\r\n return (ev.target as HTMLElement).closest<HTMLElement>('button')!;\r\n },\r\n attachToElementAnchorPoint: 'center',\r\n closeOnClick: false,\r\n closeOnClickOut: true,\r\n closeOnEscape: true,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnScrollOut: true,\r\n children: (\r\n <div id={this.calendarElementId}>\r\n <CalModal\r\n calValue={this.value || new Date()}\r\n locale={DEFAULT_LOCALE}\r\n handleClickDay={(date) => {\r\n tooltip.close();\r\n this.onCalendarSelect(date);\r\n this.focus();\r\n }}\r\n />\r\n </div>\r\n ),\r\n initialFocusGetter(el) {\r\n return el.querySelector(`.react-calendar__tile--active`);\r\n },\r\n minSize: { width: 350, height: 310 },\r\n onClose: () => {\r\n window.requestAnimationFrame(() => {\r\n if (!this.isInsidePicker(document.activeElement as HTMLElement)) {\r\n this.props.onBlur?.(this.inputValue);\r\n }\r\n });\r\n },\r\n });\r\n }\r\n }\r\n\r\n setValueFromString(str: string, fire = true) {\r\n if (!this.state.disabled) {\r\n if (str === '' || str.replaceAll('_', '9') === getMaskForDateFormat()) {\r\n this.inputValue = '';\r\n this.setValue(null, fire);\r\n } else if (str !== this.inputValue) {\r\n const hasPlaceHolder = str.match(/_/);\r\n if (!hasPlaceHolder) {\r\n const value = dayjs(str, dateFormat);\r\n const formattedDate = value.format(dateFormat);\r\n if (value.isValid() && formattedDate === str) {\r\n this.setValue(value.toDate(), fire);\r\n /**\r\n * TWO Situations where inputValue must be directly assigned!\r\n */\r\n } else {\r\n this.inputValue = str;\r\n this.props.onError?.(getLabel('msgInvalidDate').text);\r\n this.error = true;\r\n }\r\n } else {\r\n this.inputValue = str;\r\n }\r\n }\r\n }\r\n }\r\n\r\n async setValue(date: Date | null, fire = true) {\r\n if (!this.state.disabled) {\r\n this.error = false;\r\n\r\n if (date !== this.value) {\r\n const dateValue = dayjs(date);\r\n const newValue = dateValue.isValid()\r\n ? dateValue.format(dateFormat)\r\n : '';\r\n const res = fire ? await this.props.onChange?.(newValue) : null;\r\n\r\n this.inputValue = newValue || '';\r\n if (typeof res !== 'string') {\r\n this.value = date;\r\n } else {\r\n this.error = true;\r\n this.value = null;\r\n this.props.onError?.(res);\r\n }\r\n }\r\n }\r\n }\r\n\r\n previousValue: string | null = '';\r\n render(props: TDateProps) {\r\n const { onBlur, onChange, onError, id } = props;\r\n Object.assign(this.props, {\r\n onBlur,\r\n onChange,\r\n onError,\r\n id: id ?? this.props.id,\r\n });\r\n\r\n const { value, disabled, readonly } = props;\r\n Object.assign(this.state, { readonly, value, disabled });\r\n\r\n if (value !== undefined && this.previousValue !== value) {\r\n this.previousValue = value;\r\n this.setValueFromString(value, false);\r\n }\r\n }\r\n}\r\n\r\nexport const DateInput = observer(\r\n ({\r\n className,\r\n disabled,\r\n id: outerId,\r\n inputRef,\r\n onBlur,\r\n onChange,\r\n onError,\r\n readonly,\r\n value: outerValue,\r\n props,\r\n }: TDateProps) => {\r\n const controller = useMemo(() => new DateInputController(), []);\r\n controller.render({\r\n className,\r\n disabled,\r\n id: outerId,\r\n inputRef,\r\n onBlur,\r\n onChange,\r\n onError,\r\n readonly,\r\n value: outerValue,\r\n props,\r\n });\r\n\r\n return (\r\n <Box\r\n {...getVariant('forms.dateInput')}\r\n className={`${className ?? ''} dateInput`}\r\n id={controller.props.id}\r\n onBlur={controller.onBlur.bind(controller)}\r\n ref={controller.ref.bind(controller)}\r\n >\r\n <IconInput\r\n additionalButtons={\r\n controller.inputValue &&\r\n getMaskForDateFormat().replaceAll('9', DEFAULT_MASK_PLACEHOLDER) !==\r\n controller.inputValue &&\r\n !disabled ? (\r\n <Close\r\n as=\"button\"\r\n onClick={controller.clear.bind(controller)}\r\n className=\"delete_date_button\"\r\n onMouseDown={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n />\r\n ) : undefined\r\n }\r\n buttonProps={{ disabled }}\r\n icon={FaCalendarAlt}\r\n inputProps={{\r\n disabled,\r\n onChange: controller.onInputChange.bind(controller),\r\n value: controller.inputValue,\r\n ...props,\r\n }}\r\n mask={getMaskForDateFormat()}\r\n maskPlaceholder={DEFAULT_MASK_PLACEHOLDER}\r\n onClick={controller.openCalendar.bind(controller)}\r\n readOnly={readonly}\r\n />\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { customEvents } from '@apia/util';\r\nimport * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport interface IFieldErrorMessage {\r\n children: React.ReactNode | string;\r\n name?: string;\r\n}\r\n\r\nexport const FieldErrorMessage = ({ children, name }: IFieldErrorMessage) => {\r\n const [ref, setRef] = React.useState<null | HTMLDivElement>(null);\r\n\r\n React.useEffect(() => {\r\n if (children) {\r\n const event = new CustomEvent(customEvents.focus, { bubbles: true });\r\n ref?.dispatchEvent(event);\r\n }\r\n }, [children, ref]);\r\n\r\n if (children) {\r\n return (\r\n <Box\r\n ref={setRef}\r\n role=\"alert\"\r\n data-testid={name ? `err_${name}` : null}\r\n sx={{\r\n mb: '0',\r\n color: 'danger',\r\n pt: '2',\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n","/**\r\n * El NumberInput respeta los parámetros de ambiente:\r\n * - AMOUNT_DECIMAL_SEPARATOR\r\n * - AMOUNT_DECIMAL_ZEROS\r\n * - CHAR_DECIMAL_SEPARATOR\r\n * - CHAR_THOUS_SEPARATOR\r\n * - ADD_THOUSAND_SEPARATOR\r\n */\r\n\r\nimport React, { useRef } from 'react';\r\nimport { Input, InputProps } from '@apia/theme';\r\n\r\nexport type TNumberInputChangeEvent = { error: boolean; value: string };\r\n\r\nexport type TNumberInput = Omit<\r\n InputProps,\r\n 'type' | 'onChange' | 'onBlur' | 'value' | 'defaultValue'\r\n> & {\r\n onChange?: (ev: TNumberInputChangeEvent) => unknown;\r\n value?: string;\r\n defaultValue?: string;\r\n avoidDecimalRestriction?: boolean;\r\n deleteValueOnError?: boolean;\r\n};\r\n\r\nfunction fillZeros(amount: number) {\r\n return Array(Math.max(0, amount)).fill(0).join('');\r\n}\r\n\r\nfunction fillThousandsZeros(value: number) {\r\n const stringValue = String(value);\r\n return `${fillZeros(3 - stringValue.length)}${String(value)}`;\r\n}\r\n\r\nconst decimalCount = Number(window.AMOUNT_DECIMAL_SEPARATOR);\r\nconst decimalZeros = Number(window.AMOUNT_DECIMAL_ZEROS);\r\nconst decimalSeparator = window.CHAR_DECIMAL_SEPARATOR;\r\nconst thousandsSeparator = window.CHAR_THOUS_SEPARATOR;\r\nconst regexpThousandsSeparator =\r\n thousandsSeparator === '.' ? '\\\\.' : thousandsSeparator;\r\nconst regexpDecimalSeparator =\r\n decimalSeparator === '.' ? '\\\\.' : decimalSeparator;\r\n\r\nexport function parseNumberInputValueToNumber(value: string): number {\r\n return Number.parseFloat(\r\n value.replaceAll(thousandsSeparator, '').replaceAll(decimalSeparator, '.'),\r\n );\r\n}\r\n\r\nexport function parseNumberValueToNumberInput(value: string | number): string {\r\n const stringNumber = String(value);\r\n const result = stringNumber.match(/(-?)(\\d+)(?:\\.(\\d+))/);\r\n if (!result) return '';\r\n\r\n const isNegative = !!result[1];\r\n const integer = result[2];\r\n const decimals = result[3] as string | null;\r\n const decimalsString = decimals ? `${regexpDecimalSeparator}${decimals}` : '';\r\n\r\n return (\r\n formatValueToShow(`${isNegative ? '-' : ''}${integer}${decimalsString}`) ||\r\n ''\r\n );\r\n}\r\n\r\nfunction formatValueToShow(\r\n value: string,\r\n avoidDecimalRestriction = false,\r\n): string | null {\r\n const result = value.match(\r\n new RegExp(\r\n `^(-)?((?:(?:\\\\d{1,3})${regexpThousandsSeparator}(?:\\\\d{3}${regexpThousandsSeparator})*(?:\\\\d{3}))?|(?:\\\\d*))(?:(?:${regexpDecimalSeparator})(\\\\d+))?$`,\r\n ),\r\n );\r\n if (!result) return null;\r\n\r\n const isNegative = !!result[1];\r\n let module = Number(result[2].replaceAll(thousandsSeparator, ''));\r\n const slicedDecimals = avoidDecimalRestriction\r\n ? result[3]\r\n : (result[3]?.slice(0, decimalCount) ?? ''); // 🔹 solo recorto, no paso +1\r\n\r\n let decimalsString: string;\r\n if (!avoidDecimalRestriction) {\r\n const noZeroDecimals =\r\n (slicedDecimals\r\n ? `${slicedDecimals}` // 🔹 sin redondear, solo uso lo que viene\r\n : ''\r\n ).match(/(\\d*[1-9])0*/)?.[1] ?? '';\r\n decimalsString = `${noZeroDecimals}${fillZeros(\r\n decimalZeros - noZeroDecimals.length,\r\n )}`;\r\n } else {\r\n decimalsString = slicedDecimals ?? '';\r\n }\r\n\r\n const finalNumberString: string[] = [];\r\n while (module >= 1000) {\r\n module /= 1000;\r\n const truncedInteger = Math.trunc(module);\r\n finalNumberString.unshift(\r\n fillThousandsZeros(Math.round((module - truncedInteger) * 1000)),\r\n );\r\n module = truncedInteger;\r\n }\r\n finalNumberString.unshift(String(module));\r\n\r\n return `${isNegative ? '-' : ''}${finalNumberString.join(\r\n window.ADD_THOUSAND_SEPARATOR ? window.CHAR_THOUS_SEPARATOR : '',\r\n )}${decimalsString.length > 0 ? `${decimalSeparator}${decimalsString}` : ''}`;\r\n}\r\n\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, TNumberInput>(\r\n (\r\n { value, avoidDecimalRestriction, deleteValueOnError = true, ...props },\r\n ref,\r\n ) => {\r\n const [actualValue, setActualValue] = React.useState<string>('');\r\n const [showValue, setShowValue] = React.useState<string>('');\r\n const lastEmittedValue = React.useRef<string>('');\r\n const inError = useRef(false);\r\n\r\n const setValue = React.useCallback(\r\n (newValue: string) => {\r\n if (newValue === '') {\r\n if (newValue === lastEmittedValue.current) return;\r\n setActualValue('');\r\n setShowValue('');\r\n props.onChange?.({ value: '', error: false });\r\n inError.current = false;\r\n } else {\r\n const parsedValue = formatValueToShow(\r\n newValue,\r\n avoidDecimalRestriction,\r\n );\r\n if (parsedValue === null) {\r\n if (deleteValueOnError) {\r\n setActualValue('');\r\n setShowValue('');\r\n }\r\n props.onChange?.({ value: '', error: true });\r\n inError.current = true;\r\n } else {\r\n if (newValue === lastEmittedValue.current) {\r\n setShowValue(parsedValue);\r\n return;\r\n }\r\n setActualValue(newValue);\r\n setShowValue(parsedValue);\r\n props.onChange?.({ value: parsedValue, error: false });\r\n inError.current = false;\r\n }\r\n }\r\n lastEmittedValue.current = newValue;\r\n },\r\n [avoidDecimalRestriction, deleteValueOnError, props],\r\n );\r\n\r\n React.useEffect(() => {\r\n if (value !== actualValue) setValue((value as string) ?? '');\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [value]);\r\n\r\n return (\r\n <Input\r\n {...props}\r\n onFocus={React.useCallback(\r\n (ev: React.FocusEvent<HTMLInputElement>) => {\r\n props.onFocus?.(ev);\r\n if (!inError.current || deleteValueOnError !== false) {\r\n setShowValue(\r\n String(actualValue).replaceAll(thousandsSeparator, ''),\r\n );\r\n }\r\n },\r\n [actualValue, deleteValueOnError, props],\r\n )}\r\n onBlur={React.useCallback(\r\n (ev: React.FocusEvent<HTMLInputElement>) => {\r\n setValue(ev.target.value);\r\n },\r\n [setValue],\r\n )}\r\n onChange={React.useCallback(\r\n (ev: React.ChangeEvent<HTMLInputElement>) => {\r\n setShowValue(ev.target.value);\r\n },\r\n [],\r\n )}\r\n type=\"text\"\r\n ref={ref}\r\n value={showValue}\r\n />\r\n );\r\n },\r\n);\r\n","import { Box, ThemeUICSSObject, BoxProps } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport interface IRequiredMark extends Partial<BoxProps> {\r\n isFormReadonly?: boolean;\r\n isRequired?: boolean;\r\n isReadonly?: boolean;\r\n sx?: ThemeUICSSObject;\r\n style?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Muestra el * en los campos de requerido.\r\n */\r\nexport const RequiredMark = ({\r\n isFormReadonly = false,\r\n isRequired = false,\r\n isReadonly = false,\r\n sx,\r\n style,\r\n ...rest\r\n}: IRequiredMark) => {\r\n const mergedSx: ThemeUICSSObject = {\r\n color: 'palette.error.main',\r\n fontWeight: 'bold',\r\n ...(sx ?? (style as unknown as ThemeUICSSObject) ?? {}),\r\n };\r\n\r\n if (!isRequired || isReadonly || isFormReadonly) return null;\r\n\r\n return (\r\n <Box\r\n as=\"span\"\r\n sx={mergedSx}\r\n className=\"requiredMark\"\r\n title={getLabel('msgReqField').text}\r\n {...rest}\r\n >\r\n *\r\n </Box>\r\n );\r\n};\r\n","import { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const getFieldErrorStyles = (isValid: boolean): ThemeUICSSObject => {\r\n return {\r\n borderLeftStyle: !isValid ? 'solid' : null,\r\n borderLeftWidth: !isValid ? '4px' : null,\r\n borderLeftColor: !isValid ? 'danger' : undefined,\r\n };\r\n};\r\n\r\nexport const getFieldTouchedStyles = (isTouched: boolean): ThemeUICSSObject => {\r\n return {\r\n borderStyle: isTouched ? 'solid' : null,\r\n borderWidth: isTouched ? '1px' : null,\r\n borderColor: isTouched ? 'orange' : undefined,\r\n };\r\n};\r\n","import { injectStyles, getVariant, Box, BoxProps } from '@apia/theme';\r\nimport { forwardRef } from 'react';\r\nimport { RequiredMark } from './RequiredMark';\r\n\r\nexport type TFieldLabel = {\r\n avoidSemicolon?: boolean;\r\n /**\r\n * Permite mostrar un mensaje de error debajo del campo\r\n */\r\n error?: string;\r\n hideRequiredMark?: boolean;\r\n label: string;\r\n /**\r\n * La propiedad required se utiliza para mostrar el * de requerido.\r\n *\r\n * @see requiredMarkPosition\r\n * @see hideRequiredMark\r\n */\r\n required?: boolean;\r\n requiredMarkPosition?: 'before' | 'after';\r\n} & BoxProps;\r\n\r\ninjectStyles('layout.common.components.fieldLabel', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 1,\r\n\r\n '.fieldLabel__label': {\r\n fontWeight: 'bold',\r\n },\r\n});\r\n\r\nexport const FieldLabel = forwardRef<HTMLDivElement, TFieldLabel>(\r\n (\r\n {\r\n as,\r\n avoidSemicolon,\r\n children,\r\n error,\r\n hideRequiredMark,\r\n label,\r\n required,\r\n requiredMarkPosition = 'after',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <Box\r\n as={as ?? 'label'}\r\n {...props}\r\n className={`fieldLabel ${props.className ?? ''}`}\r\n {...getVariant('layout.common.components.fieldLabel')}\r\n aria-label={props['aria-label'] ?? label}\r\n ref={ref}\r\n >\r\n <Box className=\"fieldLabel__label\">\r\n {requiredMarkPosition === 'before' && (\r\n <RequiredMark\r\n isRequired={required}\r\n isReadonly={hideRequiredMark}\r\n isFormReadonly={hideRequiredMark}\r\n />\r\n )}\r\n {label}\r\n {requiredMarkPosition === 'after' && (\r\n <RequiredMark\r\n isRequired={required}\r\n isReadonly={hideRequiredMark}\r\n isFormReadonly={hideRequiredMark}\r\n />\r\n )}\r\n {!avoidSemicolon && ':'}\r\n </Box>\r\n <Box>{children}</Box>\r\n {error && <Box className=\"fieldLabel__error\">{error}</Box>}\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nFieldLabel.displayName = 'FieldLabel';\r\n","import { Box } from '@apia/theme';\r\nimport { Icon } from '@apia/icons';\r\n\r\nexport interface ICheckbox {\r\n checked: boolean;\r\n disabled?: boolean;\r\n onChange: (checked: boolean) => unknown;\r\n}\r\n\r\nexport const Checkbox = (props: ICheckbox) => {\r\n return (\r\n <Box\r\n className=\"accordion__item__button__check\"\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n if (!props.disabled) props.onChange?.(!props.checked);\r\n }}\r\n >\r\n {props.checked && <Icon title=\"\" name=\"Check\" />}\r\n </Box>\r\n );\r\n};\r\n","import { useRef } from 'react';\r\nimport { useAccordionContext } from '../context';\r\nimport { IAccordionItemButton } from './DefaultAccordionItemButton';\r\n\r\nexport function useIsChecked(\r\n props: IAccordionItemButton,\r\n): [boolean, (isChecked: boolean) => void] {\r\n const handler = useAccordionContext();\r\n const isChecked = handler.hooks.useItemStateSelector(\r\n (current) => current.isChecked,\r\n );\r\n const id = handler.hooks.useItemId();\r\n\r\n const previousPropsChecked = useRef(props.checked);\r\n if (\r\n previousPropsChecked.current !== props.checked &&\r\n props.checked !== undefined\r\n ) {\r\n previousPropsChecked.current = props.checked;\r\n handler.udpateItem(id, { isChecked: props.checked });\r\n }\r\n\r\n return [\r\n isChecked,\r\n (isChecked) => {\r\n handler.udpateItem(id, { isChecked });\r\n props.onChange?.(isChecked);\r\n },\r\n ];\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { isChild } from '@apia/util';\r\nimport { useEffect, ReactNode, useRef, useCallback } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const AutoEllipsis = ({\r\n children,\r\n findParent,\r\n overrideStyles,\r\n}: {\r\n children: ReactNode;\r\n /**\r\n * Si se pasa el método findParent, será invocado con el nodo de AutoEllipsis\r\n * para dar control sobre cuál es el elemento al que se le clonarán los\r\n * estilos.\r\n */\r\n findParent?: (currentElement: HTMLElement) => HTMLElement;\r\n /**\r\n * Si se pasa overrideStyles, será invocado con el nodo actual de\r\n * AutoEllipsis para tomar decisiones acerca de cuáles estilos serán\r\n * aplicados.\r\n */\r\n overrideStyles?: (\r\n currentElement: HTMLElement,\r\n ) => Partial<CSSStyleDeclaration>;\r\n}) => {\r\n const unsuscribe = useRef(() => {});\r\n const clone = useRef<HTMLElement | null>(null);\r\n const timeout = useRef(0);\r\n const ref = useCallback(\r\n (el: HTMLElement) => {\r\n if (!el || !document.contains(el)) return;\r\n\r\n unsuscribe.current();\r\n\r\n function showBox() {\r\n if (!el || !document.contains(el)) return;\r\n\r\n // If there is any clone open, close it\r\n document\r\n .querySelectorAll('.autoellipsis_clone')\r\n .forEach((c) => c.remove());\r\n\r\n clone.current = el.cloneNode(true) as HTMLElement;\r\n const target = findParent?.(el) ?? el;\r\n const styles = window.getComputedStyle(target);\r\n for (let i = 0; i < styles.length; i++) {\r\n try {\r\n const name = styles[i] as keyof typeof target.style;\r\n const value = styles[name];\r\n if (!(name as string).match(/webkit/)) {\r\n (clone.current as HTMLElement).style[name as any] = value as any;\r\n }\r\n } catch (e) {\r\n e;\r\n }\r\n }\r\n\r\n const bound = el.getBoundingClientRect();\r\n clone.current.style.position = 'fixed';\r\n clone.current.style.left = `${bound.left - 1}px`;\r\n clone.current.style.top = `${bound.top - 1}px`;\r\n clone.current.style.width = `${bound.width + 8}px`;\r\n clone.current.style.whiteSpace = 'break-spaces';\r\n clone.current.style.overflow = 'visible';\r\n clone.current.style.textOverflow = 'unset';\r\n clone.current.style.background =\r\n 'var(--theme-ui-colors-palette-background-paper)';\r\n clone.current.style.color =\r\n 'var(--theme-ui-colors-palette-text-primary)';\r\n clone.current.style.border = '1px solid';\r\n clone.current.style.borderColor =\r\n 'var(--theme-ui-colors-palette-border-field)';\r\n clone.current.style.zIndex = '1000000';\r\n clone.current.style.height = 'auto';\r\n clone.current.style.fill =\r\n 'var(--theme-ui-colors-palette-text-primary)';\r\n clone.current.style.pointerEvents = 'none';\r\n clone.current.style.wordBreak = 'break-all';\r\n clone.current.classList.add('autoellipsis_clone');\r\n\r\n const overridenStyles = overrideStyles?.(el);\r\n\r\n if (overridenStyles) {\r\n Object.entries(overridenStyles).forEach(([name, value]) => {\r\n if (name.match(/webkit/)) return;\r\n\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\r\n (clone.current as HTMLElement).style[name as any] =\r\n value as string;\r\n } catch (e) {\r\n e;\r\n }\r\n });\r\n }\r\n\r\n clone.current.addEventListener('mouseleave', (ev) => {\r\n if (\r\n isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === el,\r\n )\r\n )\r\n return;\r\n\r\n clone.current?.remove();\r\n });\r\n\r\n let interval: any = 0;\r\n function close() {\r\n clone.current?.remove();\r\n document.removeEventListener('scroll', close);\r\n clearInterval(interval);\r\n }\r\n interval = setInterval(() => {\r\n if (!document.contains(el)) {\r\n close();\r\n }\r\n }, 100);\r\n\r\n document.addEventListener('scroll', close);\r\n document.body.append(clone.current);\r\n\r\n const cloneBounding = clone.current.getBoundingClientRect();\r\n\r\n const difX = Math.abs(cloneBounding.width - bound.width);\r\n const difY = Math.abs(cloneBounding.height - bound.height);\r\n\r\n if (difX < 50 && difY < 10) {\r\n clone.current.remove();\r\n }\r\n }\r\n\r\n function hideBox(ev: MouseEvent) {\r\n if (\r\n isChild(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === clone.current,\r\n )\r\n )\r\n return;\r\n\r\n clone.current?.remove();\r\n }\r\n\r\n function handleMouseEnter() {\r\n timeout.current = setTimeout(() => {\r\n showBox();\r\n }, 500) as unknown as number;\r\n }\r\n function handleMouseLeave(ev: MouseEvent) {\r\n clearTimeout(timeout.current);\r\n hideBox(ev);\r\n }\r\n\r\n el.addEventListener('mouseenter', handleMouseEnter);\r\n el.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n unsuscribe.current = () => {\r\n el.removeEventListener('mouseenter', handleMouseEnter);\r\n el.removeEventListener('mouseleave', handleMouseLeave);\r\n clearTimeout(timeout.current);\r\n };\r\n },\r\n [findParent, overrideStyles],\r\n );\r\n\r\n useEffect(() => {\r\n return () => {\r\n clone.current?.remove();\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n ref={ref}\r\n sx={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n }}\r\n className=\"autoellipsis__container\"\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import {\r\n FC,\r\n FunctionComponent,\r\n useCallback,\r\n useDeferredValue,\r\n useEffect,\r\n useRef,\r\n useState,\r\n useTransition,\r\n} from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\ninterface IMakeResponsiveComponent<P extends Record<string, unknown>> {\r\n breakPoints: number[];\r\n Component: FunctionComponent<\r\n P & { breakPoint: number; breakPointWidth: number; containerWidth: number }\r\n >;\r\n /**\r\n * Este HOC hace un setState cada vez que cambia el ancho del contenedor. Hay\r\n * situaciones en las que es deseable agregar un debounce a este\r\n * comportamiento para mejorar la performance. *Por defecto usa 100*\r\n */\r\n debounce?: number;\r\n /**\r\n * Por defecto usa 4.\r\n */\r\n defaultBreakpoint?: number;\r\n}\r\n\r\nfunction calcBreakPoint(currentWidth: number, breakPoints: number[]) {\r\n let currentIndex = 0;\r\n\r\n while (\r\n currentIndex < breakPoints.length &&\r\n currentWidth > breakPoints[currentIndex]\r\n )\r\n currentIndex++;\r\n\r\n return currentIndex;\r\n}\r\n\r\nexport interface IResponsiveComponent<P> extends FC<P> {\r\n setBreakpoints: { current: (breakPoints: number[]) => void };\r\n}\r\n\r\n/**\r\n * El método makeResponsiveComponent agrega un wrapper alrededor de un\r\n * componente para conocer el ancho del contenedor del mismo. De esta forma, es\r\n * fácil predecir qué ancho dispone el mismo para renderizarse y de esa forma\r\n * poder tomar decisiones de responsividad que no dependen del ancho de la\r\n * pantalla sino del espacio donde se encuentra.\r\n */\r\nexport const makeResponsiveComponent = <P extends Record<string, unknown>>({\r\n breakPoints,\r\n Component,\r\n defaultBreakpoint,\r\n}: IMakeResponsiveComponent<P>): IResponsiveComponent<\r\n P & {\r\n breakPoints?: number[];\r\n }\r\n> => {\r\n const setBreakpoints: { current: (b: number[]) => void } = {\r\n current: () => {},\r\n };\r\n\r\n return Object.assign(\r\n function ResponsiveComponent(\r\n props: P & {\r\n breakPoints?: number[];\r\n },\r\n ) {\r\n const [breakPoint, setCurrentBreakpoint] = useState<number>(\r\n defaultBreakpoint ?? 4,\r\n );\r\n\r\n const [innerBreakpoints, setInnerBreakpoints] = useState(\r\n props.breakPoints ?? breakPoints,\r\n );\r\n setBreakpoints.current = setInnerBreakpoints;\r\n\r\n const [containerWidth, setContainerWidth] = useState(\r\n breakPoints[defaultBreakpoint ?? 4],\r\n );\r\n const observer = useRef<ResizeObserver | null>(null);\r\n const shouldDisconnect = useRef(false);\r\n\r\n const [hasRendered, setHasRendered] = useState(false);\r\n const [, startTransition] = useTransition();\r\n\r\n const ref = useCallback(\r\n (element: HTMLElement) => {\r\n if (!element) return;\r\n\r\n observer.current?.disconnect();\r\n observer.current = new ResizeObserver((resizeProps) => {\r\n if (resizeProps[0].contentRect.width === 0) return;\r\n\r\n startTransition(() => {\r\n setContainerWidth(resizeProps[0].contentRect.width);\r\n setCurrentBreakpoint(\r\n calcBreakPoint(\r\n resizeProps[0].contentRect.width,\r\n innerBreakpoints,\r\n ),\r\n );\r\n setHasRendered(true);\r\n });\r\n });\r\n\r\n if (element) observer.current.observe(element);\r\n },\r\n [innerBreakpoints],\r\n );\r\n\r\n useEffect(() => {\r\n shouldDisconnect.current = false;\r\n\r\n return () => {\r\n shouldDisconnect.current = true;\r\n setTimeout(() => {\r\n if (shouldDisconnect.current) {\r\n observer.current?.disconnect();\r\n }\r\n /**\r\n * El timeout tiene un tiempo arbitrariamente alto ya que de esta\r\n * forma el observer se va a desconectar una vez que el componente\r\n * se desmonte. Si pusiera un tiempo menor, caería en el riesgo de\r\n * que se desconecte aún cuando el componente está montado\r\n */\r\n }, 2000);\r\n };\r\n }, [innerBreakpoints]);\r\n\r\n const deferBreakPoint = useDeferredValue(breakPoint);\r\n const deferContainerWidth = useDeferredValue(containerWidth);\r\n\r\n return (\r\n <Box ref={ref}>\r\n {hasRendered ? (\r\n <Component\r\n {...props}\r\n breakPoint={deferBreakPoint}\r\n breakPointWidth={breakPoints[deferBreakPoint]}\r\n containerWidth={deferContainerWidth}\r\n />\r\n ) : null}\r\n </Box>\r\n );\r\n },\r\n { setBreakpoints },\r\n );\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { Icon, type TIconName } from '@apia/icons';\r\nimport { useAccordionContext } from '../context';\r\nimport { ISimpleButton, SimpleButton } from '../../forms';\r\nimport { Checkbox } from './Checkbox';\r\nimport { useIsChecked } from './useIsChecked';\r\nimport { KeyboardEvent, MouseEvent, ReactNode, useCallback } from 'react';\r\nimport { AutoEllipsis } from '../../responsive';\r\n\r\nexport interface IAccordionItemButton {\r\n ariaLabel: string;\r\n /**\r\n * Si checked !== undefined => se mostrará un checkbox.\r\n */\r\n checked?: boolean;\r\n /**\r\n * Solamente se utiliza en conjunto con el checkbox y permite evitar que el\r\n * usuario pueda marcar o desmarcar el checkbox.\r\n */\r\n className?: string;\r\n disableSelection?: boolean;\r\n domButtonProps?: ISimpleButton;\r\n isHtml?: boolean | boolean[];\r\n label: string;\r\n /**\r\n * Evento que se dispara cuando el usuario hace click en el checkbox o\r\n * presiona espacio sobre el botón del acordeón.\r\n */\r\n onChange?: (checked: boolean) => unknown;\r\n onClick?: (ev: MouseEvent) => unknown;\r\n onUserPressEnter?: (ev: KeyboardEvent) => unknown;\r\n rightButtons?: ReactNode;\r\n rightIcons?: TIconName[] | TIconName;\r\n tabIndex?: number;\r\n /**\r\n * Si no se pasa title se usará ariaLabel.\r\n */\r\n title?: string;\r\n}\r\n\r\nexport const DefaultAccordionItemButton = (props: IAccordionItemButton) => {\r\n const handler = useAccordionContext();\r\n\r\n const { isExpanded } = handler.hooks.useItemStateSelector((props) => props);\r\n const id = handler.hooks.useItemId();\r\n const [isChecked, setIsChecked] = useIsChecked(props);\r\n const handleClick = useCallback(\r\n (ev: MouseEvent) => {\r\n props.onClick?.(ev);\r\n if (!ev.isDefaultPrevented()) handler.toggleItem(id, !isExpanded);\r\n },\r\n [handler, id, isExpanded, props],\r\n );\r\n const handleKeyDown = useCallback(\r\n (ev: KeyboardEvent) => {\r\n if (ev.code === 'Enter') {\r\n props.onUserPressEnter?.(ev);\r\n if (!ev.isDefaultPrevented() && props.rightButtons)\r\n handler.toggleItem(id, !isExpanded);\r\n }\r\n },\r\n [handler, id, isExpanded, props],\r\n );\r\n\r\n return (\r\n <SimpleButton\r\n {...props.domButtonProps}\r\n className={`accordion__item__button ${props.className ?? ''} ${\r\n props.domButtonProps?.className ?? ''\r\n }`}\r\n onClick={handleClick}\r\n onKeyDown={handleKeyDown}\r\n aria-expanded={isExpanded}\r\n aria-controls={`accordion__${handler.id}__${id}`}\r\n title={props.title}\r\n aria-label={props.ariaLabel}\r\n tabIndex={props.tabIndex}\r\n >\r\n <Box className=\"accordion__item__button__leftGroup\">\r\n {props.checked !== undefined && (\r\n <Checkbox\r\n checked={isChecked}\r\n disabled={props.disableSelection}\r\n onChange={setIsChecked}\r\n />\r\n )}\r\n {(props.label ?? props.title ?? props.ariaLabel)\r\n .split(' | ')\r\n .map((content, i) => {\r\n if (\r\n (typeof props.isHtml === 'boolean' && props.isHtml) ||\r\n (Array.isArray(props.isHtml) && props.isHtml[i])\r\n ) {\r\n return (\r\n <Box\r\n className=\"accordion__item__button__html\"\r\n dangerouslySetInnerHTML={{\r\n __html: String(content).replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n as=\"span\"\r\n />\r\n );\r\n } else {\r\n return (\r\n <Box as=\"h3\" className=\"accordion__item__button__label\">\r\n <AutoEllipsis overrideStyles={() => ({ textAlign: 'left' })}>\r\n {content}\r\n </AutoEllipsis>\r\n </Box>\r\n );\r\n }\r\n })}\r\n </Box>\r\n <Box className=\"accordion__item__button__rightGroup\">\r\n {props.rightButtons}\r\n <Icon\r\n name={isExpanded ? 'ArrowUpThin' : 'ArrowDownThin'}\r\n title={props.title ?? props.ariaLabel}\r\n size={23}\r\n />\r\n </Box>\r\n </SimpleButton>\r\n );\r\n};\r\n","import { Children, ReactElement, useRef } from 'react';\r\nimport { AccordionItemButton } from './AccordionItemButton';\r\nimport { DefaultAccordionItemButton } from './defaultElements/DefaultAccordionItemButton';\r\nimport { IAccordionItemProps } from './AccordionItem';\r\nimport AnimateHeight from 'react-animate-height';\r\nimport { useAccordionContext } from './context';\r\nimport { Box } from '@apia/theme';\r\nimport { customEvents } from '@apia/util';\r\n\r\nexport const AccordionItemContent = ({\r\n children,\r\n buttonProps,\r\n}: IAccordionItemProps) => {\r\n let button = null;\r\n\r\n const actualChildren = Children.toArray(children).filter((current) => {\r\n if (typeof current !== 'string' && typeof current !== 'number') {\r\n const element = current as ReactElement;\r\n\r\n if (element.type === AccordionItemButton) {\r\n button = element;\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n\r\n if (button === null && buttonProps)\r\n button = <DefaultAccordionItemButton {...buttonProps} />;\r\n\r\n const handler = useAccordionContext();\r\n const isExpanded = handler.hooks.useItemStateSelector(\r\n (current) => current.isExpanded,\r\n );\r\n const id = handler.hooks.useItemId();\r\n\r\n const duration = handler.hooks.usePropsSelector(\r\n (current) => current.animationDuration,\r\n );\r\n\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <Box\r\n className=\"accordion__item\"\r\n data-id={id}\r\n data-test-id={id}\r\n ref={(el) => {\r\n uns.current();\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n handler.toggleItem(id, true);\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n >\r\n {button}\r\n <AnimateHeight\r\n className={`accordion__item__content ${isExpanded ? ' expanded' : ''}`}\r\n height={isExpanded ? 'auto' : 0}\r\n duration={duration}\r\n id={`accordion__${handler.id}__${id}`}\r\n >\r\n {actualChildren}\r\n </AnimateHeight>\r\n </Box>\r\n );\r\n};\r\n","import { ReactNode, useRef } from 'react';\r\nimport { AccordionItemContent } from './AccordionItemContent';\r\nimport { useAccordionContext } from './context';\r\nimport { TId } from '@apia/util';\r\nimport { IAccordionItemButton } from './defaultElements/DefaultAccordionItemButton';\r\n\r\nexport interface IAccordionItemProps {\r\n /**\r\n * Cada elemento del acordeón tiene dos formas de renderizar el botón. O bien\r\n * se pasa un elemento AccordionItemButton como hijo o bien se pasan\r\n * buttonProps. En caso contrario, el elemento no tendrá botón.\r\n */\r\n buttonProps?: IAccordionItemButton;\r\n children?: ReactNode;\r\n defaultExpanded?: boolean;\r\n id: TId;\r\n}\r\n\r\nexport const AccordionItem = ({\r\n children,\r\n id,\r\n defaultExpanded,\r\n ...props\r\n}: IAccordionItemProps) => {\r\n const context = useAccordionContext();\r\n const Provider = context.hooks.useItemContextProvider(id);\r\n const hasRegistered = useRef(false);\r\n\r\n if (!hasRegistered.current) {\r\n hasRegistered.current = true;\r\n context.registerItem(id, {\r\n isChecked: false,\r\n isExpanded: !!defaultExpanded,\r\n });\r\n }\r\n\r\n return (\r\n <Provider>\r\n <AccordionItemContent id={id} {...props}>\r\n {children}\r\n </AccordionItemContent>\r\n </Provider>\r\n );\r\n};\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport * as React from 'react';\r\nimport { IApiaFilter } from './ApiaFilter';\r\nimport { getFieldErrorStyles } from '../forms';\r\nimport { DateInput } from '../forms/DateInput';\r\n\r\nconst NoMemoApiaDateFilter = (\r\n { filter, onChange, onBlur, onPressEnter }: IApiaFilter,\r\n ref: React.Ref<HTMLInputElement | HTMLSelectElement>,\r\n) => {\r\n const [value, setValue] = React.useState<string>(String(filter.currentValue));\r\n const [lastDispatchedValue, setLastDispatchedValue] = React.useState<string>(\r\n String(filter.currentValue),\r\n );\r\n\r\n const handleClick = React.useCallback((ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n }, []);\r\n\r\n useUpdateEffect(() => {\r\n setValue(filter.currentValue as string);\r\n }, [filter.currentValue]);\r\n\r\n return (\r\n <DateInput\r\n value={value}\r\n sx={getFieldErrorStyles(!filter.error)}\r\n aria-label={filter.toolTip}\r\n ref={ref as React.Ref<HTMLInputElement>}\r\n placeholder={filter.placeholder}\r\n onChange={(ev) => {\r\n if (onChange) {\r\n const result = onChange(String(ev));\r\n if (result === true) {\r\n setValue(ev);\r\n return true;\r\n }\r\n return result as string | false | void;\r\n }\r\n return false;\r\n }}\r\n onClick={handleClick}\r\n onBlur={() => {\r\n if (value !== lastDispatchedValue && onBlur) {\r\n setLastDispatchedValue(value);\r\n setValue(value);\r\n onBlur(value);\r\n }\r\n }}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter' && onPressEnter) {\r\n setLastDispatchedValue(value);\r\n onPressEnter(value);\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const ApiaDateFilter = React.forwardRef(NoMemoApiaDateFilter);\r\n","import { TApiaFilter, TApiaFilterValue } from '@apia/util';\r\nimport { ForwardedRef } from 'react';\r\nimport * as React from 'react';\r\nimport { Input, Select } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport {\r\n TNumberInputChangeEvent,\r\n NumberInput,\r\n getFieldErrorStyles,\r\n} from '../forms';\r\nimport { ApiaDateFilter } from './ApiaDateFilter';\r\n\r\nexport interface IApiaFilter {\r\n filter: TApiaFilter;\r\n onBlur?: (ev: TApiaFilterValue) => void;\r\n onChange?: (\r\n ev: TApiaFilterValue,\r\n ) => void | boolean | string | Promise<boolean | string>;\r\n onPressEnter?: (ev: TApiaFilterValue) => void;\r\n}\r\n\r\nconst NoMemoApiaFilter = (\r\n { filter, onChange, onBlur, onPressEnter }: IApiaFilter,\r\n ref: React.Ref<HTMLInputElement | HTMLSelectElement>,\r\n) => {\r\n const [value, setValue] = React.useState<TApiaFilterValue>(\r\n filter.currentValue ?? '',\r\n );\r\n\r\n const handleClick = React.useCallback((ev: React.MouseEvent) => {\r\n ev.stopPropagation();\r\n }, []);\r\n\r\n const [lastEmittedValue, setLastEmittedValue] =\r\n React.useState<TApiaFilterValue>(filter.currentValue);\r\n\r\n const filterCurrentValue = filter?.currentValue;\r\n React.useEffect(() => {\r\n if (filterCurrentValue === '') {\r\n setValue(String(filterCurrentValue));\r\n setLastEmittedValue(String(filterCurrentValue));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filter?.deleteFiltersTimestamp]);\r\n\r\n if (filter) {\r\n const handleChange = (\r\n ev: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n ) => {\r\n if (\r\n (onChange && onChange(String(ev.target.value)) !== false) ||\r\n !onChange\r\n )\r\n setValue(String(ev.target.value));\r\n };\r\n const handleNumberChange = (ev: TNumberInputChangeEvent) => {\r\n if ((onChange && onChange(String(ev.value)) !== false) || !onChange)\r\n setValue(String(ev.value));\r\n };\r\n const handleBlur = (\r\n ev:\r\n | React.ChangeEvent<HTMLInputElement | HTMLSelectElement>\r\n | React.KeyboardEvent,\r\n ) => {\r\n if (onBlur && lastEmittedValue !== value) {\r\n setLastEmittedValue(value);\r\n onBlur((ev.target as HTMLInputElement).value);\r\n }\r\n };\r\n\r\n const sortedOptions = filter.sortCombo\r\n ? [...(filter.options ?? [])].sort((a, b) => (a.label > b.label ? 1 : -1))\r\n : filter.options;\r\n const options = sortedOptions?.map((option) => {\r\n return (\r\n <option value={option.value} key={option.value ?? option.label ?? ' '}>\r\n {option.label}\r\n </option>\r\n );\r\n });\r\n\r\n if (filter.type === 'date' || filter.type === 'D')\r\n return (\r\n <ApiaDateFilter\r\n filter={filter}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n onPressEnter={onPressEnter}\r\n ref={ref}\r\n />\r\n );\r\n\r\n if (filter.type === 'apiaNumber') {\r\n return (\r\n <NumberInput\r\n aria-readonly={filter.readonly}\r\n readOnly={filter.readonly}\r\n value={value as string}\r\n placeholder={filter.placeholder}\r\n onChange={handleNumberChange}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter') {\r\n handleBlur(ev);\r\n if (onPressEnter)\r\n onPressEnter((ev.target as HTMLInputElement).value);\r\n }\r\n }}\r\n onClick={handleClick}\r\n {...getVariant('input')}\r\n className={`filter ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLInputElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n name={filter.id as string}\r\n />\r\n );\r\n }\r\n\r\n return filter.options ? (\r\n <Select\r\n aria-readonly={filter.readonly}\r\n disabled={filter.readonly}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n value={value}\r\n className={`\"filter\" ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLSelectElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n onClick={handleClick}\r\n sx={getFieldErrorStyles(!filter.error)}\r\n name={filter.id as string}\r\n >\r\n {options}\r\n </Select>\r\n ) : (\r\n <Input\r\n aria-readonly={filter.readonly}\r\n readOnly={filter.readonly}\r\n value={value}\r\n type={(filter.type === 'N' ? 'number' : filter.type) ?? 'text'}\r\n placeholder={filter.placeholder}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'enter') {\r\n handleBlur(ev);\r\n if (onPressEnter)\r\n onPressEnter((ev.target as HTMLInputElement).value);\r\n }\r\n }}\r\n onClick={handleClick}\r\n {...getVariant('input')}\r\n className={`filter ${filter.error ? 'requiredFilter__Border' : ''}`}\r\n title={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n ref={ref as ForwardedRef<HTMLInputElement>}\r\n aria-label={filter.title ?? filter.toolTip ?? String(filter.id)}\r\n name={filter.id as string}\r\n />\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport const ApiaFilter = React.memo(React.forwardRef(NoMemoApiaFilter));\r\n","import { Box, BoxProps, Close, getVariant } from '@apia/theme';\r\n\r\ntype TLabelBoxVariant = 'normal' | 'selected';\r\n\r\nexport interface ILabelBox {\r\n className?: string;\r\n label: string;\r\n tooltip?: string;\r\n closeTooltip?: string;\r\n onClose?: () => unknown;\r\n variant?: TLabelBoxVariant;\r\n}\r\n\r\ntype TLabelBox = ILabelBox & BoxProps;\r\n\r\nexport const LabelBox = ({\r\n className,\r\n label,\r\n tooltip,\r\n closeTooltip,\r\n onClose,\r\n variant,\r\n ...props\r\n}: TLabelBox) => {\r\n return (\r\n <Box\r\n {...props}\r\n title={tooltip}\r\n className={`labelBox ${className ?? ''} ${variant || 'normal'}`}\r\n {...getVariant('layout.common.boxes.labelBox')}\r\n >\r\n <Box className=\"labelAndIcon\" as=\"span\">\r\n {label}\r\n </Box>\r\n {onClose && (\r\n <Box>\r\n <Close\r\n type=\"button\"\r\n className=\"closeButton\"\r\n onClick={onClose}\r\n title={closeTooltip}\r\n variant=\"icon-outline-danger\"\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { Box, Heading, getVariant } from '@apia/theme';\r\nimport { ReactNode, useState } from 'react';\r\nimport { IconButton } from '../../forms';\r\n\r\nexport const ContainerWithHeader = ({\r\n title,\r\n children,\r\n footerChildren,\r\n onClose,\r\n additionalButtons,\r\n}: {\r\n title: string;\r\n children: ReactNode;\r\n footerChildren?: ReactNode;\r\n additionalButtons?: ReactNode;\r\n onClose?: () => void;\r\n}) => {\r\n const [isFullScreen, setIsFullScreen] = useState(false);\r\n\r\n const handleExpandClick = () => {\r\n setIsFullScreen((prev) => !prev);\r\n };\r\n return (\r\n <Box\r\n className={`container ${isFullScreen ? 'fullScreen' : ''}`}\r\n {...getVariant('layout.common.components.containers.containerWithHeader')}\r\n >\r\n <Box className=\"container__header\">\r\n <Heading as=\"h2\">{title}</Heading>\r\n <Box className=\"container__rightButtons\">\r\n {additionalButtons}\r\n <IconButton\r\n className=\"container__rightButtons__maximizedBtn\"\r\n variant=\"outline\"\r\n icon={isFullScreen ? 'Minimize' : 'Maximize'}\r\n onClick={() => handleExpandClick()}\r\n />\r\n {onClose && (\r\n <IconButton\r\n variant=\"outline-danger\"\r\n icon=\"Close\"\r\n onClick={() => onClose()}\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n <Box className=\"container__content\">{children}</Box>\r\n {footerChildren && (\r\n <Box className=\"container__footer\">{footerChildren}</Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { ThemeUICSSObject, focusOutline, spacing } from '@apia/theme';\r\n\r\nconst collapsiblePanel: ThemeUICSSObject = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: spacing(2),\r\n '.collapsiblePanel__label': {\r\n display: 'flex',\r\n gap: spacing(2),\r\n p: '1px',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n\r\n '.collapsiblePanel__label__button': {\r\n display: 'flex',\r\n gap: spacing(2),\r\n p: '1px',\r\n alignItems: 'center',\r\n '&:focus': focusOutline,\r\n color: 'palette.text.primary',\r\n },\r\n },\r\n};\r\n\r\nexport default collapsiblePanel;\r\n","import React from 'react';\r\nimport { Box, Button } from '@apia/theme';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport isFunction from 'lodash-es/isFunction';\r\nimport {\r\n customEvents,\r\n persistentStorage,\r\n enableChildrenFocus,\r\n disableChildrenFocus as disableChildrenFocusMethod,\r\n useUpdateEffect,\r\n} from '@apia/util';\r\nimport { getVariant, injectStyles } from '@apia/theme';\r\nimport AnimateHeight from 'react-animate-height';\r\nimport collapsiblePanel from './collapsiblePanel';\r\nimport { ICollapsiblePanel } from './types';\r\nimport { Icon } from '@apia/icons';\r\n\r\ninjectStyles('layout.common.components.collapsiblePanel', collapsiblePanel);\r\n\r\nexport const CollapsiblePanel = React.forwardRef<\r\n HTMLDivElement,\r\n ICollapsiblePanel\r\n>(\r\n (\r\n {\r\n children,\r\n className,\r\n closedIcon = 'ArrowDownThin',\r\n collapsed,\r\n defaultCollapsed,\r\n disableChildrenFocus,\r\n iconSize = '20px',\r\n id,\r\n onClose,\r\n onOpen,\r\n openIcon = 'ArrowRightThin',\r\n label,\r\n rememberCollapsedState,\r\n titleButtons,\r\n minHeight = 0,\r\n 'aria-hidden': ariaHidden,\r\n collapseIconToRight,\r\n },\r\n outerRef,\r\n ) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const prefix = React.useMemo(() => (id ? '' : uniqueId()), []);\r\n const actualId = `${prefix}_${id ?? 'collapsiblePanel'}`;\r\n\r\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(\r\n rememberCollapsedState\r\n ? ((persistentStorage[`collapsiblePanel${actualId}`] ??\r\n defaultCollapsed ??\r\n collapsed) as boolean)\r\n : (defaultCollapsed ??\r\n collapsed ??\r\n (persistentStorage[`collapsiblePanel${actualId}`] as boolean)),\r\n );\r\n\r\n const [ref, setRef] = React.useState<HTMLDivElement | null>(null);\r\n\r\n const callOnOpen = React.useCallback(\r\n (updateState: unknown, ev?: React.MouseEvent) => {\r\n const onOpenResult = onOpen ? onOpen(ev) : null;\r\n if (onOpenResult) {\r\n void onOpenResult.then((result) => {\r\n if (result) if (updateState) setIsCollapsed((current) => !current);\r\n });\r\n } else if (updateState) setIsCollapsed((current) => !current);\r\n },\r\n [onOpen],\r\n );\r\n\r\n useUpdateEffect(() => {\r\n if (collapsed !== undefined) setIsCollapsed(collapsed);\r\n if (collapsed === false) callOnOpen(false);\r\n }, [collapsed]);\r\n\r\n useUpdateEffect(() => {\r\n if (isCollapsed) {\r\n if (onClose) onClose();\r\n persistentStorage[`collapsiblePanel${actualId}`] = true;\r\n if (ref && disableChildrenFocus)\r\n disableChildrenFocusMethod(\r\n ref.querySelector('.collapsiblePanel__content') as HTMLElement,\r\n );\r\n } else {\r\n persistentStorage[`collapsiblePanel${actualId}`] = false;\r\n if (ref && disableChildrenFocus)\r\n enableChildrenFocus(\r\n ref.querySelector('.collapsiblePanel__content') as HTMLElement,\r\n );\r\n }\r\n }, [isCollapsed]);\r\n\r\n React.useEffect(() => {\r\n const handleCustomFocus = () => setIsCollapsed(false);\r\n ref\r\n ?.querySelector('.collapsiblePanel__content')\r\n ?.addEventListener(customEvents.focus, handleCustomFocus);\r\n return () => {\r\n ref\r\n ?.querySelector('.collapsiblePanel__content')\r\n ?.removeEventListener(customEvents.focus, handleCustomFocus);\r\n };\r\n }, [id, isCollapsed, onClose, onOpen, ref]);\r\n\r\n return (\r\n <Box\r\n className={`collapsiblePanel ${className ?? ''}`}\r\n {...getVariant('layout.common.components.collapsiblePanel')}\r\n ref={(el: HTMLDivElement) => {\r\n if (isFunction(outerRef)) outerRef(el);\r\n setRef(el);\r\n }}\r\n >\r\n <Box className=\"collapsiblePanel__label\">\r\n <Button\r\n {...getVariant('inherit')}\r\n aria-expanded={!isCollapsed}\r\n onClick={(ev) => callOnOpen(true, ev)}\r\n type=\"button\"\r\n className=\"collapsiblePanel__label__button\"\r\n >\r\n {!collapseIconToRight && (\r\n <>\r\n {isCollapsed ? (\r\n <Icon title=\"\" icon={openIcon} size={iconSize} />\r\n ) : (\r\n <Icon title=\"\" icon={closedIcon} size={iconSize} />\r\n )}\r\n </>\r\n )}\r\n <span className=\"title\">{label}</span>\r\n {collapseIconToRight && (\r\n <>\r\n {isCollapsed ? (\r\n <Icon title=\"\" icon={openIcon} size={iconSize} />\r\n ) : (\r\n <Icon title=\"\" icon={closedIcon} size={iconSize} />\r\n )}\r\n </>\r\n )}\r\n </Button>\r\n {titleButtons}\r\n </Box>\r\n <AnimateHeight\r\n id={actualId}\r\n duration={150}\r\n height={isCollapsed ? minHeight : 'auto'}\r\n sx={{ '&>div': { display: 'block ' } }}\r\n aria-hidden={ariaHidden ?? isCollapsed}\r\n className=\"collapsiblePanel__content\"\r\n >\r\n {children}\r\n </AnimateHeight>\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nCollapsiblePanel.displayName = 'CollapsiblePanel';\r\n","import { KeyboardEvent, MouseEvent, ReactNode, createContext } from 'react';\r\nimport {\r\n TActionsMap,\r\n TUseProperties,\r\n TDistinctorProperties,\r\n} from '@apia/dom-store';\r\nimport { TListboxState, TRowDistinctions } from './common';\r\nimport { operations } from './operations';\r\nimport { TOnConfirmSelection, TOnSelectionChange } from '.';\r\nimport { BoxProps } from '@apia/theme';\r\n\r\nexport type TListbox = {\r\n children: ReactNode | ReactNode[];\r\n className?: string;\r\n /**\r\n * Permite remover los estilos por defecto de la lista a fin de personalizar\r\n * su aspecto\r\n */\r\n unstyled?: boolean;\r\n onClickNode?: (ev: MouseEvent<HTMLElement>) => unknown;\r\n onDoubleClickNode?: (ev: MouseEvent<HTMLElement>) => unknown;\r\n /**\r\n * Este evento es lanzado cuando el usuario estando en foco en la lista\r\n * presiona:\r\n *\r\n * - Enter si la selección múltiple está deshabilitada\r\n * - ctrl+Enter si la selección múltiple está habilitada\r\n */\r\n onConfirmSelection?: (ev: TOnConfirmSelection) => unknown;\r\n onPressEnterOnNode?: (ev: KeyboardEvent<HTMLElement>) => unknown;\r\n onPressKeyOnNode?: (ev: KeyboardEvent<HTMLElement>) => unknown;\r\n onSelectionChange?: (ev: TOnSelectionChange) => unknown;\r\n /**\r\n * onKeyDown e id no son permitidas dado que se usan para generar el\r\n * comportamiento correcto del componente\r\n */\r\n ulProps?: Omit<BoxProps, 'id' | 'onKeyDown' | 'sx'>;\r\n} & Partial<\r\n Pick<\r\n TListboxState,\r\n | 'allowMultipleCharacterSearch'\r\n | 'allowSelection'\r\n | 'allowSingleCharacterSearch'\r\n | 'isMultipleSelection'\r\n | 'searchFunction'\r\n | 'startsWithFunction'\r\n | 'showSearchbox'\r\n >\r\n>;\r\n\r\nexport type TListboxContext = {\r\n getState: () => TListboxState;\r\n id: string;\r\n listboxActions: TActionsMap<TListboxState, typeof operations>;\r\n useListbox: TUseProperties<\r\n TListboxState,\r\n {\r\n row: [\r\n (\r\n distinctions: TRowDistinctions,\r\n state: TListboxState,\r\n ) => TDistinctorProperties,\r\n ];\r\n searchbox: [\r\n (distinctions: null, state: TListboxState) => TDistinctorProperties,\r\n ];\r\n listbox: [\r\n (distinctions: null, state: TListboxState) => TDistinctorProperties,\r\n ];\r\n }\r\n >;\r\n variant: string;\r\n} & Pick<\r\n TListbox,\r\n | 'onClickNode'\r\n | 'onConfirmSelection'\r\n | 'onDoubleClickNode'\r\n | 'onPressEnterOnNode'\r\n | 'onPressKeyOnNode'\r\n>;\r\n\r\nconst ListboxContext = createContext<TListboxContext>({} as TListboxContext);\r\n\r\nexport { ListboxContext };\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n FC,\r\n MouseEvent,\r\n ReactNode,\r\n memo,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n} from 'react';\r\nimport { ListboxContext } from './ListboxContext';\r\nimport { BoxProps } from '@apia/theme';\r\nimport { decodeHTMLEntities } from '@apia/util';\r\n\r\nexport type TListboxItem = {\r\n children?: ReactNode;\r\n rowIndex?: number;\r\n} & BoxProps & {\r\n /**\r\n * El label se usa en aria-label por motivos de accesibilidad y además en\r\n * la funcionalidad de búsqueda.\r\n */\r\n label: string;\r\n };\r\n\r\nexport const ListboxItem: FC<TListboxItem> = memo(\r\n ({ children, rowIndex: outerRowIndex, label, ...domProps }) => {\r\n const {\r\n getState,\r\n listboxActions,\r\n onDoubleClickNode,\r\n onClickNode,\r\n useListbox,\r\n } = useContext(ListboxContext);\r\n const rowIndex = useMemo(() => outerRowIndex ?? -1, [outerRowIndex]);\r\n const ref = useListbox<HTMLLIElement>('row', { rowIndex });\r\n\r\n return (\r\n <>\r\n {domProps.className?.includes('separator') && (\r\n <li className=\"separator\"></li>\r\n )}\r\n <li\r\n {...(domProps as any)}\r\n className={`${\r\n domProps.className\r\n ?.split(' ')\r\n .filter((current) => current !== 'separator')\r\n .join(' ') ?? ''\r\n } listbox__row`}\r\n ref={ref}\r\n role=\"option\"\r\n onDoubleClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n onDoubleClickNode?.({\r\n ...ev,\r\n target: (ev.target as HTMLElement).closest(\r\n '[role=\"option\"]',\r\n ) as HTMLElement,\r\n });\r\n },\r\n [onDoubleClickNode],\r\n )}\r\n onMouseDown={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n onClickNode?.({\r\n ...ev,\r\n target: (ev.target as HTMLElement).closest(\r\n '[role=\"option\"]',\r\n ) as HTMLElement,\r\n });\r\n if (\r\n (getState().isMultipleSelection && ev.shiftKey) ||\r\n ev.detail > 1\r\n )\r\n ev.preventDefault();\r\n listboxActions.updateFocusByClickEvent({\r\n rowIndex,\r\n isCtrlKey: ev.ctrlKey,\r\n isShiftKey: ev.shiftKey,\r\n });\r\n },\r\n [getState, listboxActions, onClickNode, rowIndex],\r\n )}\r\n aria-label={label}\r\n title={useMemo(() => decodeHTMLEntities(label), [label])}\r\n >\r\n {children}\r\n </li>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nListboxItem.displayName = 'ListboxItem';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/**\r\n * Type-ahead is a behavior pattern which helps the user in the lists and trees\r\n * (and literally says: \"especially those with more than seven options\")\r\n * navigation. The literal description in Wai-Aria documentation is:\r\n *\r\n * - Type a character: focus moves to the next item with a name that starts\r\n * with the typed character.\r\n *\r\n * - Type multiple characters in rapid succession:\r\n * focus moves to the next item with a name that starts with the string of\r\n * characters typed.\r\n *\r\n * It is a little arbitrary what is rapid succession. As I couln't find any\r\n * documentation about what rapid succession means, I will make some tests in\r\n * order to determine what is more comfortable to accomplish one situation or\r\n * the other.\r\n *\r\n * To callibrate this function it is suficient to override the frequency\r\n * parameter, which after some tests I understand is best at 2.5 (keys per\r\n * second).\r\n */\r\n\r\nimport { EventEmitter } from '@apia/util';\r\nimport { KeyboardEvent } from 'react';\r\n\r\nclass WaiTypeAhead extends EventEmitter<{\r\n multipleKeys: string;\r\n singleKey: string;\r\n typeUpdate: string;\r\n}> {\r\n frequency = 2.5; // Keys per second\r\n timeout = 0;\r\n typing = '';\r\n\r\n constructor(props?: {\r\n onMultipleKeys?: (value: string) => unknown;\r\n onSingleKey?: (value: string) => unknown;\r\n onTypeUpdate?: (value: string) => unknown;\r\n }) {\r\n super();\r\n\r\n const { onMultipleKeys, onSingleKey, onTypeUpdate } = props ?? {};\r\n\r\n if (onMultipleKeys) this.on('multipleKeys', onMultipleKeys);\r\n if (onSingleKey) this.on('singleKey', onSingleKey);\r\n if (onTypeUpdate) this.on('typeUpdate', onTypeUpdate);\r\n }\r\n\r\n #restoreTimeout() {\r\n clearTimeout(this.timeout);\r\n\r\n this.timeout = setTimeout(\r\n this.#shout.bind(this),\r\n 1000 / this.frequency,\r\n ) as any;\r\n }\r\n\r\n #shout({ clear } = { clear: true }) {\r\n if (this.typing.length === 1) {\r\n this.emit('singleKey', this.typing);\r\n } else if (this.typing.length > 1) {\r\n this.emit('multipleKeys', this.typing);\r\n }\r\n if (clear) {\r\n this.typing = '';\r\n }\r\n }\r\n\r\n type(ev: KeyboardEvent) {\r\n if (ev.key.match(/^[\\p{L}\\d ]$/u)) {\r\n ev.preventDefault();\r\n this.typing = this.typing + ev.key;\r\n this.emit('typeUpdate', this.typing);\r\n this.#restoreTimeout();\r\n } else if (ev.code === 'Backspace') {\r\n ev.preventDefault();\r\n this.typing = this.typing.slice(0, -1);\r\n this.emit('typeUpdate', this.typing);\r\n this.#restoreTimeout();\r\n }\r\n }\r\n}\r\n\r\nexport { WaiTypeAhead };\r\n","import {\r\n FC,\r\n KeyboardEvent,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n} from 'react';\r\nimport { ListboxContext, TListbox } from './ListboxContext';\r\nimport { Box } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { WaiTypeAhead } from '../waiAriaHelpers';\r\n\r\nconst ListboxKeyhandler: FC<\r\n {\r\n children: ReactNode;\r\n className: string;\r\n } & TListbox['ulProps']\r\n> = ({ children, className }) => {\r\n const {\r\n listboxActions,\r\n id,\r\n getState,\r\n onConfirmSelection,\r\n onPressEnterOnNode,\r\n onPressKeyOnNode,\r\n variant,\r\n } = useContext(ListboxContext);\r\n\r\n const typer = useMemo(\r\n () =>\r\n getState().showSearchbox\r\n ? null\r\n : new WaiTypeAhead({\r\n onMultipleKeys(characters) {\r\n listboxActions.searchElementsByStartingCharacters({\r\n characters,\r\n });\r\n },\r\n onSingleKey(characters) {\r\n listboxActions.searchElementsByStartingCharacters({\r\n characters,\r\n });\r\n },\r\n }),\r\n [getState, listboxActions],\r\n );\r\n\r\n const shoutConfirmSelection = useCallback(\r\n (ev: KeyboardEvent) => {\r\n onConfirmSelection?.({\r\n originalEvent: ev,\r\n selectedElements: !getState().allowSelection\r\n ? []\r\n : getState().selectedRows.map(\r\n (current) =>\r\n document.querySelector<HTMLElement>(\r\n `#${id}__row__${current}`,\r\n ) as HTMLElement,\r\n ),\r\n focusedElement: document.querySelector<HTMLElement>(\r\n `#${id}__row__${getState().focusedRow}`,\r\n ) as HTMLElement,\r\n });\r\n },\r\n [getState, id, onConfirmSelection],\r\n );\r\n\r\n return (\r\n <Box\r\n {...getVariant(variant)}\r\n className={className}\r\n id={id}\r\n onKeyDown={useCallback(\r\n (ev: KeyboardEvent) => {\r\n const cell = (ev.target as HTMLElement)\r\n .closest<HTMLElement>('.listbox__list')\r\n ?.querySelector<HTMLElement>('.listbox__row.focused');\r\n if (!cell)\r\n throw new Error(\r\n 'There is no cell on keydown event, it must be an error.',\r\n );\r\n\r\n const state = getState();\r\n onPressKeyOnNode?.({ ...ev, target: cell, currentTarget: cell });\r\n\r\n if (ev.code === 'Enter') {\r\n onPressEnterOnNode?.({ ...ev, target: cell, currentTarget: cell });\r\n }\r\n\r\n if (ev.isDefaultPrevented() || ev.isPropagationStopped()) return;\r\n\r\n if (\r\n [\r\n 'ArrowRight',\r\n 'ArrowLeft',\r\n 'ArrowDown',\r\n 'ArrowUp',\r\n 'PageUp',\r\n 'PageDown',\r\n ].includes(ev.code) ||\r\n (['Home', 'End'].includes(ev.code) && ev.ctrlKey) ||\r\n // La selección múltiple cuando no se muestra el searchbox se hace\r\n // con espacio\r\n (['Space'].includes(ev.code) &&\r\n state.isMultipleSelection &&\r\n !state.showSearchbox) ||\r\n // La selección múltiple siempre puede hacerse con Enter\r\n (['Enter'].includes(ev.code) && state.isMultipleSelection) ||\r\n (['KeyA'].includes(ev.code) &&\r\n state.isMultipleSelection &&\r\n ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n\r\n switch (ev.code) {\r\n case 'KeyA':\r\n listboxActions.selectAll();\r\n break;\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'next',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'previous',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'Home':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'first',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'End':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'last',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'Enter':\r\n if (ev.ctrlKey) {\r\n shoutConfirmSelection(ev);\r\n }\r\n break;\r\n case 'Space':\r\n listboxActions.updateFocusBySpaceEvent({\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'PageUp':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'pageUp',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n case 'PageDown':\r\n listboxActions.moveFocusAndToggleSelection({\r\n which: 'pageDown',\r\n isShiftKey: ev.shiftKey,\r\n });\r\n break;\r\n }\r\n } else if (\r\n ev.code === 'Enter' &&\r\n (!state.allowSelection || !state.isMultipleSelection)\r\n ) {\r\n shoutConfirmSelection(ev);\r\n } else if (typer) {\r\n typer.type(ev);\r\n }\r\n },\r\n [\r\n getState,\r\n listboxActions,\r\n onPressEnterOnNode,\r\n onPressKeyOnNode,\r\n shoutConfirmSelection,\r\n typer,\r\n ],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { ListboxKeyhandler };\r\n","import { ChangeEvent, FC, ReactNode, useCallback, useContext } from 'react';\r\nimport { ListboxContext } from './ListboxContext';\r\nimport { useDebouncedCallback } from '@apia/util';\r\nimport { Box, BoxProps, Input } from '@apia/theme';\r\n\r\nconst Combobox: FC<{ children: ReactNode } & BoxProps> = ({\r\n children,\r\n ...props\r\n}) => {\r\n const { id, listboxActions, useListbox } = useContext(ListboxContext);\r\n const run = useDebouncedCallback((ev: ChangeEvent<HTMLInputElement>) => {\r\n listboxActions.filter({ searchString: ev.target.value });\r\n });\r\n\r\n const ref = useListbox<HTMLInputElement>('searchbox', null);\r\n\r\n return (\r\n <>\r\n <Input\r\n ref={ref}\r\n type=\"text\"\r\n id={`${id}__searchbox`}\r\n placeholder=\"Search...\"\r\n aria-autocomplete=\"list\"\r\n aria-controls={`${id}__list__container`}\r\n role=\"combobox\"\r\n aria-expanded\r\n aria-haspopup=\"listbox\"\r\n onChange={run}\r\n autoComplete=\"off\"\r\n />\r\n <Box\r\n as=\"ul\"\r\n id={`${id}__list__container`}\r\n role=\"listbox\"\r\n className=\"listbox__list\"\r\n {...props}\r\n onClick={useCallback(() => {\r\n if (\r\n document.activeElement !==\r\n document.getElementById(`${id}__searchbox`)\r\n )\r\n document.getElementById(`${id}__searchbox`)?.focus();\r\n }, [id])}\r\n >\r\n {children}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport { Combobox };\r\n","import { focusOutline } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n '&:focus-within': {\r\n '.listbox__list': {\r\n outline: 'none',\r\n },\r\n\r\n '.focused': focusOutline,\r\n\r\n '&.withSearchbox': {\r\n '.focused': {\r\n outline: '1px solid',\r\n outlineColor: 'palette.border.field',\r\n outlineOffset: 0,\r\n },\r\n '.listbox__searchbox': focusOutline,\r\n },\r\n },\r\n\r\n '.listbox__list': {\r\n listStyle: 'none',\r\n m: 0,\r\n p: 0,\r\n },\r\n\r\n '&.withSearchbox': {\r\n '.listbox__list': {\r\n maxHeight: 'calc(100vh - 80px)',\r\n overflow: 'auto',\r\n },\r\n },\r\n\r\n '.listbox__row': {\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n\r\n '&:hover': (theme) => {\r\n return {\r\n ...theme.palette.getOneState(\r\n { backgroundColor: 'palette.background.paper' },\r\n 'hover',\r\n ),\r\n cursor: 'pointer',\r\n };\r\n },\r\n },\r\n};\r\n","import { Draft, TKeysDefine } from '@apia/dom-store';\r\nimport { TListboxState, makeRowKey } from './common';\r\nimport { addBoundary, getIndex } from '@apia/util';\r\n\r\ntype TListboxOperation<Payload> = (\r\n state: Draft<TListboxState>,\r\n payload: Payload,\r\n keys: TKeysDefine,\r\n) => void;\r\n\r\nconst filter: TListboxOperation<{\r\n searchString: string;\r\n}> = makeOperation((state, { searchString }, keys) => {\r\n let focusChanged = false;\r\n const rows = new Array(state.rowsCount).fill(1).map((_, i) => i);\r\n\r\n const shownRows: number[] = [];\r\n const hiddenRows = rows.filter((_, i) => {\r\n const el = document.getElementById(`${state.id}__row__${i}`);\r\n if (!el) {\r\n console.warn('Element not found', `${state.id}__row__${i}`);\r\n return false;\r\n }\r\n\r\n const matches = state.searchFunction(el.ariaLabel ?? '', searchString);\r\n\r\n if (matches) {\r\n el.style.display = 'block';\r\n } else {\r\n el.style.display = 'none';\r\n }\r\n\r\n if (matches) shownRows.push(i);\r\n else if (state.focusedRow === i) {\r\n focusChanged = true;\r\n }\r\n\r\n return !matches;\r\n });\r\n keys.set(hiddenRows.map((current) => makeRowKey(current)));\r\n state.hiddenRows = hiddenRows;\r\n state.shownRows = shownRows;\r\n\r\n if (focusChanged) {\r\n for (const row of rows) {\r\n if (!hiddenRows.includes(row)) {\r\n state.focusedRow = row;\r\n keys.push(makeRowKey(row));\r\n keys.push(makeRowKey(state.focusedRow));\r\n break;\r\n }\r\n }\r\n }\r\n});\r\n\r\nfunction makeOperation<T>(operation: TListboxOperation<T>) {\r\n const method: TListboxOperation<T> = (state, payload, keys) => {\r\n keys.push('searchbox');\r\n keys.push('listbox');\r\n operation(state, payload, keys);\r\n };\r\n return method;\r\n}\r\n\r\nconst moveFocusAndToggleSelection: TListboxOperation<{\r\n isShiftKey: boolean;\r\n which: 'next' | 'previous' | 'first' | 'last' | 'pageUp' | 'pageDown';\r\n}> = makeOperation((state, { isShiftKey, which }, keys) => {\r\n if (state.shownRows.length <= 1) {\r\n keys.push(makeRowKey(state.focusedRow));\r\n state.focusedRow = state.shownRows[0];\r\n\r\n if (state.shownRows.length === 1) keys.push(makeRowKey(state.focusedRow));\r\n\r\n return;\r\n }\r\n\r\n switch (which) {\r\n case 'first':\r\n {\r\n const newFocused = state.shownRows[0];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n const selectedElements = new Array(state.focusedRow + 1)\r\n .fill(1)\r\n .map((_, i) => i);\r\n keys.set(selectedElements.map((_, i) => makeRowKey(i)));\r\n state.selectedRows = selectedElements;\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n case 'last':\r\n {\r\n const newFocused = state.shownRows[state.shownRows.length - 1];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n const selectedElements = new Array(\r\n state.rowsCount - state.focusedRow,\r\n )\r\n .fill(1)\r\n .map((_, i) => i + Math.min(newFocused, state.focusedRow));\r\n keys.push(...selectedElements.map((i) => makeRowKey(i)));\r\n state.selectedRows = selectedElements;\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n case 'previous':\r\n case 'next':\r\n case 'pageDown':\r\n case 'pageUp':\r\n {\r\n const sum = getIndex(\r\n [-1, 1, -10, 10],\r\n [\r\n which === 'previous',\r\n which === 'next',\r\n which === 'pageUp',\r\n which === 'pageDown',\r\n ],\r\n );\r\n\r\n const currentIndex = state.shownRows.findIndex(\r\n (current) => state.focusedRow === current,\r\n );\r\n const newFocused =\r\n state.shownRows[\r\n addBoundary({\r\n number: currentIndex + sum,\r\n min: 0,\r\n max: state.shownRows.length - 1,\r\n })\r\n ];\r\n if (newFocused === state.focusedRow) return;\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(newFocused));\r\n\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n if (state.selectedRows.includes(newFocused)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== newFocused,\r\n );\r\n } else {\r\n state.selectedRows.push(newFocused);\r\n }\r\n state.lastSelectedRow = newFocused;\r\n }\r\n } else {\r\n state.selectedRows = [newFocused];\r\n state.lastSelectedRow = newFocused;\r\n }\r\n\r\n state.focusedRow = newFocused;\r\n }\r\n break;\r\n }\r\n state.isEverythingSelected = false;\r\n});\r\n\r\nconst resetFocus: TListboxOperation<null> = makeOperation((state, _, keys) => {\r\n keys.push(makeRowKey(state.focusedRow));\r\n state.focusedRow = 0;\r\n keys.push(makeRowKey(0));\r\n});\r\n\r\nconst searchElementsByStartingCharacters: TListboxOperation<{\r\n characters: string;\r\n}> = makeOperation((state, payload, keys) => {\r\n const currentIndex = state.shownRows.findIndex(\r\n (current) => current === state.focusedRow,\r\n );\r\n\r\n function match(rowIndex: number) {\r\n keys.push(makeRowKey(state.focusedRow));\r\n\r\n state.focusedRow = rowIndex;\r\n\r\n if (!state.isMultipleSelection) {\r\n keys.push(...state.selectedRows.map((current) => makeRowKey(current)));\r\n state.selectedRows = [rowIndex];\r\n }\r\n\r\n keys.push(makeRowKey(state.focusedRow));\r\n }\r\n\r\n function tryIndex(rowIndex: number) {\r\n const el = document.getElementById(`${state.id}__row__${rowIndex}`);\r\n if (!el) {\r\n console.warn('Element not found', `${state.id}__row__${rowIndex}`);\r\n return false;\r\n }\r\n\r\n const matches = state.startsWithFunction(\r\n el.ariaLabel ?? '',\r\n payload.characters,\r\n );\r\n\r\n if (matches) {\r\n match(state.shownRows[rowIndex]);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n for (let i = currentIndex + 1; i < state.shownRows.length; i++) {\r\n if (tryIndex(i)) return;\r\n }\r\n\r\n for (let i = 0; i < currentIndex; i++) {\r\n if (tryIndex(i)) return;\r\n }\r\n});\r\n\r\n/**\r\n * No actualiza ningún key porque al llamar a selectAll, todos los elementos\r\n * son afectados y el comportamiento por defecto del store es actualizar todo\r\n */\r\nconst selectAll: TListboxOperation<void> = makeOperation((state, _, keys) => {\r\n keys.push(...state.selectedRows.map(makeRowKey));\r\n if (state.isEverythingSelected) {\r\n state.isEverythingSelected = false;\r\n state.selectedRows = [];\r\n } else {\r\n state.isEverythingSelected = true;\r\n state.selectedRows = state.shownRows;\r\n }\r\n state.lastSelectedRow = state.focusedRow;\r\n keys.push(...state.shownRows.map(makeRowKey));\r\n});\r\n\r\nconst setState: TListboxOperation<\r\n Partial<TListboxState> & { affectedKeys: string[] }\r\n> = makeOperation((state, { affectedKeys, ...payload }, keys) => {\r\n const newRowsCount = payload.rowsCount ?? state.rowsCount;\r\n if (state.rowsCount < newRowsCount) {\r\n for (let i = state.rowsCount; i < (payload.rowsCount as number); i++) {\r\n state.shownRows.push(i);\r\n }\r\n } else if (state.rowsCount > newRowsCount) {\r\n state.shownRows = state.shownRows.filter(\r\n (current) => current < newRowsCount,\r\n );\r\n if (state.focusedRow > newRowsCount - 1) {\r\n state.focusedRow = newRowsCount - 1;\r\n keys.push(makeRowKey(state.focusedRow));\r\n }\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current < newRowsCount,\r\n );\r\n }\r\n\r\n Object.assign(state, payload);\r\n keys.set(affectedKeys);\r\n state.isEverythingSelected = false;\r\n});\r\n\r\nconst updateFocusByClickEvent: TListboxOperation<{\r\n rowIndex: number;\r\n isCtrlKey: boolean;\r\n isShiftKey: boolean;\r\n}> = makeOperation((state, payload, keys) => {\r\n keys.push(makeRowKey(state.focusedRow));\r\n keys.push(makeRowKey(payload.rowIndex));\r\n\r\n state.focusedRow = payload.rowIndex;\r\n if (payload.isShiftKey) {\r\n updateFocusBySpaceEvent(state, { isShiftKey: payload.isShiftKey }, keys);\r\n } else {\r\n state.lastSelectedRow = payload.rowIndex;\r\n if (payload.isCtrlKey) {\r\n if (state.selectedRows.includes(payload.rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== payload.rowIndex,\r\n );\r\n } else {\r\n state.selectedRows.push(payload.rowIndex);\r\n }\r\n } else {\r\n keys.push(...state.selectedRows.map((current) => makeRowKey(current)));\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n }\r\n});\r\n\r\nconst updateFocusBySpaceEvent: TListboxOperation<{\r\n isShiftKey: boolean;\r\n}> = makeOperation((state, { isShiftKey }, keys) => {\r\n const rowIndex = state.focusedRow;\r\n keys.push(makeRowKey(rowIndex));\r\n if (state.isMultipleSelection) {\r\n if (isShiftKey) {\r\n if (state.lastSelectedRow === -1) {\r\n state.selectedRows.push(rowIndex);\r\n } else {\r\n const newSelection = new Array(\r\n Math.abs(state.lastSelectedRow - rowIndex),\r\n )\r\n .fill(1)\r\n .map(\r\n (_, i) =>\r\n i +\r\n Math.min(rowIndex, state.lastSelectedRow) +\r\n (state.lastSelectedRow > rowIndex ? 0 : 1),\r\n );\r\n keys.push(...newSelection.map((current) => makeRowKey(current)));\r\n newSelection.forEach((current) => {\r\n if (!state.shownRows.includes(current)) return;\r\n\r\n if (state.selectedRows.includes(current)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (search) => search !== current,\r\n );\r\n } else {\r\n state.selectedRows.push(current);\r\n }\r\n });\r\n }\r\n } else {\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (current) => current !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows.push(rowIndex);\r\n }\r\n }\r\n }\r\n state.lastSelectedRow = rowIndex;\r\n});\r\n\r\nconst operations = {\r\n filter,\r\n /**\r\n // eslint-disable-next-line comment-length/limit-multi-line-comments\r\n * **Este método debe llamarse solamente cuando se efectúan acciones desde el\r\n * teclado**. Su función es controlar el flujo correcto de foco y selección de\r\n * acuerdo a las especificaciones de wai-aria.\r\n */\r\n moveFocusAndToggleSelection,\r\n resetFocus,\r\n /**\r\n * Este método debe utilizarse para la búsqueda por caracter simple o\r\n * múltiple en cuanto a la implementación de las funcionalidades\r\n * especificadas por wai-aria.\r\n */\r\n searchElementsByStartingCharacters,\r\n /**\r\n * **Método empleado cuando se presiona ctrl+shift+A**. Su función es\r\n * controlar el flujo correcto de foco y selección de acuerdo a las\r\n * especificaciones de wai-aria.\r\n */\r\n selectAll,\r\n /**\r\n * Permite alterar el estado en forma arbitraria. Debe pasarse un array con\r\n * los keys afectados por la acción efectuada.\r\n */\r\n setState,\r\n /**\r\n * **Este método debe llamarse solamente cuando se efectúan acciones con el\r\n * mouse**. Su función es controlar el flujo correcto de foco y selección de\r\n * acuerdo a las especificaciones de wai-aria.\r\n */\r\n updateFocusByClickEvent,\r\n /**\r\n * **Este método debe llamarse solamente cuando se efectúan acciones con la\r\n * tecla espacio**. Su función es controlar el flujo correcto de foco y\r\n * selección de acuerdo a las especificaciones de wai-aria.\r\n */\r\n updateFocusBySpaceEvent,\r\n};\r\nexport { operations };\r\n","import { createFAsomeStore } from '@apia/dom-store';\r\nimport { useMemo } from 'react';\r\nimport { getInitialState, getDistinctors, keysMakers } from './common';\r\nimport { operations } from './operations';\r\nimport { TListbox } from './ListboxContext';\r\n\r\nexport function useStore(\r\n storeId: string,\r\n {\r\n allowMultipleCharacterSearch,\r\n allowSelection,\r\n allowSingleCharacterSearch,\r\n isMultipleSelection,\r\n searchFunction,\r\n showSearchbox,\r\n startsWithFunction,\r\n }: TListbox,\r\n) {\r\n return useMemo(() => {\r\n const newStore = createFAsomeStore({\r\n initialState: getInitialState({\r\n allowSelection: allowSelection ?? true,\r\n allowMultipleCharacterSearch:\r\n (allowMultipleCharacterSearch ?? true) && !showSearchbox,\r\n allowSingleCharacterSearch:\r\n (allowSingleCharacterSearch ?? true) && !showSearchbox,\r\n id: storeId,\r\n isMultipleSelection: !!isMultipleSelection,\r\n searchFunction,\r\n showSearchbox: showSearchbox ?? false,\r\n startsWithFunction,\r\n }),\r\n operations,\r\n distinctors: getDistinctors(storeId),\r\n keysMakers,\r\n });\r\n\r\n return newStore;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useMemo } from 'react';\r\nimport { TRegisterStateChangeListener } from '@apia/dom-store';\r\nimport { TListbox } from './ListboxContext';\r\nimport { TListboxState } from './common';\r\n\r\nexport function useShoutSelectionChange(\r\n onSelectionChange: TListbox['onSelectionChange'],\r\n registerCallback: TRegisterStateChangeListener<TListboxState>,\r\n) {\r\n useMemo(\r\n function shoutSelectionChange() {\r\n registerCallback((state, previousState) => {\r\n if (state.selectedRows !== previousState.selectedRows) {\r\n onSelectionChange?.({\r\n focusedElement: document.querySelector<HTMLElement>(\r\n `#${state.id}__row__${state.focusedRow}`,\r\n ) as HTMLElement,\r\n selectedElements: state.selectedRows.map((current) => {\r\n return document.querySelector<HTMLElement>(\r\n `#${state.id}__row__${current}`,\r\n ) as HTMLElement;\r\n }),\r\n });\r\n }\r\n });\r\n },\r\n [onSelectionChange, registerCallback],\r\n );\r\n}\r\n","import {\r\n useMemo,\r\n Children,\r\n isValidElement,\r\n cloneElement,\r\n ReactElement,\r\n} from 'react';\r\nimport { ListboxItem, TListboxItem } from './ListboxItem';\r\nimport { useStore } from './useStore';\r\n\r\nexport function useIndexedChildren(\r\n children: React.ReactNode | React.ReactNode[],\r\n listboxActions: ReturnType<typeof useStore>[0],\r\n) {\r\n return useMemo(\r\n function makeChildrenIndices() {\r\n listboxActions.resetFocus(null);\r\n\r\n return Children.map(children, (child, rowIndex) => {\r\n if (isValidElement(child) && child.type === ListboxItem) {\r\n return cloneElement<TListboxItem>(\r\n child as ReactElement<TListboxItem>,\r\n {\r\n rowIndex,\r\n },\r\n );\r\n }\r\n return child;\r\n });\r\n },\r\n [children, listboxActions],\r\n );\r\n}\r\n","import { TGetState } from '@apia/dom-store';\r\nimport { useCallback } from 'react';\r\nimport { TListboxState } from './common';\r\nimport { findScrollContainer } from '@apia/util';\r\n\r\nexport function useListboxAutofocus(\r\n storeId: string,\r\n getState: TGetState<TListboxState>,\r\n) {\r\n return {\r\n onClick: useCallback(() => {\r\n if (\r\n document.activeElement !==\r\n document.querySelector(`#${storeId} .listbox__list`)\r\n ) {\r\n const el = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__list`,\r\n );\r\n el?.focus({ preventScroll: true });\r\n el?.scrollIntoView({\r\n behavior: 'instant' as unknown as 'instant',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n }\r\n }, [storeId]),\r\n onFocus: useCallback(() => {\r\n const focusedRowId = getState().focusedRow + 1;\r\n const focusedRow = document.querySelector<HTMLElement>(\r\n `#${storeId} .listbox__list .listbox__row:nth-child(${focusedRowId})`,\r\n );\r\n\r\n if (focusedRow) {\r\n focusedRow.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const scrollContainer = findScrollContainer(focusedRow);\r\n\r\n if (scrollContainer && scrollContainer !== document.body) {\r\n scrollContainer.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n const elRect = focusedRow.getBoundingClientRect();\r\n const contRect = scrollContainer.getBoundingClientRect();\r\n\r\n if (elRect.top - contRect.top < elRect.height)\r\n scrollContainer.scrollTop -= elRect.height;\r\n }\r\n }\r\n }, [getState, storeId]),\r\n };\r\n}\r\n","import { Children, isValidElement, useMemo } from 'react';\r\nimport { ListboxItem } from './ListboxItem';\r\nimport { TActionsMap } from '@apia/dom-store';\r\nimport { TListboxState } from './common';\r\nimport { operations } from './operations';\r\n\r\nexport function useUpdateRowCount(\r\n children: React.ReactNode | React.ReactNode[],\r\n listboxActions: TActionsMap<TListboxState, typeof operations>,\r\n) {\r\n useMemo(\r\n function updateRowCount() {\r\n let count = 0;\r\n Children.forEach(children, (current) => {\r\n if (isValidElement(current) && current.type === ListboxItem) count++;\r\n });\r\n listboxActions.setState({ rowsCount: count, affectedKeys: [] });\r\n },\r\n [listboxActions, children],\r\n );\r\n}\r\n","import { useMemo } from 'react';\r\nimport { TListboxContext } from './ListboxContext';\r\n\r\nexport function useListboxContextValue(props: TListboxContext) {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return useMemo(() => props, [...Object.values(props)]);\r\n}\r\n","import { KeyboardEvent, memo, MouseEvent, useMemo } from 'react';\r\nimport { uniqueId } from './common';\r\nimport { ListboxItem } from './ListboxItem';\r\nimport { ListboxContext, TListbox } from './ListboxContext';\r\nimport { ListboxKeyhandler } from './ListboxKeyhandler';\r\nimport { Combobox } from './Combobox';\r\nimport { makeStyledComponent } from '@apia/theme';\r\nimport { Box } from '@apia/theme';\r\nimport { styles } from './listbox';\r\nimport { useStore } from './useStore';\r\nimport { useShoutSelectionChange } from './useShoutSelectionChange';\r\nimport { useIndexedChildren } from './useIndexedChildren';\r\nimport { useListboxAutofocus } from './useListboxAutofocus';\r\nimport { useUpdateRowCount } from './useUpdateRowCount';\r\nimport { useListboxContextValue } from './useListboxContextValue';\r\n\r\nexport type TOnConfirmSelection = {\r\n originalEvent: KeyboardEvent;\r\n\r\n selectedElements: HTMLElement[];\r\n focusedElement: HTMLElement;\r\n};\r\n\r\nexport type TOnSelectionChange = {\r\n focusedElement: HTMLElement;\r\n selectedElements: HTMLElement[];\r\n};\r\n\r\nexport type TOnClickNode = MouseEvent;\r\n\r\nexport type { TListbox };\r\n\r\nconst NoMemoListbox = makeStyledComponent<TListbox>(\r\n 'Listbox',\r\n 'layout.components.listbox',\r\n styles,\r\n (props: TListbox) => {\r\n const storeId = useMemo(() => uniqueId('Listbox'), []);\r\n const [listboxActions, useListbox, getState, registerCallback] = useStore(\r\n storeId,\r\n props,\r\n );\r\n\r\n useShoutSelectionChange(props.onSelectionChange, registerCallback);\r\n useUpdateRowCount(props.children, listboxActions);\r\n\r\n const indexedChildren = useIndexedChildren(props.children, listboxActions);\r\n const { onClick, onFocus } = useListboxAutofocus(storeId, getState);\r\n const ref = useListbox<HTMLElement>('listbox', null);\r\n const variant = props.unstyled ? '' : 'layout.components.listbox';\r\n const contextValue = useListboxContextValue({\r\n getState,\r\n id: storeId,\r\n listboxActions,\r\n onClickNode: props.onClickNode,\r\n onConfirmSelection: props.onConfirmSelection,\r\n onDoubleClickNode: props.onDoubleClickNode,\r\n onPressEnterOnNode: props.onPressEnterOnNode,\r\n onPressKeyOnNode: props.onPressKeyOnNode,\r\n useListbox,\r\n variant,\r\n });\r\n\r\n return (\r\n <ListboxContext.Provider value={contextValue}>\r\n <ListboxKeyhandler\r\n className={`listbox ${props.showSearchbox ? 'withSearchbox' : ''} ${\r\n props.className ?? ''\r\n }`}\r\n {...props.ulProps}\r\n >\r\n {props.showSearchbox ? (\r\n <Combobox {...props.ulProps}>{indexedChildren}</Combobox>\r\n ) : (\r\n <Box\r\n ref={ref}\r\n as=\"ul\"\r\n role=\"listbox\"\r\n tabIndex={0}\r\n onClick={onClick}\r\n onFocus={onFocus}\r\n {...props.ulProps}\r\n className={`listbox__list ${props?.ulProps?.className ?? ''}`}\r\n >\r\n {indexedChildren}\r\n </Box>\r\n )}\r\n </ListboxKeyhandler>\r\n </ListboxContext.Provider>\r\n );\r\n },\r\n true,\r\n);\r\n\r\nconst Listbox = memo(NoMemoListbox);\r\n\r\nexport { Listbox, ListboxItem };\r\n","import { BarLoader } from 'react-spinners';\r\nimport { Box, useThemeUI } from '@apia/theme';\r\n\r\nconst LinearLoader = () => {\r\n const theme = useThemeUI();\r\n return (\r\n <Box\r\n sx={{\r\n '*': { height: '6.5px !important' },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n zIndex: 'tooltip',\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n }}\r\n className=\"linearLoader\"\r\n >\r\n <BarLoader width=\"100%\" color={theme.theme.palette.primary.main} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LinearLoader;\r\n","import { getVariant } from '@apia/theme';\r\nimport { FC } from 'react';\r\nimport { Progress, Label } from '@apia/theme';\r\n\r\nexport interface IProgressBar {\r\n id: string;\r\n progress?: number;\r\n loading?: boolean;\r\n}\r\n\r\nconst ProgressBar: FC<IProgressBar> = ({\r\n id,\r\n progress = 0,\r\n loading = false,\r\n}) => {\r\n return (\r\n <>\r\n <Label\r\n htmlFor={id}\r\n sx={{\r\n display: loading ? 'block' : 'none',\r\n m: '0px',\r\n }}\r\n >\r\n {`${progress}%`}\r\n </Label>\r\n <Progress\r\n id={id}\r\n max={100}\r\n value={progress}\r\n {...getVariant('styles.progress')}\r\n sx={{\r\n display: loading ? 'block' : 'none',\r\n }}\r\n >\r\n {`${progress}%`}\r\n </Progress>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProgressBar;\r\n","import { getVariant, makeStyledComponent } from '@apia/theme';\r\nimport { Spinner } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n height: 'iconmd',\r\n width: 'iconmd',\r\n background: 'transparent',\r\n};\r\n\r\nconst LoaderSpinner = makeStyledComponent(\r\n 'LoaderSpinner',\r\n 'layout.common.components.loaderSpinner',\r\n styles,\r\n ({ className }: { className?: string }) => {\r\n return (\r\n <Spinner\r\n {...getVariant('layout.common.components.loaderSpinner')}\r\n className={className}\r\n />\r\n );\r\n },\r\n);\r\n\r\nexport default LoaderSpinner;\r\n","import { Box } from '@apia/theme';\r\nimport { keyframes } from '@emotion/react';\r\nconst shimmer = keyframes`\r\n 0% {\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n opacity: 0.4;\r\n }\r\n 100% {\r\n opacity: 0.8;\r\n }\r\n`;\r\n\r\nconst SkeletonItem = () => (\r\n <Box\r\n sx={{\r\n height: 20,\r\n bg: 'muted',\r\n mb: 2,\r\n borderRadius: 4,\r\n animation: `${shimmer} 1.5s infinite`,\r\n background: 'palette.gray.800',\r\n }}\r\n />\r\n);\r\n\r\nexport const ListSkeletonLoader = ({ items = 5 }) => (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>\r\n {Array.from({ length: items }).map((_, index) => (\r\n <SkeletonItem key={index} />\r\n ))}\r\n </Box>\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { LinearLoader } from '../loaders';\r\n\r\nexport const LinearSpinnerLock = ({ isLocked }: { isLocked: boolean }) =>\r\n isLocked ? (\r\n <Box\r\n className=\"locker\"\r\n style={{\r\n backgroundColor: 'rgb(128 128 128 / 0%)',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n position: 'fixed',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1200,\r\n transition: 'background-color 0.25s',\r\n }}\r\n ref={(el) => {\r\n if (el instanceof HTMLElement) {\r\n window.requestAnimationFrame(() => {\r\n el.style.backgroundColor = 'rgb(200 200 200 / 60%)';\r\n });\r\n }\r\n }}\r\n >\r\n <LinearLoader />\r\n </Box>\r\n ) : null;\r\n","import { TDistinctors } from '@apia/dom-store';\r\nimport { TCellDistinctions, TGridDistinctions, TState } from './types';\r\n\r\nexport const distinctors: TDistinctors<TState> = {\r\n grid: [\r\n (distinctors: TGridDistinctions, state) => {\r\n return {\r\n etc: {\r\n 'aria-activedescendant':\r\n distinctors.iconsCount > 0\r\n ? `${state.storeId}__${state.focusedRow}__${state.focusedColumn}`\r\n : undefined,\r\n role: 'grid',\r\n 'aria-rowcount': distinctors.rows,\r\n 'aria-colcount': distinctors.columns,\r\n id: state.storeId,\r\n },\r\n };\r\n },\r\n ],\r\n cell: [\r\n (distinctions: TCellDistinctions, state) => {\r\n const isFocused =\r\n state.focusedColumn === distinctions.columnIndex &&\r\n state.focusedRow === distinctions.rowIndex;\r\n return {\r\n etc: {\r\n id: `${state.storeId}__${distinctions.rowIndex}__${distinctions.columnIndex}`,\r\n },\r\n classList: {\r\n add: isFocused ? ['focused'] : undefined,\r\n remove: isFocused ? undefined : ['focused'],\r\n },\r\n };\r\n },\r\n (_: TState, state: TState) => {\r\n const focusedCell = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow}\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n focusedCell?.scrollIntoView({\r\n behavior: 'instant',\r\n block: 'nearest',\r\n inline: 'nearest',\r\n });\r\n },\r\n ],\r\n};\r\n","import { TDistinctors, TKeysMaker } from '@apia/dom-store';\r\nimport { TState } from './types';\r\n\r\nexport const makeCellKey = (distinctions: {\r\n columnIndex: number;\r\n rowIndex: number;\r\n}) => `${distinctions.columnIndex}__${distinctions.rowIndex}`;\r\n\r\nexport const keysMakers: TKeysMaker<TState, TDistinctors<TState>> = {\r\n cell: makeCellKey,\r\n grid: () => 'grid',\r\n};\r\n","import { noNaN } from '@apia/util';\r\nimport { makeCellKey } from './keysMaker';\r\nimport { TIconsListOperation, TState } from './types';\r\n\r\nfunction assignSelectedIndexId(state: TState) {\r\n const element = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow}\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n state.focusedId = element.dataset.id as string;\r\n }\r\n}\r\n\r\nconst arrowDown: TIconsListOperation<void> = (state: TState, _: void, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${\r\n state.focusedRow + 1\r\n }\"] [aria-colindex=\"${state.focusedColumn}\"]`,\r\n )\r\n )\r\n return;\r\n\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow + 1,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedRow++;\r\n\r\n assignSelectedIndexId(state);\r\n};\r\nconst arrowUp: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (state.focusedRow > 1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow - 1,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedRow--;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n};\r\nconst arrowLeft: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (state.focusedColumn > 1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn - 1,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedColumn--;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n /**\r\n * Este bloque agrega el comportamiento de que, al presionar la flecha\r\n * derecha estando en el último ícono de una fila, salta a la fila\r\n * siguiente. El problema es que solamente funciona cuando las ids son\r\n * secuenciales, lo cual no siempre es cierto. Habría que agregar un sistema\r\n * de doble id para garantizar la secuencialidad de las ids usadas por este\r\n * método, independientemente de las ids provistas por el usuario del\r\n * componente.\r\n */\r\n /* else if (state.focusedRow > 1) {\r\n const focusedRow = document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${state.focusedRow - 1}\"]`,\r\n );\r\n\r\n if (focusedRow instanceof HTMLElement) {\r\n const colIndex = noNaN(\r\n focusedRow.querySelector('[aria-colIndex]:last-of-type')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: colIndex,\r\n rowIndex: state.focusedRow - 1,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedRow--;\r\n state.focusedColumn = colIndex;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n }\r\n } */\r\n};\r\nconst arrowRight: TIconsListOperation<void> = (state, _: void, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${\r\n state.focusedRow\r\n }\"] [aria-colindex=\"${state.focusedColumn + 1}\"]`,\r\n )\r\n ) {\r\n /**\r\n * Este bloque agrega el comportamiento de que, al presionar la flecha\r\n * derecha estando en el último ícono de una fila, salta a la fila\r\n * siguiente. El problema es que solamente funciona cuando las ids son\r\n * secuenciales, lo cual no siempre es cierto. Habría que agregar un sistema\r\n * de doble id para garantizar la secuencialidad de las ids usadas por este\r\n * método, independientemente de las ids provistas por el usuario del\r\n * componente.\r\n */\r\n /* const newFocusedId = noNaN(state.focusedId) + 1;\r\n const element = document.querySelector(\r\n `#${state.storeId} [data-id=\"${newFocusedId}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n const rowIndex = noNaN(\r\n element.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n const colIndex = noNaN(\r\n element.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (rowIndex !== -1 && colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: colIndex,\r\n rowIndex: rowIndex,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n\r\n assignSelectedIndexId(state);\r\n }\r\n } */\r\n\r\n return;\r\n }\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn + 1,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n state.focusedColumn++;\r\n assignSelectedIndexId(state);\r\n};\r\nconst setFocused: TIconsListOperation<{\r\n rowIndex: number;\r\n colIndex: number;\r\n}> = (state, payload, keys) => {\r\n if (\r\n !document.querySelector(\r\n `#${state.storeId} [aria-rowindex=\"${payload.rowIndex}\"] [aria-colindex=\"${payload.colIndex}\"]`,\r\n )\r\n )\r\n return;\r\n\r\n keys.set([\r\n makeCellKey({ columnIndex: payload.colIndex, rowIndex: payload.rowIndex }),\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n 'grid',\r\n ]);\r\n\r\n state.focusedColumn = payload.colIndex;\r\n state.focusedRow = payload.rowIndex;\r\n\r\n assignSelectedIndexId(state);\r\n};\r\n\r\nconst recalculateIndexByResize: TIconsListOperation<void> = (\r\n state: TState,\r\n _: void,\r\n keys,\r\n) => {\r\n const element = document.querySelector(\r\n `#${state.storeId} [data-id=\"${state.focusedId}\"]`,\r\n );\r\n\r\n if (element instanceof HTMLElement) {\r\n const rowIndex = noNaN(\r\n element.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n const colIndex = noNaN(\r\n element.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n\r\n if (rowIndex !== -1 && colIndex !== -1) {\r\n keys.set([\r\n makeCellKey({\r\n columnIndex: state.focusedColumn,\r\n rowIndex: state.focusedRow,\r\n }),\r\n makeCellKey({ columnIndex: colIndex, rowIndex }),\r\n ]);\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n }\r\n }\r\n};\r\n\r\nexport const operations = {\r\n arrowDown,\r\n arrowLeft,\r\n arrowRight,\r\n arrowUp,\r\n setFocused,\r\n recalculateIndexByResize,\r\n};\r\n","import { TState } from './types';\r\n\r\nexport const getInitialState = (props: Pick<TState, 'storeId'>): TState => ({\r\n focusedColumn: 1,\r\n focusedRow: 1,\r\n focusedId: 0,\r\n ...props,\r\n});\r\n","import { createContext, useContext } from 'react';\r\nimport {\r\n TActionsMap,\r\n TDistinctorProperties,\r\n TGetState,\r\n TRegisterStateChangeListener,\r\n TUseProperties,\r\n} from '@apia/dom-store';\r\nimport { TCellDistinctions, TGridDistinctions, TState } from './types';\r\nimport { operations } from './operations';\r\n\r\nexport type TStoreContext = {\r\n actions: TActionsMap<TState, typeof operations>;\r\n useProps: TUseProperties<\r\n TState,\r\n {\r\n cell: [\r\n (\r\n distinctions: TCellDistinctions,\r\n state: TState,\r\n ) => TDistinctorProperties,\r\n ];\r\n grid: [\r\n (\r\n distinctions: TGridDistinctions,\r\n state: TState,\r\n ) => TDistinctorProperties,\r\n ];\r\n }\r\n >;\r\n getState: TGetState<TState>;\r\n registerStateChangeListener: TRegisterStateChangeListener<TState>;\r\n};\r\n\r\nexport const StoreContext = createContext<TStoreContext>({} as TStoreContext);\r\n\r\nexport const useIconsListStoreContext = () => {\r\n return useContext(StoreContext);\r\n};\r\n","import { createFAsomeStore } from '@apia/dom-store';\r\nimport { ReactNode, useCallback, useMemo } from 'react';\r\nimport { distinctors } from './distinctors';\r\nimport { operations } from './operations';\r\nimport { keysMakers } from './keysMaker';\r\nimport { getInitialState } from './state';\r\nimport { StoreContext, TStoreContext } from './context';\r\nimport { TState } from './types';\r\n\r\nexport const useStore = ({\r\n storeId,\r\n}: Pick<TState, 'storeId'>): [\r\n TStoreContext['actions'],\r\n TStoreContext['useProps'],\r\n TStoreContext['getState'],\r\n TStoreContext['registerStateChangeListener'],\r\n ({ children }: { children: ReactNode }) => JSX.Element,\r\n] => {\r\n const [actions, useProps, getState, registerStateChangeListener] = useMemo(\r\n () =>\r\n createFAsomeStore({\r\n initialState: getInitialState({\r\n storeId,\r\n }),\r\n distinctors,\r\n keysMakers,\r\n operations,\r\n }),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n\r\n const ContextProvider = useCallback(\r\n ({ children }: { children: ReactNode }) => {\r\n return (\r\n <StoreContext.Provider\r\n value={{\r\n actions,\r\n useProps,\r\n getState,\r\n registerStateChangeListener,\r\n }}\r\n >\r\n {children}\r\n </StoreContext.Provider>\r\n );\r\n },\r\n [actions, getState, registerStateChangeListener, useProps],\r\n );\r\n\r\n return [\r\n actions,\r\n useProps,\r\n getState,\r\n registerStateChangeListener,\r\n ContextProvider,\r\n ];\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n FocusEvent,\r\n KeyboardEvent,\r\n MouseEvent,\r\n ReactNode,\r\n useCallback,\r\n useRef,\r\n} from 'react';\r\nimport { useIconsListStoreContext } from './store/context';\r\nimport { isChild, TId, noNaN } from '@apia/util';\r\nimport { TIcon, TIconsList } from './types';\r\nimport { ApiaUtil } from '../../objects/ApiaUtil';\r\n\r\nfunction findIcon(\r\n icons: TIcon[],\r\n arg: EventTarget | TId,\r\n): TIcon | null | undefined {\r\n const iconId =\r\n arg instanceof HTMLElement\r\n ? arg.closest<HTMLElement>('.iconsList__iconWrapper[data-id]')?.dataset\r\n ?.id\r\n : arg;\r\n\r\n if (iconId !== undefined) {\r\n const icon = icons.find((current) => String(current.id) === iconId);\r\n\r\n return icon ?? null;\r\n }\r\n return null;\r\n}\r\n\r\nexport const KeyHandler = ({\r\n children,\r\n icons,\r\n onIconClick,\r\n onIconDoubleClick,\r\n onIconGetDetails,\r\n onIconKeyDown,\r\n storeId,\r\n}: { children: ReactNode; storeId: TId } & Pick<\r\n TIconsList<any>,\r\n | 'icons'\r\n | 'onIconClick'\r\n | 'onIconDoubleClick'\r\n | 'onIconGetDetails'\r\n | 'onIconKeyDown'\r\n>) => {\r\n const { actions, getState } = useIconsListStoreContext();\r\n const timeoutId = useRef(-1);\r\n const currentIcon = useRef<TIcon | null | undefined>(null);\r\n\r\n const showIconDetails = useCallback(\r\n (icon: TIcon) => {\r\n if (onIconGetDetails) {\r\n ApiaUtil.instance.tooltips.open({\r\n attachToElement: () =>\r\n document.querySelector(\r\n `#${storeId} .iconsList__iconWrapper[data-id=\"${icon.id}\"]`,\r\n ) as HTMLElement,\r\n children: onIconGetDetails(icon),\r\n closeOnClick: false,\r\n minSize: { width: 200, height: 0 },\r\n });\r\n }\r\n },\r\n [onIconGetDetails, storeId],\r\n );\r\n\r\n const handleMouseEnter = useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n const icon = findIcon(icons, ev.target);\r\n\r\n if (icon !== currentIcon.current || icon === null || icon === undefined) {\r\n if (timeoutId.current !== -1) {\r\n clearTimeout(timeoutId.current);\r\n }\r\n\r\n timeoutId.current = window.setTimeout(() => {\r\n if (icon) {\r\n showIconDetails(icon);\r\n if (onIconClick && icon) {\r\n onIconClick(ev, icon);\r\n }\r\n }\r\n }, 100);\r\n\r\n currentIcon.current = icon;\r\n }\r\n },\r\n [icons, onIconClick, showIconDetails],\r\n );\r\n\r\n return (\r\n <Box\r\n className=\"iconsList__keyHandler\"\r\n tabIndex={0}\r\n onFocus={useCallback(\r\n (ev: FocusEvent) => {\r\n if (\r\n !isChild(ev.target as HTMLElement, (current) =>\r\n current.classList?.contains('iconsList__keyHandler'),\r\n )\r\n )\r\n return;\r\n const icon = findIcon(icons, getState().focusedId);\r\n if (icon) {\r\n showIconDetails(icon);\r\n }\r\n },\r\n [getState, icons, showIconDetails],\r\n )}\r\n onMouseOver={handleMouseEnter}\r\n onMouseLeave={useCallback(() => {\r\n currentIcon.current = null;\r\n }, [])}\r\n onMouseDown={useCallback(\r\n (ev: MouseEvent) => {\r\n if (ev.target instanceof HTMLElement) {\r\n const colIndex = noNaN(\r\n ev.target.closest('[aria-colindex]')?.ariaColIndex,\r\n -1,\r\n );\r\n const rowIndex = noNaN(\r\n ev.target.closest('[aria-rowindex]')?.ariaRowIndex,\r\n -1,\r\n );\r\n\r\n if (colIndex >= 0 && rowIndex >= 0) {\r\n actions.setFocused({\r\n colIndex,\r\n rowIndex,\r\n });\r\n }\r\n }\r\n },\r\n [actions],\r\n )}\r\n onClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n const icon = findIcon(icons, ev.target);\r\n\r\n if (onIconClick && icon) {\r\n onIconClick(ev, icon);\r\n }\r\n },\r\n [icons, onIconClick],\r\n )}\r\n onDoubleClick={useCallback(\r\n (ev: MouseEvent<HTMLElement>) => {\r\n if (onIconDoubleClick) {\r\n const icon = findIcon(icons, ev.target);\r\n if (icon) onIconDoubleClick(ev, icon);\r\n }\r\n },\r\n [icons, onIconDoubleClick],\r\n )}\r\n onKeyDown={useCallback(\r\n (ev: KeyboardEvent<HTMLElement>) => {\r\n function showIconByFocusChange() {\r\n const icon = findIcon(icons, getState().focusedId);\r\n\r\n if (icon) showIconDetails(icon);\r\n if (icon && onIconKeyDown) {\r\n onIconKeyDown(ev, icon);\r\n }\r\n }\r\n\r\n function shoutKeyDown() {\r\n const icon = findIcon(icons, getState().focusedId);\r\n if (icon && onIconKeyDown) {\r\n onIconKeyDown(ev, icon);\r\n }\r\n }\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n actions.arrowUp();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowDown':\r\n actions.arrowDown();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowRight':\r\n actions.arrowRight();\r\n showIconByFocusChange();\r\n break;\r\n case 'ArrowLeft':\r\n actions.arrowLeft();\r\n showIconByFocusChange();\r\n break;\r\n default:\r\n shoutKeyDown();\r\n break;\r\n }\r\n },\r\n [actions, getState, icons, onIconKeyDown, showIconDetails],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { focusOutline } from '@apia/theme';\r\nimport { ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport const styles: ThemeUICSSObject = {\r\n '&, *': {\r\n textAlign: 'center',\r\n },\r\n\r\n '.iconsList__icon__image__wrapper': {\r\n boxShadow: '1px 1px 3px #0001',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n\r\n '.iconsList__icon__image': {\r\n maxWidth: 'calc(100% - 4px)',\r\n },\r\n\r\n '.iconsList__icon__wrapper': {\r\n p: 2,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 3,\r\n\r\n '&:hover': (theme) => {\r\n return {\r\n ...theme.palette.getOneState(\r\n { backgroundColor: 'palette.background.paper' },\r\n 'hover',\r\n ),\r\n };\r\n },\r\n },\r\n\r\n '.iconsList__icon__label': {\r\n wordBreak: 'break-word',\r\n display: '-webkit-box',\r\n WebkitLineClamp: '3',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n lineHeight: '20px',\r\n },\r\n\r\n '.iconsList__keyHandler:focus': {\r\n outline: 'none',\r\n\r\n '.focused .iconsList__icon__wrapper': {\r\n ...focusOutline,\r\n },\r\n },\r\n};\r\n","import { useMemo } from 'react';\r\nimport { TIcon } from './types';\r\n\r\nexport function getBreakpoints(blockWidth: number) {\r\n return Array(Math.floor(4000 / blockWidth))\r\n .fill(1)\r\n .map((_, i) => (i + 1) * blockWidth);\r\n}\r\n\r\nexport function useStyles({\r\n containerWidth,\r\n iconWidth,\r\n breakPoint,\r\n verticalGap,\r\n removeHorizontalPadding,\r\n}: {\r\n containerWidth: number;\r\n iconWidth: number;\r\n breakPoint: number;\r\n verticalGap?: number;\r\n removeHorizontalPadding?: boolean;\r\n}) {\r\n const gap =\r\n (containerWidth - iconWidth * breakPoint) /\r\n (breakPoint + (removeHorizontalPadding ? -1 : 1));\r\n const sx = useMemo(\r\n () => ({\r\n justifyContent: 'space-evenly',\r\n gridTemplateColumns: `repeat(${breakPoint}, 1fr)`,\r\n rowGap: verticalGap ?? 0,\r\n columnGap: `${gap}px`,\r\n px: removeHorizontalPadding ? 0 : `${gap}px`,\r\n }),\r\n [removeHorizontalPadding, breakPoint, gap, verticalGap],\r\n );\r\n\r\n return sx;\r\n}\r\n\r\nexport const justToFillTheRow = 'JUST TO FILL THE ROW';\r\n\r\nexport function getRowIcons<P>({\r\n breakPoint,\r\n icons,\r\n i,\r\n}: {\r\n breakPoint: number;\r\n icons: TIcon<P>[];\r\n i: number;\r\n}) {\r\n const actualIcons: (string | TIcon<P>)[] = icons.slice(\r\n i * breakPoint,\r\n (i + 1) * breakPoint,\r\n );\r\n if (actualIcons.length < breakPoint)\r\n actualIcons.push(\r\n ...(Array(breakPoint - actualIcons.length).fill(\r\n justToFillTheRow,\r\n ) as string[]),\r\n );\r\n\r\n return actualIcons;\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport { TIconRenderer } from './types';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const IconRendererContext = createContext<TIconRenderer<any> | null>(\r\n null,\r\n);\r\n\r\nexport function useIconRendererContext<\r\n P extends Record<string, unknown> = Record<string, unknown>,\r\n>() {\r\n const context = useContext(IconRendererContext);\r\n\r\n if (!context) throw new Error('There is no IconRendererContext');\r\n\r\n return context as TIconRenderer<P>;\r\n}\r\n","import { TIcon } from '.';\r\nimport { Box } from '@apia/theme';\r\nimport { useMemo } from 'react';\r\nimport { useIconsListStoreContext } from './store/context';\r\nimport { useIconRendererContext } from './context';\r\n\r\nexport const Icon = (\r\n props: TIcon & { rowIndex: number; colIndex: number; width: number },\r\n) => {\r\n const { useProps } = useIconsListStoreContext();\r\n\r\n const ref = useProps<HTMLElement>('cell', {\r\n columnIndex: props.colIndex,\r\n rowIndex: props.rowIndex,\r\n });\r\n\r\n const ContextRenderer = useIconRendererContext();\r\n const Renderer = props.iconRenderer || ContextRenderer;\r\n\r\n return (\r\n <Box\r\n ref={ref}\r\n role=\"gridcell\"\r\n data-id={props.id}\r\n data-test-id={props.id}\r\n className={`iconsList__iconWrapper ${props.className ?? ''}`}\r\n aria-label={props.ariaLabel}\r\n sx={useMemo(\r\n () => ({\r\n width: `${props.width}px`,\r\n\r\n '.iconsList__icon__image__wrapper': {\r\n height: `${props.width - 4}px`,\r\n },\r\n\r\n '.iconsList__icon__image': {\r\n maxHeight: `${props.width - 32}px`,\r\n maxWidth: `${props.width - 32}px`,\r\n },\r\n }),\r\n [props.width],\r\n )}\r\n aria-colindex={props.colIndex}\r\n >\r\n <Renderer {...props} />\r\n </Box>\r\n );\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { TIcon } from '.';\r\nimport { Icon } from './Icon';\r\nimport { justToFillTheRow } from './util';\r\n\r\nexport const IconWrapper = <P extends Record<string, unknown>>({\r\n icon,\r\n iconWidth,\r\n rowIndex,\r\n colIndex,\r\n}: {\r\n icon: string | TIcon<P>;\r\n iconWidth: number;\r\n rowIndex: number;\r\n colIndex: number;\r\n}) => {\r\n return icon === justToFillTheRow ? (\r\n <Box sx={{ width: `${iconWidth}px` }} className=\"fill__the__row\" />\r\n ) : (\r\n <Icon\r\n rowIndex={rowIndex}\r\n colIndex={colIndex}\r\n width={iconWidth}\r\n {...(icon as TIcon<any>)}\r\n />\r\n );\r\n};\r\n","import { Icon } from '@apia/icons';\r\nimport { TIconRenderer } from '../types';\r\nimport { Box, Image } from '@apia/theme';\r\nimport { memo } from 'react';\r\n\r\nconst DefaultIconRendererNoMemo: TIconRenderer = (props) => {\r\n if (!props.icon && !props.imageUrl) {\r\n console.error({ props });\r\n console.error('The icon has no imageUrl nor icon defined');\r\n }\r\n\r\n return (\r\n <Box\r\n title={String(props.ariaLabel) || props.label}\r\n className=\"iconsList__icon__wrapper\"\r\n >\r\n <Box className=\"iconsList__icon__image__wrapper\">\r\n {props.imageUrl && (\r\n <Image\r\n className=\"iconsList__icon__image\"\r\n src={props.imageUrl}\r\n role=\"none\"\r\n alt=\"\"\r\n />\r\n )}\r\n {props.icon && <Icon icon={props.icon} title={props.ariaLabel} />}\r\n </Box>\r\n <Box className=\"iconsList__icon__label\" title={props.ariaLabel}>\r\n {props.label}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const DefaultIconRenderer = memo(DefaultIconRendererNoMemo);\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport { Box, Grid } from '@apia/theme';\r\nimport {\r\n ForwardedRef,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport { makeResponsiveComponent } from '../responsive';\r\nimport { useStore } from './store/useStore';\r\nimport { uniqueId } from '../ListBox/common';\r\nimport { makeStyledComponent } from '@apia/theme';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { styles } from './styles';\r\nimport { getBreakpoints, getRowIcons, useStyles } from './util';\r\nimport { IconWrapper } from './IconWrapper';\r\nimport { DefaultIconRenderer } from './renderers/DefaultIconRenderer';\r\nimport { TIconsList, TIcon, TIconRenderer } from './types';\r\nimport { IconRendererContext } from './context';\r\nimport { useLatest, usePrevious } from '@apia/util';\r\nimport { shallowEqual } from '@apia/store';\r\n\r\nexport type { TIcon, TIconRenderer, TIconsList };\r\n\r\nconst IconsListNonForwarded = <P extends Record<string, unknown>>(\r\n props: TIconsList<P>,\r\n ref: ForwardedRef<HTMLDivElement>,\r\n) => {\r\n const propsRef = useLatest(props);\r\n let render: () => void = () => {};\r\n const previousProps = usePrevious(props);\r\n if (!shallowEqual(props, previousProps.current)) {\r\n setTimeout(() => render(), 0);\r\n }\r\n\r\n const ResponsiveContainer = useMemo(() => {\r\n const iconWidth = propsRef.current.iconWidth ?? 100;\r\n const minGap = propsRef.current.minHorizontalGap ?? 30;\r\n const blockWidth = iconWidth + minGap;\r\n const styledComponent = (styledComponentProps: unknown) => {\r\n const { breakPoint, containerWidth } = styledComponentProps as {\r\n breakPoint: number;\r\n containerWidth: number;\r\n };\r\n const [, doRender] = useState(true);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n render = useCallback(() => doRender((current) => !current), []);\r\n const storeId = useMemo(() => uniqueId('IconsList'), []);\r\n const [actions, useProps, , , Context] = useStore({ storeId });\r\n const rows = Math.ceil(propsRef.current.icons.length / breakPoint);\r\n const sx = useStyles({\r\n breakPoint,\r\n containerWidth,\r\n iconWidth: propsRef.current.iconWidth ?? 100,\r\n verticalGap: propsRef.current.verticalGap,\r\n removeHorizontalPadding: propsRef.current.removeHorizontalPadding,\r\n });\r\n\r\n useEffect(() => {\r\n actions.recalculateIndexByResize();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [breakPoint]);\r\n const IconRenderer = propsRef.current.iconRenderer ?? DefaultIconRenderer;\r\n const gridRef = useProps('grid', {\r\n columns: breakPoint,\r\n iconsCount: propsRef.current.icons.length,\r\n rows,\r\n });\r\n\r\n return (\r\n <IconRendererContext.Provider value={IconRenderer}>\r\n <Context>\r\n <KeyHandler\r\n icons={propsRef.current.icons}\r\n onIconClick={propsRef.current.onIconClick}\r\n onIconDoubleClick={propsRef.current.onIconDoubleClick}\r\n onIconGetDetails={propsRef.current.onIconGetDetails}\r\n onIconKeyDown={propsRef.current.onIconKeyDown}\r\n storeId={storeId}\r\n >\r\n <Box ref={gridRef}>\r\n {Array(rows)\r\n .fill(1)\r\n .map((_, i) => {\r\n const icons = getRowIcons({\r\n breakPoint,\r\n i,\r\n icons: propsRef.current.icons,\r\n });\r\n return (\r\n <Grid\r\n aria-rowindex={i + 1}\r\n role=\"row\"\r\n key={i}\r\n ref={ref}\r\n sx={sx}\r\n >\r\n {icons.map((current, j) => (\r\n <IconWrapper\r\n key={uniqueId(String(j + i))}\r\n colIndex={j + 1}\r\n icon={current}\r\n iconWidth={propsRef.current.iconWidth ?? 100}\r\n rowIndex={i + 1}\r\n />\r\n ))}\r\n </Grid>\r\n );\r\n })}\r\n </Box>\r\n </KeyHandler>\r\n </Context>\r\n </IconRendererContext.Provider>\r\n );\r\n };\r\n\r\n const Component = makeResponsiveComponent({\r\n breakPoints: getBreakpoints(blockWidth),\r\n Component: makeStyledComponent(\r\n 'IconsList',\r\n 'layout.common.components.iconsList',\r\n styles,\r\n styledComponent,\r\n ),\r\n debounce: 50,\r\n });\r\n\r\n return Component;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (previousProps.current?.iconWidth !== props.iconWidth) {\r\n const iconWidth = props.iconWidth ?? 100;\r\n const minGap = props.minHorizontalGap ?? 30;\r\n\r\n const blockWidth = iconWidth + minGap;\r\n setTimeout(\r\n () =>\r\n ResponsiveContainer.setBreakpoints.current(getBreakpoints(blockWidth)),\r\n 0,\r\n );\r\n }\r\n\r\n return <ResponsiveContainer />;\r\n};\r\n\r\nIconsListNonForwarded.displayName = 'IconsList';\r\n\r\nexport const IconsList = forwardRef(\r\n IconsListNonForwarded,\r\n) as typeof IconsListNonForwarded;\r\n\r\nexport { DefaultIconRenderer };\r\n","import { type ComponentType, lazy } from 'react';\r\n\r\n/**\r\n * Permite importar un componente en forma dinámica con ruta relativa a\r\n * /customComponents\r\n */\r\nexport function importComponent<T = unknown>(path: string) {\r\n return lazy<ComponentType<T>>(() => {\r\n return new Promise<{\r\n default: ComponentType<T>;\r\n }>((resolve) => {\r\n import(/* webpackInclude: /\\.tsx?$/ */ `/customComponents/${path}`)\r\n .then((result: { default: { default: ComponentType<T> } }) => {\r\n if (result?.default?.default) resolve(result.default);\r\n else if (result?.default) resolve(result as any);\r\n else\r\n resolve({\r\n default: () => <>Something went wrong when importing component</>,\r\n });\r\n })\r\n .catch((error: unknown) => {\r\n resolve({\r\n default: () => {\r\n console.error(error);\r\n return <>Error</>;\r\n },\r\n });\r\n });\r\n });\r\n });\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\nimport {\r\n createContext,\r\n useContext,\r\n ReactNode,\r\n useEffect,\r\n useState,\r\n} from 'react';\r\nimport { TItemState } from '../accordion/types';\r\n\r\ntype TClickListener = () => unknown;\r\n\r\nexport class ToolbarController extends EventEmitter<{\r\n pressEnter: string;\r\n updateItemState: string;\r\n}> {\r\n eventListeners: Record<string, TClickListener[]> = {};\r\n itemsState: Record<string, TItemState> = {};\r\n\r\n hooks = {\r\n useItemState: (id: string, initialState: TItemState) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n useEffect(() => {\r\n this.itemsState[id] = initialState;\r\n this.on('updateItemState', (evId) => {\r\n if (evId === id) {\r\n setState({ ...this.itemsState[id] });\r\n }\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return state;\r\n },\r\n };\r\n\r\n setItemState = (id: string, newState: Partial<TItemState>) => {\r\n this.itemsState[id] = { ...this.itemsState[id], ...newState };\r\n this.emit('updateItemState', id);\r\n };\r\n\r\n Context = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ToolbarControllerContext.Provider value={this}>\r\n {children}\r\n </ToolbarControllerContext.Provider>\r\n );\r\n };\r\n}\r\n\r\nexport const ToolbarControllerContext = createContext<ToolbarController | null>(\r\n null,\r\n);\r\n\r\nexport const useToolbarControllerContext = () => {\r\n const context = useContext(ToolbarControllerContext);\r\n\r\n if (!context) throw new Error('There is no Toolbar controller context');\r\n\r\n return context;\r\n};\r\n","import { getVariant } from '@apia/theme';\r\nimport { ISimpleButton, SimpleButton } from '../forms';\r\n\r\nexport const ToolbarTextButton = (props: ISimpleButton) => {\r\n return (\r\n <SimpleButton\r\n {...props}\r\n className={`toolbar__textButton ${props?.className ?? ''}`}\r\n {...(props.variant ? getVariant(props.variant) : null)}\r\n >\r\n {props.children}\r\n </SimpleButton>\r\n );\r\n};\r\n","import { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useToolbarControllerContext } from './ToolbarController';\r\nimport { TToolbarIconButton } from './types';\r\nimport { useMount, usePrevious } from '@apia/util';\r\nimport { IconButton } from '../forms';\r\nimport { TItemState } from '../accordion/types';\r\n\r\nexport const ToolbarIconButton = ({\r\n id,\r\n action,\r\n actionSource,\r\n allowToggle,\r\n className,\r\n defaultToggled,\r\n disabled,\r\n icon,\r\n iconSize,\r\n isLoading: outerIsLoading,\r\n title,\r\n toggled: toggledProp,\r\n}: TToolbarIconButton) => {\r\n const [innerIsToggled, setInnerIsToggled] = useState<boolean>(\r\n toggledProp ?? (allowToggle ? (defaultToggled ?? false) : false),\r\n );\r\n const [isDisabled, setIsDisabled] = useState(!!disabled);\r\n const context = useToolbarControllerContext();\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const previousIsLoading = usePrevious(outerIsLoading);\r\n if (previousIsLoading.current !== outerIsLoading)\r\n setIsLoading(!!outerIsLoading);\r\n\r\n const lastDisabledProp = usePrevious(disabled);\r\n if (lastDisabledProp.current !== disabled) {\r\n setIsDisabled(!!disabled);\r\n }\r\n\r\n /**\r\n * Si la prop toggled cambia y no está undefined, se debe actualizar el\r\n * estado interno.\r\n */\r\n const lastToggledProp = useRef<boolean | undefined>(toggledProp);\r\n if (\r\n toggledProp !== undefined &&\r\n innerIsToggled !== toggledProp &&\r\n lastToggledProp.current !== toggledProp\r\n ) {\r\n lastToggledProp.current = toggledProp;\r\n setInnerIsToggled(toggledProp);\r\n }\r\n\r\n const handleClick = useCallback(async () => {\r\n setIsLoading(true);\r\n try {\r\n if (lastToggledProp.current !== undefined) {\r\n await action(\r\n { isToggled: !lastToggledProp.current, isLoading },\r\n context,\r\n );\r\n } else if (allowToggle) {\r\n let isToggled = false;\r\n setInnerIsToggled((current) => {\r\n isToggled = !current;\r\n return isToggled;\r\n });\r\n await action({ isToggled, isLoading }, context);\r\n } else {\r\n await action({ isToggled: false, isLoading }, context);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n setIsLoading(false);\r\n }, [action, allowToggle, context, isLoading]);\r\n\r\n /**\r\n * Se maneja el uso de teclado para hacer click sobre el elemento\r\n */\r\n useEffect(() => {\r\n const unsuscribe1 = context.on('updateItemState', (evId) => {\r\n if (evId === id) {\r\n setInnerIsToggled(!!context.itemsState[evId].toggled);\r\n setIsDisabled(!!context.itemsState[evId].disabled);\r\n }\r\n });\r\n const unsuscribe2 = context.on('pressEnter', (evId) => {\r\n if (evId === id) void handleClick();\r\n });\r\n\r\n return () => {\r\n unsuscribe1();\r\n unsuscribe2();\r\n };\r\n }, [context, id, handleClick]);\r\n\r\n useMount(() => {\r\n if (context.itemsState[id]) {\r\n if (context.itemsState[id].disabled !== undefined) {\r\n setIsDisabled(!!context.itemsState[id].disabled);\r\n }\r\n if (context.itemsState[id].toggled !== undefined) {\r\n setInnerIsToggled(!!context.itemsState[id].toggled);\r\n }\r\n } else {\r\n const o: TItemState = context.itemsState[id];\r\n context.itemsState[id] = {\r\n disabled: isDisabled,\r\n toggled: innerIsToggled,\r\n ...o,\r\n };\r\n }\r\n });\r\n\r\n return (\r\n <IconButton\r\n className={`toolbar__button ${innerIsToggled ? 'toggled' : ''} ${className ?? ''}`}\r\n data-id={id}\r\n data-test-id={id}\r\n disabled={isDisabled}\r\n icon={icon}\r\n onClick={actionSource !== 'mousedown' ? handleClick : undefined}\r\n isLoading={isLoading}\r\n onMouseDown={actionSource === 'mousedown' ? handleClick : undefined}\r\n size={iconSize ?? 'Md'}\r\n title={title}\r\n variant=\"icon-outline\"\r\n />\r\n );\r\n};\r\n","import { FieldLabel } from '../forms';\r\nimport { TToolInput } from './types';\r\nimport { Input } from '@apia/theme';\r\n\r\nexport const ToolbarInput = (tool: TToolInput) => {\r\n const input = <Input className=\"toolbar__input\" {...tool.inputProps} />;\r\n\r\n if (tool.label) return <FieldLabel label={tool.label}>{input}</FieldLabel>;\r\n\r\n return input;\r\n};\r\n","import { Box } from '@apia/theme';\r\n\r\nexport const ToolbarSeparator = () => {\r\n return <Box className=\"toolbar__separator\"> </Box>;\r\n};\r\n","import { Select, SelectProps, getVariant } from '@apia/theme';\r\n\r\nexport const ToolbarSelect = (props: SelectProps) => {\r\n return (\r\n <Select\r\n {...props}\r\n className={`toolbar__select ${props?.className ?? ''}`}\r\n {...(props.variant ? getVariant(props.variant) : null)}\r\n >\r\n {props.children}\r\n </Select>\r\n );\r\n};\r\n","import { useMount } from '@apia/util';\r\nimport { TToolbarIconButton } from './types';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { ReactNode, useMemo } from 'react';\r\nimport { ToolbarController } from './ToolbarController';\r\nimport { ToolbarTextButton } from './ToolbarTextButton';\r\nimport { ToolbarIconButton } from './ToolbarIconButton';\r\nimport { ToolbarInput } from './ToolbarInput';\r\nimport { ToolbarSeparator } from './ToolbarSeparator';\r\nimport { ToolbarSelect } from './ToolbarSelect';\r\n\r\nconst Toolbar = ({\r\n children,\r\n getController,\r\n}: {\r\n children: ReactNode;\r\n /**\r\n * El controlador permite gestionar el estado de los distintos elementos de\r\n * la toolbar\r\n */\r\n getController?: (newController: ToolbarController) => unknown;\r\n}) => {\r\n const controller = useMemo(() => new ToolbarController(), []);\r\n\r\n useMount(() => {\r\n getController?.(controller);\r\n });\r\n\r\n return (\r\n <controller.Context>\r\n <Box\r\n className=\"toolbar\"\r\n {...getVariant('layout.common.components.toolbar')}\r\n >\r\n {children}\r\n </Box>\r\n </controller.Context>\r\n );\r\n};\r\n\r\nexport type { TToolbarIconButton as TToolDefinition };\r\nexport {\r\n ToolbarIconButton,\r\n ToolbarInput,\r\n ToolbarTextButton,\r\n Toolbar,\r\n ToolbarController,\r\n ToolbarSeparator,\r\n ToolbarSelect,\r\n};\r\n","import { EventEmitter } from '@apia/util';\r\nimport {\r\n Children,\r\n ReactElement,\r\n ReactNode,\r\n createContext,\r\n isValidElement,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n useRef,\r\n} from 'react';\r\nimport { useSubscription } from '@apia/util';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport { TSortableListItem } from './SortableListItem';\r\n\r\ntype THover = { id: string; after: boolean };\r\n\r\nfunction getTargetItem(ev: Event) {\r\n return (ev.target as HTMLElement).closest(\r\n '.sortableList__item',\r\n ) as HTMLElement;\r\n}\r\n\r\nexport class SortableListHandler {\r\n #emitter = new EventEmitter<{ hover: THover; sort: null }>();\r\n\r\n #items: ReactElement<{ id: string }>[] = [];\r\n\r\n updateChildren = (items: ReactNode) => {\r\n this.#items = Children.toArray(items).filter((el): el is ReactElement =>\r\n isValidElement(el),\r\n );\r\n };\r\n\r\n #moveItem = (movingId: string, idBefore: string, after: boolean) => {\r\n if (movingId === idBefore) return;\r\n\r\n const itemIndex = this.#items.findIndex(\r\n (search) => search.props.id === movingId,\r\n );\r\n const item = this.#items.splice(itemIndex, 1)![0]!;\r\n const insertIndex = this.#items.findIndex(\r\n (search) => search.props.id === idBefore,\r\n );\r\n\r\n this.#items.splice(insertIndex + (after ? 1 : 0), 0, item);\r\n this.#emitter.emit('sort', null);\r\n };\r\n\r\n useItemEvents = () => {\r\n const unsuscribe = useRef(() => {});\r\n const ref = useCallback((el: HTMLElement) => {\r\n unsuscribe.current();\r\n\r\n if (el) {\r\n const handleDragEnd = (ev: DragEvent) => {\r\n getTargetItem(ev).classList.remove('dragging');\r\n };\r\n\r\n const handleDrop = (ev: DragEvent) => {\r\n const target = getTargetItem(ev);\r\n\r\n this.#moveItem(\r\n ev.dataTransfer!.getData('text'),\r\n target.id,\r\n target.classList.contains('after'),\r\n );\r\n\r\n target.classList.remove('dragover');\r\n target.classList.remove('after');\r\n };\r\n\r\n const handleDragLeave = (ev: DragEvent) => {\r\n getTargetItem(ev).classList.remove('dragover');\r\n };\r\n\r\n const handleDragOver = (ev: DragEvent) => {\r\n ev.preventDefault();\r\n // eslint-disable-next-line no-param-reassign\r\n ev.dataTransfer!.dropEffect = 'move';\r\n getTargetItem(ev).classList.add('dragover');\r\n\r\n const bounding = getTargetItem(ev).getBoundingClientRect();\r\n if (ev.clientY - bounding.top > bounding.height / 2)\r\n getTargetItem(ev).classList.add('after');\r\n else getTargetItem(ev).classList.remove('after');\r\n };\r\n\r\n document.addEventListener('dragend', handleDragEnd);\r\n el.addEventListener('drop', handleDrop);\r\n el.addEventListener('dragleave', handleDragLeave);\r\n el.addEventListener('dragover', handleDragOver);\r\n\r\n unsuscribe.current = () => {\r\n document.removeEventListener('dragend', handleDragEnd);\r\n el.removeEventListener('drop', handleDrop);\r\n el.removeEventListener('dragleave', handleDragLeave);\r\n el.removeEventListener('dragover', handleDragOver);\r\n };\r\n }\r\n }, []);\r\n\r\n return ref;\r\n };\r\n\r\n useSortChange = (onSortChange?: (items: ReactElement[]) => unknown) => {\r\n useSubscription({\r\n makeSubscription: () => {\r\n return this.#emitter.on('sort', () => {\r\n onSortChange?.([...this.#items]);\r\n });\r\n },\r\n });\r\n };\r\n\r\n useWrapperEvents = () => {\r\n const unsuscribe = useRef(() => {});\r\n const ref = useCallback((el: HTMLElement) => {\r\n unsuscribe.current();\r\n\r\n if (el) {\r\n const handleDrag = (ev: DragEvent) => {\r\n const target = getTargetItem(ev);\r\n\r\n if (ev.dataTransfer) {\r\n // eslint-disable-next-line no-param-reassign\r\n ev.dataTransfer.effectAllowed = 'all';\r\n ev.dataTransfer.setData('text', target.id);\r\n target.classList.add('dragging');\r\n }\r\n };\r\n\r\n el.addEventListener('dragstart', handleDrag);\r\n\r\n unsuscribe.current = () => {\r\n el.removeEventListener('dragstart', handleDrag);\r\n };\r\n }\r\n }, []);\r\n\r\n return ref;\r\n };\r\n}\r\n\r\nconst con = createContext<SortableListHandler>({} as SortableListHandler);\r\n\r\nexport const SortableListContext = ({\r\n boxProps,\r\n children,\r\n onSortChange,\r\n}: {\r\n boxProps?: BoxProps;\r\n children: ReactNode;\r\n onSortChange?: (items: ReactElement<TSortableListItem>[]) => unknown;\r\n}) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const handler = useMemo(() => new SortableListHandler(), []);\r\n handler.useSortChange(onSortChange);\r\n handler.updateChildren(children);\r\n\r\n return (\r\n <Box\r\n {...boxProps}\r\n as={boxProps?.as ?? 'ul'}\r\n className={`sortableList ${boxProps?.className ?? ''}`}\r\n ref={handler.useWrapperEvents()}\r\n >\r\n <con.Provider value={handler}>{children}</con.Provider>\r\n </Box>\r\n );\r\n};\r\n\r\nexport function useSortableListHandler() {\r\n return useContext(con);\r\n}\r\n\r\nexport type { TSortableListItem };\r\n","import { Box, BoxProps } from '@apia/theme';\r\nimport { ReactNode, memo } from 'react';\r\nimport { useSortableListHandler } from './SortableListHandler';\r\n\r\nexport type TSortableListItem = {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n additionalProps?: any;\r\n boxProps?: Omit<BoxProps, 'id'>;\r\n id: string;\r\n children: ReactNode;\r\n};\r\n\r\nexport const SortableListItem = memo(\r\n ({ boxProps, id, children }: TSortableListItem) => {\r\n return (\r\n <Box\r\n {...boxProps}\r\n as={boxProps?.as ?? 'li'}\r\n className={`sortableList__item ${boxProps?.className ?? ''}`}\r\n draggable\r\n id={id}\r\n ref={useSortableListHandler().useItemEvents()}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { BoxProps, makeStyledComponent } from '@apia/theme';\r\nimport { Children, ReactElement, ReactNode } from 'react';\r\nimport { SortableListContext } from './SortableListHandler';\r\nimport { SortableListItem, TSortableListItem } from './SortableListItem';\r\n\r\nexport const UnstyledSortableList = ({\r\n boxProps,\r\n children,\r\n onSortChange,\r\n}: {\r\n boxProps?: BoxProps;\r\n children: ReactNode;\r\n onSortChange?: (items: ReactElement<TSortableListItem>[]) => unknown;\r\n}) => {\r\n Children.forEach(children, (el) => {\r\n if ((el as ReactElement<TSortableListItem>)?.type !== SortableListItem)\r\n throw new Error(\r\n `Every children of a SortableList must be of type SortableListItem`,\r\n );\r\n });\r\n\r\n return (\r\n <SortableListContext onSortChange={onSortChange} boxProps={boxProps}>\r\n {children}\r\n </SortableListContext>\r\n );\r\n};\r\n\r\nexport const SortableList = makeStyledComponent(\r\n 'SortableList',\r\n 'layout.common.components.sortableList',\r\n {\r\n '.sortableList': { display: 'flex', flexDirection: 'column' },\r\n '.sortableList__item': {\r\n cursor: 'pointer',\r\n },\r\n '.dragging': {\r\n opacity: '0.3',\r\n },\r\n '.dragover': { position: 'relative' },\r\n '.dragover:after': {\r\n display: 'block',\r\n content: '\"\"',\r\n position: 'absolute',\r\n height: '4px',\r\n left: '0',\r\n top: '-4px',\r\n bottom: 'auto',\r\n width: '100%',\r\n backgroundColor: 'palette.primary.main',\r\n zIndex: 9,\r\n },\r\n '.dragover.after:after': {\r\n top: 'auto',\r\n bottom: '-4px',\r\n },\r\n },\r\n UnstyledSortableList,\r\n);\r\n\r\nexport { SortableListItem };\r\n","import { FileIcon } from '@apia/icons';\r\nimport { Box, Close, getVariant, ThemeUIStyleObject } from '@apia/theme';\r\nimport { forwardRef, useState } from 'react';\r\nimport { IconButton, TIconButton } from '../forms';\r\n\r\nexport const FileCard = forwardRef(\r\n (\r\n {\r\n name,\r\n iconsSize,\r\n additionalButtons,\r\n className,\r\n sx,\r\n width = 'fit-content',\r\n handleClose,\r\n onDoubleClick,\r\n onClick,\r\n onDropFiles,\r\n previewProps,\r\n }: {\r\n name: string;\r\n iconsSize?: 'sm' | 'md' | 'lg' | 'xl';\r\n additionalButtons?: TIconButton[];\r\n className?: string;\r\n sx?: ThemeUIStyleObject;\r\n width?: string;\r\n handleClose?: (f: string) => void;\r\n onDoubleClick?: () => void;\r\n onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\r\n onDropFiles?: (files: File[]) => void;\r\n previewProps?: {\r\n hasPreview?: boolean;\r\n previewUrl?: string;\r\n };\r\n },\r\n ref,\r\n ) => {\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.fileCard')}\r\n sx={{\r\n ...sx,\r\n width,\r\n ...(isDragOver && onDropFiles\r\n ? {\r\n border: '2px dashed #1976d2!important',\r\n backgroundColor: '#f5faff!important',\r\n }\r\n : {}),\r\n }}\r\n ref={ref}\r\n key={name}\r\n className={`fileCard ${className ?? ''}`}\r\n onDoubleClick={onDoubleClick}\r\n onClick={onClick}\r\n title={name}\r\n tabIndex={0}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(true);\r\n }}\r\n onDragLeave={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(false);\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragOver(false);\r\n if (onDropFiles && e.dataTransfer?.files?.length) {\r\n const files = Array.from(e.dataTransfer.files);\r\n onDropFiles(files);\r\n }\r\n }}\r\n >\r\n <Box className=\"fileCard__container\">\r\n <Box className=\"fileCard__content\">\r\n <FileIcon docName={name} iconSize={iconsSize} />\r\n <Box as=\"span\" className=\"fileCard__name\">\r\n {name}\r\n </Box>\r\n </Box>\r\n <Box className=\"fileCard__additionalButtons\">\r\n {additionalButtons?.map((c) => {\r\n return (\r\n <IconButton\r\n iconSize={'Md'}\r\n {...c}\r\n className={`fileCard__additionalButton ${c.className ?? ''}`}\r\n />\r\n );\r\n })}\r\n </Box>\r\n {handleClose && (\r\n <Close\r\n type=\"button\"\r\n className=\"fileCard__delete\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleClose(name);\r\n }}\r\n />\r\n )}\r\n </Box>\r\n {previewProps?.hasPreview && previewProps?.previewUrl && (\r\n <Box className=\"fileCard__preview\">\r\n <img src={previewProps.previewUrl} alt={name} />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box, getVariant, Progress, ThemeUIStyleObject } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport React, { MouseEvent, useRef, useState } from 'react';\r\nimport { IconButton } from '../forms';\r\n\r\nexport const Dropzone = ({\r\n sx,\r\n className,\r\n messageError,\r\n progress = 0,\r\n defaultLabel = getLabel('btnUploadClass').text,\r\n draggingLabel = getLabel('lblDroping').text,\r\n onClick,\r\n onChange,\r\n handleInfoButton,\r\n infoButtonProps,\r\n}: {\r\n sx?: ThemeUIStyleObject;\r\n className?: string;\r\n messageError?: string;\r\n progress?: number;\r\n defaultLabel?: string;\r\n draggingLabel?: string;\r\n infoButtonProps?: any;\r\n onClick?: (e: MouseEvent) => void;\r\n onChange?: (e: File[]) => any;\r\n handleInfoButton?: (e: MouseEvent) => void;\r\n}) => {\r\n const innerSx = messageError\r\n ? { borderLeft: '2px solid', borderColor: 'danger' }\r\n : {};\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleClick = (ev: MouseEvent) => {\r\n onClick?.(ev);\r\n\r\n if (!ev.defaultPrevented) {\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n };\r\n\r\n const [isDragging, setIsDragging] = useState(false);\r\n const handleDragStart = (_e: React.DragEvent<HTMLDivElement>) => {\r\n setIsDragging(true);\r\n };\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.execution.components.uploader.dropzone')}\r\n className=\"dropzone__container\"\r\n >\r\n <Box\r\n tabIndex={0}\r\n sx={{ ...innerSx, sx }}\r\n className={`dropzone ${className ?? ''}`}\r\n onClick={handleClick}\r\n onKeyDown={(ev) => {\r\n if (ev.code === 'Enter' || ev.code === 'Space') {\r\n handleClick(ev as any);\r\n }\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n\r\n const newFiles = Array.from(e.dataTransfer.files);\r\n setIsDragging(false);\r\n onChange?.(newFiles);\r\n }}\r\n onDragEnter={handleDragStart}\r\n onDragLeave={handleDragLeave}\r\n onDragOver={handleDragOver}\r\n >\r\n {progress > 0 && progress < 100 && (\r\n <Progress max={100} value={progress} className=\"progressBar\" />\r\n )}\r\n {messageError ? (\r\n <Box color=\"danger\">{messageError}</Box>\r\n ) : isDragging ? (\r\n draggingLabel\r\n ) : (\r\n defaultLabel\r\n )}\r\n\r\n <input\r\n multiple\r\n type=\"file\"\r\n ref={fileInputRef}\r\n style={{ display: 'none' }}\r\n onChange={(e) => {\r\n e.preventDefault();\r\n\r\n if (e.target.files) {\r\n const newFiles = Array.from([...e.target.files]);\r\n onChange?.(newFiles);\r\n e.target.value = '';\r\n }\r\n }}\r\n />\r\n </Box>\r\n {handleInfoButton && (\r\n <IconButton\r\n {...infoButtonProps}\r\n className=\"info\"\r\n iconSize={'Sm'}\r\n icon=\"Info\"\r\n onMouseEnter={handleInfoButton}\r\n onClick={handleClick}\r\n />\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { makeAutoObservable } from 'mobx';\r\nimport { Dropzone } from './Dropzone';\r\nimport { Box } from '@apia/theme';\r\nimport { FileCard } from './FileCard';\r\nimport { ApiaUtil } from '../../objects';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { uniqueId } from '@apia/util';\r\n\r\nexport type TUploadedFile = { id: string | number; name: string };\r\n\r\nexport type TUploadInProgress = {\r\n abortController?: AbortController;\r\n error?: string;\r\n id: string;\r\n file: File;\r\n progress: number;\r\n};\r\n\r\ntype TUploadHandlerState = {\r\n inProgressFiles: TUploadInProgress[];\r\n uploadedFiles: TUploadedFile[];\r\n};\r\n\r\nexport type TUploadHandlerProps = {\r\n initialFiles: TUploadedFile[];\r\n isMultiple?: boolean;\r\n /**\r\n * Must return the uploaded file instance if everything went ok.\r\n *\r\n * Must return a string if an error message must be placed in the uploading file to mark it\r\n * as with error.\r\n *\r\n * Must return null to remove the upload in progress without adding it to uploaded fiels.\r\n */\r\n onUpload(file: TUploadInProgress): Promise<TUploadedFile | string | null>;\r\n /**\r\n * Must return true if the file was deleted in the remote server.\r\n *\r\n * Must return a string containing an error message if something went wrong. This message\r\n * will be thrown as a notification.\r\n *\r\n * Must return null if nothing has to be done.\r\n */\r\n onDelete(file: TUploadedFile): Promise<true | string | null>;\r\n};\r\n\r\nexport class UploadHandler {\r\n state: TUploadHandlerState = { inProgressFiles: [], uploadedFiles: [] };\r\n\r\n constructor(public props: TUploadHandlerProps) {\r\n makeAutoObservable(this);\r\n\r\n this.state.uploadedFiles = this.props.initialFiles;\r\n }\r\n\r\n delete(file: TUploadedFile) {\r\n this.props.onDelete(file).then((res) => {\r\n if (res === true) {\r\n this.state.uploadedFiles = this.state.uploadedFiles.filter(\r\n (c) => c !== file,\r\n );\r\n } else if (typeof res === 'string') {\r\n ApiaUtil.instance.notifications.notify({\r\n message: res,\r\n });\r\n }\r\n });\r\n }\r\n\r\n start(files: File[]) {\r\n files.forEach((file) => {\r\n const newUpload: TUploadInProgress = {\r\n abortController: new AbortController(),\r\n id: uniqueId('file_upload'),\r\n file,\r\n progress: 0,\r\n };\r\n this.state.inProgressFiles.push(newUpload);\r\n this.props.onUpload(newUpload).then((res) => {\r\n this.state.inProgressFiles = this.state.inProgressFiles.filter(\r\n (c) => c.id !== newUpload.id,\r\n );\r\n\r\n if (typeof res === 'string') {\r\n ApiaUtil.instance.notifications.notify({\r\n message: res,\r\n icon: '',\r\n });\r\n } else if (res) {\r\n this.state.uploadedFiles.push(res);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport const Uploader = observer(({ handler }: { handler: UploadHandler }) => {\r\n return (\r\n <Box className=\"file_uploader\">\r\n <Box className=\"file_uploader__dropzone\">\r\n {(handler.props.isMultiple ||\r\n (handler.state.uploadedFiles.length === 0 &&\r\n handler.state.inProgressFiles.length === 0)) && (\r\n <Dropzone\r\n onChange={(ev) => {\r\n handler.start(ev);\r\n }}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"file_uploader__in_progress\">\r\n {handler.state.inProgressFiles.map((c) => (\r\n <Dropzone\r\n progress={c.progress}\r\n messageError={c.error}\r\n key={c.file.name}\r\n />\r\n ))}\r\n </Box>\r\n <Box className=\"file_uploader__files_list\">\r\n {handler.state.uploadedFiles.map((c) => (\r\n <FileCard\r\n name={c.name}\r\n key={c.id}\r\n handleClose={() => handler.delete(c)}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n","import React, { useState, createRef } from 'react';\r\nimport { Box, Input, Select, useBreakpointIndex } from '@apia/theme';\r\nimport { getLabel, noNaN } from '@apia/util';\r\nimport { TTooltip, ApiaUtil } from '../../objects';\r\nimport { IconButton, SimpleButton } from '../forms';\r\n\r\nconst defaultLabels = Object.freeze({\r\n totalRecords: window.GNR_TOT_RECORDS,\r\n totalRecordsReached: window.GNR_TOT_RECORDS_REACHED,\r\n maximize: window.LBL_MAXIMIZE,\r\n minimize: window.LBL_MINIMIZE,\r\n information: window.BTN_FILE_INFO_TOOLTIP,\r\n deleteFilters: window.BTN_DELETE_FILTERS,\r\n refresh: window.NAV_REFRESH,\r\n firstPage: window.NAV_FIRST_PAGE,\r\n previousPage: window.NAV_PREVIOUS_PAGE,\r\n lastPage: window.NAV_LAST_PAGE,\r\n nextPage: window.NAV_NEXT_PAGE,\r\n pageInputInstructions: window.NAV_INPUT_LABEL,\r\n page: window.PAGE,\r\n moreData: window.QUERY_MORE_DATA,\r\n});\r\n\r\nexport interface IPagination {\r\n appliedFilters?: number;\r\n /**\r\n * Este valor determina si el boton de eliminar filtros debe mostrarse como si hubieran filtros sin aplicar (en caso de que haya filtros aplicados por defecto) o si debe mostrarse como si todos los filtros con valor estan aplicados a la busqueda actual. Se deberia verificar con el slice de redux correspondiente a la tabla.\r\n */\r\n areAllFiltersApplied?: boolean;\r\n\r\n className?: string;\r\n currentPage: number | string;\r\n disabled?: boolean;\r\n disableReduced?: boolean;\r\n hideInfo?: boolean;\r\n hideMaximizeButton?: boolean;\r\n hideRefreshButton?: boolean;\r\n isLoading?: boolean;\r\n /**\r\n * Valor obtenido del buttonsSlice para bloquear los botones de la paginacion mientras se estan ejecutando acciones\r\n */\r\n isPerforming?: boolean;\r\n /**\r\n * Si se pasa un método onDeleteFilters, aparece el botón \"Eliminar filtros\"\r\n * cerca del refresh\r\n */\r\n onDeleteFilters?: () => unknown;\r\n onPageChange: (page: number) => unknown;\r\n onRefresh: (page: number) => unknown;\r\n pageCount: number | string;\r\n reachedMax?: boolean | undefined;\r\n hasMore?: boolean | undefined;\r\n /**\r\n * Si la cantidad de registros se obtiene desde un lugar distinto de Redux,\r\n * se puede pasar como number directamente\r\n */\r\n recordsCount?: number;\r\n showMaximizeOnSmallBreakpoints?: boolean;\r\n variant?: 'primary' | 'secondary' | 'datagrid';\r\n\r\n onMaximize?: () => unknown;\r\n isMaximized?: boolean;\r\n labels?: Partial<typeof defaultLabels>;\r\n}\r\n\r\nconst NoMemoPagination = ({\r\n appliedFilters,\r\n areAllFiltersApplied,\r\n className,\r\n currentPage,\r\n disabled,\r\n disableReduced,\r\n hasMore,\r\n hideInfo,\r\n hideMaximizeButton,\r\n hideRefreshButton,\r\n isLoading,\r\n isPerforming,\r\n onDeleteFilters,\r\n onPageChange,\r\n onRefresh,\r\n pageCount,\r\n recordsCount: outerRecordsCount,\r\n reachedMax,\r\n showMaximizeOnSmallBreakpoints,\r\n variant = 'primary',\r\n isMaximized,\r\n onMaximize,\r\n labels,\r\n}: IPagination) => {\r\n const numberPageCount = Number(pageCount);\r\n const numberCurrentPage = Number(currentPage);\r\n const breakPoint = useBreakpointIndex();\r\n const recordsCount = outerRecordsCount;\r\n\r\n const definedLabels = Object.assign({}, defaultLabels, labels);\r\n\r\n const [hasNoValue, setHasNoValue] = useState<boolean>(false);\r\n\r\n const InputRef = createRef<HTMLInputElement>();\r\n\r\n const options = [];\r\n for (let i = 1; i <= numberPageCount; i++) {\r\n options.push(i);\r\n }\r\n\r\n const [infoButtonRef, setInfoButtonRef] = React.useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n const recordsCountLabel = `${definedLabels.totalRecords}: ${recordsCount}`;\r\n const tooltipProps: TTooltip = React.useMemo(\r\n () => ({\r\n text:\r\n breakPoint <= 3\r\n ? `${recordsCountLabel}.${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && definedLabels.totalRecordsReached) ||\r\n (hasMore && definedLabels.moreData)\r\n }`\r\n : `${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && definedLabels.totalRecordsReached) ||\r\n (hasMore && definedLabels.moreData)\r\n }`,\r\n attachToElement: { current: infoButtonRef! },\r\n closeOnClickOut: true,\r\n }),\r\n [\r\n breakPoint,\r\n definedLabels.moreData,\r\n definedLabels.totalRecordsReached,\r\n hasMore,\r\n infoButtonRef,\r\n reachedMax,\r\n recordsCountLabel,\r\n ],\r\n );\r\n return (\r\n <Box\r\n as=\"nav\"\r\n variant={`layout.common.components.pagination.${variant}`}\r\n aria-label={getLabel('lblQryParamPag').text}\r\n className={`pagination ${\r\n numberPageCount <= 1 && !disableReduced ? 'onlyRefresh' : ''\r\n } ${className ?? ''}`}\r\n >\r\n <Box className=\"pagination__leftToolbar\">\r\n {!hideMaximizeButton &&\r\n (showMaximizeOnSmallBreakpoints || breakPoint > 4) && (\r\n <IconButton\r\n variant={'icon'}\r\n className=\"pagination__fullScreenButton\"\r\n onClick={onMaximize}\r\n icon={!isMaximized ? 'Maximize' : 'Minimize'}\r\n title={\r\n !isMaximized ? definedLabels.maximize : definedLabels.minimize\r\n }\r\n aria-label={\r\n !isMaximized ? definedLabels.maximize : definedLabels.minimize\r\n }\r\n iconSize={'Md'}\r\n />\r\n )}\r\n {!hideInfo && (\r\n <>\r\n {(((reachedMax || hasMore) && breakPoint > 3) || breakPoint <= 3) &&\r\n className !== 'grid__pagination' ? (\r\n <IconButton\r\n variant={'icon-primary'}\r\n icon=\"Info\"\r\n className={`pagination__information ${\r\n reachedMax || hasMore ? 'pagination__alertInfo' : ''\r\n }`}\r\n onClick={() => ApiaUtil.instance.tooltips.open(tooltipProps)}\r\n ref={setInfoButtonRef}\r\n iconSize={'Md'}\r\n aria-label={definedLabels.information}\r\n title={definedLabels.information}\r\n />\r\n ) : (\r\n ''\r\n )}\r\n {breakPoint > 3 && (\r\n <Box\r\n as=\"span\"\r\n className=\"recordsCounter pagination__deleteLabels\"\r\n title={recordsCountLabel}\r\n >\r\n {recordsCount !== -1 &&\r\n `${definedLabels.totalRecords}: ${recordsCount} `}\r\n </Box>\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n\r\n <Box className=\"pagination__controls\">\r\n {(numberPageCount > 0 || disableReduced) && (\r\n <>\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage === 1 ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n title={definedLabels.firstPage}\r\n aria-label={definedLabels.firstPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(1);\r\n }}\r\n icon=\"First\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled || numberCurrentPage <= 1 || isLoading || isPerforming\r\n }\r\n title={definedLabels.previousPage}\r\n aria-label={definedLabels.previousPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(numberCurrentPage - 1);\r\n }}\r\n icon=\"Previous\"\r\n iconSize={'Sm'}\r\n />\r\n {breakPoint > 2 && (\r\n <Box className=\"input\">\r\n <Input\r\n className=\"pagination__controls__input\"\r\n aria-label={definedLabels.pageInputInstructions}\r\n title={`${definedLabels.page}: ${numberCurrentPage} `}\r\n ref={InputRef}\r\n value={hasNoValue ? '' : numberCurrentPage}\r\n onKeyDown={(ev) => {\r\n const regex = /([0-9])|(Backspace)|(Tab)/;\r\n if (!ev.key.match(regex)) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n if (ev.key === 'Enter') {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n onPageChange(numberCurrentPage);\r\n }\r\n }}\r\n onBlur={() => {\r\n onPageChange(numberCurrentPage);\r\n }}\r\n onFocus={(ev) => {\r\n ev.currentTarget.select();\r\n }}\r\n onChange={(ev) => {\r\n setHasNoValue(ev.target.value === '');\r\n if (ev.target.value !== '') {\r\n onPageChange(\r\n Math.max(\r\n 1,\r\n Math.min(\r\n noNaN(Number(ev.currentTarget.value)),\r\n pageCount as number,\r\n ),\r\n ),\r\n );\r\n }\r\n }}\r\n disabled={disabled || isLoading || isPerforming}\r\n />{' '}\r\n /{' '}\r\n <Box\r\n as=\"span\"\r\n title={\r\n recordsCount !== -1\r\n ? `${definedLabels.totalRecords} ${recordsCount}`\r\n : definedLabels.pageInputInstructions\r\n }\r\n >\r\n {pageCount}\r\n </Box>\r\n </Box>\r\n )}\r\n {breakPoint <= 2 && (\r\n <Select\r\n className=\"pagination__selectPage\"\r\n // menuplacement=\"top\"\r\n value={numberCurrentPage}\r\n onChange={(e) => {\r\n onPageChange(Number(e.target.value));\r\n }}\r\n >\r\n <option disabled>Total: {numberPageCount}</option>\r\n {options.map((current) => {\r\n return <option key={current}>{current}</option>;\r\n })}\r\n </Select>\r\n )}\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n title={definedLabels.nextPage}\r\n aria-label={definedLabels.nextPage}\r\n type=\"button\"\r\n onClick={() => {\r\n onPageChange(numberCurrentPage + 1);\r\n }}\r\n icon=\"Next\"\r\n iconSize={'Sm'}\r\n />\r\n\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n type=\"button\"\r\n title={definedLabels.lastPage}\r\n aria-label={definedLabels.lastPage}\r\n disabled={\r\n disabled ||\r\n numberCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n onClick={() => {\r\n onPageChange(numberPageCount);\r\n }}\r\n icon=\"Last\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n <Box className=\"pagination__rightToolbar\">\r\n {(!hideRefreshButton || onDeleteFilters) && (\r\n <>\r\n {onDeleteFilters && (\r\n <SimpleButton\r\n disabled={isPerforming}\r\n className=\"pagination__deleteFiltersButton\"\r\n data-test-id=\"btn-clear-filters\"\r\n onClick={onDeleteFilters}\r\n >\r\n {breakPoint > 3 && (\r\n <Box as=\"span\" className=\"pagination__deleteLabels\">\r\n {definedLabels.deleteFilters}\r\n </Box>\r\n )}\r\n <Box\r\n as=\"span\"\r\n className={`pagination__appliedFiltersLabel ${\r\n areAllFiltersApplied ? '' : 'withFilters'\r\n }`}\r\n >\r\n {appliedFilters}\r\n </Box>\r\n </SimpleButton>\r\n )}\r\n {!hideRefreshButton && (\r\n <IconButton\r\n title={definedLabels.refresh}\r\n aria-label={definedLabels.refresh}\r\n onClick={() => onRefresh(numberCurrentPage)}\r\n icon=\"Refresh\"\r\n iconSize={'Md'}\r\n disabled={disabled || isLoading}\r\n variant={'icon-primary'}\r\n isLoading={isPerforming}\r\n className=\"pagiantion__refreshIcon\"\r\n data-test-id=\"btn-refresh\"\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const Pagination = React.memo(NoMemoPagination);\r\n","import { Command } from './Templater';\r\n\r\nexport interface IReplacer<ContentType, ReturnType> {\r\n /**\r\n * This regExp will be used by the templater to determine if it should call\r\n * the parse function or not.\r\n */\r\n match: RegExp;\r\n /**\r\n * The parse method should take the RegExpMatchArray and the value of the\r\n * original attribute and return whatever the replacer is intended for.\r\n * */\r\n parse: (result: RegExpMatchArray, value: ContentType) => ReturnType;\r\n}\r\n\r\n/**\r\n * The Attribute parsers are intended to parse some attributes whose names\r\n * match in one of the following array items' match property. If the match\r\n * property matches the attribute name, the parse function will be called with\r\n * the result of the match and the original Value passed to that attribute.\r\n * This way, it can be modified not only the name but the value as well.\r\n */\r\nconst AttributeParsers: IReplacer<\r\n string,\r\n { newName: string; newValue: unknown }[] | null\r\n>[] = [\r\n /**\r\n * Allows to pass javascript event handlers through the format\r\n * onEventDispatched, the main difficulty is that the html parser returns the\r\n * attributes with lowercase, that's why any attribute of the type\r\n * onEventDispatched will be passed to the component as onEventdispatched\r\n * (note the lowercase 'd').\r\n */\r\n {\r\n match: /^(?:data-)?on(.*)$/i,\r\n parse([, originalAction], value) {\r\n if (value.match(/^__contextMethod/))\r\n return [\r\n {\r\n newName: `on${originalAction[0].toUpperCase()}${originalAction.slice(\r\n 1,\r\n )}`,\r\n newValue: value,\r\n },\r\n ];\r\n\r\n let newName = `on${originalAction\r\n .charAt(0)\r\n .toUpperCase()}${originalAction.slice(1)}`;\r\n\r\n const composedEvent = originalAction.match(/^(mouse|key|double)(.*)$/i);\r\n if (composedEvent) {\r\n newName = `on${composedEvent[1]\r\n .charAt(0)\r\n .toUpperCase()}${composedEvent[1].slice(1)}${composedEvent[2]\r\n .charAt(0)\r\n .toUpperCase()}${composedEvent[2].slice(1)}`;\r\n }\r\n\r\n return [\r\n {\r\n newName,\r\n newValue: (ev: unknown) => {\r\n const evalString = value.replace(/return [^;\\n\\r]+/, '');\r\n\r\n const f = eval(evalString) as (ev: unknown) => void;\r\n\r\n f(ev);\r\n },\r\n },\r\n ];\r\n },\r\n },\r\n {\r\n /**\r\n * Allows to pass style objects as JSON strings\r\n */\r\n match: /^data-style$/,\r\n parse(_match, value) {\r\n try {\r\n return [{ newName: 'style', newValue: JSON.parse(value) }];\r\n } catch (e) {\r\n console.error({ value, e });\r\n }\r\n return null;\r\n },\r\n },\r\n {\r\n /**\r\n * Allows conditional rendering of a component\r\n */\r\n match: /^data-render$/,\r\n parse(_match, originalValue) {\r\n if (originalValue !== '' && !JSON.parse(originalValue)) {\r\n throw new Command('COMMAND: PREVENT_RENDERING');\r\n }\r\n return [\r\n {\r\n newName: 'data-render',\r\n newValue: undefined,\r\n },\r\n ];\r\n },\r\n },\r\n {\r\n /**\r\n * Allow to pass json data as property to the components\r\n */\r\n match: /^data-json-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, name], originalValue) => {\r\n try {\r\n return [\r\n {\r\n newName: name,\r\n newValue: JSON.parse(originalValue) as unknown,\r\n },\r\n ];\r\n } catch (e) {\r\n console.info(`Prop: ${name}, originalValue: ${originalValue}`);\r\n console.error(e);\r\n return null;\r\n }\r\n },\r\n },\r\n {\r\n match: /^data(?:-dom)?-variant$/,\r\n parse(_, newValue) {\r\n return [\r\n { newName: 'data-variant', newValue },\r\n { newName: 'variant', newValue },\r\n ];\r\n },\r\n },\r\n {\r\n match: /^data-dom-([a-zA-Z][\\w_]*)/i,\r\n parse([, name], newValue) {\r\n return [{ newName: `data-${name}`, newValue }];\r\n },\r\n },\r\n {\r\n /**\r\n * Change all the attributes whose name matches with data-(name) to just\r\n * name\r\n */\r\n match: /^data-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, newName], newValue) => [{ newName, newValue }],\r\n },\r\n /**\r\n * Allows to pass conditional data to a component. It accepts as value a JSON\r\n * string with the following structure:\r\n *\r\n * data-condition-NAME_OF_ATTRIBUTE=`\r\n * {\r\n * \"condition\": CONDITION,\r\n * \"NAME_OF_ATTRIBUTE\": VALUE_TO_PASS_TO_THE_COMPONENT\r\n * }\r\n *\r\n * Where:\r\n * - NAME_OF_ATTRIBUTE can be anything you want, the only limitations are\r\n * the attribute names limitations. - CONDITION will be evaluated with a\r\n * ternary conditional, if it parses to true the value will be passed or\r\n * hidden elsewhere - VALUE_TO_PASS_TO_THE_COMPONENT Since all the attribute\r\n * will be parsed with JSON, the value to pass can be anything that\r\n * can be parsed this way.\r\n */\r\n {\r\n match: /^data-condition-([a-zA-Z][\\w_]*)$/,\r\n parse: ([, newName], value) => {\r\n try {\r\n const parsedValue = JSON.parse(value) as Record<string, unknown>;\r\n return [\r\n {\r\n newName,\r\n newValue: parsedValue.condition ? parsedValue[newName] : undefined,\r\n },\r\n ];\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n return null;\r\n },\r\n },\r\n {\r\n match: /^tabindex/i,\r\n parse(_, newValue) {\r\n return [{ newName: 'tabIndex', newValue }];\r\n },\r\n },\r\n];\r\n\r\nexport default AttributeParsers;\r\n","/**\r\n * The PathShortcuts are intended to make it easier to write the path to a\r\n * component in the JSP file. They must match with the beginning of the\r\n * data-component attribute.\r\n */\r\nconst PathShortcuts: Record<string, string> = {};\r\n\r\nexport default PathShortcuts;\r\n","/**\r\n * All the keys included in the following array will be removed from the\r\n * attributes of the parsed components.\r\n */\r\nconst AttributeFilters = ['data-template', 'data-component', 'style'];\r\n\r\nexport default AttributeFilters;\r\n","/**\r\n * The AttributeReplacers return new names for some\r\n * attributes.\r\n */\r\nconst AttributeReplacers: Record<string, string> = {\r\n // Common html props\r\n class: 'className',\r\n colspan: 'colSpan',\r\n for: 'htmlFor',\r\n readonly: 'readOnly',\r\n autocomplete: 'autoComplete',\r\n\r\n // Chart button\r\n chartid: 'chartId',\r\n\r\n // Dynamic button\r\n apiaprops: 'apiaProps',\r\n\r\n // Profiles props\r\n\r\n // Users administration\r\n isglobal: 'isGlobal',\r\n iscreate: 'isCreate',\r\n ldapfull: 'ldapFull',\r\n passwordprops: 'passwordProps',\r\n\r\n // Validation fields\r\n initialvalue: 'initialValue',\r\n submitvalueparser: 'submitValueParser',\r\n validationclass: 'validationClass',\r\n validationfunction: 'validationFunction',\r\n validationrules: 'validationRules',\r\n allowpickbeforetoday: 'allowPickBeforeToday',\r\n evtmetafilters: 'evtMetaFilters',\r\n trafreemetafilters: 'traFreeMetaFilters',\r\n\r\n // Documents info modal\r\n allowdownload: 'allowDownload',\r\n\r\n // Documents upload modal\r\n allowpickfromdirectories: 'allowPickFromDirectories',\r\n allowpickfrommonitor: 'allowPickFromMonitor',\r\n\r\n // Document Info modal\r\n frommonitor: 'fromMonitor',\r\n showhistory: 'showHistory',\r\n showdownloadinfo: 'showDownloadInfo',\r\n showpermissions: 'showPermissions',\r\n // LangPicker\r\n currentlang: 'currentLang',\r\n\r\n // Change Dates Modal\r\n dateinputname: 'dateInputName',\r\n initiallyexpanded: 'initiallyExpanded',\r\n\r\n buttonsactions: 'buttonsActions',\r\n\r\n // Reports\r\n reportname: 'reportName',\r\n};\r\n\r\nexport default AttributeReplacers;\r\n","import { domToReact, Element } from 'html-react-parser';\r\nimport { cloneDeep } from 'lodash-es';\r\nimport * as React from 'react';\r\nimport { ICommentReplacerData } from './CommentsParsers';\r\nimport { IAlterDefaultOptions, parseOptions } from './Templater';\r\n\r\nconst ComplexReplacements: ((\r\n domNode: Element,\r\n Component: React.ComponentType,\r\n customOptions?: IAlterDefaultOptions,\r\n commentsData?: ICommentReplacerData,\r\n) => React.ReactNode)[] = [\r\n (domNode, _, customOptions, commentsData) => {\r\n if (\r\n domNode.attribs['data-prevent-parse'] &&\r\n domNode.attribs['data-prevent-parse'].trim() === 'true'\r\n ) {\r\n return null;\r\n }\r\n if (\r\n domNode.attributes.find((current) => current.name === 'data-fragment')\r\n ) {\r\n const children = domToReact(\r\n cloneDeep(domNode.children),\r\n parseOptions(customOptions, commentsData),\r\n );\r\n return <>{children}</>;\r\n }\r\n return false;\r\n },\r\n];\r\n\r\nexport default ComplexReplacements;\r\n","import {\r\n Image,\r\n Input,\r\n Box,\r\n Container,\r\n Button,\r\n HeadingProps,\r\n Heading,\r\n Label,\r\n Paragraph,\r\n Select,\r\n} from '@apia/theme';\r\n\r\nconst TagReplacers = {\r\n div: Box,\r\n button: Button,\r\n container: Container,\r\n h1: (props: HeadingProps) => <Heading as=\"h1\" {...props} />,\r\n h2: (props: HeadingProps) => <Heading as=\"h2\" {...props} />,\r\n h3: (props: HeadingProps) => <Heading as=\"h3\" {...props} />,\r\n h4: (props: HeadingProps) => <Heading as=\"h4\" {...props} />,\r\n h5: (props: HeadingProps) => <Heading as=\"h5\" {...props} />,\r\n h6: (props: HeadingProps) => <Heading as=\"h6\" {...props} />,\r\n img: Image,\r\n label: Label,\r\n input: Input,\r\n p: Paragraph,\r\n select: Select,\r\n table: (props: HeadingProps) => <Box as=\"table\" {...props} />,\r\n};\r\n\r\nexport default TagReplacers;\r\n","const contextMethods: Record<string, Record<string, () => unknown>> = {};\r\n\r\nexport default contextMethods;\r\n","import contextMethods from './contextMethods';\r\n\r\n/**\r\n * The AttributeValueParsers are intended to\r\n * parse some attibutes depending on their values\r\n * instead of their names.\r\n */\r\nconst AttributeValueParsers = (currentValue: unknown) => {\r\n if (currentValue === 'true') return true;\r\n if (currentValue === 'false') return false;\r\n\r\n if (typeof currentValue === 'string') {\r\n const result = currentValue.match(/^__contextMethod\\.(\\w+)\\.(\\w+)$/);\r\n if (result) {\r\n return contextMethods[result[1]][result[2]];\r\n }\r\n }\r\n return currentValue;\r\n};\r\n\r\nexport default AttributeValueParsers;\r\n","import { ReactNode } from 'react';\r\n\r\ninterface IErrorWithMessage {\r\n message: string;\r\n}\r\nexport function isMessage(error: unknown): error is IErrorWithMessage {\r\n return !!(typeof error === 'object' && error && 'message' in error);\r\n}\r\nexport function processCommand(command: string) {\r\n return Commands[command]();\r\n}\r\nconst Commands = {\r\n PREVENT_RENDERING: () => null,\r\n} as Record<string, () => ReactNode>;\r\n\r\nexport default Commands;\r\n","import { cloneDeep } from 'lodash-es';\r\nimport React from 'react';\r\nimport { Spinner } from 'theme-ui';\r\nimport { IReplacer } from './AttributeParsers';\r\nimport { importTemplaterComponent, parseShortcut } from './Templater';\r\n\r\nexport interface ICommentReplacerData {\r\n customShortcuts: string[][];\r\n SuspenseComponent: React.FunctionComponent;\r\n}\r\n\r\nconst CommentsParsers: IReplacer<ICommentReplacerData, ICommentReplacerData>[] =\r\n [\r\n {\r\n /**\r\n * This parser allows to put a comment with the structure:\r\n * <!-- addRoute<newName,path/to/the/components> -->\r\n * And then use it in replacement of the path:\r\n *\r\n * @example\r\n *\r\n * <!-- addRoute<modals,path/to/the/modals> -->\r\n * <div data-component=\"modals/Info\">...\r\n */\r\n match: /addRoute *<(.{2,}),(.+)>/,\r\n parse(result, commentsData) {\r\n const routeShourtcut = result[1];\r\n const routePath = result[2];\r\n const newData = cloneDeep(commentsData);\r\n newData.customShortcuts.push([\r\n parseShortcut(routeShourtcut),\r\n routePath,\r\n ]);\r\n return newData;\r\n },\r\n },\r\n {\r\n /**\r\n * This parser allows anybody to put a comment with the structure:\r\n * <!-- SuspenseComponent<path/to/Component> --> or\r\n * <!-- SuspenseComponent<null> -->\r\n * which will result in a custom for the lazy components.\r\n */\r\n match: /SuspenseComponent *<(\\w+)>/,\r\n parse(result, commentsData) {\r\n const responseData = commentsData;\r\n if (result[1].toLowerCase() === 'spinner')\r\n responseData.SuspenseComponent = Spinner;\r\n else\r\n responseData.SuspenseComponent = importTemplaterComponent(result[1]);\r\n return responseData;\r\n },\r\n },\r\n ];\r\n\r\nexport default CommentsParsers;\r\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\nimport { lazy, ComponentType, ElementType, Suspense } from 'react';\r\nimport * as React from 'react';\r\nimport parse, {\r\n HTMLReactParserOptions,\r\n Element,\r\n domToReact,\r\n} from 'html-react-parser';\r\nimport { Box } from 'theme-ui';\r\nimport { cloneDeep, isFunction, uniqueId } from 'lodash-es';\r\nimport AttributeParsers from './AttributeParsers';\r\nimport PathShortcuts from './PathShortcuts';\r\nimport AttributeFilters from './AttributeFilters';\r\nimport AttributeReplacers from './AttributeReplacers';\r\nimport ComplexReplacements from './ComplexReplacements';\r\nimport TagReplacers from './TagReplacers';\r\nimport AttributeValueParsers from './AttributeValueParsers';\r\nimport { isMessage, processCommand } from './Commands';\r\nimport CommentsParsers, { ICommentReplacerData } from './CommentsParsers';\r\nimport contextMethods from './contextMethods';\r\n\r\nconst parameters = {\r\n performance: {\r\n measureTime: false,\r\n },\r\n};\r\n\r\nconsole.time('Templater parse');\r\nconsole.time('Templater pre screen unlock');\r\nlet templaterTimer: number;\r\n\r\nexport function importTemplaterComponent(path: string) {\r\n return lazy<ComponentType<unknown>>(() => {\r\n return new Promise<{\r\n default: ComponentType<unknown>;\r\n }>((resolve) => {\r\n import(\r\n /* webpackChunkName: \"[request]\" */\r\n /* webpackInclude: /\\.tsx?$/ */\r\n /* webpackPreload: true */\r\n /* webpackExclude: /projectAnalysisTree/ */\r\n `/src/dynamic/${path}`\r\n )\r\n .then((result: unknown) => {\r\n resolve(result as any);\r\n })\r\n .catch((error: unknown) => {\r\n resolve({\r\n default: () => {\r\n console.error(error);\r\n throw new Error(\r\n `The above error ocurred at component ${path}, does it exist?`,\r\n );\r\n },\r\n });\r\n });\r\n });\r\n });\r\n}\r\n\r\nexport function parseShortcut(shortcut: string) {\r\n if ('^($)[.'.indexOf(shortcut) !== -1) return `\\\\${shortcut}`;\r\n return shortcut;\r\n}\r\nconst parsedShortcuts: string[][] = Object.entries(PathShortcuts).map(\r\n ([shortcut, path]) => {\r\n return [parseShortcut(shortcut), path];\r\n },\r\n);\r\n\r\nconst Wrapper = ({\r\n children,\r\n onMount,\r\n}: {\r\n children: React.ReactNode;\r\n onMount?: () => void;\r\n}) => {\r\n React.useEffect(() => {\r\n if (onMount) {\r\n onMount();\r\n }\r\n return () => {};\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return children;\r\n};\r\n\r\nexport interface IAlterDefaultOptions {\r\n /**\r\n * It's possible to replace some attributes and parse the value with\r\n * a specific replacement function you provide, in order to provide\r\n * custom behavior to the template.\r\n *\r\n * @example\r\n *\r\n * attributeParsers: [\r\n * {\r\n * match: /^data-say-([\\w]+)$/,\r\n * parse: (matchResult, originalValue) => ({ newName: 'onLoad', newValue:\r\n * () => alert(matchResult[1]) })\r\n * }\r\n * ]\r\n */\r\n attributeParsers?: typeof AttributeParsers;\r\n /**\r\n * It's possible to replace some attributes with this property. Each\r\n * attribute will be searched in the dictionary and if it's found,\r\n * then it will be replaced with the value which pairs that key.\r\n *\r\n * @example\r\n *\r\n * attributesReplacement: {\r\n * class: 'className' // Very common in react, it's implemented by default\r\n * }\r\n */\r\n attributesReplacement?: Record<string, string>;\r\n /**\r\n * With this parameter the templater shouts to the console the important\r\n * events it goes through.\r\n */\r\n debug?: boolean;\r\n /**\r\n * It's possible to filter some attributes passing an array of undesired\r\n * values\r\n *\r\n * @example\r\n *\r\n * filterAttributes: ['data-dangerous']\r\n */\r\n filterAttributes?: string[];\r\n /**\r\n * WARNING: If\r\n *\r\n * The props object can be accessed from the template, in this way,\r\n * it's possible to pass any kind of javascript data to be used\r\n * when generating the template's structure.\r\n */\r\n props?: Record<string, unknown>;\r\n}\r\n\r\nexport interface IDownloadAndParseTemplateByName extends IAlterDefaultOptions {\r\n avoidCache?: boolean;\r\n /**\r\n * The request parameters is an object that will be sent as queryString\r\n * to the server.\r\n */\r\n requestParameters: Record<string, unknown>;\r\n}\r\n\r\nexport type TTemplateParser = (document: Document) => void;\r\n\r\ndeclare global {\r\n interface Window {\r\n onPreParseTemplate: TTemplateParser;\r\n }\r\n}\r\n\r\nexport const Command = Error;\r\n\r\nfunction makeEmptyCommentsData(): ICommentReplacerData {\r\n return { customShortcuts: [], SuspenseComponent: () => null };\r\n}\r\n\r\nexport const parseOptions = (\r\n customOptions?: IAlterDefaultOptions,\r\n commentsData?: ICommentReplacerData,\r\n): HTMLReactParserOptions => {\r\n let actualCommentsData = commentsData ?? makeEmptyCommentsData();\r\n\r\n return {\r\n trim: true,\r\n replace: (domNode) => {\r\n if (customOptions?.debug) console.log(domNode);\r\n if (domNode.type.toLowerCase() === 'comment') {\r\n CommentsParsers.forEach((parser) => {\r\n const matchResult = ((domNode as any).data as string).match(\r\n parser.match,\r\n );\r\n if (matchResult) {\r\n actualCommentsData = parser.parse(matchResult, actualCommentsData);\r\n }\r\n });\r\n }\r\n if (domNode instanceof Element && domNode.attribs) {\r\n let componentName = domNode.attribs['data-component'];\r\n\r\n if (componentName) {\r\n actualCommentsData.customShortcuts.forEach(\r\n ([shortcut, replacement]) => {\r\n if (componentName.match(new RegExp(`^${shortcut}.+`))) {\r\n componentName =\r\n replacement + componentName.slice(shortcut.length);\r\n }\r\n },\r\n );\r\n parsedShortcuts.forEach(([shortcut, replacement]) => {\r\n if (componentName.match(new RegExp(`^${shortcut}.+`))) {\r\n componentName =\r\n replacement + componentName.slice(shortcut.length);\r\n }\r\n });\r\n\r\n if (componentName.startsWith('@'))\r\n componentName = componentName.slice(1);\r\n }\r\n\r\n try {\r\n const Component = componentName\r\n ? importTemplaterComponent(componentName)\r\n : (TagReplacers[domNode.name as keyof typeof TagReplacers] ??\r\n ((props: unknown) => (\r\n <Box as={domNode.name as ElementType} {...(props as any)} />\r\n )));\r\n\r\n for (let i = 0; i < ComplexReplacements.length; i++) {\r\n const complexReplacement = ComplexReplacements[i];\r\n const result = complexReplacement(\r\n domNode,\r\n Component,\r\n customOptions,\r\n commentsData,\r\n );\r\n if (result !== false) return <Suspense>{result}</Suspense>;\r\n }\r\n\r\n [\r\n ...AttributeFilters,\r\n ...(customOptions?.filterAttributes ?? []),\r\n ].forEach((att) => {\r\n // eslint-disable-next-line no-param-reassign\r\n delete domNode.attribs[att];\r\n });\r\n\r\n const props = Object.entries(domNode.attribs).reduce(\r\n (dictionary, [initialName, initialValue]) => {\r\n const name = initialName;\r\n const value = initialValue;\r\n let hasParsed = false;\r\n const returnDictionary = { ...dictionary };\r\n for (let i = 0; i < AttributeParsers.length; i++) {\r\n const parser = AttributeParsers[i];\r\n const match = name.match(parser.match);\r\n if (customOptions?.debug) console.log(parser.match, match);\r\n if (match) {\r\n const parsed = parser.parse(match, value);\r\n if (customOptions?.debug) console.log(parser.match, parsed);\r\n if (parsed) {\r\n parsed.forEach(({ newName, newValue }) => {\r\n const finalName =\r\n {\r\n ...AttributeReplacers,\r\n ...(customOptions?.attributesReplacement ?? {}),\r\n }[newName] ?? newName;\r\n returnDictionary[finalName] =\r\n AttributeValueParsers(newValue);\r\n });\r\n hasParsed = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (!hasParsed) {\r\n const newName =\r\n {\r\n ...AttributeReplacers,\r\n ...(customOptions?.attributesReplacement ?? {}),\r\n }[name] ?? name;\r\n returnDictionary[newName] = AttributeValueParsers(value);\r\n }\r\n\r\n return returnDictionary;\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n\r\n const children: React.ReactNode = domToReact(\r\n cloneDeep(domNode.children),\r\n parseOptions(customOptions, actualCommentsData),\r\n );\r\n\r\n delete props.children;\r\n\r\n const { onComponentload } = props as { onComponentload?: () => void };\r\n if (onComponentload) {\r\n delete props.onComponentload;\r\n }\r\n\r\n if (parameters.performance.measureTime) {\r\n clearTimeout(templaterTimer);\r\n templaterTimer = setTimeout(() => {\r\n console.timeEnd('Templater parse');\r\n }, 150) as any;\r\n }\r\n\r\n if ((actualCommentsData as any).SuspenseComponent) {\r\n if (onComponentload) {\r\n return (\r\n <Suspense>\r\n <Wrapper onMount={onComponentload}>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Wrapper>\r\n </Suspense>\r\n );\r\n }\r\n return (\r\n <Suspense>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Suspense>\r\n );\r\n }\r\n if (onComponentload)\r\n return (\r\n <Wrapper onMount={onComponentload}>\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n </Wrapper>\r\n );\r\n return (\r\n <Component {...props}>\r\n {domNode.children.length > 0 ? children : null}\r\n </Component>\r\n );\r\n } catch (e) {\r\n if (isMessage(e)) {\r\n const match = e.message.match(/COMMAND: *(\\w[\\w\\d_-]*)/);\r\n if (match) {\r\n return processCommand(match[1]);\r\n }\r\n }\r\n console.error(e);\r\n }\r\n }\r\n return domNode as any;\r\n },\r\n htmlparser2: { lowerCaseAttributeNames: false },\r\n };\r\n};\r\n\r\nclass Templater {\r\n private static _instance: Templater | null = null;\r\n public static get instance() {\r\n if (!this._instance) {\r\n this._instance = new Templater();\r\n }\r\n return this._instance!;\r\n }\r\n\r\n isDownloadingTemplate = false;\r\n\r\n templates: Record<string, string> = {};\r\n\r\n private constructor() {\r\n this.initTemplates();\r\n }\r\n\r\n private initTemplates() {\r\n const templates = [\r\n ...document.querySelectorAll('[data-template]'),\r\n ] as HTMLElement[];\r\n const templatesObject = templates.reduce((dictionary, template) => {\r\n const name = template.getAttribute('data-template');\r\n if (!name) return dictionary;\r\n return {\r\n ...dictionary,\r\n [name]: this.parseContent(name, template.outerHTML, {}),\r\n };\r\n }, {});\r\n templates.forEach((template) => template.remove());\r\n this.templates = templatesObject;\r\n }\r\n\r\n /**\r\n * This method parses the string looking for <script class=\"context\"> tags\r\n * and placeholders, run that code and make the replacements in the template\r\n * string.\r\n *\r\n * @param content The HTML string\r\n */\r\n private parseContent(\r\n templateName: string,\r\n content: string,\r\n props: Record<string, unknown>,\r\n ) {\r\n function shoutError(error: string) {\r\n console.error('%cParse template error', 'font-size: 16px; margin: 10px');\r\n throw new Error(`${error} at template ${templateName}`);\r\n }\r\n let context: Record<string, string> = {};\r\n let newContent = content\r\n .replaceAll(\r\n /data-json-([\\w_-]+)=\"([^\"]+)\"/g,\r\n (_, propName: string, propValue: string) => {\r\n return `data-json-${propName}='${propValue.replaceAll(\r\n \"'\",\r\n ''',\r\n )}'`;\r\n },\r\n )\r\n .replaceAll(\r\n /<script [^>]*class=\"context\"[^>]*>([\\s\\S]*?)<\\/script>/g,\r\n (_, scriptContent) => {\r\n if ((scriptContent as string).match(/window[^=;]*=/))\r\n throw new Error('Assignment to window is forbidden');\r\n\r\n try {\r\n context = {\r\n ...context,\r\n ...(eval(`{\r\n let context = JSON.parse(\\`${JSON.stringify(context).replaceAll(\r\n '\"',\r\n '\\\\\"',\r\n )}\\`);\r\n ${scriptContent as string};\r\n context\r\n }`) as Record<string, string>),\r\n };\r\n } catch (e) {\r\n console.info(`Script contents: ${scriptContent as string}`);\r\n console.info(`Props`, props);\r\n shoutError(e as any);\r\n }\r\n return '';\r\n },\r\n );\r\n\r\n const contextId = uniqueId();\r\n\r\n const replacementVars = { context, props };\r\n Object.entries(replacementVars).forEach(([varName, varContent]) => {\r\n if (varContent)\r\n Object.entries(varContent).forEach(([key, value]) => {\r\n if (isFunction(value)) {\r\n if (!contextMethods[contextId]) contextMethods[contextId] = {};\r\n const methodId = uniqueId();\r\n contextMethods[contextId][methodId] = value;\r\n newContent = newContent.replaceAll(\r\n new RegExp(`{{\\\\s*(${varName})\\\\??.${key}\\\\s*}}`, 'g'),\r\n `__contextMethod.${contextId}.${methodId}`,\r\n );\r\n } else\r\n newContent = newContent.replaceAll(\r\n new RegExp(`{{\\\\s*(${varName})\\\\??.${key}\\\\s*}}`, 'g'),\r\n value !== undefined ? (value as string) : '',\r\n );\r\n });\r\n });\r\n\r\n newContent = newContent.replaceAll(\r\n /{{\\s*(context|props)\\?.([_$a-zA-Z]\\w+)\\s*}}/g,\r\n '',\r\n );\r\n\r\n const result = newContent.match(\r\n /\\{\\{(context|props)\\.([_$a-zA-Z]\\w+)\\\\s*}}/,\r\n );\r\n\r\n if (result) shoutError(`${result[1]}.${result[2]} is undefined`);\r\n\r\n return newContent;\r\n }\r\n\r\n /**\r\n * This method takes a template from the HTML Document and parses it to React\r\n * Components.\r\n *\r\n * @param name The name of the template you are looking for, it must be specified as\r\n * data-template=\"name\" in the HTML element you want to use as template.\r\n * @param options This argument allows you to alter the behavior of the parser, for example\r\n * to replace some attribute names, parse some attributes with a custom parser function or\r\n * discard some attributes. See the type IAlterDefaultOptions to get more information\r\n *\r\n * @returns A ReactComponent as the result of the parsed HTML template.\r\n */\r\n getTemplateByName(name: string, options?: IAlterDefaultOptions) {\r\n if (!this.templates[name])\r\n throw new Error('There is no template with such name, ', name as any);\r\n const component = this.#actuallyParse(\r\n this.parseContent(name, this.templates[name], options?.props as any),\r\n parseOptions(options),\r\n );\r\n return component;\r\n }\r\n\r\n /**\r\n * This method parses a string in HTML to React Components.\r\n *\r\n * @param content The HTML string to parse to React Components\r\n * @param options This argument allows you to alter the behavior of the parser, for example\r\n * to replace some attribute names, parse some attributes with a custom parser function or\r\n * discard some attributes. See the type IAlterDefaultOptions to get more information\r\n *\r\n * @returns A ReactComponent as the result of the parsed HTML template.\r\n */\r\n parseString(content: string, options?: IAlterDefaultOptions) {\r\n return this.#actuallyParse(\r\n this.parseContent('parseStringTemplate', content, options?.props as any),\r\n parseOptions(options),\r\n );\r\n }\r\n\r\n #actuallyParse = (\r\n html: string,\r\n options?: HTMLReactParserOptions,\r\n ): string | JSX.Element | JSX.Element[] => {\r\n let actualHTML = html;\r\n\r\n if (window.onPreParseTemplate) {\r\n const parser = new DOMParser();\r\n const document = parser.parseFromString(html, 'text/html');\r\n\r\n window.onPreParseTemplate?.(document);\r\n\r\n actualHTML = document.body.innerHTML;\r\n }\r\n\r\n return parse(actualHTML, options);\r\n };\r\n}\r\n\r\nexport { Templater };\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { memo } from 'react';\r\nimport { Templater } from '../../../templater/Templater';\r\nimport { Remarkable } from 'remarkable';\r\n\r\nconst MDRenderer = ({ str }: { str: string }) => {\r\n return (\r\n <Box {...getVariant('layout.common.markdown')}>\r\n {Templater.instance.parseString(\r\n new Remarkable({ linkTarget: '_blank' }).render(str),\r\n )}\r\n </Box>\r\n );\r\n};\r\nexport default memo(MDRenderer);\r\n","import { Icon, TIconName } from '@apia/icons';\r\nimport { Box, Close, getVariant, Switch, SwitchProps } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { getLabel, toBoolean } from '@apia/util';\r\nimport { useState, useEffect } from 'react';\r\n\r\nexport interface ISwitchBox {\r\n align?: 'right' | 'left';\r\n className?: string;\r\n disabled?: boolean;\r\n icon?: TIconName;\r\n label: string;\r\n notSwitchedLabel?: boolean;\r\n onClose?: () => unknown;\r\n onSwitch?: (switched: boolean) => unknown;\r\n switchedLabel?: string;\r\n switchProps?: SwitchProps;\r\n value?: boolean;\r\n}\r\n\r\nexport const SwitchCard = observer(\r\n ({\r\n align = 'left',\r\n icon,\r\n label,\r\n notSwitchedLabel,\r\n onClose,\r\n onSwitch,\r\n switchedLabel,\r\n switchProps,\r\n value,\r\n disabled,\r\n }: ISwitchBox) => {\r\n const [isSwitched, setIsSwitched] = useState(toBoolean(value));\r\n\r\n // Keep internal state in sync if the parent changes the `value` prop.\r\n useEffect(() => {\r\n setIsSwitched(toBoolean(value));\r\n }, [value]);\r\n\r\n const handleSwitchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.checked;\r\n setIsSwitched(newValue);\r\n if (onSwitch) {\r\n onSwitch(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Box\r\n className=\"switch__card\"\r\n {...getVariant('layout.common.components.switchCard')}\r\n >\r\n {align === 'left' && (\r\n <Switch\r\n disabled={disabled}\r\n checked={isSwitched}\r\n {...switchProps}\r\n onChange={handleSwitchChange}\r\n />\r\n )}\r\n <Box className=\"label__container\" title={label}>\r\n {icon && <Icon name={icon} title=\"\" />}\r\n {label}\r\n </Box>\r\n {((switchedLabel && isSwitched) || align === 'right' || onClose) && (\r\n <Box className=\"switch__container\">\r\n {!notSwitchedLabel &&\r\n (isSwitched\r\n ? getLabel('lblCanUpdate').text\r\n : getLabel('lblCannotUpdate').text)}\r\n {align === 'right' && (\r\n <Switch\r\n disabled={disabled}\r\n checked={isSwitched}\r\n {...switchProps}\r\n onChange={handleSwitchChange}\r\n className=\"switch\"\r\n title={\r\n isSwitched\r\n ? getLabel('lblCanUpdate').text\r\n : getLabel('lblCannotUpdate').text\r\n }\r\n />\r\n )}\r\n {onClose && !disabled && (\r\n <Close disabled={disabled} onClick={onClose} />\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport { SwitchCard } from './SwitchCard';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from './Permissions';\r\n\r\nconst PermissionsList = observer(() => {\r\n const controller = usePermissionsContext();\r\n const state = controller.permissions;\r\n\r\n return (\r\n <Box className=\"permissions__list\">\r\n {state.users && state.users.length > 0 && (\r\n <>\r\n <span>{getLabel('sbtUsers').text}</span>\r\n <Box as=\"ul\">\r\n {state.users.map((c) => {\r\n return (\r\n <Box as=\"li\" key={c.userId}>\r\n <SwitchCard\r\n disabled={controller.disabled}\r\n label={c.userLogin}\r\n align=\"right\"\r\n icon=\"User2\"\r\n onClose={() =>\r\n controller.onChangeUsers(\r\n controller.permissions.users.filter(\r\n (s) => s.userId !== c.userId,\r\n ),\r\n )\r\n }\r\n onSwitch={(isSwitched) => (c.canUpdate = isSwitched)}\r\n value={c.canUpdate}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </>\r\n )}\r\n {state.pools && state.pools.length > 0 && (\r\n <>\r\n <span>{getLabel('lblPool').text}</span>\r\n <Box as=\"ul\">\r\n {state.pools.map((c) => {\r\n return (\r\n <Box as=\"li\" key={c.poolName}>\r\n <SwitchCard\r\n label={c.poolName}\r\n align=\"right\"\r\n icon=\"Groups\"\r\n onClose={() =>\r\n controller.onChangePools(\r\n controller.permissions.pools.filter(\r\n (s) => s.poolId !== c.poolId,\r\n ),\r\n )\r\n }\r\n onSwitch={(isSwitched) => (c.canUpdate = isSwitched)}\r\n value={c.canUpdate}\r\n />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n </>\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nexport default PermissionsList;\r\n","import { makeApiaUsersModal2 } from '@apia/api';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from '../Permissions';\r\nimport { SimpleButton } from '../../forms';\r\n\r\nexport const UserModalBtn = observer(() => {\r\n const context = usePermissionsContext();\r\n\r\n return (\r\n <SimpleButton\r\n disabled={context.disabled}\r\n variant=\"outline\"\r\n onClick={() => {\r\n makeApiaUsersModal2()\r\n .openModal({\r\n title: window.LBL_ADD_USER,\r\n })\r\n .then((selected) => {\r\n context.onChangeUsers(\r\n selected.reduce(\r\n (acc, c) => {\r\n const newItem = {\r\n userId: c.row.id,\r\n userLogin: String(c.row.cells[0].children),\r\n canUpdate: false,\r\n };\r\n\r\n if (!acc.some((c) => c.userId === newItem.userId)) {\r\n acc.push(newItem);\r\n }\r\n return acc;\r\n },\r\n [...context.permissions.users],\r\n ),\r\n );\r\n });\r\n }}\r\n >\r\n {getLabel('btnAddUser').text}\r\n </SimpleButton>\r\n );\r\n});\r\n","import { makeApiaPoolsModals2 } from '@apia/api';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { usePermissionsContext } from '../Permissions';\r\nimport { SimpleButton } from '../../forms';\r\n\r\nexport const PoolModalBtn = observer(() => {\r\n const context = usePermissionsContext();\r\n\r\n return (\r\n <SimpleButton\r\n disabled={context.disabled}\r\n variant=\"outline\"\r\n onClick={() => {\r\n makeApiaPoolsModals2()\r\n .openModal({\r\n title: window.LBL_ADD_GROUP,\r\n })\r\n .then((selected) => {\r\n context.onChangePools(\r\n selected.reduce(\r\n (acc, c) => {\r\n const newItem = {\r\n poolId: c.row.id,\r\n poolName: String(c.row.cells[0].children),\r\n canUpdate: false,\r\n };\r\n\r\n if (!acc.some((c) => c.poolId === newItem.poolId)) {\r\n acc.push(newItem);\r\n }\r\n return acc;\r\n },\r\n [...context.permissions.pools],\r\n ),\r\n );\r\n });\r\n }}\r\n >\r\n {getLabel('btnAddPool').text}\r\n </SimpleButton>\r\n );\r\n});\r\n","import { Box, getVariant, Select } from '@apia/theme';\r\nimport { getLabel } from '@apia/util';\r\nimport PermissionsList from './PermissionsList';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { UserModalBtn } from './modals/UserModalBtn';\r\nimport { PoolModalBtn } from './modals/PoolModalBtn';\r\nimport { createContext, useContext } from 'react';\r\nimport { CollapsiblePanel } from '../collapsiblePanel';\r\n\r\nexport type TPickUserForPermissions = {\r\n userId: string;\r\n userLogin: string;\r\n canUpdate: boolean;\r\n};\r\n\r\nexport type TPickPoolForPermissions = {\r\n poolId: string;\r\n poolName: string;\r\n canUpdate: boolean;\r\n};\r\n\r\ntype TPermissionsContext = {\r\n disabled?: boolean;\r\n onChangePools: (u: TPickPoolForPermissions[]) => unknown;\r\n onChangeUsers: (u: TPickUserForPermissions[]) => unknown;\r\n permissions: {\r\n pools: TPickPoolForPermissions[];\r\n users: TPickUserForPermissions[];\r\n };\r\n};\r\n\r\nconst PermissionsContext = createContext<null | TPermissionsContext>(null);\r\nexport function usePermissionsContext() {\r\n return useContext(PermissionsContext)!;\r\n}\r\n\r\nexport const Permissions = observer(\r\n ({\r\n everyonePermissionsValue,\r\n collapsePermissions,\r\n disabled,\r\n onChangeEveryonePermissions,\r\n onChangeUsers,\r\n onChangePools,\r\n permissions,\r\n }: TPermissionsContext & {\r\n everyonePermissionsValue: 'R' | 'M' | '';\r\n collapsePermissions?: boolean;\r\n onChangeEveryonePermissions: (value: 'R' | 'M' | '') => unknown;\r\n }) => {\r\n return (\r\n <CollapsiblePanel\r\n label={<span>{getLabel('lblPer').text}</span>}\r\n id=\"permissions\"\r\n collapseIconToRight\r\n closedIcon=\"ArrowUpThin\"\r\n openIcon=\"ArrowDownThin\"\r\n className=\"uploader__permissions\"\r\n collapsed={collapsePermissions}\r\n >\r\n <PermissionsContext.Provider\r\n value={{\r\n onChangeUsers,\r\n onChangePools,\r\n permissions,\r\n disabled,\r\n }}\r\n >\r\n <Box {...getVariant('layout.common.components.uploader.permissions')}>\r\n <label className=\"uploader__permissions_selection\">\r\n <Box>\r\n <span>{getLabel('lblTod').text}</span>\r\n <Select\r\n disabled={disabled}\r\n onChange={(ev) => {\r\n onChangeEveryonePermissions(\r\n ev.target.value as 'R' | 'M' | '',\r\n );\r\n }}\r\n value={everyonePermissionsValue}\r\n >\r\n <option value=\"M\">{getLabel('lblPerMod').text}</option>\r\n <option value=\"R\">{getLabel('lblPerVer').text}</option>\r\n <option value={''}>{getLabel('lblAccessDenied').text}</option>\r\n </Select>\r\n </Box>\r\n <UserModalBtn />\r\n <PoolModalBtn />\r\n </label>\r\n <PermissionsList />\r\n </Box>\r\n </PermissionsContext.Provider>\r\n </CollapsiblePanel>\r\n );\r\n },\r\n);\r\n","import React, { useContext } from 'react';\r\nimport TabsController, { Tab } from './tabsController';\r\n\r\nexport const TabsContext = React.createContext<TabsController | null>(null);\r\n\r\nexport function defaultOnRequestClose() {\r\n return new Promise((resolve) => {\r\n resolve(true);\r\n });\r\n}\r\n\r\nexport function useTabsContext() {\r\n return React.useContext(TabsContext);\r\n}\r\n\r\nexport function useTabsController() {\r\n return useContext(TabsContext);\r\n}\r\n\r\nexport const CurrentTabContext = React.createContext<Tab | null>(null);\r\n\r\nexport function useCurrentTab() {\r\n return React.useContext(CurrentTabContext);\r\n}\r\n","import {\r\n ControlledMenu,\r\n MenuDivider,\r\n MenuItem,\r\n useMenuState,\r\n} from '@szhsin/react-menu';\r\nimport React from 'react';\r\nimport { useTabsContext } from './util';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nconst ContextMenu = observer(\r\n ({\r\n anchorPoint,\r\n isOpen,\r\n onClose,\r\n targetId,\r\n }: {\r\n anchorPoint: {\r\n x: number;\r\n y: number;\r\n };\r\n isOpen: boolean;\r\n onClose: () => unknown;\r\n targetId: string;\r\n }) => {\r\n const [menuProps, toggleMenu] = useMenuState();\r\n React.useEffect(() => {\r\n toggleMenu(isOpen);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isOpen]);\r\n\r\n const controller = useTabsContext()!;\r\n\r\n const closeOthers = React.useCallback(() => {\r\n void controller.closeOthers(targetId);\r\n }, [controller, targetId]);\r\n\r\n const closeToLeft = React.useCallback(() => {\r\n void controller.closeToLeft(targetId);\r\n }, [controller, targetId]);\r\n\r\n const closeToRight = React.useCallback(() => {\r\n void controller.closeToRight(targetId);\r\n }, [controller, targetId]);\r\n\r\n const firstNonFixedTab = controller.tabsList.find(\r\n (current) => !current.state.isFixed,\r\n );\r\n\r\n let lastNonFixedTab: string | null = null;\r\n if (controller.tabsList)\r\n for (let i = controller.tabsList.length - 1; i >= 0; i--) {\r\n if (!controller.tabsList[i].state.isFixed) {\r\n lastNonFixedTab = controller.tabsList[i].id;\r\n break;\r\n }\r\n }\r\n\r\n const nonFixedTabsLength =\r\n controller.tabsList?.filter((current) => !current.state.isFixed).length ??\r\n 0;\r\n\r\n return (\r\n <ControlledMenu\r\n {...menuProps}\r\n anchorPoint={anchorPoint}\r\n onClose={onClose}\r\n portal={{ target: document.getElementById('AppModals') as Element }}\r\n >\r\n {controller.state.allowDetach && (\r\n <>\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n window.open(\r\n controller.getTab(targetId)?.state.additionalProps.url,\r\n );\r\n controller.getTab(targetId)?.close?.(true);\r\n }, [controller, targetId])}\r\n >\r\n {window.BTN_DETACH || 'notFoundDetach'}\r\n </MenuItem>\r\n <MenuDivider />\r\n </>\r\n )}\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n void controller!.closeTab(targetId);\r\n }, [controller, targetId])}\r\n >\r\n {window.BTN_CLOSE}\r\n </MenuItem>\r\n <MenuItem\r\n onClick={React.useCallback(() => {\r\n void controller!.closeAll();\r\n }, [controller])}\r\n >\r\n {getLabel('lblCloseAll').text}\r\n </MenuItem>\r\n {firstNonFixedTab?.id !== targetId && (\r\n <MenuItem onClick={closeToLeft}>\r\n {getLabel('lblCloseToLeft').text}\r\n </MenuItem>\r\n )}\r\n {lastNonFixedTab !== targetId && (\r\n <MenuItem onClick={closeToRight}>\r\n {getLabel('lblCloseToRight').text}\r\n </MenuItem>\r\n )}\r\n {nonFixedTabsLength > 1 && (\r\n <MenuItem onClick={closeOthers}>\r\n {getLabel('lblCloseOthers').text}\r\n </MenuItem>\r\n )}\r\n </ControlledMenu>\r\n );\r\n },\r\n);\r\n\r\nexport default ContextMenu;\r\n","import React, { MouseEvent } from 'react';\r\nimport { TTabLabelRenderer } from '../types';\r\nimport { useTabsContext } from '../util';\r\nimport { Icon, TIconName, isIconName } from '@apia/icons';\r\nimport { Checkbox, IconButton, SimpleButton } from '../../components';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nfunction makeIcon(name: TIconName) {\r\n return function IconComponent() {\r\n return <Icon title=\"\" name={name} />;\r\n };\r\n}\r\n\r\nexport const DefaultTabsLabelRenderer: TTabLabelRenderer = observer(\r\n ({ tab }) => {\r\n const controller = useTabsContext();\r\n const ActualIcon = React.useMemo(() => {\r\n if (tab.state.icon) {\r\n if (isIconName(tab.state.icon)) {\r\n return makeIcon(tab.state.icon);\r\n }\r\n return tab.state.icon;\r\n }\r\n return function C() {\r\n return null;\r\n };\r\n }, [tab.state.icon]);\r\n\r\n const handleClose = React.useCallback(\r\n (ev: MouseEvent) => {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n controller?.closeTab(tab.id);\r\n },\r\n [controller, tab.id],\r\n );\r\n\r\n const handleMouseDown = React.useCallback(\r\n (ev: MouseEvent) => {\r\n if (ev.shiftKey && ev.button === 0) {\r\n tab.controller.openAll();\r\n return;\r\n }\r\n\r\n if (ev.button === 1) {\r\n tab.close();\r\n } else if (ev.button === 0) {\r\n tab.open();\r\n }\r\n },\r\n [tab],\r\n );\r\n\r\n return (\r\n <>\r\n <>\r\n {tab.controller.state.isMultiple && (\r\n <Checkbox\r\n onChange={(ev) => {\r\n tab.toggle(ev.target.checked);\r\n }}\r\n checked={tab.state.isOpen}\r\n />\r\n )}\r\n {tab.state.isIconTab ? (\r\n <IconButton\r\n onMouseDown={handleMouseDown}\r\n className=\"tabs__item__button\"\r\n as=\"div\"\r\n icon={tab.state.icon as TIconName}\r\n variant=\"null\"\r\n iconSize=\"Sm\"\r\n size=\"Lg\"\r\n />\r\n ) : (\r\n <SimpleButton\r\n onMouseDown={handleMouseDown}\r\n className=\"tabs__item__button\"\r\n data-test-id={`tab-button-${tab.controller.id}-${tab.id}`}\r\n variant=\"null\"\r\n as=\"div\"\r\n >\r\n <ActualIcon />\r\n {tab.state.labelIcon}\r\n {tab.state.label}\r\n </SimpleButton>\r\n )}\r\n </>\r\n\r\n {tab.state.isClosable && (\r\n <IconButton\r\n as=\"div\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }}\r\n onClick={handleClose}\r\n className=\"tabs__item__close\"\r\n icon=\"Close\"\r\n variant=\"null\"\r\n title={\r\n getLabel('lblCloseSpecificTab', {\r\n text: { TOK1: tab.state.label },\r\n }).text\r\n }\r\n size=\"Lg\"\r\n iconSize=\"Sm\"\r\n />\r\n )}\r\n </>\r\n );\r\n },\r\n);\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport React, { useRef } from 'react';\r\nimport { customEvents, getSpecificParent } from '@apia/util';\r\nimport { DefaultTabsLabelRenderer } from './renderers/DefaultTabsLabelRenderer';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Tab } from './tabsController';\r\nimport { Box } from '@apia/theme';\r\n\r\nconst Item = observer(({ tab }: { tab: Tab }) => {\r\n const Renderer = React.useMemo(\r\n () => tab.state.labelRenderer ?? DefaultTabsLabelRenderer,\r\n [tab.state.labelRenderer],\r\n );\r\n\r\n const uns = useRef(() => {});\r\n const ref = React.useRef<HTMLButtonElement>({} as HTMLButtonElement);\r\n useUpdateEffect(() => {\r\n if (tab.state.isFocused) {\r\n ref.current?.focus({\r\n preventScroll: true,\r\n });\r\n }\r\n }, [tab.state.isFocused]);\r\n React.useEffect(() => {\r\n if (tab.state.isOpen) {\r\n const scrollParent = getSpecificParent(ref.current, (current) =>\r\n current.classList.contains('tabs__list'),\r\n ) as HTMLElement;\r\n\r\n scrollParent?.scroll({\r\n left: ref.current.offsetLeft - 100,\r\n });\r\n }\r\n }, [tab.state.isOpen]);\r\n\r\n const boxProps = {\r\n className: `tabs__item__wrapper ${tab.state.isOpen ? 'open' : ''} ${\r\n tab.state.isDisabled ? 'disabled' : ''\r\n }`,\r\n title: tab.state.title ?? tab.state.label,\r\n 'aria-controls': `tabpanel-${tab.controller.id}-${tab.state.id}`,\r\n 'aria-selected': tab.state.isOpen ?? false,\r\n id: `tab-${tab.controller.id}-${tab.id}`,\r\n tabIndex: tab.state.isOpen ? 0 : -1,\r\n role: 'tab',\r\n variant: 'inherit',\r\n };\r\n\r\n return (\r\n <Box\r\n data-id={tab.id}\r\n ref={(el) => {\r\n uns.current();\r\n ref.current = el;\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n tab.open();\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n {...boxProps}\r\n >\r\n <Renderer tab={tab} />\r\n </Box>\r\n );\r\n});\r\n\r\nexport default Item;\r\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\r\nimport { useTabsContext } from '../util';\r\n\r\nexport function useShowScrollButtons(): [\r\n boolean,\r\n Dispatch<SetStateAction<HTMLDivElement | null>>,\r\n] {\r\n const [showScrollButtons, setShowScrollButtons] = useState(false);\r\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\r\n const controller = useTabsContext();\r\n\r\n useEffect(() => {\r\n if (ref && controller) {\r\n const observer = new MutationObserver(([{ addedNodes }]) => {\r\n const fixedTabsElement = ref.querySelector('.tabsList__fixedTabs');\r\n const hasFixedTabsScroll =\r\n (fixedTabsElement?.clientWidth ?? 0) <\r\n (fixedTabsElement?.scrollWidth ?? 0);\r\n const nonFixedTabsElement = ref.querySelector('.tabs__list');\r\n const hasFixedNonTabsScroll =\r\n (nonFixedTabsElement?.clientWidth ?? 0) <\r\n (nonFixedTabsElement?.scrollWidth ?? 0);\r\n\r\n setShowScrollButtons(hasFixedTabsScroll || hasFixedNonTabsScroll);\r\n\r\n if (addedNodes) {\r\n (ref.querySelector('.tabs__list') as HTMLElement).scrollLeft =\r\n 9999999;\r\n }\r\n });\r\n observer.observe(ref, { childList: true, subtree: true });\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }\r\n\r\n return () => {};\r\n }, [controller, ref]);\r\n\r\n return [showScrollButtons, setRef];\r\n}\r\n","import React, { ReactNode } from 'react';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport ContextMenu from './ContextMenu';\r\nimport Item from './Item';\r\nimport { useTabsContext } from './util';\r\nimport { getLabel, getSpecificParent } from '@apia/util';\r\nimport { IconButton } from '../components';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { useShowScrollButtons } from './hooks/useShowScrollButtons';\r\n\r\nexport const TabsList = observer(\r\n ({\r\n arrowsBehavior = 'focus',\r\n children,\r\n showContextMenu = false,\r\n }: {\r\n arrowsBehavior?: 'open' | 'focus';\r\n children?: Record<'beforeFixedTabs', ReactNode>;\r\n showContextMenu?: boolean;\r\n }) => {\r\n const controller = useTabsContext();\r\n const [showScrollButtons, setRef] = useShowScrollButtons();\r\n\r\n const onClickPrev = React.useCallback(() => {\r\n if (arrowsBehavior === 'focus') controller?.focusPreviousTab();\r\n if (arrowsBehavior === 'open') controller?.openPreviousTab();\r\n }, [arrowsBehavior, controller]);\r\n\r\n const onClickNext = React.useCallback(() => {\r\n if (arrowsBehavior === 'focus') controller?.focusNextTab();\r\n if (arrowsBehavior === 'open') controller?.openNextTab();\r\n }, [arrowsBehavior, controller]);\r\n\r\n const [anchorPoint, setAnchorPoint] = React.useState({ x: 0, y: 0 });\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [targetId, setTargetId] = React.useState<string>('');\r\n\r\n if (!controller) return null;\r\n\r\n const tabs = controller.tabsList;\r\n\r\n const fixedTabs = (tabs ?? []).filter((current) => current.state.isFixed);\r\n const nonFixedTabs = (tabs ?? []).filter(\r\n (current) => !current.state.isFixed,\r\n );\r\n\r\n return (\r\n <Box\r\n id={`tabsList-${controller.id}`}\r\n className=\"tabsList__wrapper\"\r\n role=\"tablist\"\r\n {...getVariant('layout.common.tabs.primary')}\r\n ref={setRef}\r\n >\r\n {children?.beforeFixedTabs}\r\n <Box className=\"tabsList__fixedTabs\">\r\n {fixedTabs.map((current) => (\r\n <Item key={current.id} tab={current} />\r\n ))}\r\n </Box>\r\n {showContextMenu && (\r\n <ContextMenu\r\n anchorPoint={anchorPoint}\r\n isOpen={isOpen}\r\n onClose={React.useCallback(() => setIsOpen(false), [])}\r\n targetId={targetId}\r\n />\r\n )}\r\n <Box\r\n className={`noScrollbar tabs__list ${\r\n controller.props.orientation === 'vertical' ? 'vertical' : ''\r\n }`}\r\n onContextMenu={React.useCallback((e: React.MouseEvent) => {\r\n const tabElement = getSpecificParent(\r\n e.target as HTMLElement,\r\n (current) => current.classList.contains('tabs__item__wrapper'),\r\n );\r\n if (tabElement) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setTargetId(tabElement.dataset.id as string);\r\n setAnchorPoint({ x: e.clientX, y: e.clientY });\r\n setIsOpen(true);\r\n }\r\n }, [])}\r\n >\r\n {nonFixedTabs.map((current) => (\r\n <Item key={current.id} tab={current} />\r\n ))}\r\n </Box>\r\n {showScrollButtons && (\r\n <>\r\n <IconButton\r\n aria-label={getLabel('lblTogglePrevTab').text}\r\n className=\"tabs__switch__left\"\r\n icon=\"ArrowLeft\"\r\n iconSize=\"Xs\"\r\n onClick={onClickPrev}\r\n title={getLabel('lblTogglePrevTab').text}\r\n {...getVariant('icon-primary')}\r\n />\r\n <IconButton\r\n aria-label={getLabel('lblToggleNextTab').text}\r\n className=\"tabs__switch__right\"\r\n icon=\"ArrowRight\"\r\n iconSize=\"Xs\"\r\n onClick={onClickNext}\r\n title={getLabel('lblToggleNextTab').text}\r\n {...getVariant('icon-primary')}\r\n />\r\n </>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { TTab, TTabsListState, TabsControllerProps } from './types';\r\nimport { getLabel, getSpecificParent, isChild } from '@apia/util';\r\nimport { ApiaUtil } from '../objects/ApiaUtil';\r\nimport { makeAutoObservable, observable } from 'mobx';\r\n\r\nexport class Tab<TabType extends TTab = TTab> {\r\n constructor(\r\n public state: TabType,\r\n public controller: TabsController<TabType>,\r\n ) {\r\n makeAutoObservable(this, { state: observable });\r\n }\r\n\r\n get id() {\r\n return this.state.id;\r\n }\r\n\r\n /**\r\n * El parámetro force evita que se muestre cartel de confirmación al usuario cuando puede haber pérdida de datos.\r\n */\r\n async close(force?: boolean) {\r\n return this.controller.closeTab(this.state.id, force);\r\n }\r\n\r\n open(closeOthers?: boolean) {\r\n this.controller.openTab(this.id, closeOthers);\r\n }\r\n\r\n remove() {\r\n this.controller.remove(this.id);\r\n }\r\n\r\n toggle(isShown?: boolean) {\r\n this.controller.toggleTab(this.state.id, isShown);\r\n }\r\n}\r\n\r\nexport type TAppendBehavior = Partial<{\r\n closeOthers: boolean;\r\n insertAfterId: string;\r\n}>;\r\n\r\nexport default class TabsController<TabType extends TTab = TTab> {\r\n state: TTabsListState<TabType> = {\r\n isMultiple: false,\r\n openTabsHistory: new Set(),\r\n tabs: new Map(),\r\n timestamp: 0,\r\n showAtLeastOneTab: false,\r\n listenFocusEvents: true,\r\n allowDetach: false,\r\n };\r\n\r\n getActiveTab() {\r\n return this.activeTab;\r\n }\r\n /**\r\n * Es el tab que está abierto\r\n */\r\n get activeTab() {\r\n const tabs = [...this.state.openTabsHistory];\r\n\r\n return tabs[tabs.length - 1];\r\n }\r\n\r\n getTab(id: string) {\r\n return this.state.tabs.get(id);\r\n }\r\n\r\n get tabsList() {\r\n return [...this.state.tabs.values()];\r\n }\r\n\r\n constructor(\r\n public id: string,\r\n public props: Omit<TabsControllerProps<TabType>, 'id'>,\r\n ) {\r\n Object.assign(this.state, props.initialState ?? {});\r\n\r\n props.initialTabs?.forEach((tab) => this.append(tab));\r\n if (props.initialTabs && props.initialTabs.length > 0)\r\n this.focusTab(props.initialTabs[0].id);\r\n\r\n makeAutoObservable(this);\r\n }\r\n\r\n #innerAppend(tab: TabType, behavior?: TAppendBehavior) {\r\n const tabsArray = [...this.state.tabs.values()];\r\n\r\n const afterId =\r\n behavior?.insertAfterId ?? tabsArray[tabsArray.length - 1]?.id;\r\n for (let i = 0; i <= tabsArray.length; i++) {\r\n if (!tabsArray[i] || tabsArray[i]?.id === afterId) {\r\n tabsArray.splice(i + 1, 0, new Tab(tab, this));\r\n break;\r\n }\r\n }\r\n\r\n this.state.tabs = new Map(tabsArray.map((c) => [c.id, c]));\r\n\r\n if (tab.isOpen) {\r\n this.openTab(tab.id, behavior?.closeOthers);\r\n this.focusTab(tab.id, behavior?.closeOthers);\r\n }\r\n\r\n this.checkAtLeastOneOpen();\r\n }\r\n\r\n /**\r\n * Obviamente agrega un tab al listado de tabs\r\n */\r\n append(tab: TabType, behavior?: TAppendBehavior) {\r\n if (this.getTab(tab.id)) {\r\n void ApiaUtil.instance.dialogs\r\n .confirm({\r\n children: getLabel('msgTabIsOpen').text,\r\n title: getLabel('titMsgWarning').text,\r\n })\r\n .then((hasConfirmed) => {\r\n if (hasConfirmed)\r\n this.#innerAppend(\r\n {\r\n ...tab,\r\n id: `${tab.id}_${uniqueId()}`,\r\n additionalProps: tab.additionalProps ?? {},\r\n } as TabType,\r\n behavior,\r\n );\r\n });\r\n } else this.#innerAppend(tab, behavior);\r\n }\r\n\r\n async closeAll(closeFixedTabsAsWell = false, force = false) {\r\n for (const tab of this.tabsList) {\r\n if (!tab.state.isFixed || closeFixedTabsAsWell) {\r\n tab.close(force);\r\n }\r\n }\r\n }\r\n async openAll() {\r\n for (const tab of this.tabsList) {\r\n if (!tab.state.isFixed) {\r\n tab.open(false);\r\n }\r\n }\r\n }\r\n\r\n closeOpenTab(force?: boolean) {\r\n const openTab = this.activeTab;\r\n openTab?.close(force);\r\n }\r\n\r\n async closeToRight(targetId: string, force?: boolean) {\r\n const tabsList = this.tabsList;\r\n const startIndex = tabsList.findIndex((c) => c.state.id === targetId);\r\n\r\n if (startIndex >= 0) {\r\n for (let i = startIndex + 1; i < tabsList.length; i++) {\r\n tabsList[i].close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeToLeft(targetId: string, force?: boolean) {\r\n const tabsList = this.tabsList;\r\n const startIndex = tabsList.findIndex((c) => c.state.id === targetId);\r\n\r\n if (startIndex >= 0) {\r\n for (let i = startIndex - 1; i >= 0; i--) {\r\n await tabsList[i].close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeOthers(targetId: string, force?: boolean) {\r\n for await (const tab of this.tabsList) {\r\n if (tab.state.id !== targetId) {\r\n await tab.close(force);\r\n }\r\n }\r\n }\r\n\r\n async closeTab(tabId: string, force = false) {\r\n const tab = this.getTab(tabId);\r\n const tabProps = tab?.state;\r\n\r\n if (tab && tabProps) {\r\n if (!tabProps.isClosable && !force) return false;\r\n\r\n const { onBeforeClose } = tabProps;\r\n if (onBeforeClose) {\r\n const canClose = await onBeforeClose();\r\n const message =\r\n canClose === false ? getLabel('msgPerDatIng').text : canClose;\r\n if (message !== true && !force) {\r\n const hasConfirmed = await ApiaUtil.instance.dialogs.confirm({\r\n children: message,\r\n title: getLabel('lbl_atention').text,\r\n });\r\n if (!hasConfirmed) return false;\r\n }\r\n }\r\n\r\n this.state.openTabsHistory.delete(tab);\r\n this.getActiveTab()?.open();\r\n this.state.tabs.delete(tab.id);\r\n\r\n this.props?.onCloseTab?.(tab);\r\n }\r\n return true;\r\n }\r\n\r\n private checkAtLeastOneOpen() {\r\n if (\r\n this.state.showAtLeastOneTab &&\r\n !this.tabsList.find((c) => c.state.isOpen)\r\n ) {\r\n this.openTab(this.tabsList[0].id);\r\n }\r\n }\r\n\r\n remove(tabId: string) {\r\n this.state.openTabsHistory.delete(this.state.tabs.get(tabId)!);\r\n this.state.tabs.delete(tabId);\r\n if (this.state.openTabsHistory.size === 0 && this.state.showAtLeastOneTab) {\r\n this.tabsList[0]?.open();\r\n }\r\n }\r\n\r\n async toggleTab(tabId: string, isShown?: boolean) {\r\n const willBeOpen = isShown || !this.getTab(tabId)?.state.isOpen;\r\n\r\n if (willBeOpen) {\r\n this.openTab(tabId, false);\r\n } else {\r\n if (\r\n !this.state.showAtLeastOneTab ||\r\n this.tabsList.find((c) => c.state.isOpen && c.id !== tabId)\r\n )\r\n this.getTab(tabId)!.state.isOpen = false;\r\n }\r\n }\r\n\r\n focusNextTab() {\r\n const tabsList = this.tabsList;\r\n const focusedIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (focusedIndex === tabsList.length - 1 || focusedIndex === -1)\r\n return null;\r\n\r\n const newFocusIndex: number = focusedIndex + 1;\r\n this.focusTab(tabsList[newFocusIndex].id);\r\n\r\n return tabsList[newFocusIndex];\r\n }\r\n\r\n focusPreviousTab() {\r\n const tabsList = this.tabsList;\r\n const focusedIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (focusedIndex <= 0) return null;\r\n\r\n const newFocusIndex: number = focusedIndex - 1;\r\n this.focusTab(tabsList[newFocusIndex].id);\r\n\r\n return tabsList[newFocusIndex];\r\n }\r\n\r\n focusTab(tabId: string, closeOthers?: boolean) {\r\n this.openTab(tabId, closeOthers);\r\n }\r\n\r\n getTabElement(tabId: string) {\r\n return document.querySelector(`#tabpanel-${this.id}-${tabId}`);\r\n }\r\n\r\n handleKeyDown(ev: React.KeyboardEvent) {\r\n if (\r\n !isChild(\r\n ev.target as HTMLElement,\r\n (current) => current.id === `tabsList-${this.id}`,\r\n )\r\n )\r\n return;\r\n\r\n switch (ev.code) {\r\n case 'ArrowDown':\r\n case 'ArrowRight': {\r\n if (\r\n (this.props?.orientation === 'horizontal' &&\r\n ev.code === 'ArrowDown') ||\r\n (this.props?.orientation === 'vertical' && ev.code === 'ArrowRight')\r\n )\r\n return;\r\n\r\n this.focusNextTab();\r\n\r\n break;\r\n }\r\n case 'ArrowUp':\r\n case 'ArrowLeft': {\r\n if (\r\n (this.props.orientation === 'horizontal' && ev.code === 'ArrowUp') ||\r\n (this.props.orientation === 'vertical' && ev.code === 'ArrowLeft')\r\n )\r\n return;\r\n\r\n this.focusPreviousTab();\r\n\r\n break;\r\n }\r\n case 'Delete': {\r\n const tabId = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => !!current.getAttribute('data-id'),\r\n )?.getAttribute('data-id');\r\n\r\n if (tabId) {\r\n if (!this.getTab(tabId)?.state.isClosable) return;\r\n\r\n void this.closeTab(tabId);\r\n }\r\n break;\r\n }\r\n case 'Enter':\r\n case 'Space': {\r\n const tabId = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => !!current.getAttribute('data-id'),\r\n )?.getAttribute('data-id');\r\n\r\n if (tabId) {\r\n this.openTab(tabId);\r\n }\r\n\r\n break;\r\n }\r\n case 'End': {\r\n this.openTab(this.tabsList[this.tabsList.length - 1].id);\r\n break;\r\n }\r\n case 'Home': {\r\n this.focusTab(this.tabsList[0].id);\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n openNextTab() {\r\n const tabsList = this.tabsList;\r\n const openIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (openIndex == tabsList.length - 1) return null;\r\n\r\n const newOpenIndex: number = openIndex + 1;\r\n this.openTab(tabsList[newOpenIndex].id);\r\n\r\n return tabsList[newOpenIndex];\r\n }\r\n\r\n openPreviousTab() {\r\n const tabsList = this.tabsList;\r\n const openIndex = tabsList.findIndex(\r\n (current) => current === this.activeTab,\r\n );\r\n\r\n if (openIndex <= 0) return null;\r\n\r\n const newOpenIndex: number = openIndex - 1;\r\n this.openTab(tabsList[newOpenIndex].id);\r\n\r\n return tabsList[newOpenIndex];\r\n }\r\n\r\n /**\r\n * Se utiliza para hacer que el tab aparezca visible en el listado\r\n */\r\n openTab(tabId: string, closeOthers?: boolean) {\r\n const tab = this.getTab(tabId);\r\n if (!tab) {\r\n console.warn(`There is no tab with such id: ${tabId}`);\r\n } else {\r\n try {\r\n if (closeOthers !== false) {\r\n this.state.tabs.forEach((c) => {\r\n c.state.isOpen = false;\r\n });\r\n }\r\n } catch (e) {\r\n e; // No hay ningún tab abierto, no me importa\r\n }\r\n tab.state.isOpen = true;\r\n tab.state.isFocused = true;\r\n document\r\n .querySelector<HTMLElement>(`.tabs__item__wrapper[data-id=\"${tab.id}\"]`)\r\n ?.focus();\r\n tab.state.onFocus?.(tab);\r\n if (this.state.openTabsHistory.has(tab)) {\r\n this.state.openTabsHistory.delete(tab);\r\n }\r\n this.state.openTabsHistory.add(tab);\r\n this.checkAtLeastOneOpen();\r\n }\r\n }\r\n}\r\n","import { useDeferredValue, useRef } from 'react';\r\nimport { Box, BoxProps, getVariant } from '@apia/theme';\r\nimport { CurrentTabContext, useTabsContext } from './util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Tab } from './tabsController';\r\nimport { Accordion, AccordionItem, LoaderSpinner } from '../components';\r\nimport { customEvents } from '@apia/util';\r\n\r\nconst InnerRenderer = observer(({ tab }: { tab: Tab }) => {\r\n const state = tab.state;\r\n const Render = useDeferredValue(state.content);\r\n let accordion = null;\r\n const tabContent = (\r\n <Box className=\"tabs__Item\" sx={{ height: '100%' }}>\r\n <Render tab={tab} />\r\n {state.isLoading && (\r\n <Box className=\"tabs__content__spinner__wrapper\">\r\n <LoaderSpinner />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n if (tab.state.asAccordion)\r\n accordion = (\r\n <AccordionItem\r\n id={tab.id}\r\n key={tab.id}\r\n defaultExpanded={true}\r\n buttonProps={{\r\n ariaLabel: tab.state.label,\r\n label: tab.state.label,\r\n }}\r\n >\r\n {tabContent}\r\n </AccordionItem>\r\n );\r\n\r\n const uns = useRef(() => {});\r\n\r\n return (\r\n <Box\r\n aria-hidden={!state.isOpen}\r\n aria-labelledby={`tab-${tab.controller.id}-${state.id}`}\r\n className={`tabs__content ${state.isOpen ? 'open' : ''}`}\r\n data-id={state.id}\r\n id={`tabpanel-${tab.controller.id}-${state.id}`}\r\n data-test-id={`tab-content-${tab.controller.id}-${state.id}`}\r\n key={state.id}\r\n role=\"tabpanel\"\r\n sx={{\r\n display: state.isOpen ? undefined : 'none',\r\n }}\r\n ref={(el) => {\r\n uns.current();\r\n if (el instanceof HTMLElement) {\r\n const handleFocus = () => {\r\n if (tab.controller.state.listenFocusEvents !== false) {\r\n tab.open();\r\n }\r\n };\r\n el.addEventListener(customEvents.focus, handleFocus);\r\n uns.current = () => {\r\n el.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }\r\n }}\r\n >\r\n {accordion ?? tabContent}\r\n </Box>\r\n );\r\n});\r\n\r\nexport const TabsContent = observer((props: Omit<BoxProps, 'children'>) => {\r\n const controller = useTabsContext();\r\n\r\n if (!controller) return null;\r\n\r\n return (\r\n <Accordion\r\n className=\"tabs__content__wrapper\"\r\n {...getVariant('layout.common.tabs.primary.content')}\r\n {...props}\r\n >\r\n {controller.tabsList.map((tab) => {\r\n return (\r\n <CurrentTabContext.Provider value={tab} key={tab.id}>\r\n <InnerRenderer tab={tab} />\r\n </CurrentTabContext.Provider>\r\n );\r\n })}\r\n </Accordion>\r\n );\r\n});\r\n","import React from 'react';\r\nimport { Box, BoxProps } from '@apia/theme';\r\nimport TabsController from './tabsController';\r\nimport { TabsContext } from './util';\r\nimport { useMount } from '@apia/util';\r\nimport { TTab, TabsControllerProps } from './types';\r\n\r\nconst NonForwardedTabs = (\r\n {\r\n id,\r\n getController,\r\n initialTabs,\r\n orientation,\r\n initialState,\r\n ...props\r\n }: TabsControllerProps<TTab> & Omit<BoxProps, 'id' | 'as' | 'role'>,\r\n ref: React.ForwardedRef<HTMLDivElement>,\r\n) => {\r\n const [handler, setHandler] = React.useState<TabsController | null>(null);\r\n\r\n useMount(() => {\r\n const newHandler = new TabsController(String(id), {\r\n initialTabs,\r\n orientation: orientation || 'horizontal',\r\n initialState,\r\n });\r\n setHandler(newHandler);\r\n getController?.(newHandler);\r\n });\r\n\r\n if (!handler) return null;\r\n\r\n return (\r\n <TabsContext.Provider value={handler}>\r\n <Box\r\n {...props}\r\n onKeyDown={(ev: React.KeyboardEvent<HTMLDivElement>) => {\r\n handler.handleKeyDown(ev);\r\n }}\r\n ref={ref}\r\n />\r\n </TabsContext.Provider>\r\n );\r\n};\r\n\r\nexport const Tabs = React.forwardRef<\r\n HTMLDivElement,\r\n TabsControllerProps<TTab> & Omit<BoxProps, 'id' | 'as' | 'role'>\r\n>(NonForwardedTabs) as unknown as typeof NonForwardedTabs;\r\n","import * as React from 'react';\r\nimport { Box, ThemeUICSSObject } from '@apia/theme';\r\n\r\nexport interface IAsidePanel {\r\n title?: string;\r\n toolTip?: string;\r\n children: React.ReactNode;\r\n columns?: number;\r\n spacer?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const AsidePanel = ({\r\n title,\r\n toolTip,\r\n children,\r\n columns = 2,\r\n spacer,\r\n className,\r\n}: IAsidePanel) => {\r\n const contentSx: ThemeUICSSObject = React.useMemo(\r\n () => ({\r\n gridTemplateColumns: `${Array(columns).fill('1fr').join(' ')} `,\r\n }),\r\n [columns],\r\n );\r\n\r\n return (\r\n <Box as=\"fieldset\" className={`asidePanel ${className ?? ''}`}>\r\n {title && <legend title={toolTip}>{title}</legend>}\r\n {spacer !== false && <Box className=\"spacer\" />}\r\n <Box className=\"asidePanel__content\" sx={contentSx}>\r\n {children}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n","import { IconButton } from '../components';\r\n\r\nexport function isFavoriteIcon() {\r\n return typeof window.functionId !== 'undefined' || !!window.helpUrl;\r\n}\r\n\r\nexport const FavoriteIcon = () => {\r\n return <IconButton icon=\"Star\" />;\r\n};\r\n","import { Label as Lbl, LabelProps } from '@apia/theme';\r\n\r\nexport const Label = ({ variant, ...props }: LabelProps) => (\r\n <Lbl sx={{ variant }} {...props} />\r\n);\r\n","import { useBreakpointIndex } from '@apia/theme';\r\nimport { EventEmitter } from '@apia/util';\r\nimport React from 'react';\r\n\r\nexport interface IMenuDefinition {\r\n menu: React.ReactNode;\r\n stage: string;\r\n}\r\n\r\ntype TMenuEvents = {\r\n updateMenu: React.ReactNode;\r\n};\r\n\r\nclass MenuController extends EventEmitter<TMenuEvents> {\r\n #currentStage = '';\r\n\r\n #menues: IMenuDefinition[] = [];\r\n\r\n on<K extends keyof TMenuEvents>(\r\n eventName: K,\r\n fn: (ev: TMenuEvents[K]) => unknown,\r\n ) {\r\n super.on(eventName, fn);\r\n const currentMenu = this.#menues.find(\r\n (current) => current.stage === this.#currentStage,\r\n )?.menu;\r\n if (currentMenu) fn(currentMenu);\r\n return () => this.off(eventName, fn);\r\n }\r\n\r\n getCurrent() {\r\n return (\r\n this.#menues.find((current) => current.stage === this.#currentStage)\r\n ?.menu ?? null\r\n );\r\n }\r\n\r\n remove(stage: string) {\r\n this.#menues = this.#menues.filter((current) => current.stage !== stage);\r\n\r\n if (stage === this.#currentStage) {\r\n this.#currentStage = this.#menues[this.#menues.length - 1]?.stage ?? null;\r\n this.#shout();\r\n }\r\n }\r\n\r\n setMenu(definition: IMenuDefinition) {\r\n this.#menues.push(definition);\r\n this.#currentStage = definition.stage;\r\n this.#shout();\r\n return () => {\r\n this.remove(definition.stage);\r\n };\r\n }\r\n\r\n #shout() {\r\n this.emit(\r\n 'updateMenu',\r\n this.#menues.find((current) => current.stage === this.#currentStage)\r\n ?.menu,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * El menú controller pretende solucionar el problema de tener múltiples menúes\r\n * para distintas pantallas dentro del mismo flujo de trabajo. El problema\r\n * original surge en administración de grupos. Al presionar modificar se\r\n * cambia de pantalla y por lo tanto de menú, pero se sigue estando en el mismo\r\n * flujo y se pretende que al presionar regresar, se restaure el menú original.\r\n * Todo esto sin afectar la responsividad de los mismos.\r\n *\r\n * Para solucionar esta problemática, se introduce este controlador, cuyo\r\n * funcionamiento es muy sencillo. Cada vez que un componente quiere setear un\r\n * menú para una pantalla particular, hace uso del método\r\n * menuController.setMenu.\r\n *\r\n * Una vez que la pantalla se está desmontando, debe desmontar su menú haciendo\r\n * uso del método menuController.remove.\r\n *\r\n * Mediante el hook useMenu provisto en este documento, se puede hacer uso del\r\n * menú actual, sin preocuparse de la existencia de varios elementos que\r\n * coincidan.\r\n */\r\nexport const menuController = new MenuController();\r\n\r\n/**\r\n * Este hook permite insertar el menú en un componente.\r\n */\r\nexport function useMenu(breakPoints?: number[], initialMenu?: IMenuDefinition) {\r\n const [menu, setMenu] = React.useState<React.ReactNode>(null);\r\n const currentBreakpoint = useBreakpointIndex();\r\n\r\n React.useEffect(() => {\r\n const unsuscribe = menuController.on('updateMenu', (newMenu) => {\r\n setMenu(newMenu);\r\n });\r\n\r\n if (initialMenu) menuController.setMenu(initialMenu);\r\n\r\n return () => {\r\n unsuscribe();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n if (breakPoints && !breakPoints.includes(currentBreakpoint)) return null;\r\n\r\n return menu;\r\n}\r\n","import { Box, BoxProps } from '@apia/theme';\r\n\r\n/**\r\n * Con el código comentado dentro de FooterButtons se hace\r\n * que se muestren los botones cuando se está haciendo scroll\r\n * hacia abajo.\r\n */\r\n\r\n/**\r\n *\r\n */\r\nexport const FooterButtons = (props: BoxProps) => {\r\n /* const isScrollingDown = useMatchScrollDirection('down');\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n const sx = React.useMemo<ThemeUIStyleObject>(\r\n () => ({\r\n ...(isScrollingDown\r\n ? {\r\n bottom: 0,\r\n }\r\n : { bottom: '-5000px' }),\r\n position: 'fixed',\r\n }),\r\n [isScrollingDown],\r\n ); */\r\n\r\n return (\r\n <>\r\n {/* <Portal>\r\n <Box sx={sx} {...props} />\r\n </Portal> */}\r\n <Box {...props} />\r\n </>\r\n );\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Este aside aparece en la vista twoColumnList en los\r\n * breakpoints de vista móvil.\r\n */\r\n\r\nexport const AccordionAside = () => {\r\n const children = useMenu([1, 2, 3]);\r\n return children;\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Este aside aparece por defecto en los breakpoints\r\n * de desktop.\r\n */\r\n\r\nexport const Aside = () => {\r\n const children = useMenu([5, 6, 7]);\r\n return <>{children}</>;\r\n};\r\n","import React from 'react';\r\nimport { uniqueId } from 'lodash-es';\r\nimport { Box } from '@apia/theme';\r\nimport { menuController, IMenuDefinition } from '../menuController';\r\n\r\ntype TAsideLoader = Partial<IMenuDefinition> & {\r\n children: React.ReactNode;\r\n variant?: string;\r\n};\r\n\r\nexport const AsideLoader = (definition: TAsideLoader) => {\r\n React.useEffect(() => {\r\n const variant = definition.variant ?? 'twoColumnsAside';\r\n\r\n const unregister = menuController.setMenu({\r\n menu: (\r\n <Box className=\"ApplicationMenu\" variant={`layout.${variant}`}>\r\n {definition.menu ?? definition.children}\r\n </Box>\r\n ),\r\n stage: definition.stage ?? uniqueId(),\r\n });\r\n\r\n return () => {\r\n unregister();\r\n };\r\n }, [\r\n definition.children,\r\n definition.menu,\r\n definition.stage,\r\n definition.variant,\r\n ]);\r\n\r\n return null;\r\n};\r\n","import { useMenu } from '../menuController';\r\n\r\n/**\r\n * Aside del template twoColumns. Breakpoints: 0,1,2.\r\n *\r\n * Este aside aparece por defecto en la vista móvil del\r\n * twoColumns.\r\n */\r\n\r\nexport const BodyAside = () => {\r\n const children = useMenu([1, 2, 3]);\r\n return children;\r\n};\r\n","import { useScroll } from 'ahooks';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { useMenu } from '../menuController';\r\nimport { getLabel, useMatchScrollDirection } from '@apia/util';\r\nimport { AccordionItem } from '../../components';\r\n\r\n/**\r\n * Aside del template twoColumns. Breakpoints: 0,1,2.\r\n *\r\n * Este aside es el que aparece cuando el usuario hizo scroll\r\n * en la vista responsiva, y luego hizo scroll hacia arriba.\r\n */\r\n\r\nexport const FloatingAside = () => {\r\n const isScrollingUp = useMatchScrollDirection('up');\r\n const [hasScrolledEnough, setHasScrolledEnough] = React.useState(false);\r\n\r\n useScroll(document, ({ top }) => {\r\n const menu = document.getElementById('BodyAside') as HTMLDivElement;\r\n if (!menu) return false;\r\n\r\n let computedStyle = 0;\r\n if (window.getComputedStyle(menu).paddingTop.match(/\\d+/)) {\r\n computedStyle =\r\n Number(\r\n (\r\n window.getComputedStyle(menu).paddingTop.match(/\\d+/) as [string]\r\n )[0],\r\n ) +\r\n Number(\r\n (\r\n window.getComputedStyle(menu).paddingBottom.match(/\\d+/) as string[]\r\n )[0],\r\n );\r\n }\r\n\r\n const boxTop = menu.offsetHeight + menu.offsetTop + computedStyle;\r\n\r\n if (hasScrolledEnough !== boxTop < top) setHasScrolledEnough(boxTop < top);\r\n\r\n return false;\r\n });\r\n\r\n const children = useMenu([1, 2, 3]);\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n if (!children) return null;\r\n\r\n return (\r\n <Portal>\r\n <Box\r\n {...getVariant('layout.twoColumnsAside.floatingResponsive')}\r\n className={isScrollingUp && hasScrolledEnough ? '' : 'hidden'}\r\n >\r\n <AccordionItem\r\n defaultExpanded={false}\r\n buttonProps={{\r\n label: getLabel('lblMnuOpc').text,\r\n ariaLabel: getLabel('lblMnuOpc').title,\r\n }}\r\n id=\"floatingMenuAccordion\"\r\n {...getVariant('tabPrimary')}\r\n >\r\n {isScrollingUp && hasScrolledEnough && children}\r\n </AccordionItem>\r\n </Box>\r\n </Portal>\r\n );\r\n};\r\n","import { useBreakpointIndex, Box, getVariant } from '@apia/theme';\r\nimport { useMatchScrollDirection } from '@apia/util';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\n\r\nexport const FooterResponsiveButtons = ({\r\n breakpoint = 4,\r\n children,\r\n className,\r\n}: {\r\n breakpoint?: number;\r\n children: React.ReactNode;\r\n className?: string;\r\n}) => {\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n const appBreakpoint = useBreakpointIndex();\r\n const shouldShow =\r\n useMatchScrollDirection('down') && breakpoint >= appBreakpoint;\r\n\r\n if (Array.isArray(children) && children.length === 0) return null;\r\n\r\n return (\r\n <Portal>\r\n <Box\r\n as=\"aside\"\r\n {...getVariant('layout.footerResponsiveButtons')}\r\n className={`${className ?? ''} ${shouldShow ? 'visible' : 'hidden'}`}\r\n >\r\n {children}\r\n </Box>\r\n </Portal>\r\n );\r\n};\r\n","import {\r\n useBreakpointIndex,\r\n Box,\r\n ThemeUICSSObject,\r\n getVariant,\r\n} from '@apia/theme';\r\nimport React, { useState } from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { useMenu } from '../menuController';\r\nimport { IconButton } from '../../components';\r\n\r\n/**\r\n * Este aside solamente aparece en el breakpoint 3 y es el que\r\n * se muestra en el menú de hamburguesa.\r\n */\r\n\r\nexport const HamburguerMenu = ({\r\n container = '.TitleContainer',\r\n header = 'MainHeader',\r\n forceVisibility,\r\n}: {\r\n container?: string;\r\n forceVisibility?: boolean;\r\n header?: string;\r\n}) => {\r\n const [hamburguerRef, setHamburguerRef] = React.useState<HTMLElement | null>(\r\n null,\r\n );\r\n const [menuRef, setMenuRef] = React.useState<HTMLElement | null>(null);\r\n\r\n const [menuCoords, setMenuCoords] = React.useState<\r\n ThemeUICSSObject | undefined\r\n >(undefined);\r\n const [hamburguerCoords, setHamburguerCoords] =\r\n React.useState<ThemeUICSSObject | null>(null);\r\n\r\n const { Portal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n clickOutsideToHide: false,\r\n escToHide: false,\r\n });\r\n\r\n React.useLayoutEffect(() => {\r\n const unsuscribers: (() => unknown)[] = [];\r\n if (hamburguerRef) {\r\n const resize = () => {\r\n const bounding = (\r\n document.querySelector(container) as HTMLElement\r\n ).getBoundingClientRect();\r\n\r\n if (!hamburguerRef || bounding.height === 0) return;\r\n\r\n const hamburguerHeight = 40;\r\n\r\n const hamburguerTop =\r\n bounding.top +\r\n bounding.height / 2 -\r\n hamburguerHeight / 2 +\r\n window.scrollY;\r\n\r\n const shouldOpenBelow = bounding.top <= window.innerHeight / 3;\r\n\r\n const menuTop = shouldOpenBelow\r\n ? hamburguerTop + hamburguerHeight + 10\r\n : 10;\r\n const menuRight = shouldOpenBelow ? 10 : 60;\r\n const maxHeight = shouldOpenBelow\r\n ? window.innerHeight - menuTop - 50\r\n : window.innerHeight - 50;\r\n\r\n setMenuCoords({\r\n right: `${menuRight}px`,\r\n top: `${menuTop}px`,\r\n maxHeight: `${maxHeight}px`,\r\n overflow: 'auto',\r\n });\r\n setHamburguerCoords({\r\n right: `${10}px`,\r\n top: `${hamburguerTop}px`,\r\n });\r\n };\r\n\r\n const observer = new ResizeObserver(resize);\r\n\r\n observer.observe(document.getElementById(header) as HTMLElement);\r\n\r\n unsuscribers.push(() => void observer.disconnect());\r\n\r\n resize();\r\n }\r\n\r\n return () => unsuscribers.forEach((unsuscribe) => unsuscribe());\r\n }, [container, hamburguerRef, header, menuRef]);\r\n\r\n const children = useMenu([4, 5, 6, 7]);\r\n\r\n const iconSx = React.useMemo(\r\n () =>\r\n hamburguerCoords\r\n ? ({\r\n position: 'fixed',\r\n zIndex: 'menu',\r\n ...hamburguerCoords,\r\n } as ThemeUICSSObject)\r\n : undefined,\r\n [hamburguerCoords],\r\n );\r\n\r\n const menuSx = React.useMemo(\r\n () =>\r\n menuCoords\r\n ? ({\r\n position: 'fixed',\r\n zIndex: 'menu',\r\n ...menuCoords,\r\n } as ThemeUICSSObject)\r\n : undefined,\r\n [menuCoords],\r\n );\r\n\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 5 });\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n return (\r\n <>\r\n <Box\r\n id=\"HamburguerIconWrapper\"\r\n className={`HamburguerIconWrapper ${forceVisibility ? 'forced' : ''}`}\r\n ref={setHamburguerRef}\r\n as=\"aside\"\r\n aria-label={window.LBL_OPTIONS_VAR}\r\n >\r\n <IconButton\r\n sx={iconSx}\r\n icon={'Hamburguer'}\r\n className=\"hamburguerIcon\"\r\n onClick={() => setIsVisible((s) => !s)}\r\n aria-label={window.LBL_OPEN_MENU}\r\n />\r\n </Box>\r\n <Portal>\r\n <Box>\r\n <CSSTransition\r\n in={isVisible}\r\n timeout={150}\r\n classNames=\"hamburguerMenu\"\r\n >\r\n <Box\r\n ref={setMenuRef}\r\n {...getVariant('layout.twoColumnsAside.hamburguerMenu')}\r\n className=\"hamburguerMenu\"\r\n sx={menuSx}\r\n as=\"aside\"\r\n aria-label={window.LBL_OPTIONS_AND_TABS}\r\n >\r\n {(breakpoint === 4 || forceVisibility) && children}\r\n </Box>\r\n </CSSTransition>\r\n </Box>\r\n </Portal>\r\n </>\r\n );\r\n};\r\n","import { FaBars } from '@meronex/icons/fa';\r\nimport { useBreakpointIndex, Box, IconButton, getVariant } from '@apia/theme';\r\nimport usePortal from 'react-cool-portal';\r\nimport { FavoriteIcon } from '../FavoriteIcon';\r\n\r\nexport const HeaderButtons = () => {\r\n const breakPoint = useBreakpointIndex();\r\n const shouldShowAsFloat = breakPoint === 3;\r\n\r\n const { Portal: FloatPortal } = usePortal({\r\n containerId: 'NonControlledAppModals',\r\n clickOutsideToHide: false,\r\n autoRemoveContainer: false,\r\n defaultShow: true,\r\n escToHide: false,\r\n });\r\n\r\n return (\r\n <Box className=\"iconsBar\">\r\n {breakPoint >= 4 && <FavoriteIcon />}\r\n {shouldShowAsFloat && (\r\n <FloatPortal>\r\n <Box {...getVariant('layout.twoColumnsAside.hamburguer')}>\r\n <IconButton\r\n title={window.TOGGLE_MENU}\r\n aria-label={window.TOGGLE_MENU}\r\n onClick={(ev) => {\r\n ev.stopPropagation();\r\n }}\r\n className=\"toggleMenu\"\r\n >\r\n <FaBars />\r\n </IconButton>\r\n </Box>\r\n </FloatPortal>\r\n )}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant, Heading, Image } from '@apia/theme';\r\nimport { HeaderButtons } from './HeaderButtons';\r\n\r\ninterface IHeader {\r\n title: string;\r\n description?: string;\r\n image?: string;\r\n}\r\n\r\nexport const Header = ({ title, description, image: imageUrl }: IHeader) => {\r\n return (\r\n <header>\r\n <Box className=\"imageTitleAndDescription\">\r\n <Box className=\"image\">\r\n <Image src={imageUrl ?? ''} role=\"presentation\" alt=\"\" />\r\n </Box>\r\n <Box className=\"titleAndDescription\">\r\n <Heading {...getVariant('text.title')} as=\"h1\">\r\n <Box as=\"span\">{title}</Box>\r\n </Heading>\r\n <Box as=\"p\" className=\"description\">\r\n {description ?? ''}\r\n </Box>\r\n </Box>\r\n </Box>\r\n <HeaderButtons />\r\n </header>\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const ShowResponsive = ({\r\n show = [true],\r\n children,\r\n display = 'block',\r\n}: {\r\n display?: string;\r\n show?: boolean[];\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <Box sx={{ display: show.map((def) => (def ? display : 'none')) }}>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { useBreakpointIndex } from '@apia/theme';\r\nimport React from 'react';\r\nimport usePortal from 'react-cool-portal';\r\nimport { FavoriteIcon } from '../FavoriteIcon';\r\n\r\nexport const CenteredHeaderButtons = () => {\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 4 });\r\n\r\n const { Portal: Portal1 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'ResponsiveButtons',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n const { Portal: Portal2 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'HamburguerIconWrapper',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n const { Portal: Portal3 } = usePortal({\r\n autoRemoveContainer: false,\r\n clickOutsideToHide: false,\r\n containerId: 'RelatedButtonsContainer',\r\n defaultShow: true,\r\n escToHide: false,\r\n internalShowHide: true,\r\n });\r\n\r\n const icon = React.useMemo(() => <FavoriteIcon />, []);\r\n\r\n if (breakpoint < 3) return <Portal1>{icon}</Portal1>;\r\n if (breakpoint === 3) return <Portal2>{icon}</Portal2>;\r\n return <Portal3>{icon}</Portal3>;\r\n};\r\n","import { isObservable, observable, reaction } from 'mobx';\r\nimport { makeObservable, toJS } from 'mobx';\r\nimport { IParameter, ParameterObject, TParameterType } from './types';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport class Parameter<T extends IParameter = IParameter>\r\n implements ParameterObject\r\n{\r\n public state: T & { validationError?: string };\r\n\r\n public component?: string;\r\n\r\n constructor(\r\n params: T & {\r\n component?: string;\r\n },\r\n ) {\r\n this.component = params.component;\r\n this.state = params;\r\n this.state.type = this.state.type.toLowerCase() as TParameterType;\r\n this.state.values = this.state.values || [];\r\n this.removeEmptyValues();\r\n\r\n if (!isObservable(this.state)) {\r\n makeObservable<Parameter<T>, 'state'>(this, {\r\n state: observable,\r\n });\r\n }\r\n\r\n reaction(\r\n () => this.state.values,\r\n () => delete this.state.validationError,\r\n );\r\n }\r\n\r\n clear() {\r\n this.state.values.splice(0, this.state.values.length);\r\n }\r\n\r\n getValues() {\r\n return this.state.values;\r\n }\r\n\r\n private removeEmptyValues() {\r\n this.state.values = this.state.values.filter((x) => !!x);\r\n }\r\n\r\n setValue(value: string, index?: number) {\r\n //this.removeEmptyValues();\r\n index !== null && index !== undefined\r\n ? (this.state.values[index] = value)\r\n : (this.state.values = [value]);\r\n }\r\n\r\n addValue(value: string) {\r\n this.removeEmptyValues();\r\n this.state.values[this.state.values.length] = value;\r\n }\r\n\r\n setValues(values: string[], index = 0) {\r\n this.removeEmptyValues();\r\n values.forEach((x, i) => (this.state.values[index + i] = x));\r\n for (let i = values.length; i < this.state.values.length; i++) {\r\n delete this.state.values[i];\r\n }\r\n }\r\n\r\n removeValue(value: string) {\r\n this.state.values = this.getValues().filter((x) => !!x && x !== value);\r\n }\r\n\r\n asPayloadElement() {\r\n return this.state.type === 'label'\r\n ? null\r\n : toJS(this.state.values.filter((x) => !!x));\r\n }\r\n\r\n includes(value: string) {\r\n return this.state.values.includes(value);\r\n }\r\n\r\n validate() {\r\n const isValid = !this.state.required || !!this.state.values[0];\r\n this.state.validationError = isValid\r\n ? undefined\r\n : getLabel('msgReqField').text;\r\n return isValid;\r\n }\r\n\r\n setComponent(component?: string) {\r\n this.component = component;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { ParameterRenderer } from './types';\r\nimport { useRef, ReactNode, Suspense, useMemo } from 'react';\r\nimport {\r\n Checkbox,\r\n FieldErrorMessage,\r\n FieldLabel,\r\n importComponent,\r\n} from '../components';\r\nimport { Parameter } from './Parameter';\r\nimport { Heading, Input, Select, Textarea } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const ParameterRender = observer(\r\n ({\r\n index = 0,\r\n omitLabel = false,\r\n parameter,\r\n }: {\r\n index: number;\r\n omitLabel?: boolean;\r\n parameter: Parameter;\r\n }) => {\r\n const Label = useMemo(\r\n () =>\r\n omitLabel && parameter.state.type !== 'check'\r\n ? ({ children }: { children: ReactNode }) => <>{children}</>\r\n : FieldLabel,\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n );\r\n const error = parameter.state.validationError && (\r\n <FieldErrorMessage name={parameter.state.name}>\r\n {parameter.state.validationError}\r\n </FieldErrorMessage>\r\n );\r\n const componentRef = useRef<ParameterRenderer | null>(null);\r\n\r\n if (parameter.component) {\r\n componentRef.current =\r\n componentRef.current ||\r\n (importComponent(parameter.component!) as ParameterRenderer);\r\n\r\n return (\r\n <Suspense fallback={null}>\r\n <componentRef.current parameter={parameter} index={index} />\r\n {error}\r\n </Suspense>\r\n );\r\n } else if (parameter.state.type === 'input') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Input\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(ev.target.value, index);\r\n }}\r\n value={parameter.state.values[index] ?? ''}\r\n className={\r\n parameter.state.validationError ? 'requiredFilter__Border' : ''\r\n }\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'text_area') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Textarea\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n const values: string[] = [];\r\n let lastIndex = 0;\r\n do {\r\n const finishIndex = Math.min(\r\n lastIndex + 240,\r\n ev.target.value.length,\r\n );\r\n values.push(ev.target.value.slice(lastIndex, finishIndex));\r\n lastIndex += 240;\r\n } while (lastIndex < ev.target.value.length);\r\n\r\n parameter.setValues(\r\n values.map((x) => (x !== null ? x : '')),\r\n index,\r\n );\r\n }}\r\n value={parameter.state.values.join('')}\r\n className={\r\n parameter.state.validationError ? 'requiredFilter__Border' : ''\r\n }\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'check') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Checkbox\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(String(ev.target.checked), index);\r\n }}\r\n checked={parameter.state.values[index] === 'true'}\r\n className={\r\n parameter.state.validationError ? 'requiredFilter__Border' : ''\r\n }\r\n />\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'combo') {\r\n return (\r\n <Label\r\n label={parameter.state.title}\r\n required={parameter.state.required}\r\n title={parameter.state.description}\r\n >\r\n <Select\r\n name={parameter.state.name}\r\n title={parameter.state.description}\r\n onChange={(ev) => {\r\n parameter.setValue(ev.target.value, index);\r\n }}\r\n value={parameter.state.values[index]}\r\n className={\r\n parameter.state.validationError ? 'requiredFilter__Border' : ''\r\n }\r\n >\r\n {arrayOrArray(parameter.state.possibleValues).map((c) => (\r\n <option value={c.value}>{c.text}</option>\r\n ))}\r\n </Select>\r\n {error}\r\n </Label>\r\n );\r\n } else if (parameter.state.type === 'mdl_attribute') {\r\n console.warn('There is no renderer for type mdl_attribute');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_doc_type') {\r\n console.warn('There is no renderer for type mdl_doc_type');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_metadata') {\r\n console.warn('There is no renderer for type mdl_metadata');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_entity') {\r\n console.warn('There is no renderer for type mdl_entity');\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_connector') {\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_completion_model') {\r\n return null;\r\n } else if (parameter.state.type === 'mdl_ai_embeddings_model') {\r\n return null;\r\n } else if (parameter.state.type === 'hidden') {\r\n return null;\r\n } else if (parameter.state.type === 'label') {\r\n return (\r\n <Heading\r\n sx={{ my: 5, fontSize: '19px !important' }}\r\n title={parameter.state.description}\r\n as=\"h5\"\r\n >\r\n {parameter.state.title}\r\n </Heading>\r\n );\r\n }\r\n\r\n console.warn('Cannot render parameter of type', parameter.state.type);\r\n\r\n return null;\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ParameterRender } from './ParameterRender';\r\nimport { Box, Button } from '@apia/theme';\r\nimport { ParametersGroupRenderer } from './types';\r\nimport { toJS } from 'mobx';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport const ParametersTable: ParametersGroupRenderer = observer(\r\n ({ group }) => {\r\n const maxIndex = Math.max(\r\n ...Object.values(group.parameters).map((p) => p.state.values.length),\r\n );\r\n const indices = Array.from({ length: maxIndex }, (_, i) => i);\r\n\r\n return (\r\n <Box\r\n as=\"table\"\r\n variant=\"layout.common.tables.secondary\"\r\n sx={{\r\n gridColumn: 'span 4',\r\n }}\r\n >\r\n <thead>\r\n <tr>\r\n {Object.values(group.parameters).map((p) =>\r\n p.state.type !== 'hidden' ? (\r\n <th sx={toJS(p.state.cssProps?.TH)} key={p.state.name}>\r\n {p.state.title}\r\n </th>\r\n ) : null,\r\n )}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {indices.map((index) => (\r\n <tr\r\n key={index}\r\n onClick={() => {\r\n group.selection.clear();\r\n group.selection.add(index);\r\n }}\r\n className={group.selection.has(index) ? 'selected' : ''}\r\n >\r\n {Object.entries(group.parameters).map(([name, parameter]) =>\r\n parameter.state.type !== 'hidden' ? (\r\n <td key={name}>\r\n <ParameterRender\r\n omitLabel\r\n index={index}\r\n parameter={parameter}\r\n />\r\n </td>\r\n ) : null,\r\n )}\r\n </tr>\r\n ))}\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td colSpan={Object.keys(group.parameters).length}>\r\n <Button\r\n onClick={() => {\r\n Object.values(group.parameters)[0]?.state.values.push('');\r\n }}\r\n >\r\n {getLabel('btnAgr').text}\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n for (let i = maxIndex; i >= 0; i--) {\r\n if (group.selection.has(i)) {\r\n Object.values(group.parameters).forEach((c) =>\r\n c.state.values.splice(i, 1),\r\n );\r\n }\r\n }\r\n group.selection.clear();\r\n }}\r\n >\r\n {getLabel('btnDel').text}\r\n </Button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Parameter } from '.';\r\n\r\nimport { ITableParameterProps } from './types';\r\n\r\nexport class TableParameter extends Parameter<ITableParameterProps> {\r\n constructor(params: ITableParameterProps) {\r\n super(params);\r\n\r\n this.state.cssProps = params.cssProps ?? { TH: {} };\r\n }\r\n}\r\n","import { makeObservable } from 'mobx';\r\nimport { observable } from 'mobx';\r\nimport { IParameter, ITableParameterProps, ParameterObject } from './types';\r\nimport { TableParameter } from './TableParameter';\r\n\r\nexport class ParametersGroup implements ParameterObject {\r\n component?: string;\r\n name: string;\r\n parameters: Record<string, TableParameter>;\r\n selection: Set<number> = new Set();\r\n\r\n constructor(params: {\r\n name: string;\r\n parameters: Record<string, IParameter>;\r\n component?: string;\r\n }) {\r\n this.component = params.component;\r\n this.name = params.name;\r\n this.parameters = Object.fromEntries(\r\n Object.entries(params.parameters).map(([name, param]) => [\r\n name,\r\n new TableParameter(param as ITableParameterProps),\r\n ]),\r\n );\r\n\r\n makeObservable(this, {\r\n parameters: observable,\r\n selection: observable,\r\n });\r\n }\r\n\r\n removeAll() {\r\n Object.values(this.parameters).forEach((p) => p.clear());\r\n }\r\n\r\n asPayloadElement(): Record<string, any> {\r\n return Object.keys(this.parameters).reduce<Record<string, any>>(\r\n (prev, current) => {\r\n const elem = this.parameters[current].asPayloadElement();\r\n elem && (prev[current] = elem);\r\n return prev;\r\n },\r\n {},\r\n );\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IParameter, IParametersGroup, ParameterObject } from '.';\r\nimport { Parameter } from './Parameter';\r\nimport { ParametersGroup } from './ParametersGroup';\r\n\r\nexport function isParametersGroup(\r\n param: IParameter | IParametersGroup,\r\n): param is IParametersGroup {\r\n return (param as IParametersGroup).parameters !== undefined;\r\n}\r\n\r\nexport class ParametersStore {\r\n private static instance: ParametersStore;\r\n public static getInstance() {\r\n if (!ParametersStore.instance) {\r\n ParametersStore.instance = new ParametersStore();\r\n }\r\n return ParametersStore.instance;\r\n }\r\n\r\n private parameters: Record<string, Record<string, ParameterObject>> = {};\r\n\r\n private constructor() {\r\n makeObservable<ParametersStore, 'parameters'>(this, {\r\n parameters: observable,\r\n });\r\n }\r\n\r\n /**\r\n * Takes the string generated by the ParametersStore in the server\r\n * and assigns it to the current parameters\r\n */\r\n fromResponse(owner: string, response: string) {\r\n const params = JSON.parse(response) as Record<\r\n string,\r\n IParameter | IParametersGroup\r\n >;\r\n\r\n Object.entries(params).forEach(([name, param]) => {\r\n if (!this.parameters[owner]) {\r\n this.parameters[owner] = {};\r\n }\r\n\r\n if (isParametersGroup(param)) {\r\n this.parameters[owner][name] = new ParametersGroup(param);\r\n } else {\r\n this.parameters[owner][name] = new Parameter(param);\r\n }\r\n });\r\n }\r\n\r\n public static getParametersFromResponse(response: string) {\r\n const parsed = JSON.parse(response) as Record<\r\n string,\r\n IParameter | IParametersGroup\r\n >;\r\n const newParameters: Record<string, ParameterObject> = {};\r\n\r\n Object.entries(parsed).forEach(([name, param]) => {\r\n if (isParametersGroup(param)) {\r\n newParameters[name] = new ParametersGroup(param);\r\n } else {\r\n newParameters[name] = new Parameter(param);\r\n }\r\n });\r\n return newParameters;\r\n }\r\n\r\n public static getParametersFromObject(\r\n response: Record<string, IParameter | IParametersGroup>,\r\n ) {\r\n const newParameters: Record<string, ParameterObject> = {};\r\n\r\n Object.entries(response).forEach(([name, param]) => {\r\n if (param instanceof Parameter || param instanceof ParametersGroup) {\r\n newParameters[name] = param;\r\n } else {\r\n if (isParametersGroup(param)) {\r\n newParameters[name] = new ParametersGroup(param);\r\n } else {\r\n newParameters[name] = new Parameter(param);\r\n }\r\n }\r\n });\r\n return newParameters;\r\n }\r\n\r\n /**\r\n * Returns the parameters for a given owner name.\r\n */\r\n getParameters(ownerName: string) {\r\n return this.parameters[ownerName];\r\n }\r\n\r\n /**\r\n * Returns an object that can be used to submit the parameters to the server\r\n * in a format that the ParametersStore in the server expects.\r\n */\r\n getSubmitValue(owner: string) {\r\n const submitObject: Record<string, string[]> = {};\r\n\r\n Object.values(this.parameters[owner]).forEach((p) => {\r\n if (p instanceof Parameter) {\r\n submitObject[p.state.name] = p.getValues();\r\n } else if (p instanceof ParametersGroup) {\r\n for (const [name, param] of Object.entries(p.parameters)) {\r\n submitObject[name] = param.getValues();\r\n }\r\n }\r\n });\r\n\r\n return JSON.stringify(submitObject);\r\n }\r\n\r\n /**\r\n * Resets the parameters store.\r\n */\r\n reset() {\r\n this.parameters = {};\r\n }\r\n\r\n public static validate(parameters: Record<string, ParameterObject>) {\r\n let isValid = true;\r\n let firstInvalid: Parameter | null = null;\r\n\r\n for (const p of Object.values(parameters)) {\r\n if (p instanceof Parameter) {\r\n isValid = p.validate() && isValid;\r\n if (!firstInvalid && !isValid) {\r\n firstInvalid = p;\r\n }\r\n } else if (p instanceof ParametersGroup) {\r\n for (const pg of Object.values(p.parameters)) {\r\n isValid = pg.validate() && isValid;\r\n if (!firstInvalid && !isValid) {\r\n firstInvalid = pg;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (firstInvalid) {\r\n document\r\n .querySelector<HTMLElement>(`[name=\"${firstInvalid.state.name}\"]`)\r\n ?.focus();\r\n }\r\n\r\n return isValid;\r\n }\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ParameterRender } from './ParameterRender';\r\nimport { ParametersTable } from './ParametersTable';\r\nimport { ParametersGroup } from './ParametersGroup';\r\nimport { Parameter } from './Parameter';\r\nimport { importComponent } from '../components';\r\nimport { ParameterObject, ParametersGroupRenderer } from './types';\r\nimport { ReactNode, Suspense } from 'react';\r\nimport { ParametersStore } from './ParametersStore';\r\nimport { uniqueId } from '@apia/util';\r\n\r\ntype ParametersMap = Record<string, ParameterObject>;\r\n\r\nexport const Parameters = observer(\r\n ({\r\n label,\r\n ownerName,\r\n parameters,\r\n }: {\r\n label?: ReactNode;\r\n ownerName?: string;\r\n parameters?: ParametersMap;\r\n }) => {\r\n const params =\r\n parameters ??\r\n ParametersStore.getInstance().getParameters(ownerName ?? '');\r\n\r\n if (!params) return;\r\n return (\r\n <>\r\n {label}\r\n {Object.entries(params).map(([, c]) => {\r\n if (c instanceof Parameter) {\r\n return (\r\n <ParameterRender\r\n index={0}\r\n parameter={c}\r\n key={uniqueId(c.state.name)}\r\n />\r\n );\r\n } else if (c instanceof ParametersGroup) {\r\n if (c.component) {\r\n const Component = importComponent(\r\n c.component,\r\n ) as ParametersGroupRenderer;\r\n return (\r\n <Suspense fallback={null}>\r\n <Component group={c} key={c.name} />\r\n </Suspense>\r\n );\r\n } else {\r\n return <ParametersTable group={c} key={c.name} />;\r\n }\r\n }\r\n })}\r\n </>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IFilterCondition, TFilterOp, TFilterValueType } from './types';\r\nimport { getLabel } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FilterDTO } from './FilterDTO';\r\nimport { Select } from '@apia/theme';\r\n\r\nexport class FilterConditionDTO {\r\n state: IFilterCondition = { label: '', op: '' as TFilterOp };\r\n parent: FilterDTO;\r\n private allowedOps: Set<TFilterOp> = new Set();\r\n private static opLabels: Record<TFilterOp, { text: string; title: string }> =\r\n {\r\n CONTAINS: getLabel('lblFilLik'),\r\n DISTINCT: getLabel('lblFilNotEqu'),\r\n ENDS_WITH: getLabel('lblFilLikLef'),\r\n EQUAL: getLabel('lblFilEqu'),\r\n NOT_CONTAINS: getLabel('lblFilNotLik'),\r\n NOT_ENDS_WITH: getLabel('lblFilNotLikLef'),\r\n NOT_STARTS_WITH: getLabel('lblFilNotLikRig'),\r\n STARTS_WITH: getLabel('lblFilLikRig'),\r\n NOT_NULL: getLabel('lblFilNotNull'),\r\n NULL: getLabel('lblFilNull'),\r\n LOWER_THAN: getLabel('lblFilLowerThan'),\r\n LOWER_OR_EQUAL_THAN: getLabel('lblFilLowerOrEqualThan'),\r\n GREATER_THAN: getLabel('lblFilGreaterThan'),\r\n GREATER_OR_EQUAL_THAN: getLabel('lblFilGreaterOrEqualThan'),\r\n IN: getLabel('lblFilIn'),\r\n NOT_IN: getLabel('lblFilNotIn'),\r\n RANGE: getLabel('lblFilRange'),\r\n };\r\n constructor(\r\n props: IFilterCondition,\r\n type: TFilterValueType,\r\n parent: FilterDTO,\r\n ) {\r\n switch (type) {\r\n case 'S':\r\n [\r\n 'CONTAINS',\r\n 'DISTINCT',\r\n 'ENDS_WITH',\r\n 'EQUAL',\r\n 'NOT_CONTAINS',\r\n 'NOT_ENDS_WITH',\r\n 'NOT_STARTS_WITH',\r\n 'STARTS_WITH',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n case 'D':\r\n [\r\n 'EQUAL',\r\n 'DISTINCT',\r\n 'LOWER_THAN',\r\n 'LOWER_OR_EQUAL_THAN',\r\n 'GREATER_THAN',\r\n 'GREATER_OR_EQUAL_THAN',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n 'RANGE',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n case 'N':\r\n [\r\n 'EQUAL',\r\n 'DISTINCT',\r\n 'LOWER_THAN',\r\n 'LOWER_OR_EQUAL_THAN',\r\n 'GREATER_THAN',\r\n 'GREATER_OR_EQUAL_THAN',\r\n 'NOT_NULL',\r\n 'NULL',\r\n 'IN',\r\n 'NOT_IN',\r\n 'RANGE',\r\n ].forEach((op) => this.allowedOps.add(op as TFilterOp));\r\n break;\r\n }\r\n this.state = props;\r\n this.parent = parent;\r\n this.state.label = this.getLabelByFilterOp().text;\r\n makeObservable(this, { state: observable, parent: observable });\r\n }\r\n\r\n getLabelByFilterOp() {\r\n return FilterConditionDTO.opLabels[this.state.op];\r\n }\r\n\r\n getOpMap() {\r\n return Object.keys(FilterConditionDTO.opLabels).reduce<\r\n Record<TFilterOp, { text: string; title: string }>\r\n >(\r\n (acc, key) => {\r\n if (this.allowedOps.has(key as TFilterOp)) {\r\n acc[key as TFilterOp] = FilterConditionDTO.opLabels[key as TFilterOp];\r\n }\r\n return acc;\r\n },\r\n {} as Record<TFilterOp, { text: string; title: string }>,\r\n );\r\n }\r\n\r\n setOp(op: TFilterOp) {\r\n if (\r\n (this.state.op === 'NULL' || this.state.op === 'NOT_NULL') &&\r\n op !== 'NOT_NULL' &&\r\n op !== 'NULL'\r\n ) {\r\n this.parent.setValue('');\r\n }\r\n this.state.op = op;\r\n }\r\n\r\n Component = observer(() => {\r\n return (\r\n <Select\r\n name=\"filterCondition\"\r\n onChange={(ev) => this.setOp(ev.target.value as TFilterOp)}\r\n >\r\n {Object.entries(this.getOpMap()).map(([key, value], idx) => {\r\n return (\r\n <option\r\n selected={this.state.op === key}\r\n key={`${key}_${idx}`}\r\n value={key}\r\n >\r\n {value.text}\r\n </option>\r\n );\r\n })}\r\n </Select>\r\n );\r\n });\r\n}\r\n","import { action, observable, toJS } from 'mobx';\r\nimport { makeObservable } from 'mobx';\r\nimport {\r\n IFilterDTOState,\r\n IFilterValue,\r\n TFilterOp,\r\n TFilterPayload,\r\n TFilterType,\r\n TFilterValue,\r\n TVisualizationType,\r\n} from './types';\r\nimport { FilterConditionDTO } from './FilterConditionDTO';\r\nimport { FiltersStore } from './FiltersStore';\r\nimport { Box, BoxProps, Input, InputProps } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FC, ReactNode } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { Checkbox, FieldErrorMessage, IconButton } from '../components';\r\n\r\nexport class FilterDTO<T extends IFilterDTOState = IFilterDTOState> {\r\n type: string = 'filter';\r\n public state: T;\r\n isTd: boolean;\r\n ref: HTMLElement | null = null;\r\n\r\n constructor(params: T, filterType?: TFilterType, isTd: boolean = true) {\r\n this.state = params;\r\n filterType && (this.state.filterType = filterType);\r\n if (params.filterCondition && typeof params.filterCondition === 'string') {\r\n this.state.filterCondition = new FilterConditionDTO(\r\n {\r\n op: params.filterCondition as any as TFilterOp,\r\n },\r\n params.valueType,\r\n this,\r\n );\r\n }\r\n if (\r\n this.state.value &&\r\n (this.state.filterCondition.state.op === 'IN' ||\r\n this.state.filterCondition.state.op === 'NOT_IN' ||\r\n this.state.filterCondition.state.op === 'RANGE')\r\n ) {\r\n this.state.multipleValue = (String(this.state.value) ?? '').split(',');\r\n this.state.value = undefined;\r\n }\r\n this.state.visualizationType =\r\n params.visualizationType.toUpperCase() as TVisualizationType;\r\n this.state.hasFixedType = !!this.state.valueType;\r\n makeObservable(this, {\r\n state: observable,\r\n setValue: action,\r\n });\r\n this.isTd = isTd;\r\n }\r\n\r\n private isCheckBox() {\r\n return (\r\n this.state.filterCondition.state.op === 'NULL' ||\r\n this.state.filterCondition.state.op === 'NOT_NULL'\r\n );\r\n }\r\n\r\n getStoreValue() {\r\n return ['IN', 'NOT_IN', 'RANGE'].includes(\r\n this.state.filterCondition.state.op,\r\n )\r\n ? this.state.multipleValue?.filter((c) => !!c).join(',')\r\n : this.state.value;\r\n }\r\n\r\n getValue() {\r\n if (!this.state.value && this.isCheckBox()) {\r\n if (!FiltersStore.getFilter(this.state.name, 'F')) {\r\n this.state.value = String((this.state.value as string) === 'true');\r\n } else {\r\n this.state.value = 'true';\r\n }\r\n }\r\n return this.state.value;\r\n }\r\n\r\n getValueTypeLabel() {\r\n switch (this.state.valueType) {\r\n case 'D':\r\n return getLabel('lblDate').text;\r\n case 'N':\r\n return getLabel('lblNum').text;\r\n case 'S':\r\n return getLabel('lblStr').text;\r\n default:\r\n return this.state.valueType;\r\n }\r\n }\r\n\r\n setMultipleValue(value: string | Date | number, idx?: number) {\r\n if (!this.state.multipleValue) {\r\n this.state.multipleValue = [];\r\n }\r\n\r\n if (this.state.multipleValue) {\r\n if (idx !== undefined) {\r\n this.state.multipleValue[idx] = value;\r\n } else {\r\n this.state.multipleValue.push(this.state.value as TFilterValue);\r\n }\r\n }\r\n }\r\n\r\n setValue(value: string | number | Date) {\r\n this.state.value = value;\r\n }\r\n\r\n private resolveMultipleValueInPayload() {\r\n if (\r\n this.state.filterCondition.state.op === 'IN' ||\r\n this.state.filterCondition.state.op === 'NOT_IN'\r\n ) {\r\n return this.state.multipleValue?.join(',');\r\n } else if (this.state.filterCondition.state.op === 'RANGE') {\r\n return this.state.multipleValue?.slice(0, 2).join(',');\r\n }\r\n }\r\n\r\n asPayloadElement() {\r\n const aux: TFilterPayload = toJS(this.state) as any as TFilterPayload;\r\n aux.filterCondition = this.state.filterCondition.state.op;\r\n aux.multipleValue && (aux.value = this.resolveMultipleValueInPayload());\r\n\r\n return aux;\r\n }\r\n\r\n asFilterValue(): IFilterValue | null {\r\n const value = this.state.multipleValue\r\n ? this.resolveMultipleValueInPayload()\r\n : this.state.value;\r\n return value\r\n ? {\r\n condition: this.state.filterCondition.state.op,\r\n value,\r\n type: this.state.valueType,\r\n }\r\n : null;\r\n }\r\n\r\n public getInputType() {\r\n return this.state.valueType === 'N'\r\n ? 'number'\r\n : this.state.valueType === 'D'\r\n ? 'date'\r\n : 'text';\r\n }\r\n\r\n removeMultipleValue(value: TFilterValue) {\r\n this.state.multipleValue = (this.state.multipleValue ?? []).filter(\r\n (x) => x !== value,\r\n );\r\n }\r\n\r\n isUndefined(value: TFilterValue) {\r\n return !value || !(value !== 'undefined');\r\n }\r\n\r\n Component = observer(\r\n ({\r\n renderers,\r\n multipleInputBoxProps,\r\n }: {\r\n renderers?: {\r\n input?: FC<InputProps & { label?: string }>;\r\n };\r\n multipleInputBoxProps?: BoxProps;\r\n }) => {\r\n const value = this.getValue();\r\n const type = this.getInputType();\r\n let visualizationComponent: ReactNode = null;\r\n\r\n const error = this.state.validationError ? (\r\n <FieldErrorMessage>{this.state.validationError}</FieldErrorMessage>\r\n ) : null;\r\n\r\n const InputRenderer = renderers?.input || Input;\r\n\r\n switch (this.state.filterCondition.state.op) {\r\n case 'CONTAINS':\r\n case 'DISTINCT':\r\n case 'ENDS_WITH':\r\n case 'EQUAL':\r\n case 'NOT_CONTAINS':\r\n case 'NOT_ENDS_WITH':\r\n case 'NOT_STARTS_WITH':\r\n case 'STARTS_WITH':\r\n case 'GREATER_OR_EQUAL_THAN':\r\n case 'GREATER_THAN':\r\n case 'LOWER_OR_EQUAL_THAN':\r\n case 'LOWER_THAN': {\r\n visualizationComponent = (\r\n <InputRenderer\r\n onChange={(ev) => {\r\n this.setValue(ev.target.value);\r\n }}\r\n type={type}\r\n value={value as string}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n );\r\n break;\r\n }\r\n case 'IN':\r\n case 'NOT_IN':\r\n visualizationComponent = (\r\n <Box {...multipleInputBoxProps}>\r\n <InputRenderer\r\n onKeyDown={(ev) => {\r\n if (ev.key === 'Enter') {\r\n this.setMultipleValue(this.getValue() as TFilterValue);\r\n this.setValue('');\r\n }\r\n }}\r\n onChange={(ev) => {\r\n this.setValue(ev.target.value);\r\n ev.preventDefault();\r\n }}\r\n type={type}\r\n value={value as string}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n {[...(this.state.multipleValue ?? new Set())].map((x, idx) => (\r\n <Box {...multipleInputBoxProps} className=\"multiplesValuesBox\">\r\n <InputRenderer\r\n onChange={(ev) => {\r\n this.setMultipleValue(ev.target.value, idx);\r\n }}\r\n value={x as string}\r\n type={type}\r\n ></InputRenderer>\r\n <IconButton\r\n icon=\"Trash\"\r\n onClick={() => {\r\n this.removeMultipleValue(x as TFilterValue);\r\n }}\r\n ></IconButton>\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n break;\r\n case 'NOT_NULL':\r\n case 'NULL':\r\n // eslint-disable-next-line no-case-declarations\r\n const isFixed = this.state.filterType === 'F';\r\n isFixed && this.setValue('true');\r\n visualizationComponent = (\r\n <Checkbox\r\n disabled={isFixed}\r\n type=\"checkbox\"\r\n onChange={(ev) =>\r\n this.setValue(ev.target.checked ? 'true' : 'false')\r\n }\r\n checked={value === 'true'}\r\n ref={(el) => (this.ref = el)}\r\n ></Checkbox>\r\n );\r\n break;\r\n case 'RANGE':\r\n if (\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n this.isUndefined(this.state.multipleValue[0])\r\n ) {\r\n this.state.multipleValue[0] = '';\r\n }\r\n visualizationComponent = (\r\n <>\r\n <Box>\r\n {/*<Label>{getLabel('lblProEleFrom').text}</Label>*/}\r\n <InputRenderer\r\n value={\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n !this.isUndefined(this.state.multipleValue[0])\r\n ? (this.state.multipleValue[0] as any)\r\n : ''\r\n }\r\n label={getLabel('lblProEleTo').text}\r\n title={getLabel('lblProEleFrom').text}\r\n type={type}\r\n onChange={(ev) => {\r\n this.setMultipleValue(ev.target.value, 0);\r\n }}\r\n ref={(el) => (this.ref = el)}\r\n ></InputRenderer>\r\n </Box>\r\n <Box>\r\n {/*<Label>{getLabel('lblProEleTo').text}</Label>*/}\r\n <InputRenderer\r\n value={\r\n this.state.multipleValue &&\r\n this.state.multipleValue?.length >= 0 &&\r\n this.state.multipleValue[1]\r\n ? (this.state.multipleValue[1] as any)\r\n : ''\r\n }\r\n label={getLabel('lblProEleTo').text}\r\n title={getLabel('lblProEleTo').text}\r\n type={type}\r\n onChange={(ev) => {\r\n if ((this.state.multipleValue ?? []).length < 1) {\r\n this.setMultipleValue('', 0);\r\n }\r\n this.setMultipleValue(ev.target.value, 1);\r\n }}\r\n ></InputRenderer>\r\n </Box>\r\n </>\r\n );\r\n break;\r\n default:\r\n throw new Error(\r\n 'Unknown condition: ' + this.state.filterCondition.state.op,\r\n );\r\n }\r\n\r\n return (\r\n <Box variant=\"layout.design.semanticSearch.filterBox\">\r\n {!this.isTd && <span>{this.getLabel()}</span>}\r\n {visualizationComponent}\r\n {error}\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\n getLabel() {\r\n return `${this.state.title} (${this.state.filterCondition.state.label})`;\r\n }\r\n\r\n validate() {\r\n const storeValue = this.getStoreValue();\r\n const isValid =\r\n this.state.filterType === 'U' ||\r\n (storeValue !== undefined && storeValue !== '');\r\n\r\n this.state.validationError = isValid\r\n ? undefined\r\n : getLabel('msgReqField').text;\r\n\r\n return isValid;\r\n }\r\n\r\n clear() {\r\n this.state.value = '';\r\n this.state.multipleValue = [];\r\n }\r\n\r\n hasFilledValue() {\r\n return this.state.value || this.state.multipleValue?.some((x) => x);\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { IFilterDTOState, TFilterType } from '.';\r\nimport { FilterDTO } from './FilterDTO';\r\nimport { IFilterValue } from './types';\r\n\r\nexport class FiltersStore {\r\n private static instance: FiltersStore = new FiltersStore();\r\n\r\n available: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n fixed: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n dynamic: Record<string, FilterDTO<IFilterDTOState>> = {};\r\n\r\n private constructor() {\r\n makeObservable(this, {\r\n available: observable,\r\n fixed: observable,\r\n dynamic: observable,\r\n });\r\n }\r\n\r\n /**\r\n * Takes the string generated by the ParametersStore in the server\r\n * and assigns it to the current filters\r\n */\r\n public static getFiltersFromResponse(\r\n response: string,\r\n from: 'fixed' | 'dynamic' | 'available' = 'available',\r\n ) {\r\n const parsed = JSON.parse(response) as {\r\n available: Record<string, IFilterDTOState>;\r\n dynamic: Record<string, IFilterDTOState>;\r\n fixed: Record<string, IFilterDTOState>;\r\n };\r\n const newFilters: Record<string, FilterDTO> = {};\r\n\r\n Object.entries(parsed[from]).forEach(([name, param]) => {\r\n newFilters[name] = new FilterDTO(param);\r\n });\r\n return newFilters;\r\n }\r\n\r\n public static setFiltersFromObject(response: {\r\n available: Record<string, FilterDTO<IFilterDTOState>>;\r\n fixed: Record<string, FilterDTO<IFilterDTOState>>;\r\n dynamic: Record<string, FilterDTO<IFilterDTOState>>;\r\n }) {\r\n this.instance.available = this.getFiltersFromObject(response.available);\r\n this.instance.dynamic = this.getFiltersFromObject(response.dynamic);\r\n this.instance.fixed = this.getFiltersFromObject(response.fixed);\r\n }\r\n\r\n public static getFiltersFromObject(response: Record<string, FilterDTO>) {\r\n const newFilters: Record<string, FilterDTO> = {};\r\n\r\n Object.entries(response).forEach(([name, param]) => {\r\n if (!(param instanceof FilterDTO)) {\r\n param = new FilterDTO(param);\r\n }\r\n newFilters[name] = param;\r\n });\r\n return newFilters;\r\n }\r\n\r\n /**\r\n * Returns the filters for a given name.\r\n */\r\n static getFilter(name: string, type?: TFilterType) {\r\n return !type\r\n ? this.instance.available[name]\r\n : type === 'F'\r\n ? this.instance.fixed[name]\r\n : this.instance.dynamic[name];\r\n }\r\n\r\n /**\r\n * Set filter into store given owner name\r\n */\r\n static setFilter(\r\n value: FilterDTO<IFilterDTOState>,\r\n type?: TFilterType,\r\n replace = true,\r\n ) {\r\n const newFilter = new FilterDTO(value.state, type);\r\n if (!type) {\r\n this.instance.available[value.state.name] = newFilter;\r\n } else if (\r\n type === 'F' &&\r\n ((!replace && !this.instance.fixed[value.state.name]) || replace)\r\n ) {\r\n this.instance.fixed[value.state.name] = newFilter;\r\n } else if (\r\n type === 'U' &&\r\n ((!replace && !this.instance.dynamic[value.state.name]) || replace)\r\n ) {\r\n this.instance.dynamic[value.state.name] = newFilter;\r\n }\r\n }\r\n\r\n /**\r\n * Remove into store given owner name\r\n */\r\n static removeFilter(x: FilterDTO<IFilterDTOState>, type?: TFilterType) {\r\n if (!type) {\r\n delete this.instance.available[x.state.name];\r\n delete this.instance.fixed[x.state.name];\r\n delete this.instance.dynamic[x.state.name];\r\n } else if (type === 'U') {\r\n delete this.instance.dynamic[x.state.name];\r\n x.state.filterType = undefined as any as TFilterType;\r\n } else if (type === 'F') {\r\n delete this.instance.fixed[x.state.name];\r\n x.state.filterType = undefined as any as TFilterType;\r\n }\r\n }\r\n\r\n /**\r\n * Resets the parameters store.\r\n */\r\n static reset() {\r\n FiltersStore.instance.available = {};\r\n FiltersStore.instance.fixed = {};\r\n FiltersStore.instance.dynamic = {};\r\n }\r\n\r\n static size() {\r\n return Object.keys(FiltersStore.instance.available).length;\r\n }\r\n\r\n static setFilters(\r\n filters: Record<string, FilterDTO<IFilterDTOState>>,\r\n type?: TFilterType,\r\n ) {\r\n !type\r\n ? (this.instance.available = filters)\r\n : type === 'F'\r\n ? (this.instance.fixed = filters)\r\n : (this.instance.dynamic = filters);\r\n }\r\n\r\n static filters(type?: TFilterType) {\r\n return !type\r\n ? FiltersStore.instance.available\r\n : type === 'F'\r\n ? FiltersStore.instance.fixed\r\n : FiltersStore.instance.dynamic;\r\n }\r\n\r\n static parseFiltersAsFilterValue(values: FilterDTO[]) {\r\n return values.reduce((x: Record<string, IFilterValue>, y) => {\r\n const value = y.asFilterValue();\r\n if (value) {\r\n x[y.state.name] = value;\r\n }\r\n return x;\r\n }, {});\r\n }\r\n\r\n static getFiltersAsFilterValue(\r\n type?: TFilterType,\r\n ): Record<string, IFilterValue> {\r\n return FiltersStore.parseFiltersAsFilterValue(FiltersStore.values(type));\r\n }\r\n\r\n static getAllFilters(includeAvailable?: boolean) {\r\n const retList = [];\r\n includeAvailable &&\r\n retList.push(...Object.values(FiltersStore.instance.available));\r\n retList.push(...Object.values(FiltersStore.instance.fixed));\r\n retList.push(...Object.values(FiltersStore.instance.dynamic));\r\n return retList;\r\n }\r\n\r\n static values(type?: TFilterType) {\r\n return !type\r\n ? Object.values(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.values(FiltersStore.instance.fixed)\r\n : Object.values(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static entries(type?: TFilterType) {\r\n return !type\r\n ? Object.entries(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.entries(FiltersStore.instance.fixed)\r\n : Object.entries(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static keys(type?: TFilterType) {\r\n return !type\r\n ? Object.keys(FiltersStore.instance.available)\r\n : type === 'F'\r\n ? Object.keys(FiltersStore.instance.fixed)\r\n : Object.keys(FiltersStore.instance.dynamic);\r\n }\r\n\r\n static async getFiltersById(id: number) {\r\n const response = /* await ApiaApi.post<{\r\n parameters: string;\r\n }>(\r\n makeApiaUrl({\r\n ajaxUrl: 'apia.design.SemanticSearchAction.run',\r\n action: 'getFiltersBySemSerId',\r\n id,\r\n }),\r\n );*/ {} as any;\r\n\r\n const filters = this.getFiltersFromResponse(\r\n response?.data?.parameters ?? '',\r\n 'dynamic',\r\n );\r\n Object.values(filters).forEach((x) => (x.isTd = false));\r\n return filters;\r\n }\r\n\r\n static asPayloadElement() {\r\n return FiltersStore.getAllFilters().map((x) => x.asPayloadElement());\r\n }\r\n\r\n static validate() {\r\n let isValid = true;\r\n let firstInvalid: FilterDTO | null = null;\r\n\r\n for (const f of FiltersStore.getAllFilters()) {\r\n isValid &&= f.validate();\r\n if (!isValid && !firstInvalid) {\r\n firstInvalid = f;\r\n }\r\n }\r\n\r\n firstInvalid?.ref?.focus();\r\n\r\n return isValid;\r\n }\r\n}\r\n"],"names":["__publicField","KeyHandler","keysMakers","getInitialState","React","uniqueId","Fragment","__privateAdd","__privateGet","__privateSet","__privateMethod","useBreakpointIndex","_maxId","__privateWrapper","props","_","Icon","fillZeros","fillThousandsZeros","decimalCount","decimalZeros","decimalSeparator","thousandsSeparator","regexpThousandsSeparator","regexpDecimalSeparator","_timeout","y","x","_emitter","_items","c","shallowEqual","IconButtonThemeUI","Checkbox","isChecked","useUpdateEffect","disableChildrenFocus","disableChildrenFocusMethod","_shout","shout_fn","styles","operations","useStore","Label","distinctors","value","newName","Spinner","result","Box","document","isFunction","content","Lbl","IconButton"],"mappings":"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"}
|