chop-logic-components 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +11 -0
  2. package/dist/components/atoms/button/Button.d.ts +7 -0
  3. package/dist/components/atoms/button/icon-button/IconButton.d.ts +3 -0
  4. package/dist/components/atoms/button/inner-button/InnerButton.d.ts +3 -0
  5. package/dist/components/atoms/button/primary-button/PrimaryButton.d.ts +3 -0
  6. package/dist/components/atoms/button/secondary-button/SecondaryButton.d.ts +3 -0
  7. package/dist/components/atoms/editable-text/EditView.d.ts +14 -0
  8. package/dist/components/atoms/editable-text/EditableText.d.ts +4 -0
  9. package/dist/components/atoms/editable-text/ReadView.d.ts +10 -0
  10. package/dist/components/atoms/editable-text/useEditModeState.d.ts +6 -0
  11. package/dist/components/atoms/editable-text/useInputFocus.d.ts +2 -0
  12. package/dist/components/atoms/editable-text/useValueState.d.ts +6 -0
  13. package/dist/components/atoms/error-message/ErrorMessage.d.ts +10 -0
  14. package/dist/components/atoms/header/Header.d.ts +4 -0
  15. package/dist/components/atoms/icon/Icon.d.ts +11 -0
  16. package/dist/components/atoms/image/BasicImage.d.ts +13 -0
  17. package/dist/components/atoms/image/FallBackImage.d.ts +2 -0
  18. package/dist/components/atoms/image/Image.css +1 -1
  19. package/dist/components/atoms/image/Image.d.ts +6 -0
  20. package/dist/components/atoms/image/ResponsivePicture.d.ts +15 -0
  21. package/dist/components/atoms/index.d.ts +11 -0
  22. package/dist/components/atoms/input/Input.d.ts +5 -0
  23. package/dist/components/atoms/label/Label.d.ts +16 -0
  24. package/dist/components/atoms/link/Link.d.ts +4 -0
  25. package/dist/components/atoms/portal/Portal.d.ts +5 -0
  26. package/dist/components/atoms/tooltip/Tooltip.controller.d.ts +19 -0
  27. package/dist/components/atoms/tooltip/Tooltip.d.ts +4 -0
  28. package/dist/components/contexts/form/FormContext.d.ts +7 -0
  29. package/dist/components/contexts/index.d.ts +4 -0
  30. package/dist/components/contexts/theme/ThemeContext.d.ts +8 -0
  31. package/dist/components/contexts/theme/ThemeProvider.d.ts +8 -0
  32. package/dist/components/hocs/index.d.ts +3 -0
  33. package/dist/components/hocs/with-error-boundary/with-error-boundary.d.ts +6 -0
  34. package/dist/components/hocs/with-figure-caption/Figure.css +1 -1
  35. package/dist/components/hocs/with-figure-caption/with-figure-caption.d.ts +6 -0
  36. package/dist/components/hocs/with-tooltip/with-tooltip.d.ts +7 -0
  37. package/dist/components/molecules/accordion/Accordion.d.ts +4 -0
  38. package/dist/components/molecules/accordion/AccordionItem.d.ts +3 -0
  39. package/dist/components/molecules/alert/Alert.d.ts +4 -0
  40. package/dist/components/molecules/alert/Alert.helpers.d.ts +3 -0
  41. package/dist/components/molecules/alert/AlertProgressBar.d.ts +4 -0
  42. package/dist/components/molecules/breadcrumbs/BreadcrumbItem.d.ts +7 -0
  43. package/dist/components/molecules/breadcrumbs/BreadcrumbList.d.ts +6 -0
  44. package/dist/components/molecules/breadcrumbs/Breadcrumbs.d.ts +4 -0
  45. package/dist/components/molecules/checkbox/Checkbox.controller.d.ts +9 -0
  46. package/dist/components/molecules/checkbox/Checkbox.d.ts +9 -0
  47. package/dist/components/molecules/checkbox/Checkbox.helpers.d.ts +6 -0
  48. package/dist/components/molecules/checkbox/CheckboxStateful.d.ts +4 -0
  49. package/dist/components/molecules/checkbox/CheckboxStateless.d.ts +4 -0
  50. package/dist/components/molecules/index.d.ts +10 -0
  51. package/dist/components/molecules/multi-select/MultiSelect.Combobox.d.ts +15 -0
  52. package/dist/components/molecules/multi-select/MultiSelect.Dropdown.d.ts +11 -0
  53. package/dist/components/molecules/multi-select/MultiSelect.controller.d.ts +13 -0
  54. package/dist/components/molecules/multi-select/MultiSelect.d.ts +4 -0
  55. package/dist/components/molecules/multi-select/MultiSelect.helpers.d.ts +9 -0
  56. package/dist/components/molecules/multi-select/MultiSelectComboboxSelectedValues.d.ts +8 -0
  57. package/dist/components/molecules/multi-select/Option.d.ts +8 -0
  58. package/dist/components/molecules/numeric-input/NumericInput.controller.d.ts +22 -0
  59. package/dist/components/molecules/numeric-input/NumericInput.d.ts +9 -0
  60. package/dist/components/molecules/numeric-input/NumericInput.helpers.d.ts +13 -0
  61. package/dist/components/molecules/numeric-input/NumericInputStateful.d.ts +4 -0
  62. package/dist/components/molecules/numeric-input/NumericInputStateless.d.ts +4 -0
  63. package/dist/components/molecules/search/Search.controller.d.ts +12 -0
  64. package/dist/components/molecules/search/Search.d.ts +4 -0
  65. package/dist/components/molecules/select/Select.controller.d.ts +14 -0
  66. package/dist/components/molecules/select/Select.d.ts +4 -0
  67. package/dist/components/molecules/select/Select.helpers.d.ts +7 -0
  68. package/dist/components/molecules/select/combobox/Combobox.d.ts +15 -0
  69. package/dist/components/molecules/select/dropdown/Dropdown.d.ts +14 -0
  70. package/dist/components/molecules/select/option/Option.d.ts +10 -0
  71. package/dist/components/molecules/switch/Switch.controller.d.ts +10 -0
  72. package/dist/components/molecules/switch/Switch.d.ts +4 -0
  73. package/dist/components/molecules/switch/Switch.helpers.d.ts +6 -0
  74. package/dist/components/molecules/text-input/TextInput.controller.d.ts +17 -0
  75. package/dist/components/molecules/text-input/TextInput.d.ts +9 -0
  76. package/dist/components/molecules/text-input/TextInput.helpers.d.ts +11 -0
  77. package/dist/components/molecules/text-input/TextInputButtons.d.ts +11 -0
  78. package/dist/components/molecules/text-input/TextInputStateful.d.ts +4 -0
  79. package/dist/components/molecules/text-input/TextInputStateless.d.ts +4 -0
  80. package/dist/components/organisms/dialog/Dialog.d.ts +4 -0
  81. package/dist/components/organisms/form/Form.controller.d.ts +14 -0
  82. package/dist/components/organisms/form/Form.d.ts +4 -0
  83. package/dist/components/organisms/form/Form.helpers.d.ts +4 -0
  84. package/dist/components/organisms/gallery/Gallery.css +1 -0
  85. package/dist/components/organisms/gallery/Gallery.d.ts +4 -0
  86. package/dist/components/organisms/gallery/Gallery.helpers.d.ts +3 -0
  87. package/dist/components/organisms/gallery/Gallery.helpers.js +29 -0
  88. package/dist/components/organisms/gallery/Gallery2.js +57 -0
  89. package/dist/components/organisms/gallery/carousel-navigation/CarouselNavigation.css +1 -0
  90. package/dist/components/organisms/gallery/carousel-navigation/CarouselNavigation.d.ts +9 -0
  91. package/dist/components/organisms/gallery/carousel-navigation/CarouselNavigation2.js +25 -0
  92. package/dist/components/organisms/gallery/full-screen-viewer/FullscreenViewer.css +1 -0
  93. package/dist/components/organisms/gallery/full-screen-viewer/FullscreenViewer.d.ts +11 -0
  94. package/dist/components/organisms/gallery/full-screen-viewer/FullscreenViewer2.js +48 -0
  95. package/dist/components/organisms/gallery/gallery-image-item/GalleryImageItem.css +1 -0
  96. package/dist/components/organisms/gallery/gallery-image-item/GalleryImageItem.d.ts +10 -0
  97. package/dist/components/organisms/gallery/gallery-image-item/GalleryImageItem2.js +17 -0
  98. package/dist/components/organisms/gallery/hooks/use-carousel-scroll.d.ts +10 -0
  99. package/dist/components/organisms/gallery/hooks/use-carousel-scroll.js +50 -0
  100. package/dist/components/organisms/gallery/hooks/use-fullscreen-viewer.d.ts +11 -0
  101. package/dist/components/organisms/gallery/hooks/use-fullscreen-viewer.js +23 -0
  102. package/dist/components/organisms/gallery/viewer-close-button/ViewerCloseButton.css +1 -0
  103. package/dist/components/organisms/gallery/viewer-close-button/ViewerCloseButton.d.ts +6 -0
  104. package/dist/components/organisms/gallery/viewer-close-button/ViewerCloseButton2.js +15 -0
  105. package/dist/components/organisms/gallery/viewer-counter/ViewerCounter.css +1 -0
  106. package/dist/components/organisms/gallery/viewer-counter/ViewerCounter.d.ts +7 -0
  107. package/dist/components/organisms/gallery/viewer-counter/ViewerCounter2.js +14 -0
  108. package/dist/components/organisms/gallery/viewer-image-container/ViewerImageContainer.css +1 -0
  109. package/dist/components/organisms/gallery/viewer-image-container/ViewerImageContainer.d.ts +8 -0
  110. package/dist/components/organisms/gallery/viewer-image-container/ViewerImageContainer2.js +14 -0
  111. package/dist/components/organisms/gallery/viewer-navigation/ViewerNavigation.css +1 -0
  112. package/dist/components/organisms/gallery/viewer-navigation/ViewerNavigation.d.ts +8 -0
  113. package/dist/components/organisms/gallery/viewer-navigation/ViewerNavigation2.js +29 -0
  114. package/dist/components/organisms/gallery/viewer-overlay/ViewerOverlay.css +1 -0
  115. package/dist/components/organisms/gallery/viewer-overlay/ViewerOverlay.d.ts +12 -0
  116. package/dist/components/organisms/gallery/viewer-overlay/ViewerOverlay2.js +33 -0
  117. package/dist/components/organisms/grid/Grid.controller.d.ts +15 -0
  118. package/dist/components/organisms/grid/Grid.d.ts +4 -0
  119. package/dist/components/organisms/grid/Grid.helpers.d.ts +6 -0
  120. package/dist/components/organisms/grid/body/GridBody.d.ts +13 -0
  121. package/dist/components/organisms/grid/checkbox/GridCheckbox.d.ts +6 -0
  122. package/dist/components/organisms/grid/column-group/GridColumnGroup.d.ts +6 -0
  123. package/dist/components/organisms/grid/data-cell/GridDataCell.d.ts +4 -0
  124. package/dist/components/organisms/grid/grid-row/GridRow.d.ts +13 -0
  125. package/dist/components/organisms/grid/head/GridHead.d.ts +13 -0
  126. package/dist/components/organisms/grid/header-cell/HeaderCell.d.ts +5 -0
  127. package/dist/components/organisms/grid/select-all-grid-rows-cell/SelectAllGridRowsCell.d.ts +10 -0
  128. package/dist/components/organisms/grid/select-grid-row-cell/SelectGridRowCell.d.ts +10 -0
  129. package/dist/components/organisms/index.d.ts +6 -0
  130. package/dist/components/organisms/menu/Menu.d.ts +4 -0
  131. package/dist/components/organisms/menu/leaf/MenuLeaf.d.ts +5 -0
  132. package/dist/components/organisms/menu/list-item/MenuListItem.d.ts +10 -0
  133. package/dist/components/organisms/menu/sub-menu/SubMenu.d.ts +14 -0
  134. package/dist/components/organisms/tabs/Tabs.d.ts +4 -0
  135. package/dist/components/organisms/tabs/button/TabButton.d.ts +18 -0
  136. package/dist/components/organisms/tabs/content/TabContent.d.ts +8 -0
  137. package/dist/components/organisms/tabs/edit-input/TabEditInput.d.ts +14 -0
  138. package/dist/components/organisms/tabs/list/TabList.d.ts +19 -0
  139. package/dist/enums/alert-mode.d.ts +7 -0
  140. package/dist/enums/button-view.d.ts +6 -0
  141. package/dist/enums/element-size.d.ts +8 -0
  142. package/dist/enums/icon-name.d.ts +284 -0
  143. package/dist/enums/index.d.ts +8 -0
  144. package/dist/enums/loader-view.d.ts +11 -0
  145. package/dist/enums/orientation-mode.d.ts +4 -0
  146. package/dist/enums/semantic-color.d.ts +7 -0
  147. package/dist/enums/tooltip-container.d.ts +7 -0
  148. package/dist/hooks/index.d.ts +15 -0
  149. package/dist/hooks/use-auto-close/use-auto-close.d.ts +6 -0
  150. package/dist/hooks/use-click-outside/use-click-outside.d.ts +8 -0
  151. package/dist/hooks/use-container-dimensions/use-container-dimensions.d.ts +8 -0
  152. package/dist/hooks/use-debounce/use-debounce.d.ts +1 -0
  153. package/dist/hooks/use-element-ids/use-element-ids.d.ts +5 -0
  154. package/dist/hooks/use-is-hovered/use-is-hovered.d.ts +2 -0
  155. package/dist/hooks/use-is-mounted/use-is-mounted.d.ts +1 -0
  156. package/dist/hooks/use-is-overflow/use-is-overflow.d.ts +6 -0
  157. package/dist/hooks/use-key-press/use-key-press.d.ts +8 -0
  158. package/dist/hooks/use-modal-focus-trap/use-modal-focus-trap.d.ts +7 -0
  159. package/dist/hooks/use-remaining-timer/use-remaining-timer.d.ts +9 -0
  160. package/dist/hooks/use-reset-form-input/use-reset-form-input.d.ts +1 -0
  161. package/dist/hooks/use-theme/use-theme.d.ts +4 -0
  162. package/dist/hooks/use-tooltip-position/use-tooltip-position.d.ts +12 -0
  163. package/dist/hooks/use-window-dimensions/use-window-dimensions.d.ts +2 -0
  164. package/dist/index.d.ts +2 -924
  165. package/dist/index.es.js +5 -4
  166. package/dist/main.d.ts +8 -0
  167. package/dist/styles/main.css +1 -1
  168. package/dist/types/_common.d.ts +35 -0
  169. package/dist/types/accordion.d.ts +8 -0
  170. package/dist/types/alert.d.ts +11 -0
  171. package/dist/types/breadcrumbs.d.ts +10 -0
  172. package/dist/types/button.d.ts +11 -0
  173. package/dist/types/checkbox.d.ts +9 -0
  174. package/dist/types/dialog.d.ts +9 -0
  175. package/dist/types/editable-text.d.ts +12 -0
  176. package/dist/types/form.d.ts +18 -0
  177. package/dist/types/gallery.d.ts +13 -0
  178. package/dist/types/grid.d.ts +27 -0
  179. package/dist/types/header.d.ts +9 -0
  180. package/dist/types/image.d.ts +21 -0
  181. package/dist/types/index.d.ts +24 -0
  182. package/dist/types/link.d.ts +9 -0
  183. package/dist/types/loader.d.ts +6 -0
  184. package/dist/types/menu.d.ts +17 -0
  185. package/dist/types/multi-select.d.ts +7 -0
  186. package/dist/types/numeric.d.ts +19 -0
  187. package/dist/types/search.d.ts +16 -0
  188. package/dist/types/select.d.ts +7 -0
  189. package/dist/types/switch.d.ts +13 -0
  190. package/dist/types/tabs.d.ts +23 -0
  191. package/dist/types/text.d.ts +17 -0
  192. package/dist/types/tooltip.d.ts +11 -0
  193. package/dist/utils/get-class-name.d.ts +5 -0
  194. package/dist/utils/handle-dropdown-list-key-press.d.ts +7 -0
  195. package/dist/utils/index.d.ts +3 -0
  196. package/dist/utils/move-focus-on-element-by-id.d.ts +1 -0
  197. package/package.json +21 -17
@@ -0,0 +1,14 @@
1
+ import { SelectValue } from '../../../types';
2
+ export declare function useSelectController({ name, defaultValue, onChange, options, }: {
3
+ name: string;
4
+ defaultValue?: string | number | readonly string[];
5
+ onChange?: (value?: SelectValue) => void;
6
+ options: SelectValue[];
7
+ }): {
8
+ selected: SelectValue | undefined;
9
+ opened: boolean;
10
+ handleClear: () => void;
11
+ handleClose: () => void;
12
+ handleToggle: () => void;
13
+ handleSelect: (id: string) => void;
14
+ };
@@ -0,0 +1,4 @@
1
+ import { SelectProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const Select: FC<SelectProps>;
4
+ export default Select;
@@ -0,0 +1,7 @@
1
+ import { FormValues, SelectValue } from '../../../types';
2
+ export declare function getSelectInitialValue({ name, options, initialValues, defaultValue, }: {
3
+ name: string;
4
+ options: SelectValue[];
5
+ initialValues?: FormValues;
6
+ defaultValue?: string | number | readonly string[];
7
+ }): SelectValue | undefined;
@@ -0,0 +1,15 @@
1
+ import { SelectValue } from '../../../../types';
2
+ import { FC } from 'react';
3
+ type Props = {
4
+ opened: boolean;
5
+ disabled: boolean;
6
+ required: boolean;
7
+ onClick: () => void;
8
+ comboboxId: string;
9
+ dropdownId: string;
10
+ selected?: SelectValue;
11
+ placeholder?: string;
12
+ name: string;
13
+ };
14
+ export declare const SelectCombobox: FC<Props>;
15
+ export {};
@@ -0,0 +1,14 @@
1
+ import { SelectValue } from '../../../../types';
2
+ import { FC } from 'react';
3
+ type Props = {
4
+ options: SelectValue[];
5
+ opened: boolean;
6
+ dropdownId: string;
7
+ comboboxId: string;
8
+ onClose: () => void;
9
+ selected?: SelectValue;
10
+ onSelect: (id: string) => void;
11
+ onClear: () => void;
12
+ };
13
+ export declare const SelectDropdown: FC<Props>;
14
+ export {};
@@ -0,0 +1,10 @@
1
+ import { SelectValue } from '../../../../types';
2
+ import { FC } from 'react';
3
+ type Props = {
4
+ value: SelectValue;
5
+ selected: boolean;
6
+ onSelect: (id: string) => void;
7
+ onClear: () => void;
8
+ };
9
+ export declare const SelectOption: FC<Props>;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import { KeyboardEvent } from 'react';
2
+ export declare function useSwitchController({ name, defaultChecked, onChange, }: {
3
+ name: string;
4
+ defaultChecked?: boolean;
5
+ onChange?: (checked: boolean) => void;
6
+ }): {
7
+ checked: boolean;
8
+ handleChange: (checked: boolean) => void;
9
+ handleKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;
10
+ };
@@ -0,0 +1,4 @@
1
+ import { SwitchProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const Switch: FC<SwitchProps>;
4
+ export default Switch;
@@ -0,0 +1,6 @@
1
+ import { FormValues } from '../../../types';
2
+ export declare function getSwitchInitialValue({ defaultChecked, initialValues, name, }: {
3
+ defaultChecked?: boolean;
4
+ initialValues?: FormValues;
5
+ name: string;
6
+ }): boolean;
@@ -0,0 +1,17 @@
1
+ import { ChopLogicRegExpWithFlags, TextInputValidator } from '../../../types';
2
+ import { ChangeEvent, ChangeEventHandler } from 'react';
3
+ export declare function useTextInputController({ name, defaultValue, onChange, onClear, required, validator, }: {
4
+ name: string;
5
+ required: boolean;
6
+ validator?: ChopLogicRegExpWithFlags | TextInputValidator;
7
+ defaultValue?: string | number | readonly string[];
8
+ onChange?: ChangeEventHandler<HTMLInputElement>;
9
+ onClear?: () => void;
10
+ }): {
11
+ value: string;
12
+ valid: boolean;
13
+ passwordShown: boolean;
14
+ handleChange: (event: ChangeEvent<HTMLInputElement>) => void;
15
+ handleClear: () => void;
16
+ togglePassword: () => void;
17
+ };
@@ -0,0 +1,9 @@
1
+ import { TextInputProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ /**
4
+ * TextInput component factory
5
+ * Renders either a stateful or stateless component
6
+ * based on the `stateless` prop.
7
+ */
8
+ declare const TextInput: FC<TextInputProps>;
9
+ export default TextInput;
@@ -0,0 +1,11 @@
1
+ import { ChopLogicRegExpWithFlags, FormValues, TextInputValidator } from '../../../types';
2
+ export declare function validateTextInputValue({ value, required, validator, }: {
3
+ value: string;
4
+ required: boolean;
5
+ validator?: ChopLogicRegExpWithFlags | TextInputValidator;
6
+ }): boolean;
7
+ export declare function getTextInputInitialValue({ name, initialValues, defaultValue, }: {
8
+ name: string;
9
+ initialValues?: FormValues;
10
+ defaultValue?: string | number | readonly string[];
11
+ }): string;
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+ declare const TextInputButtons: FC<{
3
+ clearable: boolean;
4
+ isPasswordButtonVisible: boolean;
5
+ handleClear: () => void;
6
+ togglePassword: () => void;
7
+ passwordShown: boolean;
8
+ label: string;
9
+ disabled: boolean;
10
+ }>;
11
+ export default TextInputButtons;
@@ -0,0 +1,4 @@
1
+ import { TextInputProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const TextInputStateful: FC<TextInputProps>;
4
+ export default TextInputStateful;
@@ -0,0 +1,4 @@
1
+ import { TextInputProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const TextInputStateless: FC<TextInputProps>;
4
+ export default TextInputStateless;
@@ -0,0 +1,4 @@
1
+ import { DialogProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const Dialog: FC<DialogProps>;
4
+ export default Dialog;
@@ -0,0 +1,14 @@
1
+ import { FormInputParams, FormValues } from '../../../types';
2
+ import { FormEvent, FormEventHandler } from 'react';
3
+ export declare function useFormController({ initialValues, onReset, onSubmit, onClickSubmit, }: {
4
+ initialValues?: FormValues;
5
+ onReset?: FormEventHandler<HTMLFormElement>;
6
+ onSubmit?: FormEventHandler<HTMLFormElement>;
7
+ onClickSubmit?: (data: FormValues) => void;
8
+ }): {
9
+ handleInputChange: (params: FormInputParams) => void;
10
+ handleSubmit: (event: FormEvent<HTMLFormElement>) => void;
11
+ handleReset: (event: FormEvent<HTMLFormElement>) => void;
12
+ resetSignal: number;
13
+ valid: boolean;
14
+ };
@@ -0,0 +1,4 @@
1
+ import { FormProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const Form: FC<FormProps>;
4
+ export default Form;
@@ -0,0 +1,4 @@
1
+ import { FormInputParams, FormValidationState, FormValues } from '../../../types';
2
+ export declare function getInitialValidationState(data?: FormValues): FormValidationState;
3
+ export declare function updateValidationState(state: FormValidationState, params: FormInputParams): FormValidationState;
4
+ export declare function isFormDataValid(state: FormValidationState): boolean;
@@ -0,0 +1 @@
1
+ .cl-gallery{position:relative}.cl-gallery__container{width:100%}.cl-gallery__container_grid{grid-template-columns:repeat(min(var(--gallery-columns), 2), 1fr);gap:var(--gallery-gap,var(--cl-m-gap));grid-auto-rows:1fr;display:grid}.cl-gallery__container_grid[style*=--gallery-rows]{grid-template-rows:repeat(var(--gallery-rows), 1fr);max-height:calc((100% / var(--gallery-columns)) * var(--gallery-rows) + var(--gallery-gap,var(--cl-m-gap)) * (var(--gallery-rows) - 1));overflow:hidden}.cl-gallery__container_grid .cl-gallery__item{width:100%;height:100%}.cl-gallery__container_grid .cl-gallery__item img{object-fit:cover;width:100%;height:100%}.cl-gallery__container_masonry{column-count:1;column-gap:var(--gallery-gap,var(--cl-m-gap))}.cl-gallery__container_masonry .cl-gallery__item{break-inside:avoid;margin-bottom:var(--gallery-gap,var(--cl-m-gap))}.cl-gallery__container_carousel{scroll-behavior:smooth;gap:var(--gallery-gap,var(--cl-m-gap));scrollbar-width:none;flex-wrap:nowrap;display:flex;overflow-x:scroll}.cl-gallery__container_carousel::-webkit-scrollbar{display:none}.cl-gallery__container_carousel .cl-gallery__item{flex-shrink:0}@media (width>=640px){.cl-gallery__container_grid{grid-template-columns:repeat(var(--gallery-columns), 1fr)}.cl-gallery__container_masonry{column-count:2}}@media (width>=1024px){.cl-gallery__container_masonry{column-count:var(--gallery-columns,3)}}
@@ -0,0 +1,4 @@
1
+ import { GalleryProps } from '../../../types';
2
+ import { FC } from 'react';
3
+ declare const Gallery: FC<GalleryProps>;
4
+ export default Gallery;
@@ -0,0 +1,3 @@
1
+ import { GalleryItem, ImageProps, ImageSource } from '../../../types';
2
+ export declare const getLargestImageSource: (sources: ImageSource[]) => ImageSource | undefined;
3
+ export declare const getFullscreenImageProps: (image: GalleryItem) => Omit<ImageProps, "caption">;
@@ -0,0 +1,29 @@
1
+ //#region src/components/organisms/gallery/Gallery.helpers.ts
2
+ var e = (e) => {
3
+ if (e.length === 0) return;
4
+ let t, n = 0;
5
+ for (let r of e) {
6
+ let e = r.descriptor?.trim();
7
+ if (e && e.endsWith("w")) {
8
+ let i = e.slice(0, -1), a = Number.parseInt(i, 10);
9
+ !Number.isNaN(a) && a > n && (n = a, t = r);
10
+ }
11
+ }
12
+ return t ?? e.at(-1);
13
+ }, t = (t) => {
14
+ let { caption: n, sources: r, ...i } = t;
15
+ if (r && r.length > 0) {
16
+ let t = e(r);
17
+ if (t) return {
18
+ ...i,
19
+ src: t.src,
20
+ sources: void 0
21
+ };
22
+ }
23
+ return {
24
+ ...i,
25
+ sources: r
26
+ };
27
+ };
28
+ //#endregion
29
+ export { t as getFullscreenImageProps };
@@ -0,0 +1,57 @@
1
+ import { getClassName as e } from "../../../utils/get-class-name.js";
2
+ import t from "./carousel-navigation/CarouselNavigation2.js";
3
+ import n from "./full-screen-viewer/FullscreenViewer2.js";
4
+ import './Gallery.css';/* empty css */
5
+ import r from "./gallery-image-item/GalleryImageItem2.js";
6
+ import { useCarouselScroll as i } from "./hooks/use-carousel-scroll.js";
7
+ import { useFullscreenViewer as a } from "./hooks/use-fullscreen-viewer.js";
8
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
9
+ import { useRef as c } from "react";
10
+ //#region src/components/organisms/gallery/Gallery.tsx
11
+ var l = ({ images: l = [], layout: u = "grid", columns: d = 3, rows: f, gap: p, label: m, className: h, title: g, enableFullscreen: _ = !1, ...v }) => {
12
+ let y = c(null), { isViewerOpen: b, currentImageIndex: x, openViewer: S, closeViewer: C, handleNavigate: w } = a(), { showPrev: T, showNext: E, scrollForward: D, scrollBackward: O } = i(y, u), k = e(["cl-gallery", h]), A = e([
13
+ "cl-gallery__container",
14
+ { "cl-gallery__container_grid": u === "grid" },
15
+ { "cl-gallery__container_masonry": u === "masonry" },
16
+ { "cl-gallery__container_carousel": u === "carousel" }
17
+ ]), j = {
18
+ "--gallery-columns": d,
19
+ "--gallery-rows": f,
20
+ "--gallery-gap": p
21
+ };
22
+ return /* @__PURE__ */ s("section", {
23
+ className: k,
24
+ "aria-label": m ?? g ?? "Image gallery",
25
+ title: g,
26
+ ...v,
27
+ children: [
28
+ /* @__PURE__ */ o("div", {
29
+ ref: y,
30
+ className: A,
31
+ style: j,
32
+ tabIndex: u === "carousel" ? 0 : void 0,
33
+ children: l.map((e, t) => /* @__PURE__ */ o(r, {
34
+ item: e,
35
+ index: t,
36
+ enableFullscreen: _,
37
+ onOpenViewer: S
38
+ }, e.src))
39
+ }),
40
+ u === "carousel" && /* @__PURE__ */ o(t, {
41
+ showPrev: T,
42
+ showNext: E,
43
+ onScrollBackward: O,
44
+ onScrollForward: D
45
+ }),
46
+ _ && /* @__PURE__ */ o(n, {
47
+ images: l,
48
+ currentIndex: x,
49
+ isOpen: b,
50
+ onClose: C,
51
+ onNavigate: w
52
+ })
53
+ ]
54
+ });
55
+ };
56
+ //#endregion
57
+ export { l as default };
@@ -0,0 +1 @@
1
+ .cl-gallery__button{height:100%;position:absolute;top:0}.cl-gallery__button_prev{left:var(--cl-l-gap)}.cl-gallery__button_next{right:var(--cl-l-gap)}.cl-gallery__button_prev .cl-icon-button__icon:before,.cl-gallery__button_next .cl-icon-button__icon:before{color:#fff!important}
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ interface CarouselNavigationProps {
3
+ showPrev: boolean;
4
+ showNext: boolean;
5
+ onScrollBackward: () => void;
6
+ onScrollForward: () => void;
7
+ }
8
+ declare const CarouselNavigation: FC<CarouselNavigationProps>;
9
+ export default CarouselNavigation;
@@ -0,0 +1,25 @@
1
+ import { ButtonView as e } from "../../../../enums/button-view.js";
2
+ import { IconName as t } from "../../../../enums/icon-name.js";
3
+ import n from "../../../atoms/button/Button2.js";
4
+ import './CarouselNavigation.css';/* empty css */
5
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
6
+ //#region src/components/organisms/gallery/carousel-navigation/CarouselNavigation.tsx
7
+ var o = ({ showPrev: o, showNext: s, onScrollBackward: c, onScrollForward: l }) => /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(n, {
8
+ view: e.Icon,
9
+ icon: t.ChevronLeft,
10
+ label: "Previous images",
11
+ className: "cl-gallery__button cl-gallery__button_prev",
12
+ onClick: c,
13
+ style: { visibility: o ? "visible" : "hidden" },
14
+ "aria-hidden": !o
15
+ }), /* @__PURE__ */ i(n, {
16
+ view: e.Icon,
17
+ icon: t.ChevronRight,
18
+ label: "Next images",
19
+ className: "cl-gallery__button cl-gallery__button_next",
20
+ onClick: l,
21
+ style: { visibility: s ? "visible" : "hidden" },
22
+ "aria-hidden": !s
23
+ })] });
24
+ //#endregion
25
+ export { o as default };
@@ -0,0 +1 @@
1
+ .cl-fullscreen-viewer{width:100%;height:100%;z-index:var(--cl-z-index-modal);background-color:var(--cl-shadow-background-deep);justify-content:center;align-items:center;animation:.4s cl-fade-in;display:flex;position:fixed;top:0;left:0}.cl-fullscreen-viewer_closing{animation:.4s cl-fade-out}
@@ -0,0 +1,11 @@
1
+ import { GalleryItem } from '../../../../types';
2
+ import { FC } from 'react';
3
+ interface FullscreenViewerProps {
4
+ images: GalleryItem[];
5
+ currentIndex: number;
6
+ isOpen: boolean;
7
+ onClose: () => void;
8
+ onNavigate: (index: number) => void;
9
+ }
10
+ declare const FullscreenViewer: FC<FullscreenViewerProps>;
11
+ export default FullscreenViewer;
@@ -0,0 +1,48 @@
1
+ import { getClassName as e } from "../../../../utils/get-class-name.js";
2
+ import t from "../../../atoms/portal/Portal.js";
3
+ import { useIsMounted as n } from "../../../../hooks/use-is-mounted/use-is-mounted.js";
4
+ import { useKeyPress as r } from "../../../../hooks/use-key-press/use-key-press.js";
5
+ import { useModalFocusTrap as i } from "../../../../hooks/use-modal-focus-trap/use-modal-focus-trap.js";
6
+ import './FullscreenViewer.css';/* empty css */
7
+ import { getFullscreenImageProps as a } from "../Gallery.helpers.js";
8
+ import o from "../viewer-close-button/ViewerCloseButton2.js";
9
+ import s from "../viewer-overlay/ViewerOverlay2.js";
10
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
11
+ import { useEffect as u, useMemo as d, useRef as f } from "react";
12
+ //#region src/components/organisms/gallery/full-screen-viewer/FullscreenViewer.tsx
13
+ var p = ({ images: p, currentIndex: m, isOpen: h, onClose: g, onNavigate: _ }) => {
14
+ let v = f(null), y = n(h, 300), b = y && !h;
15
+ i({
16
+ modalRef: v,
17
+ isOpened: h
18
+ }), r({
19
+ keyCode: "Escape",
20
+ ref: v,
21
+ onKeyPress: g
22
+ }), u(() => {
23
+ let e = (e) => {
24
+ e.code === "ArrowLeft" && m > 0 ? _(m - 1) : e.code === "ArrowRight" && m < p.length - 1 && _(m + 1);
25
+ };
26
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
27
+ }, [
28
+ m,
29
+ p.length,
30
+ _
31
+ ]);
32
+ let x = p[m], S = d(() => x ? a(x) : null, [x]);
33
+ return !y || !x || !S ? null : /* @__PURE__ */ c(t, { children: /* @__PURE__ */ l("div", {
34
+ ref: v,
35
+ className: e(["cl-fullscreen-viewer", { "cl-fullscreen-viewer_closing": b }]),
36
+ "data-testid": "fullscreen-image-viewer",
37
+ children: [/* @__PURE__ */ c(o, { onClose: g }), /* @__PURE__ */ c(s, {
38
+ fullscreenImageProps: S,
39
+ caption: x.caption,
40
+ currentIndex: m,
41
+ totalImages: p.length,
42
+ onClose: g,
43
+ onNavigate: _
44
+ })]
45
+ }) });
46
+ };
47
+ //#endregion
48
+ export { p as default };
@@ -0,0 +1 @@
1
+ .cl-gallery__item{overflow:hidden}.cl-gallery__item_fullscreen{cursor:pointer}
@@ -0,0 +1,10 @@
1
+ import { GalleryItem } from '../../../../types';
2
+ import { FC } from 'react';
3
+ interface GalleryImageItemProps {
4
+ item: GalleryItem;
5
+ index: number;
6
+ enableFullscreen: boolean;
7
+ onOpenViewer?: (index: number, element: HTMLElement) => void;
8
+ }
9
+ declare const GalleryImageItem: FC<GalleryImageItemProps>;
10
+ export default GalleryImageItem;
@@ -0,0 +1,17 @@
1
+ import { getClassName as e } from "../../../../utils/get-class-name.js";
2
+ import t from "../../../atoms/image/Image2.js";
3
+ import './GalleryImageItem.css';/* empty css */
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ //#region src/components/organisms/gallery/gallery-image-item/GalleryImageItem.tsx
6
+ var r = ({ item: r, index: i, enableFullscreen: a, onOpenViewer: o }) => /* @__PURE__ */ n("div", {
7
+ className: e(["cl-gallery__item", { "cl-gallery__item_fullscreen": a }]),
8
+ onClick: (e) => {
9
+ a && o && o(i, e.currentTarget);
10
+ },
11
+ onKeyDown: (e) => {
12
+ a && o && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), o(i, e.currentTarget));
13
+ },
14
+ children: /* @__PURE__ */ n(t, { ...r })
15
+ });
16
+ //#endregion
17
+ export { r as default };
@@ -0,0 +1,10 @@
1
+ import { GalleryMode } from '../../../../types';
2
+ import { RefObject } from 'react';
3
+ interface CarouselScrollState {
4
+ showPrev: boolean;
5
+ showNext: boolean;
6
+ scrollForward: () => void;
7
+ scrollBackward: () => void;
8
+ }
9
+ export declare const useCarouselScroll: (containerRef: RefObject<HTMLDivElement | null>, layout: GalleryMode) => CarouselScrollState;
10
+ export {};
@@ -0,0 +1,50 @@
1
+ import { useCallback as e, useEffect as t, useState as n } from "react";
2
+ //#region src/components/organisms/gallery/hooks/use-carousel-scroll.ts
3
+ var r = (r, i) => {
4
+ let [a, o] = n(!1), [s, c] = n(!1), l = e(() => {
5
+ let e = r.current;
6
+ if (!e) return;
7
+ let { scrollLeft: t, scrollWidth: n, clientWidth: i } = e;
8
+ if (n <= i) {
9
+ o(!1), c(!1);
10
+ return;
11
+ }
12
+ o(t > 1), c(t < n - i - 1);
13
+ }, [r]);
14
+ return t(() => {
15
+ if (i !== "carousel") {
16
+ o(!1), c(!1);
17
+ return;
18
+ }
19
+ let e = r.current;
20
+ if (!e) return;
21
+ l();
22
+ let t = new ResizeObserver(l);
23
+ return t.observe(e), e.addEventListener("scroll", l), () => {
24
+ e.removeEventListener("scroll", l), t.disconnect();
25
+ };
26
+ }, [
27
+ i,
28
+ r,
29
+ l
30
+ ]), {
31
+ showPrev: a,
32
+ showNext: s,
33
+ scrollForward: e(() => {
34
+ let e = r.current;
35
+ e && e.scrollBy({
36
+ left: e.clientWidth,
37
+ behavior: "smooth"
38
+ });
39
+ }, [r]),
40
+ scrollBackward: e(() => {
41
+ let e = r.current;
42
+ e && e.scrollBy({
43
+ left: -e.clientWidth,
44
+ behavior: "smooth"
45
+ });
46
+ }, [r])
47
+ };
48
+ };
49
+ //#endregion
50
+ export { r as useCarouselScroll };
@@ -0,0 +1,11 @@
1
+ import { RefObject } from 'react';
2
+ interface FullscreenViewerState {
3
+ isViewerOpen: boolean;
4
+ currentImageIndex: number;
5
+ triggerRef: RefObject<HTMLElement | null>;
6
+ openViewer: (index: number, element: HTMLElement) => void;
7
+ closeViewer: () => void;
8
+ handleNavigate: (index: number) => void;
9
+ }
10
+ export declare const useFullscreenViewer: () => FullscreenViewerState;
11
+ export {};
@@ -0,0 +1,23 @@
1
+ import { useCallback as e, useRef as t, useState as n } from "react";
2
+ //#region src/components/organisms/gallery/hooks/use-fullscreen-viewer.ts
3
+ var r = () => {
4
+ let [r, i] = n(!1), [a, o] = n(0), s = t(null);
5
+ return {
6
+ isViewerOpen: r,
7
+ currentImageIndex: a,
8
+ triggerRef: s,
9
+ openViewer: e((e, t) => {
10
+ s.current = t, o(e), i(!0);
11
+ }, []),
12
+ closeViewer: e(() => {
13
+ i(!1), setTimeout(() => {
14
+ s.current?.focus(), s.current = null;
15
+ }, 300);
16
+ }, []),
17
+ handleNavigate: e((e) => {
18
+ o(e);
19
+ }, [])
20
+ };
21
+ };
22
+ //#endregion
23
+ export { r as useFullscreenViewer };
@@ -0,0 +1 @@
1
+ .cl-fullscreen-viewer__close-button{top:var(--cl-m-gap);right:var(--cl-m-gap);z-index:var(--cl-z-index-menu);position:absolute}.cl-fullscreen-viewer__close-button .cl-icon-button__icon:before{color:#fff!important}@media (width>=640px){.cl-fullscreen-viewer__close-button{top:var(--cl-l-gap);right:var(--cl-l-gap)}}
@@ -0,0 +1,6 @@
1
+ import { FC } from 'react';
2
+ export interface ViewerCloseButtonProps {
3
+ onClose: () => void;
4
+ }
5
+ declare const ViewerCloseButton: FC<ViewerCloseButtonProps>;
6
+ export default ViewerCloseButton;
@@ -0,0 +1,15 @@
1
+ import { ButtonView as e } from "../../../../enums/button-view.js";
2
+ import { IconName as t } from "../../../../enums/icon-name.js";
3
+ import n from "../../../atoms/button/Button2.js";
4
+ import './ViewerCloseButton.css';/* empty css */
5
+ import { jsx as r } from "react/jsx-runtime";
6
+ //#region src/components/organisms/gallery/viewer-close-button/ViewerCloseButton.tsx
7
+ var i = ({ onClose: i }) => /* @__PURE__ */ r(n, {
8
+ view: e.Icon,
9
+ icon: t.X,
10
+ label: "Close fullscreen view",
11
+ onClick: i,
12
+ className: "cl-fullscreen-viewer__close-button"
13
+ });
14
+ //#endregion
15
+ export { i as default };
@@ -0,0 +1 @@
1
+ .cl-fullscreen-viewer__counter{bottom:var(--cl-l-gap);font-family:var(--cl-core-font);font-size:var(--cl-typography-base-mobile);position:absolute;left:50%;color:#fff!important}@media (width>=640px){.cl-fullscreen-viewer__counter{font-size:var(--cl-typography-base-tablet)}}@media (width>=1024px){.cl-fullscreen-viewer__counter{font-size:var(--cl-typography-base-desktop)}}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface ViewerCounterProps {
3
+ currentIndex: number;
4
+ totalImages: number;
5
+ }
6
+ declare const ViewerCounter: FC<ViewerCounterProps>;
7
+ export default ViewerCounter;
@@ -0,0 +1,14 @@
1
+ import './ViewerCounter.css';/* empty css */
2
+ import { jsxs as e } from "react/jsx-runtime";
3
+ //#region src/components/organisms/gallery/viewer-counter/ViewerCounter.tsx
4
+ var t = ({ currentIndex: t, totalImages: n }) => n <= 1 ? null : /* @__PURE__ */ e("span", {
5
+ className: "cl-fullscreen-viewer__counter",
6
+ "aria-live": "polite",
7
+ children: [
8
+ t + 1,
9
+ " / ",
10
+ n
11
+ ]
12
+ });
13
+ //#endregion
14
+ export { t as default };
@@ -0,0 +1 @@
1
+ .cl-fullscreen-viewer__image-container{flex-direction:column;align-items:center;max-width:90vw;max-height:90vh;display:flex}.cl-fullscreen-viewer__image-container .cl-image{min-height:0;display:flex}.cl-fullscreen-viewer__image-container .cl-figure{flex-direction:column;min-height:0;display:flex}.cl-fullscreen-viewer__image-container figcaption{color:#fff!important}@media (width>=640px){.cl-fullscreen-viewer__caption{font-size:var(--cl-typography-base-tablet)}}@media (width>=1024px){.cl-fullscreen-viewer__caption{font-size:var(--cl-typography-base-desktop)}}
@@ -0,0 +1,8 @@
1
+ import { GalleryItem, ImageProps } from '../../../../types';
2
+ import { FC } from 'react';
3
+ interface ViewerImageContainerProps {
4
+ fullscreenImageProps: Omit<ImageProps, 'caption'>;
5
+ caption?: GalleryItem['caption'];
6
+ }
7
+ declare const ViewerImageContainer: FC<ViewerImageContainerProps>;
8
+ export default ViewerImageContainer;
@@ -0,0 +1,14 @@
1
+ import e from "../../../atoms/image/Image2.js";
2
+ import './ViewerImageContainer.css';/* empty css */
3
+ import { jsx as t } from "react/jsx-runtime";
4
+ //#region src/components/organisms/gallery/viewer-image-container/ViewerImageContainer.tsx
5
+ var n = ({ fullscreenImageProps: n, caption: r }) => /* @__PURE__ */ t("div", {
6
+ className: "cl-fullscreen-viewer__image-container",
7
+ children: /* @__PURE__ */ t(e, {
8
+ ...n,
9
+ caption: r,
10
+ loading: "eager"
11
+ })
12
+ });
13
+ //#endregion
14
+ export { n as default };
@@ -0,0 +1 @@
1
+ .cl-fullscreen-viewer__nav-button{height:90%;z-index:var(--cl-z-index-base);position:absolute;top:5%}.cl-fullscreen-viewer__nav-button .cl-icon-button__icon:before{color:#fff!important}.cl-fullscreen-viewer__nav-button_prev{left:var(--cl-l-gap)}.cl-fullscreen-viewer__nav-button_next{right:var(--cl-l-gap)}