@dreamcommerce/aurora 2.9.0-8 → 2.9.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 (86) hide show
  1. package/build/cjs/packages/aurora/src/components/controls/hoc/control_xhr_image_picker/index.js +3 -2
  2. package/build/cjs/packages/aurora/src/components/controls/hoc/control_xhr_image_picker/index.js.map +1 -1
  3. package/build/cjs/packages/aurora/src/components/file_picker/use_file_picker.js +20 -4
  4. package/build/cjs/packages/aurora/src/components/file_picker/use_file_picker.js.map +1 -1
  5. package/build/cjs/packages/aurora/src/components/scroll_sync/components/scroll_sync_container.js +20 -0
  6. package/build/cjs/packages/aurora/src/components/scroll_sync/components/scroll_sync_container.js.map +1 -0
  7. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_sync_context.js +16 -0
  8. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_sync_context.js.map +1 -0
  9. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_sync_provider.js +31 -0
  10. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_sync_provider.js.map +1 -0
  11. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_syncer_service.js +77 -0
  12. package/build/cjs/packages/aurora/src/components/scroll_sync/context/scroll_syncer_service.js.map +1 -0
  13. package/build/cjs/packages/aurora/src/components/scroll_sync/context/setup_scroll_syncer.js +12 -0
  14. package/build/cjs/packages/aurora/src/components/scroll_sync/context/setup_scroll_syncer.js.map +1 -0
  15. package/build/cjs/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_container_hook.js +20 -0
  16. package/build/cjs/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_container_hook.js.map +1 -0
  17. package/build/cjs/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_hook.js +21 -0
  18. package/build/cjs/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_hook.js.map +1 -0
  19. package/build/cjs/packages/aurora/src/components/scroll_sync/index.js +18 -0
  20. package/build/cjs/packages/aurora/src/components/scroll_sync/index.js.map +1 -0
  21. package/build/cjs/packages/aurora/src/components/stack/index.js +13 -2
  22. package/build/cjs/packages/aurora/src/components/stack/index.js.map +1 -1
  23. package/build/cjs/packages/aurora/src/components/tree/components/tree_node.js +9 -8
  24. package/build/cjs/packages/aurora/src/components/tree/components/tree_node.js.map +1 -1
  25. package/build/cjs/packages/aurora/src/components/tree/css_classes.js +5 -4
  26. package/build/cjs/packages/aurora/src/components/tree/css_classes.js.map +1 -1
  27. package/build/cjs/packages/aurora/src/components/tree/index.js +4 -3
  28. package/build/cjs/packages/aurora/src/components/tree/index.js.map +1 -1
  29. package/build/cjs/packages/aurora/src/components/typography/index.js +1 -1
  30. package/build/cjs/packages/aurora/src/components/xhr_image_picker/index.js +3 -2
  31. package/build/cjs/packages/aurora/src/components/xhr_image_picker/index.js.map +1 -1
  32. package/build/cjs/packages/aurora/src/css/tree/main.module.less.js +2 -2
  33. package/build/cjs/packages/aurora/src/index.js +4 -0
  34. package/build/cjs/packages/aurora/src/index.js.map +1 -1
  35. package/build/esm/packages/aurora/src/components/controls/hoc/control_xhr_image_picker/index.js +3 -2
  36. package/build/esm/packages/aurora/src/components/controls/hoc/control_xhr_image_picker/index.js.map +1 -1
  37. package/build/esm/packages/aurora/src/components/controls/types.d.ts +4 -4
  38. package/build/esm/packages/aurora/src/components/controls/types.js +3 -3
  39. package/build/esm/packages/aurora/src/components/controls/types.js.map +1 -1
  40. package/build/esm/packages/aurora/src/components/file_picker/types.d.ts +6 -2
  41. package/build/esm/packages/aurora/src/components/file_picker/use_file_picker.js +21 -5
  42. package/build/esm/packages/aurora/src/components/file_picker/use_file_picker.js.map +1 -1
  43. package/build/esm/packages/aurora/src/components/scroll_sync/components/scroll_sync_container.d.ts +7 -0
  44. package/build/esm/packages/aurora/src/components/scroll_sync/components/scroll_sync_container.js +12 -0
  45. package/build/esm/packages/aurora/src/components/scroll_sync/components/scroll_sync_container.js.map +1 -0
  46. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_context.d.ts +12 -0
  47. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_context.js +11 -0
  48. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_context.js.map +1 -0
  49. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_provider.d.ts +2 -0
  50. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_provider.js +23 -0
  51. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_sync_provider.js.map +1 -0
  52. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_syncer_service.d.ts +18 -0
  53. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_syncer_service.js +73 -0
  54. package/build/esm/packages/aurora/src/components/scroll_sync/context/scroll_syncer_service.js.map +1 -0
  55. package/build/esm/packages/aurora/src/components/scroll_sync/context/setup_scroll_syncer.d.ts +4 -0
  56. package/build/esm/packages/aurora/src/components/scroll_sync/context/setup_scroll_syncer.js +8 -0
  57. package/build/esm/packages/aurora/src/components/scroll_sync/context/setup_scroll_syncer.js.map +1 -0
  58. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_container_hook.d.ts +2 -0
  59. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_container_hook.js +16 -0
  60. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_container_hook.js.map +1 -0
  61. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_hook.d.ts +1 -0
  62. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_hook.js +13 -0
  63. package/build/esm/packages/aurora/src/components/scroll_sync/hooks/scroll_sync_hook.js.map +1 -0
  64. package/build/esm/packages/aurora/src/components/scroll_sync/index.d.ts +3 -0
  65. package/build/esm/packages/aurora/src/components/scroll_sync/index.js +10 -0
  66. package/build/esm/packages/aurora/src/components/scroll_sync/index.js.map +1 -0
  67. package/build/esm/packages/aurora/src/components/stack/index.js +14 -3
  68. package/build/esm/packages/aurora/src/components/stack/index.js.map +1 -1
  69. package/build/esm/packages/aurora/src/components/stack/stack_types.d.ts +2 -0
  70. package/build/esm/packages/aurora/src/components/tree/components/tree_node.d.ts +1 -0
  71. package/build/esm/packages/aurora/src/components/tree/components/tree_node.js +9 -8
  72. package/build/esm/packages/aurora/src/components/tree/components/tree_node.js.map +1 -1
  73. package/build/esm/packages/aurora/src/components/tree/css_classes.d.ts +5 -4
  74. package/build/esm/packages/aurora/src/components/tree/css_classes.js +5 -4
  75. package/build/esm/packages/aurora/src/components/tree/css_classes.js.map +1 -1
  76. package/build/esm/packages/aurora/src/components/tree/index.d.ts +7 -2
  77. package/build/esm/packages/aurora/src/components/tree/index.js +4 -3
  78. package/build/esm/packages/aurora/src/components/tree/index.js.map +1 -1
  79. package/build/esm/packages/aurora/src/components/typography/index.js +1 -1
  80. package/build/esm/packages/aurora/src/components/xhr_image_picker/index.js +3 -2
  81. package/build/esm/packages/aurora/src/components/xhr_image_picker/index.js.map +1 -1
  82. package/build/esm/packages/aurora/src/css/tree/main.module.less.js +2 -2
  83. package/build/esm/packages/aurora/src/index.d.ts +3 -1
  84. package/build/esm/packages/aurora/src/index.js +2 -0
  85. package/build/esm/packages/aurora/src/index.js.map +1 -1
  86. package/package.json +2 -2
@@ -13,7 +13,7 @@ export interface IFilePicker {
13
13
  id: string;
14
14
  name?: string;
15
15
  className?: string;
16
- onChange?: (fileList: FileList | null) => void;
16
+ onChange?: (file: IUseFilePickerOnChange) => void;
17
17
  allowedExtensions?: TFilesExtension[];
18
18
  initialFile?: TFilePickerFile;
19
19
  errors?: TControlErrors;
@@ -45,8 +45,12 @@ export interface IUseFilePicker {
45
45
  isPreview: boolean;
46
46
  isDragOver: boolean;
47
47
  }
48
+ export declare type IUseFilePickerOnChange = {
49
+ fileList: FileList | null;
50
+ fileAsDataUrl?: string | ArrayBuffer | null;
51
+ };
48
52
  export interface IUseFilePickerProps {
49
- onChange?: (fileList: FileList | null) => void;
53
+ onChange?: (file: IUseFilePickerOnChange) => void;
50
54
  initialFile?: TFilePickerFile;
51
55
  allowedExtensions?: TFilesExtension[];
52
56
  inputRef: React.RefObject<HTMLInputElement>;
@@ -1,18 +1,27 @@
1
- import { useState, useEffect } from 'react';
1
+ import { useState, useRef, useEffect } from 'react';
2
2
  import i18n from '../../i18n.js';
3
3
  import { MIME_TYPE_TO_FILE_EXTENSIONS, FILE_PICKER_ERROR } from './constants.js';
4
4
 
5
5
  const useFilePicker = ({ onChange, initialFile, allowedExtensions, inputRef, initialErrors, onError }) => {
6
+ const [fileList, setFileList] = useState(null);
6
7
  const [file, setFile] = useState(initialFile);
8
+ const [fileAsDataUrl, setFileAsDataUrl] = useState(null);
7
9
  const [errors, setErrors] = useState([]);
8
10
  const [isDragOver, setDragOver] = useState(false);
9
11
  const [isPreview, setPreview] = useState(true);
12
+ const reader = useRef(new FileReader());
10
13
  useEffect(() => {
11
- initialFile && setFile(initialFile);
14
+ setFile(initialFile);
15
+ reader.current && getDataUrlFromFile(reader.current.result);
16
+ reader.current.addEventListener('load', () => getDataUrlFromFile(reader.current.result), false);
17
+ return () => reader.current.removeEventListener('load', () => getDataUrlFromFile(reader.current.result));
12
18
  }, []);
13
19
  useEffect(() => {
14
20
  initialErrors && setErrors(initialErrors);
15
21
  }, [initialErrors]);
22
+ useEffect(() => {
23
+ fileAsDataUrl && (onChange === null || onChange === void 0 ? void 0 : onChange({ fileList, fileAsDataUrl }));
24
+ }, [fileAsDataUrl]);
16
25
  const onDropFile = (event) => {
17
26
  setErrors([]);
18
27
  event.stopPropagation();
@@ -44,20 +53,25 @@ const useFilePicker = ({ onChange, initialFile, allowedExtensions, inputRef, ini
44
53
  };
45
54
  const updateFile = (files) => {
46
55
  if (files === null || files === void 0 ? void 0 : files.length) {
56
+ setFileList(files);
57
+ reader.current.readAsDataURL(files[0]);
47
58
  setFile({
48
59
  fileName: files === null || files === void 0 ? void 0 : files[0].name,
49
60
  fileUrl: URL.createObjectURL(files === null || files === void 0 ? void 0 : files[0])
50
61
  });
51
62
  const isValid = validateFileExtension(allowedExtensions, files[0].type);
52
63
  if (isValid)
53
- onChange === null || onChange === void 0 ? void 0 : onChange(files);
64
+ onChange === null || onChange === void 0 ? void 0 : onChange({ fileList: files });
54
65
  }
55
66
  else {
56
67
  setFile(undefined);
57
- onChange === null || onChange === void 0 ? void 0 : onChange(files);
68
+ onChange === null || onChange === void 0 ? void 0 : onChange({ fileList: files });
58
69
  }
59
70
  setPreview(true);
60
71
  };
72
+ const getDataUrlFromFile = (fileReaderResult) => {
73
+ setFileAsDataUrl(fileReaderResult);
74
+ };
61
75
  const onDragOver = (event) => {
62
76
  event.stopPropagation();
63
77
  event.preventDefault();
@@ -71,10 +85,12 @@ const useFilePicker = ({ onChange, initialFile, allowedExtensions, inputRef, ini
71
85
  };
72
86
  const onFileDelete = () => {
73
87
  inputRef.current.value = '';
88
+ setFileList(null);
74
89
  setFile(undefined);
90
+ setFileAsDataUrl(null);
75
91
  setPreview(true);
76
92
  setErrors([]);
77
- onChange === null || onChange === void 0 ? void 0 : onChange(null);
93
+ onChange === null || onChange === void 0 ? void 0 : onChange({ fileList: null, fileAsDataUrl: null });
78
94
  };
79
95
  const onPreviewError = () => {
80
96
  setPreview(false);
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ declare type TScrollSyncContainerProps = {
3
+ id: string;
4
+ children: (elementRef: React.Ref<HTMLElement>) => React.ReactNode;
5
+ };
6
+ export declare const ScrollSyncContainer: ({ children, id }: TScrollSyncContainerProps) => JSX.Element;
7
+ export default ScrollSyncContainer;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { useScrollSyncContainer } from '../hooks/scroll_sync_container_hook.js';
3
+
4
+ const ScrollSyncContainer = ({ children, id }) => {
5
+ const elementRef = React.useRef(null);
6
+ useScrollSyncContainer(id, elementRef);
7
+ return React.createElement(React.Fragment, null, children(elementRef));
8
+ };
9
+
10
+ export default ScrollSyncContainer;
11
+ export { ScrollSyncContainer };
12
+ //# sourceMappingURL=scroll_sync_container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export declare type TScrollSyncContainer = {
3
+ id: string;
4
+ $el: HTMLElement;
5
+ };
6
+ export interface IScrollSyncContext {
7
+ registerContainer: (container: TScrollSyncContainer) => void;
8
+ unregisterContainer: (id: string) => void;
9
+ hasContainer: (id: string) => boolean;
10
+ }
11
+ export declare const ScrollSyncContext: import("react").Context<IScrollSyncContext>;
12
+ export declare const ScrollSyncContextProvider: import("react").Provider<IScrollSyncContext>;
@@ -0,0 +1,11 @@
1
+ import { createContext } from 'react';
2
+
3
+ const ScrollSyncContext = createContext({
4
+ registerContainer: () => { },
5
+ unregisterContainer: () => { },
6
+ hasContainer: () => false
7
+ });
8
+ const ScrollSyncContextProvider = ScrollSyncContext.Provider;
9
+
10
+ export { ScrollSyncContext, ScrollSyncContextProvider };
11
+ //# sourceMappingURL=scroll_sync_context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,2 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export declare const ScrollSyncProvider: ({ children }: PropsWithChildren<{}>) => JSX.Element;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { useLazyRef } from '../../../hooks/use_lazy_ref.js';
3
+ import { ScrollSyncContextProvider } from './scroll_sync_context.js';
4
+ import { setupScrollSyncer } from './setup_scroll_syncer.js';
5
+
6
+ const ScrollSyncProvider = ({ children }) => {
7
+ const scrollSyncerSetup = useLazyRef(() => setupScrollSyncer());
8
+ const value = {
9
+ registerContainer(container) {
10
+ scrollSyncerSetup.current.scrollSyncerApi.registerContainer(container);
11
+ },
12
+ unregisterContainer(id) {
13
+ scrollSyncerSetup.current.scrollSyncerApi.unregisterContainer(id);
14
+ },
15
+ hasContainer(id) {
16
+ return scrollSyncerSetup.current.scrollSyncerApi.hasContainer(id);
17
+ }
18
+ };
19
+ return React.createElement(ScrollSyncContextProvider, { value: value }, children);
20
+ };
21
+
22
+ export { ScrollSyncProvider };
23
+ //# sourceMappingURL=scroll_sync_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,18 @@
1
+ import { TScrollSyncContainer } from "./scroll_sync_context";
2
+ export declare class ScrollSyncerService {
3
+ private scrollContainers;
4
+ proportional: boolean;
5
+ vertical: boolean;
6
+ horizontal: boolean;
7
+ enabled: boolean;
8
+ constructor();
9
+ registerContainer(container: TScrollSyncContainer): void;
10
+ unregisterContainer(id: string): void;
11
+ private _addScrollEvent;
12
+ private _handleScrollEvent;
13
+ private _removeScrollEvent;
14
+ private _syncScrollPosition;
15
+ private _syncScrollPositions;
16
+ private _getContentContainer;
17
+ hasContainer(id: string): boolean;
18
+ }
@@ -0,0 +1,73 @@
1
+ const SCROLL_CONTAINER_ID_ATTRIBUTE = 'data-scroll-sync-id';
2
+ class ScrollSyncerService {
3
+ constructor() {
4
+ this.scrollContainers = [];
5
+ this.proportional = true;
6
+ this.vertical = true;
7
+ this.horizontal = true;
8
+ this.enabled = true;
9
+ this._addScrollEvent = (container) => {
10
+ container.$el.addEventListener('scroll', this._handleScrollEvent);
11
+ };
12
+ this._handleScrollEvent = (ev) => {
13
+ const $container = ev.target;
14
+ const containerId = $container.getAttribute(SCROLL_CONTAINER_ID_ATTRIBUTE);
15
+ if (!containerId)
16
+ return;
17
+ const container = this._getContentContainer(containerId);
18
+ if (!container)
19
+ return;
20
+ window.requestAnimationFrame(() => this._syncScrollPositions(container));
21
+ };
22
+ this._removeScrollEvent = (container) => {
23
+ container.$el.removeEventListener('scroll', this._handleScrollEvent);
24
+ };
25
+ this._syncScrollPosition = (containerToSync, scrolledContainer) => {
26
+ const $scrolledContainerEl = scrolledContainer.$el;
27
+ const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = $scrolledContainerEl;
28
+ const scrollTopOffset = scrollHeight - clientHeight;
29
+ const scrollLeftOffset = scrollWidth - clientWidth;
30
+ const paneHeight = containerToSync.$el.scrollHeight - clientHeight;
31
+ const paneWidth = containerToSync.$el.scrollWidth - clientWidth;
32
+ if (this.vertical && scrollTopOffset > 0) {
33
+ containerToSync.$el.scrollTop = this.proportional ? (paneHeight * scrollTop) / scrollTopOffset : scrollTop;
34
+ }
35
+ if (this.horizontal && scrollLeftOffset > 0) {
36
+ containerToSync.$el.scrollLeft = this.proportional ? (paneWidth * scrollLeft) / scrollLeftOffset : scrollLeft;
37
+ }
38
+ };
39
+ this._syncScrollPositions = (scrolledContainer) => {
40
+ this.scrollContainers.forEach((containerToSync) => {
41
+ if (containerToSync.id !== scrolledContainer.id) {
42
+ this._syncScrollPosition(containerToSync, scrolledContainer);
43
+ }
44
+ });
45
+ };
46
+ this._getContentContainer = (id) => {
47
+ return this.scrollContainers.find((currContainer) => currContainer.id === id);
48
+ };
49
+ }
50
+ registerContainer(container) {
51
+ container.$el.setAttribute(SCROLL_CONTAINER_ID_ATTRIBUTE, container.id);
52
+ this.scrollContainers.push(container);
53
+ this._addScrollEvent(container);
54
+ }
55
+ unregisterContainer(id) {
56
+ const container = this._getContentContainer(id);
57
+ if (!container)
58
+ return;
59
+ //TODO dokonczyc scroll na iframe
60
+ // if (container.$el instanceof HTMLIFrameElement) {
61
+ // container.$el = container.$el.contentWindow;
62
+ // }
63
+ this.scrollContainers = this.scrollContainers.filter((currContainer) => container.id !== currContainer.id);
64
+ container.$el.removeAttribute(SCROLL_CONTAINER_ID_ATTRIBUTE);
65
+ this._removeScrollEvent(container);
66
+ }
67
+ hasContainer(id) {
68
+ return !!this.scrollContainers.find((container) => container.id === id);
69
+ }
70
+ }
71
+
72
+ export { ScrollSyncerService };
73
+ //# sourceMappingURL=scroll_syncer_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,4 @@
1
+ import { ScrollSyncerService } from "./scroll_syncer_service";
2
+ export declare const setupScrollSyncer: () => {
3
+ scrollSyncerApi: ScrollSyncerService;
4
+ };
@@ -0,0 +1,8 @@
1
+ import { ScrollSyncerService } from './scroll_syncer_service.js';
2
+
3
+ const setupScrollSyncer = () => {
4
+ return { scrollSyncerApi: new ScrollSyncerService() };
5
+ };
6
+
7
+ export { setupScrollSyncer };
8
+ //# sourceMappingURL=setup_scroll_syncer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const useScrollSyncContainer: (id: string, ref: React.RefObject<HTMLElement>) => void;
@@ -0,0 +1,16 @@
1
+ import { useEffect } from 'react';
2
+ import { useScrollSync } from './scroll_sync_hook.js';
3
+
4
+ const useScrollSyncContainer = (id, ref) => {
5
+ const scrollSyncApi = useScrollSync();
6
+ useEffect(() => {
7
+ if (!ref.current)
8
+ return;
9
+ if (!scrollSyncApi.hasContainer(id))
10
+ scrollSyncApi.registerContainer({ id, $el: ref.current });
11
+ return () => scrollSyncApi.unregisterContainer(id);
12
+ }, []);
13
+ };
14
+
15
+ export { useScrollSyncContainer };
16
+ //# sourceMappingURL=scroll_sync_container_hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1 @@
1
+ export declare const useScrollSync: () => import("../context/scroll_sync_context").IScrollSyncContext;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { ScrollSyncContext } from '../context/scroll_sync_context.js';
3
+
4
+ const useScrollSync = () => {
5
+ const context = React.useContext(ScrollSyncContext);
6
+ if (!context) {
7
+ throw new Error('useScrollSync must be used within a ScrollSyncContextProvider');
8
+ }
9
+ return context;
10
+ };
11
+
12
+ export { useScrollSync };
13
+ //# sourceMappingURL=scroll_sync_hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export declare const ScrollSync: ({ children }: PropsWithChildren<{}>) => JSX.Element;
3
+ export default ScrollSync;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { ScrollSyncProvider } from './context/scroll_sync_provider.js';
3
+
4
+ const ScrollSync = ({ children }) => {
5
+ return React.createElement(ScrollSyncProvider, null, children);
6
+ };
7
+
8
+ export default ScrollSync;
9
+ export { ScrollSync };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -1,16 +1,27 @@
1
- import React from 'react';
1
+ import React, { useRef, useEffect } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import { STACK_DIRECTIONS, STACK_JUSTIFICATIONS, STACK_ALIGNMENTS, STACK_WRAP, STACK_DIRECTIONS_TO_CSS_CLASSES_MAP, STACK_ALIGNMENTS_TO_CSS_CLASSES_MAP, STACK_JUSTIFICATIONS_TO_CSS_CLASSES_MAP, STACK_WRAP_TO_CSS_CLASSES_MAP, STACK_CSS_CLASSES } from './stack_constants.js';
4
4
  import cssClasses from '../../css/stack/main.module.less.js';
5
5
  import { cssStack } from './css_classes.js';
6
6
 
7
- const Stack = ({ children, spacing = 0, className = '', direction = STACK_DIRECTIONS.row, justify = STACK_JUSTIFICATIONS.flexStart, align = STACK_ALIGNMENTS.normal, wrap = STACK_WRAP.nowrap, as = 'div', inline = false, style = {}, onMouseLeave, onMouseEnter }) => {
7
+ const Stack = ({ children, spacing = 0, className = '', direction = STACK_DIRECTIONS.row, justify = STACK_JUSTIFICATIONS.flexStart, align = STACK_ALIGNMENTS.normal, wrap = STACK_WRAP.nowrap, as = 'div', inline = false, style = {}, onMouseLeave, onMouseEnter, attributes, onClick }) => {
8
8
  const stackClass = classnames(cssClasses[cssStack], cssClasses[STACK_DIRECTIONS_TO_CSS_CLASSES_MAP[direction]], cssClasses[STACK_ALIGNMENTS_TO_CSS_CLASSES_MAP[align]], cssClasses[STACK_JUSTIFICATIONS_TO_CSS_CLASSES_MAP[justify]], cssClasses[STACK_WRAP_TO_CSS_CLASSES_MAP[wrap]], inline ? cssClasses[STACK_CSS_CLASSES.inline] : '', className);
9
+ const stackElRef = useRef(null);
10
+ useEffect(() => {
11
+ if (!stackElRef.current || !attributes)
12
+ return;
13
+ Object.entries(attributes).forEach(([key, value]) => {
14
+ var _a;
15
+ (_a = stackElRef.current) === null || _a === void 0 ? void 0 : _a.setAttribute(key, value);
16
+ });
17
+ }, []);
9
18
  return React.createElement(as, {
19
+ ref: stackElRef,
10
20
  className: `${stackClass}`,
11
21
  style: { gap: `${spacing}px`, ...style },
12
22
  onMouseEnter,
13
- onMouseLeave
23
+ onMouseLeave,
24
+ onClick
14
25
  }, children);
15
26
  };
16
27
 
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -14,6 +14,8 @@ export declare type TStackProps = {
14
14
  style?: Record<any, any>;
15
15
  onMouseEnter?: (event: React.MouseEvent) => void;
16
16
  onMouseLeave?: (event: React.MouseEvent) => void;
17
+ attributes?: Record<string, any>;
18
+ onClick?: (event: React.MouseEvent) => void;
17
19
  };
18
20
  export declare type TStackJustify = Any.Keys<typeof STACK_JUSTIFICATIONS_TO_CSS_CLASSES_MAP>;
19
21
  export declare type TStackDirection = Any.Keys<typeof STACK_DIRECTIONS_TO_CSS_CLASSES_MAP>;
@@ -8,6 +8,7 @@ declare type TTreeContentComponentProps = {
8
8
  };
9
9
  declare type TTreeLabelComponentProps = {
10
10
  node: ITreeNode;
11
+ isLeaf: boolean;
11
12
  };
12
13
  declare type TTreeNodeProps = TPropsWithChildren<ITreeNode & {
13
14
  cssClassNames?: string;
@@ -16,15 +16,16 @@ const TreeNode = ({ children, id, cssClassNames, ContentComponent, LabelComponen
16
16
  const toggleNode = () => {
17
17
  treeApi.toggleNode(node.id);
18
18
  };
19
- const Label = LabelComponent ? (LabelComponent === null || LabelComponent === void 0 ? void 0 : LabelComponent({ node })) : (React.createElement("span", { className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerLabel], TREE_NODE_CSS_CLASSES.treeNodeTogglerLabel) }, node.label ? node.label : node.id));
20
- const Content = ContentComponent ? (ContentComponent === null || ContentComponent === void 0 ? void 0 : ContentComponent({ node, toggleNode, isLeaf: !children })) : (React.createElement("button", { onClick: toggleNode, className: classnames(TREE_NODE_CSS_CLASSES.treeNodeToggler, cssClasses[TREE_NODE_CSS_CLASSES.treeNodeToggler]) },
21
- React.createElement("span", { className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerIcon], TREE_NODE_CSS_CLASSES.treeNodeTogglerIcon, {
22
- [TREE_NODE_CSS_CLASSES.treeNodeTogglerIconExpanded]: node.expanded,
23
- [cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerIconExpanded]]: node.expanded
24
- }) },
25
- React.createElement(IconListArrowDown, null)),
19
+ const Label = LabelComponent ? (LabelComponent === null || LabelComponent === void 0 ? void 0 : LabelComponent({ node, isLeaf: !children })) : (React.createElement("span", { tabIndex: !children ? 0 : -1, className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNodeLabelContent], TREE_NODE_CSS_CLASSES.treeNodeLabelContent) }, node.label ? node.label : node.id));
20
+ const Content = ContentComponent ? (ContentComponent === null || ContentComponent === void 0 ? void 0 : ContentComponent({ node, toggleNode, isLeaf: !children })) : (React.createElement("div", { className: classnames(TREE_NODE_CSS_CLASSES.treeNodeLabel, cssClasses[TREE_NODE_CSS_CLASSES.treeNodeLabel]) },
21
+ React.createElement("button", { className: classnames(TREE_NODE_CSS_CLASSES.treeNodeTogglerBtn, cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerBtn], {
22
+ [TREE_NODE_CSS_CLASSES.treeNodeTogglerBtnExpanded]: node.expanded,
23
+ [cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerBtnExpanded]]: node.expanded
24
+ }), onClick: toggleNode },
25
+ React.createElement("span", { className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNodeTogglerBtnIcon], TREE_NODE_CSS_CLASSES.treeNodeTogglerBtnIcon) },
26
+ React.createElement(IconListArrowDown, null))),
26
27
  Label));
27
- return (React.createElement("li", { className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNode], TREE_NODE_CSS_CLASSES.treeNode, cssClassNames, {
28
+ return (React.createElement("li", { role: "treeitem", "aria-expanded": node.expanded, className: classnames(cssClasses[TREE_NODE_CSS_CLASSES.treeNode], TREE_NODE_CSS_CLASSES.treeNode, cssClassNames, {
28
29
  [TREE_NODE_CSS_CLASSES.treeNodeExpanded]: node.expanded
29
30
  }) },
30
31
  children ? Content : Label,
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -4,10 +4,11 @@ export declare const TREE_CSS_CLASSES: {
4
4
  };
5
5
  export declare const TREE_NODE_CSS_CLASSES: {
6
6
  readonly treeNode: "tree-node";
7
- readonly treeNodeToggler: "tree-node__toggler";
8
- readonly treeNodeTogglerIcon: "tree-node__toggler-icon";
9
- readonly treeNodeTogglerIconExpanded: "tree-node__toggler-icon_expanded";
10
- readonly treeNodeTogglerLabel: "tree-node__toggler-label";
7
+ readonly treeNodeTogglerBtn: "tree-node__toggler-btn";
8
+ readonly treeNodeTogglerBtnExpanded: "tree-node__toggler-btn_expanded";
9
+ readonly treeNodeTogglerBtnIcon: "tree-node__toggler-btn-icon";
10
+ readonly treeNodeLabelContent: "tree-node__label-content";
11
+ readonly treeNodeLabel: "tree-node__label";
11
12
  readonly treeNodeChildren: "tree-node__children";
12
13
  readonly treeNodeChildrenEnter: "tree-node__children-enter";
13
14
  readonly treeNodeChildrenEnterActive: "tree-node__children-enter-active";
@@ -6,10 +6,11 @@ const TREE_CSS_CLASSES = {
6
6
  const treeNodeBaseCssClass = `tree-node`;
7
7
  const TREE_NODE_CSS_CLASSES = {
8
8
  treeNode: treeNodeBaseCssClass,
9
- treeNodeToggler: `${treeNodeBaseCssClass}__toggler`,
10
- treeNodeTogglerIcon: `${treeNodeBaseCssClass}__toggler-icon`,
11
- treeNodeTogglerIconExpanded: `${treeNodeBaseCssClass}__toggler-icon_expanded`,
12
- treeNodeTogglerLabel: `${treeNodeBaseCssClass}__toggler-label`,
9
+ treeNodeTogglerBtn: `${treeNodeBaseCssClass}__toggler-btn`,
10
+ treeNodeTogglerBtnExpanded: `${treeNodeBaseCssClass}__toggler-btn_expanded`,
11
+ treeNodeTogglerBtnIcon: `${treeNodeBaseCssClass}__toggler-btn-icon`,
12
+ treeNodeLabelContent: `${treeNodeBaseCssClass}__label-content`,
13
+ treeNodeLabel: `${treeNodeBaseCssClass}__label`,
13
14
  treeNodeChildren: `${treeNodeBaseCssClass}__children`,
14
15
  treeNodeChildrenEnter: `${treeNodeBaseCssClass}__children-enter`,
15
16
  treeNodeChildrenEnterActive: `${treeNodeBaseCssClass}__children-enter-active`,
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -1,6 +1,11 @@
1
- import { TPropsWithChildren } from "../../typings/general";
1
+ import React from 'react';
2
2
  declare type TTreeProps = {
3
3
  cssClassNames?: string;
4
+ cssStyles?: React.CSSProperties;
5
+ onMouseEnter?: (event: React.MouseEvent<HTMLUListElement, MouseEvent>) => void;
6
+ onMouseLeave?: (event: React.MouseEvent<HTMLUListElement, MouseEvent>) => void;
4
7
  };
5
- export declare const Tree: ({ children, cssClassNames }: TPropsWithChildren<TTreeProps>) => JSX.Element;
8
+ export declare const Tree: React.ForwardRefExoticComponent<TTreeProps & {
9
+ children?: React.ReactNode;
10
+ } & React.RefAttributes<HTMLUListElement>>;
6
11
  export default Tree;
@@ -4,10 +4,11 @@ import { TreeProvider } from './context/tree_provider.js';
4
4
  import { TREE_CSS_CLASSES } from './css_classes.js';
5
5
  import cssClasses from '../../css/tree/main.module.less.js';
6
6
 
7
- const Tree = ({ children, cssClassNames }) => {
7
+ // eslint-disable-next-line react/display-name
8
+ const Tree = React.forwardRef(({ children, cssClassNames, cssStyles, onMouseEnter, onMouseLeave }, ref) => {
8
9
  return (React.createElement(TreeProvider, null,
9
- React.createElement("ul", { className: classnames(cssClasses[TREE_CSS_CLASSES.tree], TREE_CSS_CLASSES.tree, cssClassNames) }, children)));
10
- };
10
+ React.createElement("ul", { onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, ref: ref, style: cssStyles, className: classnames(cssClasses[TREE_CSS_CLASSES.tree], TREE_CSS_CLASSES.tree, cssClassNames) }, children)));
11
+ });
11
12
 
12
13
  export default Tree;
13
14
  export { Tree };
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -3,7 +3,7 @@ import classnames from 'classnames';
3
3
  import { TYPOGRAPHY_CSS_CLASSES, TYPOGRAPHY_COMPONENTS_TYPES_TO_CSS_CLASSES_MAP, TYPOGRAPHY_TRANSFORM_TO_CSS_CLASSES_MAP, TYPOGRAPHY_WEIGHT_TO_CSS_CLASSES_MAP, TYPOGRAPHY_COLORS_TO_CSS_CLASSES_MAP } from './typography_constants.js';
4
4
  import typographyCssClasses from '../../css/typography/main.module.less.js';
5
5
 
6
- const Typography = ({ as = 'p', children, variant = 'h1', weight, transform, cssClasses, color, style }) => {
6
+ const Typography = ({ as = 'p', children, variant, weight, transform, cssClasses, color, style }) => {
7
7
  const typographyClasses = classnames(typographyCssClasses[TYPOGRAPHY_CSS_CLASSES.typography], as ? typographyCssClasses[TYPOGRAPHY_COMPONENTS_TYPES_TO_CSS_CLASSES_MAP[as]] : '', variant ? typographyCssClasses[TYPOGRAPHY_COMPONENTS_TYPES_TO_CSS_CLASSES_MAP[variant]] : '', transform ? typographyCssClasses[TYPOGRAPHY_TRANSFORM_TO_CSS_CLASSES_MAP[transform]] : '', weight ? typographyCssClasses[TYPOGRAPHY_WEIGHT_TO_CSS_CLASSES_MAP[weight]] : '', color ? typographyCssClasses[TYPOGRAPHY_COLORS_TO_CSS_CLASSES_MAP[color]] : '', cssClasses);
8
8
  return React.createElement(as, {
9
9
  className: typographyClasses,
@@ -14,8 +14,9 @@ const XhrImagePicker = ({ id, url, name, onUploaded, initialFile, errors, onErro
14
14
  ] }) => {
15
15
  const httpApi = useHttpApi();
16
16
  const pendingRequestRef = React.useRef();
17
- const handleControlChange = async (fileList) => {
18
- onChange === null || onChange === void 0 ? void 0 : onChange(fileList);
17
+ const handleControlChange = async (file) => {
18
+ const { fileList, fileAsDataUrl } = file;
19
+ onChange === null || onChange === void 0 ? void 0 : onChange({ fileList, fileAsDataUrl });
19
20
  if (!fileList || !fileList.length)
20
21
  return;
21
22
  if (pendingRequestRef.current) {
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../../../../external/style-inject/dist/style-inject.es.js';
2
2
 
3
- var css_248z = ".main-module_tree__3D4e3 {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.main-module_tree-node__toggler__Bhwx9 {\n display: flex;\n align-items: center;\n background: none;\n gap: 8px;\n width: 100%;\n}\n.main-module_tree-node__toggler-icon__3QR9X {\n display: flex;\n align-items: center;\n}\n.main-module_tree-node__toggler-icon__3QR9X svg {\n transition: rotate 250ms ease-out;\n rotate: -95deg;\n}\n.main-module_tree-node__toggler-icon_expanded__31THq svg {\n rotate: 0deg;\n}\n.main-module_tree-node__children__QyEOR {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n transform-origin: top center;\n transition: opacity 250ms ease-out, scale 250ms ease-out;\n padding-left: 16px;\n list-style: none;\n will-change: true;\n}\n.main-module_tree-node__children-enter__vxFO- {\n opacity: 0;\n scale: 1 0;\n}\n.main-module_tree-node__children-enter-active__T6XIS {\n opacity: 1;\n scale: 1 1;\n}\n.main-module_tree-node__children-exit__1NXHe {\n opacity: 1;\n scale: 1 1;\n}\n.main-module_tree-node__children-exit-active__vdqAI {\n opacity: 0;\n scale: 1 0;\n}\n";
4
- var cssClasses = {"tree":"main-module_tree__3D4e3","tree-node__toggler":"main-module_tree-node__toggler__Bhwx9","tree-node__toggler-icon":"main-module_tree-node__toggler-icon__3QR9X","tree-node__toggler-icon_expanded":"main-module_tree-node__toggler-icon_expanded__31THq","tree-node__children":"main-module_tree-node__children__QyEOR","tree-node__children-enter":"main-module_tree-node__children-enter__vxFO-","tree-node__children-enter-active":"main-module_tree-node__children-enter-active__T6XIS","tree-node__children-exit":"main-module_tree-node__children-exit__1NXHe","tree-node__children-exit-active":"main-module_tree-node__children-exit-active__vdqAI"};
3
+ var css_248z = ".main-module_tree__3D4e3 {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.main-module_tree-node__toggler-btn__s9KoL {\n display: flex;\n align-items: center;\n padding: 8px 12px 8px 0;\n cursor: pointer;\n}\n.main-module_tree-node__toggler-btn__s9KoL svg {\n transition: rotate 250ms ease-out;\n rotate: -95deg;\n}\n.main-module_tree-node__toggler-btn_expanded__17Joe svg {\n rotate: 0deg;\n}\n.main-module_tree-node__toggler-btn-icon__OA4tk {\n display: flex;\n}\n.main-module_tree-node__label__DT728 {\n display: flex;\n align-items: center;\n background: none;\n}\n.main-module_tree-node__children__QyEOR {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n transform-origin: top center;\n transition: opacity 250ms ease-out, scale 250ms ease-out;\n padding-left: 16px;\n list-style: none;\n will-change: true;\n}\n.main-module_tree-node__children-enter__vxFO- {\n opacity: 0;\n scale: 1 0;\n}\n.main-module_tree-node__children-enter-active__T6XIS {\n opacity: 1;\n scale: 1 1;\n}\n.main-module_tree-node__children-exit__1NXHe {\n opacity: 1;\n scale: 1 1;\n}\n.main-module_tree-node__children-exit-active__vdqAI {\n opacity: 0;\n scale: 1 0;\n}\n";
4
+ var cssClasses = {"tree":"main-module_tree__3D4e3","tree-node__toggler-btn":"main-module_tree-node__toggler-btn__s9KoL","tree-node__toggler-btn_expanded":"main-module_tree-node__toggler-btn_expanded__17Joe","tree-node__toggler-btn-icon":"main-module_tree-node__toggler-btn-icon__OA4tk","tree-node__label":"main-module_tree-node__label__DT728","tree-node__children":"main-module_tree-node__children__QyEOR","tree-node__children-enter":"main-module_tree-node__children-enter__vxFO-","tree-node__children-enter-active":"main-module_tree-node__children-enter-active__T6XIS","tree-node__children-exit":"main-module_tree-node__children-exit__1NXHe","tree-node__children-exit-active":"main-module_tree-node__children-exit-active__vdqAI"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export default cssClasses;
@@ -107,13 +107,15 @@ import XhrImagePicker from "./components/xhr_image_picker";
107
107
  import ValuesSyncer from "./components/controls/components/values_syncer";
108
108
  import { Tree } from "./components/tree";
109
109
  import { TreeNode } from "./components/tree/components/tree_node";
110
+ import { ScrollSyncContainer } from "./components/scroll_sync/components/scroll_sync_container";
111
+ import { ScrollSync } from "./components/scroll_sync";
110
112
  /**
111
113
  * export hooks
112
114
  */
113
115
  /**
114
116
  * export components
115
117
  */
116
- export { Accordion, Button, Tooltip, ButtonsGroup, Dropdown, Select, MultiSelect, Label, Stack, Control, ControlInput, ControlCheckbox, ControlCheckboxSwitch, ControlRadio, ControlSelect, ControlRange, ControlMultiSelect, ControlTextarea, Gallery, Datepicker, ColorPicker, ControlColorPicker, ControlDatepicker, ControlFilePicker, ControlXhrImagePicker, Heading, Typography, Modal, ModalProvider, AbsoluteModal, RelativeModal, TabsWrapper, Tabs, TabsItem, TabsItemList, TabsPanel, TabsPanelList, SearchList, SearchListInput, SearchListResults, Tag, TagsSelector, ControlTagsSelector, Table, DataTable, Grid, DropdownContext, ModalContext, IconCalendar, Spacing, IconArrow, IconTick, FilePicker, ImagePicker, ControlCellSelector, Hint, ControlRadioGroup, MessageBox, FlashMessenger, useFlashMessenger, Loader, WithLoader, useDropdownContext, FlashMessengerContext, FlashMessagesList, Link, IconTablet, IconMobile, IconLaptop, IconDesktop, IconWarning, useToggle, useSearchList, Slide, SlideWrapper, SlideHeader, SlideSubHeader, SlideContent, SlideFooter, XhrImagePicker, ValuesSyncer, Tree, TreeNode };
118
+ export { Accordion, Button, Tooltip, ButtonsGroup, Dropdown, Select, MultiSelect, Label, Stack, Control, ControlInput, ControlCheckbox, ControlCheckboxSwitch, ControlRadio, ControlSelect, ControlRange, ControlMultiSelect, ControlTextarea, Gallery, Datepicker, ColorPicker, ControlColorPicker, ControlDatepicker, ControlFilePicker, ControlXhrImagePicker, Heading, Typography, Modal, ModalProvider, AbsoluteModal, RelativeModal, TabsWrapper, Tabs, TabsItem, TabsItemList, TabsPanel, TabsPanelList, SearchList, SearchListInput, SearchListResults, Tag, TagsSelector, ControlTagsSelector, Table, DataTable, Grid, DropdownContext, ModalContext, IconCalendar, Spacing, IconArrow, IconTick, FilePicker, ImagePicker, ControlCellSelector, Hint, ControlRadioGroup, MessageBox, FlashMessenger, useFlashMessenger, Loader, WithLoader, useDropdownContext, FlashMessengerContext, FlashMessagesList, Link, IconTablet, IconMobile, IconLaptop, IconDesktop, IconWarning, useToggle, useSearchList, Slide, SlideWrapper, SlideHeader, SlideSubHeader, SlideContent, SlideFooter, XhrImagePicker, ValuesSyncer, Tree, TreeNode, ScrollSyncContainer, ScrollSync };
117
119
  /**
118
120
  * export types
119
121
  */