@eleventheye/asui 2.5.1 → 2.5.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ASNavBar.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAO3D,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA6FrC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"ASNavBar.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAO3D,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmFrC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -9,23 +9,11 @@ const ASNavBarItem_1 = tslib_1.__importDefault(require("../asnavbar/ASNavBarItem
9
9
  const styles_1 = require("../asnavbar/styles");
10
10
  const astheme_1 = tslib_1.__importDefault(require("../astheme"));
11
11
  const INIT_VALUE = (0, uuid_1.v4)();
12
- const ASNavBar = ({ className = '', navItems = [], selectedItem = '', onItemSelected = () => undefined, theme = astheme_1.default, size = ASUI_types_1.ComponentSize.Medium, options = {}, }) => {
12
+ const ASNavBar = ({ className = '', navItems = [], selectedItemId = '', onItemSelected = () => undefined, theme = astheme_1.default, size = ASUI_types_1.ComponentSize.Medium, options = {}, }) => {
13
13
  const selectedItemIdRef = (0, react_1.useRef)(INIT_VALUE);
14
14
  const navBarRef = (0, react_1.useRef)(null);
15
15
  const navBarHighlightBoxRef = (0, react_1.useRef)(null);
16
- const [selected, setSelected] = (0, react_1.useState)(selectedItem);
17
- (0, react_1.useEffect)(() => {
18
- if (navBarHighlightBoxRef.current) {
19
- const selectedBox = navBarHighlightBoxRef.current;
20
- selectedBox.style.width = '0';
21
- }
22
- }, []);
23
- (0, react_1.useEffect)(() => {
24
- if (selectedItemIdRef.current === INIT_VALUE && navItems && navItems.length > 0 && !selectedItem) {
25
- selectedItemIdRef.current = navItems[0].itemId;
26
- setSelected(selectedItemIdRef.current);
27
- }
28
- }, [selectedItem, navItems]);
16
+ const [selected, setSelected] = (0, react_1.useState)(selectedItemId);
29
17
  const slideHighlightToSelectedItem = (selectedItemEl, itemId) => {
30
18
  if (!navBarHighlightBoxRef.current || !navBarRef.current)
31
19
  return;
@@ -37,25 +25,27 @@ const ASNavBar = ({ className = '', navItems = [], selectedItem = '', onItemSele
37
25
  selectedBox.style.transform = `translateX(${offsetToSelectedEl}px)`;
38
26
  selectedBox.style.width = `${selectedBoxWidth}px`;
39
27
  selectedItemIdRef.current = itemId;
28
+ onItemSelected(itemId);
40
29
  };
41
30
  const locateTargetSelectedElement = (selectedId) => {
42
- const selectedItemEl = document.getElementById(selectedItem);
43
- if (selectedItemEl)
44
- slideHighlightToSelectedItem(selectedItemEl, selectedItem);
45
- selectedItemIdRef.current = selectedItem;
46
- setSelected(selectedItem);
31
+ const selectedItemEl = document.getElementById(selectedId);
32
+ if (selectedItemEl) {
33
+ slideHighlightToSelectedItem(selectedItemEl, selectedId);
34
+ selectedItemIdRef.current = selectedId;
35
+ setSelected(selectedId);
36
+ }
47
37
  };
48
38
  (0, react_1.useEffect)(() => {
49
- const isItemSameOrNull = selectedItemIdRef.current === selectedItem || selectedItem.length === 0;
39
+ const isItemSameOrNull = selectedItemIdRef.current === selectedItemId || selectedItemId.length === 0;
50
40
  if (!navBarHighlightBoxRef.current || !navBarRef.current || isItemSameOrNull)
51
41
  return;
52
- locateTargetSelectedElement(selectedItem);
53
- }, [selectedItem]);
42
+ locateTargetSelectedElement(selectedItemId);
43
+ }, [selectedItemId]);
54
44
  (0, react_1.useEffect)(() => {
55
- if (selectedItemIdRef.current === INIT_VALUE && navItems && navItems.length > 0 && !selectedItem) {
45
+ if (selectedItemIdRef.current === INIT_VALUE && navItems && navItems.length > 0 && !selectedItemId) {
56
46
  locateTargetSelectedElement(navItems[0].itemId);
57
47
  }
58
- }, [selectedItem, navItems]);
48
+ }, [selectedItemId, navItems]);
59
49
  const onItemSelectedHandler = (itemId, e) => {
60
50
  const selectedItemEl = e.target;
61
51
  if (selectedItemEl)
@@ -64,9 +54,8 @@ const ASNavBar = ({ className = '', navItems = [], selectedItem = '', onItemSele
64
54
  setSelected(itemId);
65
55
  onItemSelected(itemId);
66
56
  };
67
- const isSelected = (itemId) => {
68
- return selected === itemId;
69
- };
70
- return ((0, jsx_runtime_1.jsxs)(styles_1.ASNavBarStyled, { ref: navBarRef, className: `${className} ${size}`, theme: theme, ...options, children: [(0, jsx_runtime_1.jsx)(styles_1.ASSelectedBoxStyled, { ref: navBarHighlightBoxRef, theme: theme }), navItems.map((item, index) => ((0, jsx_runtime_1.jsx)(ASNavBarItem_1.default, { theme: theme, itemId: item.itemId, selected: isSelected(item.itemId), displayText: item.displayText, icon: item.icon, onItemClick: onItemSelectedHandler }, `key_${index}_${item.itemId}`)))] }));
57
+ const onItemResizedHandler = (itemId, item) => slideHighlightToSelectedItem(item, itemId);
58
+ const isSelected = (itemId) => selected === itemId;
59
+ return ((0, jsx_runtime_1.jsxs)(styles_1.ASNavBarStyled, { ref: navBarRef, className: `${className} ${size}`, theme: theme, ...options, children: [(0, jsx_runtime_1.jsx)(styles_1.ASSelectedBoxStyled, { ref: navBarHighlightBoxRef, theme: theme }), navItems.map((item, index) => ((0, jsx_runtime_1.jsx)(ASNavBarItem_1.default, { theme: theme, itemId: item.itemId, selected: isSelected(item.itemId), displayText: item.displayText, icon: item.icon, onItemResized: onItemResizedHandler, onItemClick: onItemSelectedHandler }, `key_${index}_${item.itemId}`)))] }));
71
60
  };
72
61
  exports.default = ASNavBar;
@@ -16,11 +16,12 @@ export type ASNavBarItemProps = {
16
16
  icon?: React.ReactNode;
17
17
  size?: ASComponentSize;
18
18
  onItemClick?: (id: string, e: MouseEvent) => void;
19
+ onItemResized?: (id: string, element: HTMLDivElement) => void;
19
20
  };
20
21
  export type ASNavBarOwnProps = {
21
22
  className?: string;
22
23
  theme?: ASTheme;
23
- selectedItem?: string;
24
+ selectedItemId?: string;
24
25
  onItemSelected?: (itemId: string) => void;
25
26
  navItems?: ASNavBarItemType[];
26
27
  size?: ASComponentSize;
@@ -1 +1 @@
1
- {"version":3,"file":"ASNavBar.types.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBar.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"ASNavBar.types.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBar.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ASNavBarItem.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBarItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgC7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ASNavBarItem.d.ts","sourceRoot":"","sources":["../../src/asnavbar/ASNavBarItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuE7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -5,11 +5,43 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const styles_1 = require("../asnavbar/styles");
7
7
  const astheme_1 = tslib_1.__importDefault(require("../astheme"));
8
- const ASNavBarItem = ({ className = '', theme = astheme_1.default, displayText = '---', icon, selected = false, itemId, onItemClick = () => undefined, }) => {
8
+ const ASNavBarItem = ({ className = '', theme = astheme_1.default, displayText = '---', icon, selected = false, itemId, onItemClick = () => undefined, onItemResized = () => undefined, }) => {
9
+ const [navItemSizeInitialized, setNavSizeInitialized] = (0, react_1.useState)(false);
10
+ const navItemWidthRef = (0, react_1.useRef)(0);
9
11
  const navBarItemRef = (0, react_1.useRef)(null);
12
+ const isNavBarItemSelected = (0, react_1.useRef)(selected);
10
13
  const onItemClickHandler = (e) => {
11
14
  onItemClick(itemId, e);
12
15
  };
16
+ (0, react_1.useEffect)(() => {
17
+ if (navBarItemRef.current) {
18
+ navItemWidthRef.current = navBarItemRef.current.getBoundingClientRect().width;
19
+ setNavSizeInitialized(true);
20
+ }
21
+ }, []);
22
+ (0, react_1.useEffect)(() => {
23
+ if (navItemSizeInitialized && navBarItemRef.current) {
24
+ console.log('resizeObserver init');
25
+ const resizeObserver = new ResizeObserver((entries) => {
26
+ if (isNavBarItemSelected.current) {
27
+ console.log('resizeObserver fired, ', entries);
28
+ const width = navBarItemRef.current?.getBoundingClientRect().width;
29
+ if (navBarItemRef.current && typeof width === 'number' && navItemWidthRef.current !== width) {
30
+ navItemWidthRef.current = width;
31
+ onItemResized(itemId, navBarItemRef.current);
32
+ }
33
+ }
34
+ });
35
+ resizeObserver.observe(navBarItemRef.current);
36
+ return () => {
37
+ if (navBarItemRef.current)
38
+ resizeObserver.unobserve(navBarItemRef.current);
39
+ };
40
+ }
41
+ }, [navItemSizeInitialized]);
42
+ (0, react_1.useEffect)(() => {
43
+ isNavBarItemSelected.current = selected;
44
+ }, [selected]);
13
45
  return ((0, jsx_runtime_1.jsxs)(styles_1.ASNavBarItemStyled, { id: itemId, theme: theme, ref: navBarItemRef, className: className, "$selected": selected, onClick: onItemClickHandler, children: [icon && ((0, jsx_runtime_1.jsx)(styles_1.ASNavBarItemPadding, { theme: theme, "$selected": selected, "aria-invalid": true, "aria-hidden": true, children: icon })), displayText] }));
14
46
  };
15
47
  exports.default = ASNavBarItem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eleventheye/asui",
3
- "version": "2.5.1",
3
+ "version": "2.5.3",
4
4
  "private": false,
5
5
  "description": "AS UI React Library by eleventheye (another one!)",
6
6
  "keywords": [