@chayns-components/core 5.3.8 → 5.3.10

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 (62) hide show
  1. package/AGENTS.md +61 -2
  2. package/lib/cjs/components/list/list-item/ListItem.js +6 -1
  3. package/lib/cjs/components/list/list-item/ListItem.js.map +1 -1
  4. package/lib/cjs/components/list/list-item/ListItem.styles.js +7 -4
  5. package/lib/cjs/components/list/list-item/ListItem.styles.js.map +1 -1
  6. package/lib/cjs/components/masonry/Masonry.context.js +17 -0
  7. package/lib/cjs/components/masonry/Masonry.context.js.map +1 -0
  8. package/lib/cjs/components/masonry/Masonry.hooks.js +53 -0
  9. package/lib/cjs/components/masonry/Masonry.hooks.js.map +1 -0
  10. package/lib/cjs/components/masonry/Masonry.js +81 -0
  11. package/lib/cjs/components/masonry/Masonry.js.map +1 -0
  12. package/lib/cjs/components/masonry/Masonry.styles.js +16 -0
  13. package/lib/cjs/components/masonry/Masonry.styles.js.map +1 -0
  14. package/lib/cjs/components/masonry/Masonry.types.js +6 -0
  15. package/lib/cjs/components/masonry/Masonry.types.js.map +1 -0
  16. package/lib/cjs/components/masonry/Masonry.utils.js +121 -0
  17. package/lib/cjs/components/masonry/Masonry.utils.js.map +1 -0
  18. package/lib/cjs/components/masonry/masonry-item/MasonryItem.js +77 -0
  19. package/lib/cjs/components/masonry/masonry-item/MasonryItem.js.map +1 -0
  20. package/lib/cjs/components/masonry/masonry-item/MasonryItem.styles.js +17 -0
  21. package/lib/cjs/components/masonry/masonry-item/MasonryItem.styles.js.map +1 -0
  22. package/lib/cjs/hooks/element.js +12 -1
  23. package/lib/cjs/hooks/element.js.map +1 -1
  24. package/lib/cjs/index.js +7 -0
  25. package/lib/cjs/index.js.map +1 -1
  26. package/lib/esm/components/list/list-item/ListItem.js +6 -1
  27. package/lib/esm/components/list/list-item/ListItem.js.map +1 -1
  28. package/lib/esm/components/list/list-item/ListItem.styles.js +7 -4
  29. package/lib/esm/components/list/list-item/ListItem.styles.js.map +1 -1
  30. package/lib/esm/components/masonry/Masonry.context.js +10 -0
  31. package/lib/esm/components/masonry/Masonry.context.js.map +1 -0
  32. package/lib/esm/components/masonry/Masonry.hooks.js +44 -0
  33. package/lib/esm/components/masonry/Masonry.hooks.js.map +1 -0
  34. package/lib/esm/components/masonry/Masonry.js +74 -0
  35. package/lib/esm/components/masonry/Masonry.js.map +1 -0
  36. package/lib/esm/components/masonry/Masonry.styles.js +9 -0
  37. package/lib/esm/components/masonry/Masonry.styles.js.map +1 -0
  38. package/lib/esm/components/masonry/Masonry.types.js +2 -0
  39. package/lib/esm/components/masonry/Masonry.types.js.map +1 -0
  40. package/lib/esm/components/masonry/Masonry.utils.js +110 -0
  41. package/lib/esm/components/masonry/Masonry.utils.js.map +1 -0
  42. package/lib/esm/components/masonry/masonry-item/MasonryItem.js +69 -0
  43. package/lib/esm/components/masonry/masonry-item/MasonryItem.js.map +1 -0
  44. package/lib/esm/components/masonry/masonry-item/MasonryItem.styles.js +10 -0
  45. package/lib/esm/components/masonry/masonry-item/MasonryItem.styles.js.map +1 -0
  46. package/lib/esm/hooks/element.js +10 -0
  47. package/lib/esm/hooks/element.js.map +1 -1
  48. package/lib/esm/index.js +1 -0
  49. package/lib/esm/index.js.map +1 -1
  50. package/lib/types/components/list/list-item/ListItem.d.ts +4 -0
  51. package/lib/types/components/list/list-item/ListItem.styles.d.ts +6 -2
  52. package/lib/types/components/masonry/Masonry.context.d.ts +3 -0
  53. package/lib/types/components/masonry/Masonry.d.ts +3 -0
  54. package/lib/types/components/masonry/Masonry.hooks.d.ts +22 -0
  55. package/lib/types/components/masonry/Masonry.styles.d.ts +5 -0
  56. package/lib/types/components/masonry/Masonry.types.d.ts +40 -0
  57. package/lib/types/components/masonry/Masonry.utils.d.ts +22 -0
  58. package/lib/types/components/masonry/masonry-item/MasonryItem.d.ts +5 -0
  59. package/lib/types/components/masonry/masonry-item/MasonryItem.styles.d.ts +5 -0
  60. package/lib/types/hooks/element.d.ts +1 -0
  61. package/lib/types/index.d.ts +1 -0
  62. package/package.json +2 -2
@@ -15,10 +15,12 @@ export const StyledListItem = styled.div`
15
15
  $isOpen,
16
16
  $shouldChangeColor,
17
17
  $shouldForceBackground,
18
- theme
19
- }) => (!$isInAccordion && $isOpen || $shouldForceBackground) && css`
18
+ theme,
19
+ $isInDialog,
20
+ $isSelected
21
+ }) => (!$isInAccordion && $isOpen || $shouldForceBackground || $isSelected) && css`
20
22
  background-color: rgba(
21
- ${$shouldChangeColor ? theme['102-rgb'] : theme['100-rgb']},
23
+ ${$shouldChangeColor || $isInDialog ? theme['102-rgb'] : theme['100-rgb']},
22
24
  ${theme.cardBackgroundOpacity}
23
25
  );
24
26
  `}
@@ -36,11 +38,12 @@ export const StyledListItem = styled.div`
36
38
  $isClickable,
37
39
  $isInAccordion,
38
40
  $shouldChangeColor,
41
+ $isInDialog,
39
42
  theme
40
43
  }) => $isClickable && !$isInAccordion && css`
41
44
  &&:hover {
42
45
  background-color: rgba(
43
- ${$shouldChangeColor ? theme['102-rgb'] : theme['100-rgb']},
46
+ ${$shouldChangeColor || $isInDialog ? theme['102-rgb'] : theme['100-rgb']},
44
47
  ${theme.cardBackgroundOpacity}
45
48
  );
46
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ListItem.styles.js","names":["styled","css","StyledListItem","div","$isInAccordion","$shouldHideIndicator","$isOpen","$shouldChangeColor","$shouldForceBackground","theme","cardBackgroundOpacity","$backgroundColor","$isClickable","$isWrapped","$shouldHideBottomLine","$shouldForceBottomLine","$shouldShowSeparatorBelow","accordionLines","undefined","StyledListItemTooltip"],"sources":["../../../../../src/components/list/list-item/ListItem.styles.ts"],"sourcesContent":["import type { HTMLMotionProps } from 'motion/react';\nimport styled, { css } from 'styled-components';\nimport type { Theme } from '../../color-scheme-provider/ColorSchemeProvider';\nimport { CSSProperties } from 'react';\n\ntype StyledListItemProps = HTMLMotionProps<'div'> & {\n $backgroundColor?: CSSProperties['backgroundColor'];\n $isClickable: boolean;\n $isInAccordion: boolean;\n $isOpen: boolean;\n $isWrapped: boolean;\n $shouldChangeColor?: boolean;\n $shouldForceBackground?: boolean;\n $shouldForceBottomLine?: boolean;\n $shouldHideBottomLine: boolean;\n $shouldHideIndicator: boolean;\n $shouldShowSeparatorBelow: boolean;\n};\n\nexport const StyledListItem = styled.div<StyledListItemProps>`\n overflow: hidden;\n transition: background-color 0.3s ease;\n\n ${({ $isInAccordion, $shouldHideIndicator }: StyledListItemProps) =>\n $isInAccordion &&\n css`\n padding-left: ${$shouldHideIndicator ? '16px' : '8px'};\n `}\n\n ${({\n $isInAccordion,\n $isOpen,\n $shouldChangeColor,\n $shouldForceBackground,\n theme,\n }: StyledListItemProps & {\n theme: Theme;\n }) =>\n ((!$isInAccordion && $isOpen) || $shouldForceBackground) &&\n css`\n background-color: rgba(\n ${$shouldChangeColor ? theme['102-rgb'] : theme['100-rgb']},\n ${theme.cardBackgroundOpacity}\n );\n `}\n\n ${({ $backgroundColor, $isInAccordion, $isOpen, $shouldForceBackground }) =>\n $backgroundColor &&\n ((!$isInAccordion && $isOpen) || $shouldForceBackground) &&\n css`\n background-color: ${$backgroundColor} !important;\n `}\n\n ${({\n $isClickable,\n $isInAccordion,\n $shouldChangeColor,\n theme,\n }: StyledListItemProps & {\n theme: Theme;\n }) =>\n $isClickable &&\n !$isInAccordion &&\n css`\n &&:hover {\n background-color: rgba(\n ${$shouldChangeColor ? theme['102-rgb'] : theme['100-rgb']},\n ${theme.cardBackgroundOpacity}\n );\n }\n `}\n\n ${({\n $isInAccordion,\n $isOpen,\n $isWrapped,\n $shouldHideBottomLine,\n $shouldForceBottomLine,\n $shouldShowSeparatorBelow,\n theme,\n }: StyledListItemProps & { theme: Theme }) => {\n if (\n $shouldShowSeparatorBelow ||\n ((!$isOpen || $isWrapped || $isInAccordion) &&\n theme.accordionLines &&\n !$shouldHideBottomLine)\n ) {\n if ($shouldForceBottomLine) {\n return css`\n border-bottom: ${$shouldShowSeparatorBelow ? '4px' : '1px'} solid\n rgba(${theme['headline-rgb']}, 1);\n `;\n }\n\n return css`\n &&:not(:last-child) {\n border-bottom: ${$shouldShowSeparatorBelow ? '4px' : '1px'} solid\n rgba(${theme['headline-rgb']}, 1);\n }\n `;\n }\n\n return undefined;\n }}\n\n ${({ $isWrapped }) =>\n $isWrapped &&\n css`\n padding-left: 26px;\n `}\n`;\n\nexport const StyledListItemTooltip = styled.div`\n padding: 6px;\n`;\n"],"mappings":"AACA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAkB/C,OAAO,MAAMC,cAAc,GAAGF,MAAM,CAACG,GAAwB;AAC7D;AACA;AACA;AACA,MAAM,CAAC;EAAEC,cAAc;EAAEC;AAA0C,CAAC,KAC5DD,cAAc,IACdH,GAAG;AACX,4BAA4BI,oBAAoB,GAAG,MAAM,GAAG,KAAK;AACjE,SAAS;AACT;AACA,MAAM,CAAC;EACCD,cAAc;EACdE,OAAO;EACPC,kBAAkB;EAClBC,sBAAsB;EACtBC;AAGJ,CAAC,KACG,CAAE,CAACL,cAAc,IAAIE,OAAO,IAAKE,sBAAsB,KACvDP,GAAG;AACX;AACA,kBAAkBM,kBAAkB,GAAGE,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,SAAS,CAAC;AAC1E,kBAAkBA,KAAK,CAACC,qBAAqB;AAC7C;AACA,SAAS;AACT;AACA,MAAM,CAAC;EAAEC,gBAAgB;EAAEP,cAAc;EAAEE,OAAO;EAAEE;AAAuB,CAAC,KACpEG,gBAAgB,KACd,CAACP,cAAc,IAAIE,OAAO,IAAKE,sBAAsB,CAAC,IACxDP,GAAG;AACX,gCAAgCU,gBAAgB;AAChD,SAAS;AACT;AACA,MAAM,CAAC;EACCC,YAAY;EACZR,cAAc;EACdG,kBAAkB;EAClBE;AAGJ,CAAC,KACGG,YAAY,IACZ,CAACR,cAAc,IACfH,GAAG;AACX;AACA;AACA,sBAAsBM,kBAAkB,GAAGE,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,SAAS,CAAC;AAC9E,sBAAsBA,KAAK,CAACC,qBAAqB;AACjD;AACA;AACA,SAAS;AACT;AACA,MAAM,CAAC;EACCN,cAAc;EACdE,OAAO;EACPO,UAAU;EACVC,qBAAqB;EACrBC,sBAAsB;EACtBC,yBAAyB;EACzBP;AACoC,CAAC,KAAK;EAC1C,IACIO,yBAAyB,IACxB,CAAC,CAACV,OAAO,IAAIO,UAAU,IAAIT,cAAc,KACtCK,KAAK,CAACQ,cAAc,IACpB,CAACH,qBAAsB,EAC7B;IACE,IAAIC,sBAAsB,EAAE;MACxB,OAAOd,GAAG;AAC1B,qCAAqCe,yBAAyB,GAAG,KAAK,GAAG,KAAK;AAC9E,+BAA+BP,KAAK,CAAC,cAAc,CAAC;AACpD,iBAAiB;IACL;IAEA,OAAOR,GAAG;AACtB;AACA,qCAAqCe,yBAAyB,GAAG,KAAK,GAAG,KAAK;AAC9E,+BAA+BP,KAAK,CAAC,cAAc,CAAC;AACpD;AACA,aAAa;EACL;EAEA,OAAOS,SAAS;AACpB,CAAC;AACL;AACA,MAAM,CAAC;EAAEL;AAAW,CAAC,KACbA,UAAU,IACVZ,GAAG;AACX;AACA,SAAS;AACT,CAAC;AAED,OAAO,MAAMkB,qBAAqB,GAAGnB,MAAM,CAACG,GAAG;AAC/C;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ListItem.styles.js","names":["styled","css","StyledListItem","div","$isInAccordion","$shouldHideIndicator","$isOpen","$shouldChangeColor","$shouldForceBackground","theme","$isInDialog","$isSelected","cardBackgroundOpacity","$backgroundColor","$isClickable","$isWrapped","$shouldHideBottomLine","$shouldForceBottomLine","$shouldShowSeparatorBelow","accordionLines","undefined","StyledListItemTooltip"],"sources":["../../../../../src/components/list/list-item/ListItem.styles.ts"],"sourcesContent":["import type { HTMLMotionProps } from 'motion/react';\nimport styled, { css } from 'styled-components';\nimport type { Theme } from '../../color-scheme-provider/ColorSchemeProvider';\nimport { CSSProperties } from 'react';\n\ntype StyledListItemProps = HTMLMotionProps<'div'> & {\n $backgroundColor?: CSSProperties['backgroundColor'];\n $isClickable: boolean;\n $isInAccordion: boolean;\n $isOpen: boolean;\n $isWrapped: boolean;\n $shouldChangeColor?: boolean;\n $shouldForceBackground?: boolean;\n $shouldForceBottomLine?: boolean;\n $shouldHideBottomLine: boolean;\n $shouldHideIndicator: boolean;\n $shouldShowSeparatorBelow: boolean;\n $isInDialog: boolean;\n $isSelected: boolean;\n};\n\nexport const StyledListItem = styled.div<StyledListItemProps>`\n overflow: hidden;\n transition: background-color 0.3s ease;\n\n ${({ $isInAccordion, $shouldHideIndicator }: StyledListItemProps) =>\n $isInAccordion &&\n css`\n padding-left: ${$shouldHideIndicator ? '16px' : '8px'};\n `}\n\n ${({\n $isInAccordion,\n $isOpen,\n $shouldChangeColor,\n $shouldForceBackground,\n theme,\n $isInDialog,\n $isSelected,\n }: StyledListItemProps & {\n theme: Theme;\n }) =>\n ((!$isInAccordion && $isOpen) || $shouldForceBackground || $isSelected) &&\n css`\n background-color: rgba(\n ${$shouldChangeColor || $isInDialog ? theme['102-rgb'] : theme['100-rgb']},\n ${theme.cardBackgroundOpacity}\n );\n `}\n\n ${({ $backgroundColor, $isInAccordion, $isOpen, $shouldForceBackground }) =>\n $backgroundColor &&\n ((!$isInAccordion && $isOpen) || $shouldForceBackground) &&\n css`\n background-color: ${$backgroundColor} !important;\n `}\n\n ${({\n $isClickable,\n $isInAccordion,\n $shouldChangeColor,\n $isInDialog,\n theme,\n }: StyledListItemProps & {\n theme: Theme;\n }) =>\n $isClickable &&\n !$isInAccordion &&\n css`\n &&:hover {\n background-color: rgba(\n ${$shouldChangeColor || $isInDialog ? theme['102-rgb'] : theme['100-rgb']},\n ${theme.cardBackgroundOpacity}\n );\n }\n `}\n\n ${({\n $isInAccordion,\n $isOpen,\n $isWrapped,\n $shouldHideBottomLine,\n $shouldForceBottomLine,\n $shouldShowSeparatorBelow,\n theme,\n }: StyledListItemProps & { theme: Theme }) => {\n if (\n $shouldShowSeparatorBelow ||\n ((!$isOpen || $isWrapped || $isInAccordion) &&\n theme.accordionLines &&\n !$shouldHideBottomLine)\n ) {\n if ($shouldForceBottomLine) {\n return css`\n border-bottom: ${$shouldShowSeparatorBelow ? '4px' : '1px'} solid\n rgba(${theme['headline-rgb']}, 1);\n `;\n }\n\n return css`\n &&:not(:last-child) {\n border-bottom: ${$shouldShowSeparatorBelow ? '4px' : '1px'} solid\n rgba(${theme['headline-rgb']}, 1);\n }\n `;\n }\n\n return undefined;\n }}\n\n ${({ $isWrapped }) =>\n $isWrapped &&\n css`\n padding-left: 26px;\n `}\n`;\n\nexport const StyledListItemTooltip = styled.div`\n padding: 6px;\n`;\n"],"mappings":"AACA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAoB/C,OAAO,MAAMC,cAAc,GAAGF,MAAM,CAACG,GAAwB;AAC7D;AACA;AACA;AACA,MAAM,CAAC;EAAEC,cAAc;EAAEC;AAA0C,CAAC,KAC5DD,cAAc,IACdH,GAAG;AACX,4BAA4BI,oBAAoB,GAAG,MAAM,GAAG,KAAK;AACjE,SAAS;AACT;AACA,MAAM,CAAC;EACCD,cAAc;EACdE,OAAO;EACPC,kBAAkB;EAClBC,sBAAsB;EACtBC,KAAK;EACLC,WAAW;EACXC;AAGJ,CAAC,KACG,CAAE,CAACP,cAAc,IAAIE,OAAO,IAAKE,sBAAsB,IAAIG,WAAW,KACtEV,GAAG;AACX;AACA,kBAAkBM,kBAAkB,IAAIG,WAAW,GAAGD,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,SAAS,CAAC;AACzF,kBAAkBA,KAAK,CAACG,qBAAqB;AAC7C;AACA,SAAS;AACT;AACA,MAAM,CAAC;EAAEC,gBAAgB;EAAET,cAAc;EAAEE,OAAO;EAAEE;AAAuB,CAAC,KACpEK,gBAAgB,KACd,CAACT,cAAc,IAAIE,OAAO,IAAKE,sBAAsB,CAAC,IACxDP,GAAG;AACX,gCAAgCY,gBAAgB;AAChD,SAAS;AACT;AACA,MAAM,CAAC;EACCC,YAAY;EACZV,cAAc;EACdG,kBAAkB;EAClBG,WAAW;EACXD;AAGJ,CAAC,KACGK,YAAY,IACZ,CAACV,cAAc,IACfH,GAAG;AACX;AACA;AACA,sBAAsBM,kBAAkB,IAAIG,WAAW,GAAGD,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,SAAS,CAAC;AAC7F,sBAAsBA,KAAK,CAACG,qBAAqB;AACjD;AACA;AACA,SAAS;AACT;AACA,MAAM,CAAC;EACCR,cAAc;EACdE,OAAO;EACPS,UAAU;EACVC,qBAAqB;EACrBC,sBAAsB;EACtBC,yBAAyB;EACzBT;AACoC,CAAC,KAAK;EAC1C,IACIS,yBAAyB,IACxB,CAAC,CAACZ,OAAO,IAAIS,UAAU,IAAIX,cAAc,KACtCK,KAAK,CAACU,cAAc,IACpB,CAACH,qBAAsB,EAC7B;IACE,IAAIC,sBAAsB,EAAE;MACxB,OAAOhB,GAAG;AAC1B,qCAAqCiB,yBAAyB,GAAG,KAAK,GAAG,KAAK;AAC9E,+BAA+BT,KAAK,CAAC,cAAc,CAAC;AACpD,iBAAiB;IACL;IAEA,OAAOR,GAAG;AACtB;AACA,qCAAqCiB,yBAAyB,GAAG,KAAK,GAAG,KAAK;AAC9E,+BAA+BT,KAAK,CAAC,cAAc,CAAC;AACpD;AACA,aAAa;EACL;EAEA,OAAOW,SAAS;AACpB,CAAC;AACL;AACA,MAAM,CAAC;EAAEL;AAAW,CAAC,KACbA,UAAU,IACVd,GAAG;AACX;AACA,SAAS;AACT,CAAC;AAED,OAAO,MAAMoB,qBAAqB,GAAGrB,MAAM,CAACG,GAAG;AAC/C;AACA,CAAC","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const MasonryContext = /*#__PURE__*/createContext(undefined);
3
+ export const useMasonryContext = () => {
4
+ const context = useContext(MasonryContext);
5
+ if (!context) {
6
+ throw new Error('Masonry.Item must be used inside Masonry.');
7
+ }
8
+ return context;
9
+ };
10
+ //# sourceMappingURL=Masonry.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.context.js","names":["createContext","useContext","MasonryContext","undefined","useMasonryContext","context","Error"],"sources":["../../../../src/components/masonry/Masonry.context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport { MasonryContextValue } from './Masonry.types';\n\nexport const MasonryContext = createContext<MasonryContextValue | undefined>(undefined);\n\nexport const useMasonryContext = () => {\n const context = useContext(MasonryContext);\n\n if (!context) {\n throw new Error('Masonry.Item must be used inside Masonry.');\n }\n\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAGjD,OAAO,MAAMC,cAAc,gBAAGF,aAAa,CAAkCG,SAAS,CAAC;AAEvF,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EACnC,MAAMC,OAAO,GAAGJ,UAAU,CAACC,cAAc,CAAC;EAE1C,IAAI,CAACG,OAAO,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,2CAA2C,CAAC;EAChE;EAEA,OAAOD,OAAO;AAClB,CAAC","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import { Children, useMemo } from 'react';
2
+ import { calculateColumnCount, calculateRowSpan, getMasonryItemKey, packMasonryGrid } from './Masonry.utils';
3
+ export const useMasonryItems = ({
4
+ children
5
+ }) => useMemo(() => Children.toArray(children), [children]);
6
+ export const useMasonryLayout = ({
7
+ items,
8
+ itemHeights,
9
+ columnCount,
10
+ columnWidth,
11
+ rowHeight,
12
+ gap
13
+ }) => useMemo(() => {
14
+ const layoutItems = items.map((item, index) => {
15
+ const key = getMasonryItemKey(item, index);
16
+ const height = itemHeights[key] ?? rowHeight;
17
+ return {
18
+ key,
19
+ columns: item.props.columns ?? 1,
20
+ rows: calculateRowSpan({
21
+ height,
22
+ rowHeight,
23
+ gap
24
+ })
25
+ };
26
+ });
27
+ return packMasonryGrid({
28
+ items: layoutItems,
29
+ columnCount,
30
+ columnWidth,
31
+ rowHeight,
32
+ gap
33
+ });
34
+ }, [items, itemHeights, columnCount, columnWidth, rowHeight, gap]);
35
+ export const useMasonryColumnCount = ({
36
+ containerWidth,
37
+ columnWidth,
38
+ gap
39
+ }) => useMemo(() => calculateColumnCount({
40
+ containerWidth,
41
+ columnWidth,
42
+ gap
43
+ }), [containerWidth, columnWidth, gap]);
44
+ //# sourceMappingURL=Masonry.hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.hooks.js","names":["Children","useMemo","calculateColumnCount","calculateRowSpan","getMasonryItemKey","packMasonryGrid","useMasonryItems","children","toArray","useMasonryLayout","items","itemHeights","columnCount","columnWidth","rowHeight","gap","layoutItems","map","item","index","key","height","columns","props","rows","useMasonryColumnCount","containerWidth"],"sources":["../../../../src/components/masonry/Masonry.hooks.ts"],"sourcesContent":["import { Children, ReactNode, useMemo } from 'react';\nimport { MasonryChild, MasonryItemProps, MasonryLayoutItem } from './Masonry.types';\nimport {\n calculateColumnCount,\n calculateRowSpan,\n getMasonryItemKey,\n packMasonryGrid,\n} from './Masonry.utils';\n\ninterface UseMasonryItemsParams {\n children: ReactNode;\n}\n\nexport const useMasonryItems = ({ children }: UseMasonryItemsParams) =>\n useMemo(() => Children.toArray(children) as MasonryChild[], [children]);\n\ninterface UseMasonryLayoutParams {\n items: MasonryChild[];\n itemHeights: Record<string, number>;\n columnCount: number;\n columnWidth: number;\n rowHeight: number;\n gap: number;\n}\n\nexport const useMasonryLayout = ({\n items,\n itemHeights,\n columnCount,\n columnWidth,\n rowHeight,\n gap,\n}: UseMasonryLayoutParams) =>\n useMemo(() => {\n const layoutItems: MasonryLayoutItem[] = items.map((item, index) => {\n const key = getMasonryItemKey(item as React.ReactElement<MasonryItemProps>, index);\n\n const height = itemHeights[key] ?? rowHeight;\n\n return {\n key,\n columns: item.props.columns ?? 1,\n rows: calculateRowSpan({\n height,\n rowHeight,\n gap,\n }),\n };\n });\n\n return packMasonryGrid({\n items: layoutItems,\n columnCount,\n columnWidth,\n rowHeight,\n gap,\n });\n }, [items, itemHeights, columnCount, columnWidth, rowHeight, gap]);\n\ninterface UseMasonryColumnCountParams {\n containerWidth: number;\n columnWidth: number;\n gap: number;\n}\n\nexport const useMasonryColumnCount = ({\n containerWidth,\n columnWidth,\n gap,\n}: UseMasonryColumnCountParams) =>\n useMemo(\n () =>\n calculateColumnCount({\n containerWidth,\n columnWidth,\n gap,\n }),\n [containerWidth, columnWidth, gap],\n );\n"],"mappings":"AAAA,SAASA,QAAQ,EAAaC,OAAO,QAAQ,OAAO;AAEpD,SACIC,oBAAoB,EACpBC,gBAAgB,EAChBC,iBAAiB,EACjBC,eAAe,QACZ,iBAAiB;AAMxB,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAAEC;AAAgC,CAAC,KAC/DN,OAAO,CAAC,MAAMD,QAAQ,CAACQ,OAAO,CAACD,QAAQ,CAAmB,EAAE,CAACA,QAAQ,CAAC,CAAC;AAW3E,OAAO,MAAME,gBAAgB,GAAGA,CAAC;EAC7BC,KAAK;EACLC,WAAW;EACXC,WAAW;EACXC,WAAW;EACXC,SAAS;EACTC;AACoB,CAAC,KACrBd,OAAO,CAAC,MAAM;EACV,MAAMe,WAAgC,GAAGN,KAAK,CAACO,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;IAChE,MAAMC,GAAG,GAAGhB,iBAAiB,CAACc,IAAI,EAA0CC,KAAK,CAAC;IAElF,MAAME,MAAM,GAAGV,WAAW,CAACS,GAAG,CAAC,IAAIN,SAAS;IAE5C,OAAO;MACHM,GAAG;MACHE,OAAO,EAAEJ,IAAI,CAACK,KAAK,CAACD,OAAO,IAAI,CAAC;MAChCE,IAAI,EAAErB,gBAAgB,CAAC;QACnBkB,MAAM;QACNP,SAAS;QACTC;MACJ,CAAC;IACL,CAAC;EACL,CAAC,CAAC;EAEF,OAAOV,eAAe,CAAC;IACnBK,KAAK,EAAEM,WAAW;IAClBJ,WAAW;IACXC,WAAW;IACXC,SAAS;IACTC;EACJ,CAAC,CAAC;AACN,CAAC,EAAE,CAACL,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,WAAW,EAAEC,SAAS,EAAEC,GAAG,CAAC,CAAC;AAQtE,OAAO,MAAMU,qBAAqB,GAAGA,CAAC;EAClCC,cAAc;EACdb,WAAW;EACXE;AACyB,CAAC,KAC1Bd,OAAO,CACH,MACIC,oBAAoB,CAAC;EACjBwB,cAAc;EACdb,WAAW;EACXE;AACJ,CAAC,CAAC,EACN,CAACW,cAAc,EAAEb,WAAW,EAAEE,GAAG,CACrC,CAAC","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
2
+ import { AnimatePresence } from 'motion/react';
3
+ import { useElementSize } from '../../hooks/element';
4
+ import { MasonryContext } from './Masonry.context';
5
+ import { StyledMasonry } from './Masonry.styles';
6
+ import { useMasonryColumnCount, useMasonryItems, useMasonryLayout } from './Masonry.hooks';
7
+ import { getMasonryItemKey } from './Masonry.utils';
8
+ import MasonryItem, { InternalMasonryItem } from './masonry-item/MasonryItem';
9
+ const MasonryBase = ({
10
+ children,
11
+ gap = 8,
12
+ columnWidth = 80,
13
+ rowHeight = 80
14
+ }) => {
15
+ const ref = useRef(null);
16
+ const size = useElementSize(ref);
17
+ const containerWidth = size?.width ?? 0;
18
+ const [itemHeights, setItemHeights] = useState({});
19
+ const items = useMasonryItems({
20
+ children
21
+ });
22
+ const columnCount = useMasonryColumnCount({
23
+ containerWidth,
24
+ columnWidth,
25
+ gap
26
+ });
27
+ const layout = useMasonryLayout({
28
+ items,
29
+ itemHeights,
30
+ columnCount,
31
+ columnWidth,
32
+ rowHeight,
33
+ gap
34
+ });
35
+ const registerItem = useCallback((key, height) => {
36
+ setItemHeights(currentHeights => {
37
+ if (currentHeights[key] === height) {
38
+ return currentHeights;
39
+ }
40
+ return {
41
+ ...currentHeights,
42
+ [key]: height
43
+ };
44
+ });
45
+ }, []);
46
+ const contextValue = useMemo(() => ({
47
+ registerItem
48
+ }), [registerItem]);
49
+ return /*#__PURE__*/React.createElement(MasonryContext.Provider, {
50
+ value: contextValue
51
+ }, /*#__PURE__*/React.createElement(StyledMasonry, {
52
+ ref: ref,
53
+ $height: layout.height
54
+ }, /*#__PURE__*/React.createElement(AnimatePresence, null, items.map((item, index) => {
55
+ const key = getMasonryItemKey(item, index);
56
+ const packedItem = layout.items[key];
57
+ if (!packedItem) {
58
+ return null;
59
+ }
60
+ return /*#__PURE__*/React.createElement(InternalMasonryItem, {
61
+ key: key,
62
+ itemKey: key,
63
+ x: packedItem.x,
64
+ y: packedItem.y,
65
+ width: packedItem.width
66
+ }, item.props.children);
67
+ }))));
68
+ };
69
+ MasonryBase.displayName = 'Masonry';
70
+ const Masonry = Object.assign(MasonryBase, {
71
+ Item: MasonryItem
72
+ });
73
+ export default Masonry;
74
+ //# sourceMappingURL=Masonry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.js","names":["React","useCallback","useMemo","useRef","useState","AnimatePresence","useElementSize","MasonryContext","StyledMasonry","useMasonryColumnCount","useMasonryItems","useMasonryLayout","getMasonryItemKey","MasonryItem","InternalMasonryItem","MasonryBase","children","gap","columnWidth","rowHeight","ref","size","containerWidth","width","itemHeights","setItemHeights","items","columnCount","layout","registerItem","key","height","currentHeights","contextValue","createElement","Provider","value","$height","map","item","index","packedItem","itemKey","x","y","props","displayName","Masonry","Object","assign","Item"],"sources":["../../../../src/components/masonry/Masonry.tsx"],"sourcesContent":["import React, { FC, useCallback, useMemo, useRef, useState } from 'react';\nimport { AnimatePresence } from 'motion/react';\nimport { useElementSize } from '../../hooks/element';\nimport { MasonryComponent, MasonryItemProps, MasonryProps } from './Masonry.types';\nimport { MasonryContext } from './Masonry.context';\nimport { StyledMasonry } from './Masonry.styles';\nimport { useMasonryColumnCount, useMasonryItems, useMasonryLayout } from './Masonry.hooks';\nimport { getMasonryItemKey } from './Masonry.utils';\nimport MasonryItem, { InternalMasonryItem } from './masonry-item/MasonryItem';\n\nconst MasonryBase: FC<MasonryProps> = ({ children, gap = 8, columnWidth = 80, rowHeight = 80 }) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const size = useElementSize(ref);\n\n const containerWidth = size?.width ?? 0;\n\n const [itemHeights, setItemHeights] = useState<Record<string, number>>({});\n\n const items = useMasonryItems({ children });\n\n const columnCount = useMasonryColumnCount({\n containerWidth,\n columnWidth,\n gap,\n });\n\n const layout = useMasonryLayout({\n items,\n itemHeights,\n columnCount,\n columnWidth,\n rowHeight,\n gap,\n });\n\n const registerItem = useCallback((key: string, height: number) => {\n setItemHeights((currentHeights) => {\n if (currentHeights[key] === height) {\n return currentHeights;\n }\n\n return {\n ...currentHeights,\n [key]: height,\n };\n });\n }, []);\n\n const contextValue = useMemo(\n () => ({\n registerItem,\n }),\n [registerItem],\n );\n\n return (\n <MasonryContext.Provider value={contextValue}>\n <StyledMasonry ref={ref} $height={layout.height}>\n <AnimatePresence>\n {items.map((item, index) => {\n const key = getMasonryItemKey(\n item as React.ReactElement<MasonryItemProps>,\n index,\n );\n\n const packedItem = layout.items[key];\n\n if (!packedItem) {\n return null;\n }\n\n return (\n <InternalMasonryItem\n key={key}\n itemKey={key}\n x={packedItem.x}\n y={packedItem.y}\n width={packedItem.width}\n >\n {item.props.children}\n </InternalMasonryItem>\n );\n })}\n </AnimatePresence>\n </StyledMasonry>\n </MasonryContext.Provider>\n );\n};\n\nMasonryBase.displayName = 'Masonry';\n\nconst Masonry = Object.assign(MasonryBase, {\n Item: MasonryItem,\n}) as MasonryComponent;\n\nexport default Masonry;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import styled from 'styled-components';
2
+ export const StyledMasonry = styled.div`
3
+ position: relative;
4
+ width: 100%;
5
+ height: ${({
6
+ $height
7
+ }) => $height}px;
8
+ `;
9
+ //# sourceMappingURL=Masonry.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.styles.js","names":["styled","StyledMasonry","div","$height"],"sources":["../../../../src/components/masonry/Masonry.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledMasonry = styled.div<{ $height: number }>`\n position: relative;\n width: 100%;\n height: ${({ $height }) => $height}px;\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,MAAMC,aAAa,GAAGD,MAAM,CAACE,GAAwB;AAC5D;AACA;AACA,cAAc,CAAC;EAAEC;AAAQ,CAAC,KAAKA,OAAO;AACtC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Masonry.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.types.js","names":[],"sources":["../../../../src/components/masonry/Masonry.types.ts"],"sourcesContent":["import { ReactElement, ReactNode } from 'react';\n\nexport interface MasonryProps {\n children: ReactNode;\n gap?: number;\n columnWidth?: number;\n rowHeight?: number;\n}\n\nexport interface MasonryItemProps {\n children: ReactNode;\n columns?: number;\n}\n\nexport interface MasonryContextValue {\n registerItem: (key: string, height: number) => void;\n}\n\nexport interface MasonryLayoutItem {\n key: string;\n columns: number;\n rows: number;\n}\n\nexport interface PackedMasonryItem {\n key: string;\n x: number;\n y: number;\n width: number;\n}\n\nexport interface PackedMasonryGrid {\n items: Record<string, PackedMasonryItem>;\n height: number;\n}\n\nexport interface InternalMasonryItemProps {\n children: ReactNode;\n itemKey: string;\n x: number;\n y: number;\n width: number;\n}\n\nexport type MasonryChild = ReactElement<MasonryItemProps>;\n\nexport type MasonryComponent = React.FC<MasonryProps> & {\n Item: React.FC<MasonryItemProps>;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,110 @@
1
+ export const getMasonryItemKey = (item, index) => item.key != null ? String(item.key) : String(index);
2
+ const isAreaFree = ({
3
+ grid,
4
+ startColumn,
5
+ startRow,
6
+ columns,
7
+ rows,
8
+ columnCount
9
+ }) => {
10
+ if (startColumn + columns > columnCount) {
11
+ return false;
12
+ }
13
+ for (let row = startRow; row < startRow + rows; row += 1) {
14
+ for (let column = startColumn; column < startColumn + columns; column += 1) {
15
+ if (grid[row]?.[column]) {
16
+ return false;
17
+ }
18
+ }
19
+ }
20
+ return true;
21
+ };
22
+ const occupyArea = ({
23
+ grid,
24
+ startColumn,
25
+ startRow,
26
+ columns,
27
+ rows
28
+ }) => {
29
+ for (let row = startRow; row < startRow + rows; row += 1) {
30
+ if (!grid[row]) {
31
+ // eslint-disable-next-line no-param-reassign
32
+ grid[row] = [];
33
+ }
34
+ for (let column = startColumn; column < startColumn + columns; column += 1) {
35
+ // eslint-disable-next-line no-param-reassign
36
+ grid[row][column] = true;
37
+ }
38
+ }
39
+ };
40
+ export const packMasonryGrid = ({
41
+ items,
42
+ columnCount,
43
+ columnWidth,
44
+ rowHeight,
45
+ gap
46
+ }) => {
47
+ const grid = [];
48
+ const packedItems = {};
49
+ let maxRow = 0;
50
+ items.forEach(item => {
51
+ const columns = Math.min(Math.max(item.columns, 1), columnCount);
52
+ const rows = Math.max(item.rows, 1);
53
+ let placed = false;
54
+ let row = 0;
55
+ while (!placed) {
56
+ for (let column = 0; column < columnCount; column += 1) {
57
+ const canPlaceItem = isAreaFree({
58
+ grid,
59
+ startColumn: column,
60
+ startRow: row,
61
+ columns,
62
+ rows,
63
+ columnCount
64
+ });
65
+ if (!canPlaceItem) {
66
+ continue;
67
+ }
68
+ occupyArea({
69
+ grid,
70
+ startColumn: column,
71
+ startRow: row,
72
+ columns,
73
+ rows
74
+ });
75
+ packedItems[item.key] = {
76
+ key: item.key,
77
+ x: column * (columnWidth + gap),
78
+ y: row * (rowHeight + gap),
79
+ width: columns * columnWidth + (columns - 1) * gap
80
+ };
81
+ maxRow = Math.max(maxRow, row + rows);
82
+ placed = true;
83
+ break;
84
+ }
85
+ if (!placed) {
86
+ row += 1;
87
+ }
88
+ }
89
+ });
90
+ return {
91
+ items: packedItems,
92
+ height: maxRow * rowHeight + Math.max(0, maxRow - 1) * gap
93
+ };
94
+ };
95
+ export const calculateColumnCount = ({
96
+ containerWidth,
97
+ columnWidth,
98
+ gap
99
+ }) => {
100
+ if (!containerWidth) {
101
+ return 1;
102
+ }
103
+ return Math.max(1, Math.floor((containerWidth + gap) / (columnWidth + gap)));
104
+ };
105
+ export const calculateRowSpan = ({
106
+ height,
107
+ rowHeight,
108
+ gap
109
+ }) => Math.max(1, Math.ceil((height + gap) / (rowHeight + gap)));
110
+ //# sourceMappingURL=Masonry.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Masonry.utils.js","names":["getMasonryItemKey","item","index","key","String","isAreaFree","grid","startColumn","startRow","columns","rows","columnCount","row","column","occupyArea","packMasonryGrid","items","columnWidth","rowHeight","gap","packedItems","maxRow","forEach","Math","min","max","placed","canPlaceItem","x","y","width","height","calculateColumnCount","containerWidth","floor","calculateRowSpan","ceil"],"sources":["../../../../src/components/masonry/Masonry.utils.ts"],"sourcesContent":["import { ReactElement } from 'react';\nimport {\n MasonryItemProps,\n MasonryLayoutItem,\n PackedMasonryGrid,\n PackedMasonryItem,\n} from './Masonry.types';\n\nexport const getMasonryItemKey = (item: ReactElement<MasonryItemProps>, index: number) =>\n item.key != null ? String(item.key) : String(index);\n\ninterface IsAreaFreeParams {\n grid: boolean[][];\n startColumn: number;\n startRow: number;\n columns: number;\n rows: number;\n columnCount: number;\n}\n\nconst isAreaFree = ({\n grid,\n startColumn,\n startRow,\n columns,\n rows,\n columnCount,\n}: IsAreaFreeParams) => {\n if (startColumn + columns > columnCount) {\n return false;\n }\n\n for (let row = startRow; row < startRow + rows; row += 1) {\n for (let column = startColumn; column < startColumn + columns; column += 1) {\n if (grid[row]?.[column]) {\n return false;\n }\n }\n }\n\n return true;\n};\n\ninterface OccupyAreaParams {\n grid: boolean[][];\n startColumn: number;\n startRow: number;\n columns: number;\n rows: number;\n}\n\nconst occupyArea = ({ grid, startColumn, startRow, columns, rows }: OccupyAreaParams) => {\n for (let row = startRow; row < startRow + rows; row += 1) {\n if (!grid[row]) {\n // eslint-disable-next-line no-param-reassign\n grid[row] = [];\n }\n\n for (let column = startColumn; column < startColumn + columns; column += 1) {\n // eslint-disable-next-line no-param-reassign\n (grid[row] as boolean[])[column] = true;\n }\n }\n};\n\ninterface PackMasonryGridParams {\n items: MasonryLayoutItem[];\n columnCount: number;\n columnWidth: number;\n rowHeight: number;\n gap: number;\n}\n\nexport const packMasonryGrid = ({\n items,\n columnCount,\n columnWidth,\n rowHeight,\n gap,\n}: PackMasonryGridParams): PackedMasonryGrid => {\n const grid: boolean[][] = [];\n const packedItems: Record<string, PackedMasonryItem> = {};\n\n let maxRow = 0;\n\n items.forEach((item) => {\n const columns = Math.min(Math.max(item.columns, 1), columnCount);\n const rows = Math.max(item.rows, 1);\n\n let placed = false;\n let row = 0;\n\n while (!placed) {\n for (let column = 0; column < columnCount; column += 1) {\n const canPlaceItem = isAreaFree({\n grid,\n startColumn: column,\n startRow: row,\n columns,\n rows,\n columnCount,\n });\n\n if (!canPlaceItem) {\n continue;\n }\n\n occupyArea({\n grid,\n startColumn: column,\n startRow: row,\n columns,\n rows,\n });\n\n packedItems[item.key] = {\n key: item.key,\n x: column * (columnWidth + gap),\n y: row * (rowHeight + gap),\n width: columns * columnWidth + (columns - 1) * gap,\n };\n\n maxRow = Math.max(maxRow, row + rows);\n placed = true;\n break;\n }\n\n if (!placed) {\n row += 1;\n }\n }\n });\n\n return {\n items: packedItems,\n height: maxRow * rowHeight + Math.max(0, maxRow - 1) * gap,\n };\n};\n\nexport const calculateColumnCount = ({\n containerWidth,\n columnWidth,\n gap,\n}: {\n containerWidth: number;\n columnWidth: number;\n gap: number;\n}) => {\n if (!containerWidth) {\n return 1;\n }\n\n return Math.max(1, Math.floor((containerWidth + gap) / (columnWidth + gap)));\n};\n\nexport const calculateRowSpan = ({\n height,\n rowHeight,\n gap,\n}: {\n height: number;\n rowHeight: number;\n gap: number;\n}) => Math.max(1, Math.ceil((height + gap) / (rowHeight + gap)));\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { useMasonryContext } from '../Masonry.context';
3
+ import { StyledMasonryItem } from './MasonryItem.styles';
4
+ const MasonryItem = ({
5
+ children
6
+ }) => /*#__PURE__*/React.createElement(React.Fragment, null, children);
7
+ export const InternalMasonryItem = ({
8
+ children,
9
+ itemKey,
10
+ x,
11
+ y,
12
+ width
13
+ }) => {
14
+ const ref = useRef(null);
15
+ const {
16
+ registerItem
17
+ } = useMasonryContext();
18
+ useEffect(() => {
19
+ const element = ref.current;
20
+ if (!element) {
21
+ return undefined;
22
+ }
23
+ let frameId;
24
+ const updateHeight = () => {
25
+ if (frameId) {
26
+ window.cancelAnimationFrame(frameId);
27
+ }
28
+ frameId = window.requestAnimationFrame(() => {
29
+ registerItem(itemKey, element.getBoundingClientRect().height);
30
+ });
31
+ };
32
+ updateHeight();
33
+ const observer = new ResizeObserver(updateHeight);
34
+ observer.observe(element);
35
+ return () => {
36
+ if (frameId) {
37
+ window.cancelAnimationFrame(frameId);
38
+ }
39
+ observer.disconnect();
40
+ };
41
+ }, [itemKey, registerItem, width]);
42
+ return /*#__PURE__*/React.createElement(StyledMasonryItem, {
43
+ ref: ref,
44
+ initial: {
45
+ opacity: 0,
46
+ scale: 0.96
47
+ },
48
+ animate: {
49
+ opacity: 1,
50
+ scale: 1,
51
+ x,
52
+ y,
53
+ width
54
+ },
55
+ exit: {
56
+ opacity: 0,
57
+ scale: 0.96
58
+ },
59
+ transition: {
60
+ type: 'spring',
61
+ stiffness: 320,
62
+ damping: 34,
63
+ mass: 0.85
64
+ }
65
+ }, children);
66
+ };
67
+ MasonryItem.displayName = 'Masonry.Item';
68
+ export default MasonryItem;
69
+ //# sourceMappingURL=MasonryItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasonryItem.js","names":["React","useEffect","useRef","useMasonryContext","StyledMasonryItem","MasonryItem","children","createElement","Fragment","InternalMasonryItem","itemKey","x","y","width","ref","registerItem","element","current","undefined","frameId","updateHeight","window","cancelAnimationFrame","requestAnimationFrame","getBoundingClientRect","height","observer","ResizeObserver","observe","disconnect","initial","opacity","scale","animate","exit","transition","type","stiffness","damping","mass","displayName"],"sources":["../../../../../src/components/masonry/masonry-item/MasonryItem.tsx"],"sourcesContent":["import React, { FC, useEffect, useRef } from 'react';\nimport { InternalMasonryItemProps, MasonryItemProps } from '../Masonry.types';\nimport { useMasonryContext } from '../Masonry.context';\nimport { StyledMasonryItem } from './MasonryItem.styles';\n\nconst MasonryItem: FC<MasonryItemProps> = ({ children }) => <>{children}</>;\n\nexport const InternalMasonryItem: FC<InternalMasonryItemProps> = ({\n children,\n itemKey,\n x,\n y,\n width,\n}) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const { registerItem } = useMasonryContext();\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return undefined;\n }\n\n let frameId: number | undefined;\n\n const updateHeight = () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n registerItem(itemKey, element.getBoundingClientRect().height);\n });\n };\n\n updateHeight();\n\n const observer = new ResizeObserver(updateHeight);\n\n observer.observe(element);\n\n return () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n observer.disconnect();\n };\n }, [itemKey, registerItem, width]);\n\n return (\n <StyledMasonryItem\n ref={ref}\n initial={{\n opacity: 0,\n scale: 0.96,\n }}\n animate={{\n opacity: 1,\n scale: 1,\n x,\n y,\n width,\n }}\n exit={{\n opacity: 0,\n scale: 0.96,\n }}\n transition={{\n type: 'spring',\n stiffness: 320,\n damping: 34,\n mass: 0.85,\n }}\n >\n {children}\n </StyledMasonryItem>\n );\n};\n\nMasonryItem.displayName = 'Masonry.Item';\n\nexport default MasonryItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAQC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEpD,SAASC,iBAAiB,QAAQ,oBAAoB;AACtD,SAASC,iBAAiB,QAAQ,sBAAsB;AAExD,MAAMC,WAAiC,GAAGA,CAAC;EAAEC;AAAS,CAAC,kBAAKN,KAAA,CAAAO,aAAA,CAAAP,KAAA,CAAAQ,QAAA,QAAGF,QAAW,CAAC;AAE3E,OAAO,MAAMG,mBAAiD,GAAGA,CAAC;EAC9DH,QAAQ;EACRI,OAAO;EACPC,CAAC;EACDC,CAAC;EACDC;AACJ,CAAC,KAAK;EACF,MAAMC,GAAG,GAAGZ,MAAM,CAAwB,IAAI,CAAC;EAC/C,MAAM;IAAEa;EAAa,CAAC,GAAGZ,iBAAiB,CAAC,CAAC;EAE5CF,SAAS,CAAC,MAAM;IACZ,MAAMe,OAAO,GAAGF,GAAG,CAACG,OAAO;IAE3B,IAAI,CAACD,OAAO,EAAE;MACV,OAAOE,SAAS;IACpB;IAEA,IAAIC,OAA2B;IAE/B,MAAMC,YAAY,GAAGA,CAAA,KAAM;MACvB,IAAID,OAAO,EAAE;QACTE,MAAM,CAACC,oBAAoB,CAACH,OAAO,CAAC;MACxC;MAEAA,OAAO,GAAGE,MAAM,CAACE,qBAAqB,CAAC,MAAM;QACzCR,YAAY,CAACL,OAAO,EAAEM,OAAO,CAACQ,qBAAqB,CAAC,CAAC,CAACC,MAAM,CAAC;MACjE,CAAC,CAAC;IACN,CAAC;IAEDL,YAAY,CAAC,CAAC;IAEd,MAAMM,QAAQ,GAAG,IAAIC,cAAc,CAACP,YAAY,CAAC;IAEjDM,QAAQ,CAACE,OAAO,CAACZ,OAAO,CAAC;IAEzB,OAAO,MAAM;MACT,IAAIG,OAAO,EAAE;QACTE,MAAM,CAACC,oBAAoB,CAACH,OAAO,CAAC;MACxC;MAEAO,QAAQ,CAACG,UAAU,CAAC,CAAC;IACzB,CAAC;EACL,CAAC,EAAE,CAACnB,OAAO,EAAEK,YAAY,EAAEF,KAAK,CAAC,CAAC;EAElC,oBACIb,KAAA,CAAAO,aAAA,CAACH,iBAAiB;IACdU,GAAG,EAAEA,GAAI;IACTgB,OAAO,EAAE;MACLC,OAAO,EAAE,CAAC;MACVC,KAAK,EAAE;IACX,CAAE;IACFC,OAAO,EAAE;MACLF,OAAO,EAAE,CAAC;MACVC,KAAK,EAAE,CAAC;MACRrB,CAAC;MACDC,CAAC;MACDC;IACJ,CAAE;IACFqB,IAAI,EAAE;MACFH,OAAO,EAAE,CAAC;MACVC,KAAK,EAAE;IACX,CAAE;IACFG,UAAU,EAAE;MACRC,IAAI,EAAE,QAAQ;MACdC,SAAS,EAAE,GAAG;MACdC,OAAO,EAAE,EAAE;MACXC,IAAI,EAAE;IACV;EAAE,GAEDjC,QACc,CAAC;AAE5B,CAAC;AAEDD,WAAW,CAACmC,WAAW,GAAG,cAAc;AAExC,eAAenC,WAAW","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import styled from 'styled-components';
2
+ import { motion } from 'motion/react';
3
+ export const StyledMasonryItem = styled(motion.div)`
4
+ position: absolute;
5
+ top: 0;
6
+ left: 0;
7
+ overflow: hidden;
8
+ will-change: transform, width;
9
+ `;
10
+ //# sourceMappingURL=MasonryItem.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MasonryItem.styles.js","names":["styled","motion","StyledMasonryItem","div"],"sources":["../../../../../src/components/masonry/masonry-item/MasonryItem.styles.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { motion } from 'motion/react';\n\nexport const StyledMasonryItem = styled(motion.div)`\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n will-change: transform, width;\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AACtC,SAASC,MAAM,QAAQ,cAAc;AAErC,OAAO,MAAMC,iBAAiB,GAAGF,MAAM,CAACC,MAAM,CAACE,GAAG,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
@@ -157,4 +157,14 @@ export const useIsMeasuredClone = () => {
157
157
  }, []);
158
158
  return [isClone, ref];
159
159
  };
160
+ export const useIsInsideDialog = ref => {
161
+ const [isInsideDialog, setIsInsideDialog] = useState(false);
162
+ useEffect(() => {
163
+ if (!ref.current) {
164
+ return;
165
+ }
166
+ setIsInsideDialog(ref.current.closest('.dialog-inner') !== null);
167
+ }, [ref]);
168
+ return isInsideDialog;
169
+ };
160
170
  //# sourceMappingURL=element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["React","Children","cloneElement","isValidElement","useEffect","useRef","useState","isSameRect","a","b","width","height","x","y","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","target","current","parentElement","firstElementChild","undefined","frameId","updateSize","nextSize","window","cancelAnimationFrame","requestAnimationFrame","currentSize","getBoundingClientRect","observer","ResizeObserver","entry","contentRect","observe","disconnect","cloneWithTabIndex","node","element","type","Fragment","children","map","props","displayName","createElement","tabIndex","getClonedElement","content","preventEvents","onClick","e","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nconst isSameRect = (a?: DOMRectReadOnly, b?: DOMRectReadOnly) => {\n if (!a || !b) return false;\n\n return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;\n};\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target: HTMLElement | null = ref.current;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement ?? null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return undefined;\n\n let frameId: number | undefined;\n\n const updateSize = (nextSize: DOMRectReadOnly) => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n setSize((currentSize) =>\n isSameRect(currentSize, nextSize) ? currentSize : nextSize,\n );\n });\n };\n\n updateSize(target.getBoundingClientRect());\n\n const observer = new ResizeObserver(([entry]) => {\n if (!entry || entry.target !== target) return;\n\n updateSize(entry.contentRect);\n });\n\n observer.observe(target);\n\n return () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n observer.disconnect();\n };\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n if (element.type === React.Fragment) {\n const children = Children.map(element.props.children, cloneWithTabIndex);\n\n return cloneElement(element, {\n ...element.props,\n children,\n });\n }\n\n const children = element.props.children\n ? Children.map(element.props.children, cloneWithTabIndex)\n : element.props.children;\n\n if ((element.type as any).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"element.js","names":["React","Children","cloneElement","isValidElement","useEffect","useRef","useState","isSameRect","a","b","width","height","x","y","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","target","current","parentElement","firstElementChild","undefined","frameId","updateSize","nextSize","window","cancelAnimationFrame","requestAnimationFrame","currentSize","getBoundingClientRect","observer","ResizeObserver","entry","contentRect","observe","disconnect","cloneWithTabIndex","node","element","type","Fragment","children","map","props","displayName","createElement","tabIndex","getClonedElement","content","preventEvents","onClick","e","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute","useIsInsideDialog","isInsideDialog","setIsInsideDialog","closest"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nconst isSameRect = (a?: DOMRectReadOnly, b?: DOMRectReadOnly) => {\n if (!a || !b) return false;\n\n return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;\n};\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target: HTMLElement | null = ref.current;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement ?? null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return undefined;\n\n let frameId: number | undefined;\n\n const updateSize = (nextSize: DOMRectReadOnly) => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n setSize((currentSize) =>\n isSameRect(currentSize, nextSize) ? currentSize : nextSize,\n );\n });\n };\n\n updateSize(target.getBoundingClientRect());\n\n const observer = new ResizeObserver(([entry]) => {\n if (!entry || entry.target !== target) return;\n\n updateSize(entry.contentRect);\n });\n\n observer.observe(target);\n\n return () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n observer.disconnect();\n };\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n if (element.type === React.Fragment) {\n const children = Children.map(element.props.children, cloneWithTabIndex);\n\n return cloneElement(element, {\n ...element.props,\n children,\n });\n }\n\n const children = element.props.children\n ? Children.map(element.props.children, cloneWithTabIndex)\n : element.props.children;\n\n if ((element.type as any).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n\nexport const useIsInsideDialog = <T extends HTMLElement>(ref: MutableRefObject<T | null>) => {\n const [isInsideDialog, setIsInsideDialog] = useState(false);\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n setIsInsideDialog(ref.current.closest('.dialog-inner') !== null);\n }, [ref]);\n\n return isInsideDialog;\n};\n"],"mappings":"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","ignoreList":[]}
package/lib/esm/index.js CHANGED
@@ -81,4 +81,5 @@ export { uploadFile } from './utils/uploadFile';
81
81
  export { ComboBoxSize } from './components/combobox/ComboBox.types';
82
82
  export { default as Skeleton } from './components/skeleton';
83
83
  export { SkeletonAnimationType } from './components/skeleton/types';
84
+ export { default as Masonry } from './components/masonry/Masonry';
84
85
  //# sourceMappingURL=index.js.map