react-image-accordion 1.1.4 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -73,6 +73,8 @@ function MyComponent() {
73
73
  AccordionWidth={AccordionWidth}
74
74
  AccordionHeight={AccordionHeight}
75
75
  ContentSize=[ContentSize]
76
+ onClick={}
77
+ ShowButton={true/false}
76
78
  />
77
79
  );
78
80
  }
@@ -93,7 +95,8 @@ function MyComponent() {
93
95
  | AccordionWidth | css /optional| 50rem | Accordion Width |
94
96
  | AccordionHeight | css /optional| 30rem | Accordion Height |
95
97
  | ContentSize |Array /optional|[0,1,2,3,4]*| Content font size |
96
-
98
+ | onClick | onCLick | | onClick ATC event |
99
+ | ShowButton | boolean | false | show or hid button |
97
100
 
98
101
  *[0,1,2,3,4]
99
102
  ```
@@ -124,7 +127,9 @@ export const test = () => {
124
127
  accordionData= {MockAccordion}
125
128
  AccordionWidth= "40rem"
126
129
  AccordionHeight= "30rem"
127
- ContentSize= ["1rem", "1.2rem", "1.5rem", "1.8rem", "2rem"]
130
+ ContentSize={[".5rem", ".5rem", ".6rem", ".7rem", "1.1rem"]}
131
+ ShowButton= false,
132
+ onClick= (e) => console.log(e.id, e.title),
128
133
  />
129
134
  );
130
135
  };
package/dist/index.es.js CHANGED
@@ -27,16 +27,19 @@ function styleInject(css, ref) {
27
27
  }
28
28
  }
29
29
 
30
- var css_248z = "*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n color-scheme: dark;\n}\n\nbody {\n display: grid;\n justify-content: center;\n align-content: center;\n min-height: 100vh;\n\n margin: 0;\n font-family: system-ui;\n font-size: 1.125rem;\n line-height: 1.6;\n}\n\nimg {\n max-width: 100%;\n display: block;\n}\n\n.wrapper {\n /* max-width: 50rem; */\n margin-inline: auto;\n padding-inline: 1rem;\n}\n\n.accordion {\n --_button-size: 3rem;\n --_panel-padding: 0.75rem;\n --_panel-gap: 1rem;\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n@media (min-width: 45em) {\n .accordion {\n flex-direction: row;\n height: 30rem;\n }\n}\n\n.accordion * {\n margin: 0;\n}\n\n.accordion-panel {\n position: relative;\n isolation: isolate;\n flex-basis: calc((var(--_panel-padding) * 2) + var(--_button-size));\n overflow: hidden;\n padding: var(--_panel-padding);\n padding-right: calc(var(--_panel-padding) * 4);\n border-radius: calc(((var(--_panel-padding) * 2) + var(--_button-size)) / 2);\n cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel {\n transition: flex-basis 500ms, flex-grow 500ms;\n }\n}\n\n.accordion-panel:nth-child(1) {\n --_panel-color: red;\n}\n.accordion-panel:nth-child(2) {\n --_panel-color: blue;\n}\n.accordion-panel:nth-child(3) {\n --_panel-color: green;\n}\n.accordion-panel:nth-child(4) {\n --_panel-color: yellow;\n}\n.accordion-panel:nth-child(5) {\n --_panel-color: orange;\n}\n.accordion-panel:nth-child(6) {\n --_panel-color: purple;\n}\n.accordion-panel:nth-child(7) {\n --_panel-color: pink;\n}\n.accordion-panel:nth-child(8) {\n --_panel-color: brown;\n}\n.accordion-panel:nth-child(9) {\n --_panel-color: cyan;\n}\n.accordion-panel:nth-child(10) {\n --_panel-color: magenta;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) {\n flex-basis: clamp(15rem, 40vh, 20rem);\n flex-grow: 1;\n}\n\n.accordion-trigger {\n outline: 0 !important;\n}\n\n.accordion-panel:focus-within {\n outline: 3px solid var(--_panel-color);\n outline-offset: 4px;\n}\n\n.accordion-content > p {\n transform: translateY(2rem);\n opacity: 0;\n margin-left: calc(var(--_button-size) + var(--_panel-gap));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transition: transform 500ms 500ms, opacity 500ms 500ms;\n }\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transform: translateY(0);\n opacity: 1;\n}\n\n.accordion-title {\n font-size: 1.5rem;\n font-weight: 700;\n position: relative;\n isolation: isolate;\n display: grid;\n align-items: center;\n}\n\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-title {\n display: none;\n}\n\n@media (max-width: 44.999em) {\n .accordion-title::after {\n content: \"\";\n position: absolute;\n\n left: calc((var(--_panel-gap) + var(--_button-size)) * -1);\n width: calc(100% + (var(--_button-size) * 2));\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n z-index: -1;\n border-radius: 100vw;\n }\n}\n\n.accordion-image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n transition: filer 500ms;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-image {\n filter: brightness(0.5);\n}\n.accordion-trigger {\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n gap: var(--_panel-gap);\n background: transparent;\n border: 0;\n padding: 0;\n}\n.accordion-icon {\n fill: var(--_panel-color);\n background: hsl(0 0% 0% /0.55);\n width: var(--_button-size);\n aspect-ratio: 1/1;\n padding: 0.75rem;\n border-radius: 50%;\n z-index: 10;\n}\n";
30
+ var css_248z = "*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n color-scheme: dark;\n}\n\nbody {\n display: grid;\n justify-content: center;\n align-content: center;\n min-height: 100vh;\n\n margin: 0;\n font-family: system-ui;\n font-size: 1.125rem;\n line-height: 1.6;\n}\n\nimg {\n max-width: 100%;\n display: block;\n}\n\n.wrapper {\n /* max-width: 50rem; */\n margin-inline: auto;\n padding-inline: 1rem;\n}\n\n.accordion {\n --_button-size: 3rem;\n --_panel-padding: 0.75rem;\n --_panel-gap: 1rem;\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n@media (min-width: 45em) {\n .accordion {\n flex-direction: row;\n height: 30rem;\n }\n}\n\n.accordion * {\n margin: 0;\n}\n\n.accordion-panel {\n position: relative;\n isolation: isolate;\n flex-basis: calc((var(--_panel-padding) * 2) + var(--_button-size));\n overflow: hidden;\n padding: var(--_panel-padding);\n padding-right: calc(var(--_panel-padding) * 4);\n border-radius: calc(((var(--_panel-padding) * 2) + var(--_button-size)) / 2);\n cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel {\n transition: flex-basis 500ms, flex-grow 500ms;\n }\n}\n\n.accordion-panel:nth-child(1) {\n --_panel-color: red;\n}\n.accordion-panel:nth-child(2) {\n --_panel-color: blue;\n}\n.accordion-panel:nth-child(3) {\n --_panel-color: green;\n}\n.accordion-panel:nth-child(4) {\n --_panel-color: yellow;\n}\n.accordion-panel:nth-child(5) {\n --_panel-color: orange;\n}\n.accordion-panel:nth-child(6) {\n --_panel-color: purple;\n}\n.accordion-panel:nth-child(7) {\n --_panel-color: pink;\n}\n.accordion-panel:nth-child(8) {\n --_panel-color: brown;\n}\n.accordion-panel:nth-child(9) {\n --_panel-color: cyan;\n}\n.accordion-panel:nth-child(10) {\n --_panel-color: magenta;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) {\n flex-basis: clamp(15rem, 40vh, 20rem);\n flex-grow: 1;\n}\n\n.accordion-trigger {\n outline: 0 !important;\n}\n\n.accordion-panel:focus-within {\n outline: 3px solid var(--_panel-color);\n outline-offset: 4px;\n}\n\n.accordion-content > p {\n transform: translateY(2rem);\n opacity: 0;\n margin-left: calc(var(--_button-size) + var(--_panel-gap));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transition: transform 500ms 500ms, opacity 500ms 500ms;\n }\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transform: translateY(0);\n opacity: 1;\n}\n\n.accordion-title {\n font-size: 1.5rem;\n font-weight: 700;\n position: relative;\n isolation: isolate;\n display: grid;\n align-items: center;\n}\n\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-Link,\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-title {\n display: none;\n}\n\n@media (max-width: 44.999em) {\n .accordion-title::after {\n content: \"\";\n position: absolute;\n\n left: calc((var(--_panel-gap) + var(--_button-size)) * -1);\n width: calc(100% + (var(--_button-size) * 2));\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n z-index: -1;\n border-radius: 100vw;\n }\n}\n\n.accordion-Link {\n all:revert;\n display: block;\n position: relative;\n left: -0.1rem;\n /* bottom: 1rem; */\n width: 10rem;\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n border-radius: 100vw;\n padding: 0.75rem;\n font-weight: bolder;\n}\n\n.accordion-image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n transition: filer 500ms;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-image {\n filter: brightness(0.5);\n}\n.accordion-trigger {\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n gap: var(--_panel-gap);\n background: transparent;\n border: 0;\n padding: 0;\n}\n.accordion-icon {\n fill: var(--_panel-color);\n background: hsl(0 0% 0% /0.55);\n width: var(--_button-size);\n aspect-ratio: 1/1;\n padding: 0.75rem;\n border-radius: 50%;\n z-index: 10;\n}\n";
31
31
  styleInject(css_248z);
32
32
 
33
33
  function UseImageAccordion({
34
34
  accordionData,
35
35
  AccordionWidth,
36
36
  AccordionHeight,
37
- ContentSize
37
+ ContentSize,
38
+ onClick,
39
+ ShowButton
38
40
  }) {
39
41
  const [activePanel, setActivePanel] = useState(null);
42
+ const ContentSizeFont = ContentSize || [];
40
43
  function toggleAccordion(panelToActivate) {
41
44
  setActivePanel(prevPanel => {
42
45
  if (prevPanel === panelToActivate) {
@@ -46,28 +49,38 @@ function UseImageAccordion({
46
49
  }
47
50
  });
48
51
  }
49
- const HeightStyle = {
50
- "@media (max-width: 480px)": {
51
- height: AccordionHeight
52
+ const HeightStyle = `
53
+ @media (min-width: 768px) {
54
+ .AccHeight {
55
+ height: ${AccordionHeight};
56
+ }
57
+ }`;
58
+ const css = `
59
+ @media (max-width: 480px) {
60
+ .ContentSize {
61
+ font-size: ${ContentSizeFont[0] || "0.65rem"};
62
+ }
52
63
  }
53
- };
54
- const ContentStyle = {
55
- "@media (max-width: 480px)": {
56
- fontSize: ContentSize[0] || "0.65rem"
57
- },
58
- "@media (min-width: 481px) and (max-width: 768px)": {
59
- fontSize: ContentSize[1] || "0.8rem"
60
- },
61
- "@media (min-width: 769px) and (max-width: 1024px)": {
62
- fontSize: ContentSize[2] || "1rem"
63
- },
64
- "@media (min-width: 1025px) and (max-width: 1200px)": {
65
- fontSize: ContentSize[3] || "1.2rem"
66
- },
67
- "@media (min-width: 1201px)": {
68
- fontSize: ContentSize[4] || "1.5rem"
64
+ @media (min-width: 481px) and (max-width: 768px) {
65
+ .ContentSize {
66
+ font-size: ${ContentSizeFont[1] || "0.8rem"};
67
+ }
68
+ }
69
+ @media (min-width: 769px) and (max-width: 1024px) {
70
+ .ContentSize {
71
+ font-size: ${ContentSizeFont[2] || "1rem"};
72
+ }
69
73
  }
70
- };
74
+ @media (min-width: 1025px) and (max-width: 1200px) {
75
+ .ContentSize {
76
+ font-size: ${ContentSizeFont[3] || "1.2rem"};
77
+ }
78
+ }
79
+ @media (min-width: 1201px) {
80
+ .ContentSize {
81
+ font-size: ${ContentSizeFont[4] || "1.5rem"};
82
+ }
83
+ }`;
71
84
  useEffect(() => {
72
85
  setActivePanel(accordionData[0].id);
73
86
  }, []);
@@ -77,9 +90,10 @@ function UseImageAccordion({
77
90
  style: {
78
91
  width: AccordionWidth
79
92
  }
80
- }, /*#__PURE__*/React.createElement("div", {
81
- className: "accordion",
82
- style: HeightStyle
93
+ }, /*#__PURE__*/React.createElement("style", {
94
+ scoped: true
95
+ }, HeightStyle), /*#__PURE__*/React.createElement("div", {
96
+ className: "accordion AccHeight"
83
97
  }, accordionData.map(item => /*#__PURE__*/React.createElement("div", {
84
98
  key: item.id,
85
99
  className: "accordion-panel",
@@ -100,16 +114,32 @@ function UseImageAccordion({
100
114
  xmlns: "http://www.w3.org/2000/svg"
101
115
  }, /*#__PURE__*/React.createElement("image", {
102
116
  href: item.svg
103
- })))), /*#__PURE__*/React.createElement("div", {
104
- className: "accordion-content",
117
+ })))), /*#__PURE__*/React.createElement("style", {
118
+ scoped: true
119
+ }, css), /*#__PURE__*/React.createElement("div", {
120
+ className: "accordion-content ContentSize",
121
+ style: {
122
+ height: `calc(${AccordionHeight} - 5rem)`
123
+ },
105
124
  id: item.id,
106
125
  "aria-labelledby": item.id,
107
126
  "aria-hidden": activePanel !== item.id,
108
- role: "region",
109
- style: ContentStyle
110
- }, /*#__PURE__*/React.createElement("p", {
111
- style: ContentStyle
112
- }, item.content), /*#__PURE__*/React.createElement("img", {
127
+ role: "region"
128
+ }, /*#__PURE__*/React.createElement("p", null, item.content), ShowButton && /*#__PURE__*/React.createElement("button", {
129
+ className: "accordion-Link",
130
+ style: {
131
+ bottom: `calc((${AccordionHeight} - 12rem - 5px) * -1 )`,
132
+ zIndex: "100",
133
+ isolation: "isolate"
134
+ },
135
+ onClick: e => {
136
+ e.stopPropagation();
137
+ onClick({
138
+ id: item.id,
139
+ title: item.title
140
+ });
141
+ }
142
+ }, item.title), /*#__PURE__*/React.createElement("img", {
113
143
  className: "accordion-image",
114
144
  src: item.image,
115
145
  alt: item.alt
@@ -120,13 +150,17 @@ const ReactImageAccordion = ({
120
150
  accordionData,
121
151
  AccordionWidth,
122
152
  AccordionHeight,
123
- ContentSize
153
+ ContentSize,
154
+ onClick,
155
+ ShowButton
124
156
  }) => {
125
157
  return /*#__PURE__*/React.createElement(UseImageAccordion, {
126
158
  accordionData: accordionData,
127
159
  AccordionWidth: AccordionWidth,
128
160
  AccordionHeight: AccordionHeight,
129
- ContentSize: ContentSize
161
+ ContentSize: ContentSize,
162
+ onClick: onClick,
163
+ ShowButton: ShowButton
130
164
  });
131
165
  };
132
166
 
package/dist/index.js CHANGED
@@ -35,16 +35,19 @@ function styleInject(css, ref) {
35
35
  }
36
36
  }
37
37
 
38
- var css_248z = "*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n color-scheme: dark;\n}\n\nbody {\n display: grid;\n justify-content: center;\n align-content: center;\n min-height: 100vh;\n\n margin: 0;\n font-family: system-ui;\n font-size: 1.125rem;\n line-height: 1.6;\n}\n\nimg {\n max-width: 100%;\n display: block;\n}\n\n.wrapper {\n /* max-width: 50rem; */\n margin-inline: auto;\n padding-inline: 1rem;\n}\n\n.accordion {\n --_button-size: 3rem;\n --_panel-padding: 0.75rem;\n --_panel-gap: 1rem;\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n@media (min-width: 45em) {\n .accordion {\n flex-direction: row;\n height: 30rem;\n }\n}\n\n.accordion * {\n margin: 0;\n}\n\n.accordion-panel {\n position: relative;\n isolation: isolate;\n flex-basis: calc((var(--_panel-padding) * 2) + var(--_button-size));\n overflow: hidden;\n padding: var(--_panel-padding);\n padding-right: calc(var(--_panel-padding) * 4);\n border-radius: calc(((var(--_panel-padding) * 2) + var(--_button-size)) / 2);\n cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel {\n transition: flex-basis 500ms, flex-grow 500ms;\n }\n}\n\n.accordion-panel:nth-child(1) {\n --_panel-color: red;\n}\n.accordion-panel:nth-child(2) {\n --_panel-color: blue;\n}\n.accordion-panel:nth-child(3) {\n --_panel-color: green;\n}\n.accordion-panel:nth-child(4) {\n --_panel-color: yellow;\n}\n.accordion-panel:nth-child(5) {\n --_panel-color: orange;\n}\n.accordion-panel:nth-child(6) {\n --_panel-color: purple;\n}\n.accordion-panel:nth-child(7) {\n --_panel-color: pink;\n}\n.accordion-panel:nth-child(8) {\n --_panel-color: brown;\n}\n.accordion-panel:nth-child(9) {\n --_panel-color: cyan;\n}\n.accordion-panel:nth-child(10) {\n --_panel-color: magenta;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) {\n flex-basis: clamp(15rem, 40vh, 20rem);\n flex-grow: 1;\n}\n\n.accordion-trigger {\n outline: 0 !important;\n}\n\n.accordion-panel:focus-within {\n outline: 3px solid var(--_panel-color);\n outline-offset: 4px;\n}\n\n.accordion-content > p {\n transform: translateY(2rem);\n opacity: 0;\n margin-left: calc(var(--_button-size) + var(--_panel-gap));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transition: transform 500ms 500ms, opacity 500ms 500ms;\n }\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transform: translateY(0);\n opacity: 1;\n}\n\n.accordion-title {\n font-size: 1.5rem;\n font-weight: 700;\n position: relative;\n isolation: isolate;\n display: grid;\n align-items: center;\n}\n\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-title {\n display: none;\n}\n\n@media (max-width: 44.999em) {\n .accordion-title::after {\n content: \"\";\n position: absolute;\n\n left: calc((var(--_panel-gap) + var(--_button-size)) * -1);\n width: calc(100% + (var(--_button-size) * 2));\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n z-index: -1;\n border-radius: 100vw;\n }\n}\n\n.accordion-image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n transition: filer 500ms;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-image {\n filter: brightness(0.5);\n}\n.accordion-trigger {\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n gap: var(--_panel-gap);\n background: transparent;\n border: 0;\n padding: 0;\n}\n.accordion-icon {\n fill: var(--_panel-color);\n background: hsl(0 0% 0% /0.55);\n width: var(--_button-size);\n aspect-ratio: 1/1;\n padding: 0.75rem;\n border-radius: 50%;\n z-index: 10;\n}\n";
38
+ var css_248z = "*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n color-scheme: dark;\n}\n\nbody {\n display: grid;\n justify-content: center;\n align-content: center;\n min-height: 100vh;\n\n margin: 0;\n font-family: system-ui;\n font-size: 1.125rem;\n line-height: 1.6;\n}\n\nimg {\n max-width: 100%;\n display: block;\n}\n\n.wrapper {\n /* max-width: 50rem; */\n margin-inline: auto;\n padding-inline: 1rem;\n}\n\n.accordion {\n --_button-size: 3rem;\n --_panel-padding: 0.75rem;\n --_panel-gap: 1rem;\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n@media (min-width: 45em) {\n .accordion {\n flex-direction: row;\n height: 30rem;\n }\n}\n\n.accordion * {\n margin: 0;\n}\n\n.accordion-panel {\n position: relative;\n isolation: isolate;\n flex-basis: calc((var(--_panel-padding) * 2) + var(--_button-size));\n overflow: hidden;\n padding: var(--_panel-padding);\n padding-right: calc(var(--_panel-padding) * 4);\n border-radius: calc(((var(--_panel-padding) * 2) + var(--_button-size)) / 2);\n cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel {\n transition: flex-basis 500ms, flex-grow 500ms;\n }\n}\n\n.accordion-panel:nth-child(1) {\n --_panel-color: red;\n}\n.accordion-panel:nth-child(2) {\n --_panel-color: blue;\n}\n.accordion-panel:nth-child(3) {\n --_panel-color: green;\n}\n.accordion-panel:nth-child(4) {\n --_panel-color: yellow;\n}\n.accordion-panel:nth-child(5) {\n --_panel-color: orange;\n}\n.accordion-panel:nth-child(6) {\n --_panel-color: purple;\n}\n.accordion-panel:nth-child(7) {\n --_panel-color: pink;\n}\n.accordion-panel:nth-child(8) {\n --_panel-color: brown;\n}\n.accordion-panel:nth-child(9) {\n --_panel-color: cyan;\n}\n.accordion-panel:nth-child(10) {\n --_panel-color: magenta;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) {\n flex-basis: clamp(15rem, 40vh, 20rem);\n flex-grow: 1;\n}\n\n.accordion-trigger {\n outline: 0 !important;\n}\n\n.accordion-panel:focus-within {\n outline: 3px solid var(--_panel-color);\n outline-offset: 4px;\n}\n\n.accordion-content > p {\n transform: translateY(2rem);\n opacity: 0;\n margin-left: calc(var(--_button-size) + var(--_panel-gap));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transition: transform 500ms 500ms, opacity 500ms 500ms;\n }\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-content > p {\n transform: translateY(0);\n opacity: 1;\n}\n\n.accordion-title {\n font-size: 1.5rem;\n font-weight: 700;\n position: relative;\n isolation: isolate;\n display: grid;\n align-items: center;\n}\n\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-Link,\n.accordion-panel:has([aria-expanded=\"false\"]) .accordion-title {\n display: none;\n}\n\n@media (max-width: 44.999em) {\n .accordion-title::after {\n content: \"\";\n position: absolute;\n\n left: calc((var(--_panel-gap) + var(--_button-size)) * -1);\n width: calc(100% + (var(--_button-size) * 2));\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n z-index: -1;\n border-radius: 100vw;\n }\n}\n\n.accordion-Link {\n all:revert;\n display: block;\n position: relative;\n left: -0.1rem;\n /* bottom: 1rem; */\n width: 10rem;\n height: var(--_button-size);\n background: hsl(0 0% 0% /0.55);\n border-radius: 100vw;\n padding: 0.75rem;\n font-weight: bolder;\n}\n\n.accordion-image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n transition: filer 500ms;\n}\n\n.accordion-panel:has([aria-expanded=\"true\"]) .accordion-image {\n filter: brightness(0.5);\n}\n.accordion-trigger {\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n gap: var(--_panel-gap);\n background: transparent;\n border: 0;\n padding: 0;\n}\n.accordion-icon {\n fill: var(--_panel-color);\n background: hsl(0 0% 0% /0.55);\n width: var(--_button-size);\n aspect-ratio: 1/1;\n padding: 0.75rem;\n border-radius: 50%;\n z-index: 10;\n}\n";
39
39
  styleInject(css_248z);
40
40
 
41
41
  function UseImageAccordion({
42
42
  accordionData,
43
43
  AccordionWidth,
44
44
  AccordionHeight,
45
- ContentSize
45
+ ContentSize,
46
+ onClick,
47
+ ShowButton
46
48
  }) {
47
49
  const [activePanel, setActivePanel] = React.useState(null);
50
+ const ContentSizeFont = ContentSize || [];
48
51
  function toggleAccordion(panelToActivate) {
49
52
  setActivePanel(prevPanel => {
50
53
  if (prevPanel === panelToActivate) {
@@ -54,28 +57,38 @@ function UseImageAccordion({
54
57
  }
55
58
  });
56
59
  }
57
- const HeightStyle = {
58
- "@media (max-width: 480px)": {
59
- height: AccordionHeight
60
+ const HeightStyle = `
61
+ @media (min-width: 768px) {
62
+ .AccHeight {
63
+ height: ${AccordionHeight};
64
+ }
65
+ }`;
66
+ const css = `
67
+ @media (max-width: 480px) {
68
+ .ContentSize {
69
+ font-size: ${ContentSizeFont[0] || "0.65rem"};
70
+ }
60
71
  }
61
- };
62
- const ContentStyle = {
63
- "@media (max-width: 480px)": {
64
- fontSize: ContentSize[0] || "0.65rem"
65
- },
66
- "@media (min-width: 481px) and (max-width: 768px)": {
67
- fontSize: ContentSize[1] || "0.8rem"
68
- },
69
- "@media (min-width: 769px) and (max-width: 1024px)": {
70
- fontSize: ContentSize[2] || "1rem"
71
- },
72
- "@media (min-width: 1025px) and (max-width: 1200px)": {
73
- fontSize: ContentSize[3] || "1.2rem"
74
- },
75
- "@media (min-width: 1201px)": {
76
- fontSize: ContentSize[4] || "1.5rem"
72
+ @media (min-width: 481px) and (max-width: 768px) {
73
+ .ContentSize {
74
+ font-size: ${ContentSizeFont[1] || "0.8rem"};
75
+ }
76
+ }
77
+ @media (min-width: 769px) and (max-width: 1024px) {
78
+ .ContentSize {
79
+ font-size: ${ContentSizeFont[2] || "1rem"};
80
+ }
77
81
  }
78
- };
82
+ @media (min-width: 1025px) and (max-width: 1200px) {
83
+ .ContentSize {
84
+ font-size: ${ContentSizeFont[3] || "1.2rem"};
85
+ }
86
+ }
87
+ @media (min-width: 1201px) {
88
+ .ContentSize {
89
+ font-size: ${ContentSizeFont[4] || "1.5rem"};
90
+ }
91
+ }`;
79
92
  React.useEffect(() => {
80
93
  setActivePanel(accordionData[0].id);
81
94
  }, []);
@@ -85,9 +98,10 @@ function UseImageAccordion({
85
98
  style: {
86
99
  width: AccordionWidth
87
100
  }
88
- }, /*#__PURE__*/React__default["default"].createElement("div", {
89
- className: "accordion",
90
- style: HeightStyle
101
+ }, /*#__PURE__*/React__default["default"].createElement("style", {
102
+ scoped: true
103
+ }, HeightStyle), /*#__PURE__*/React__default["default"].createElement("div", {
104
+ className: "accordion AccHeight"
91
105
  }, accordionData.map(item => /*#__PURE__*/React__default["default"].createElement("div", {
92
106
  key: item.id,
93
107
  className: "accordion-panel",
@@ -108,16 +122,32 @@ function UseImageAccordion({
108
122
  xmlns: "http://www.w3.org/2000/svg"
109
123
  }, /*#__PURE__*/React__default["default"].createElement("image", {
110
124
  href: item.svg
111
- })))), /*#__PURE__*/React__default["default"].createElement("div", {
112
- className: "accordion-content",
125
+ })))), /*#__PURE__*/React__default["default"].createElement("style", {
126
+ scoped: true
127
+ }, css), /*#__PURE__*/React__default["default"].createElement("div", {
128
+ className: "accordion-content ContentSize",
129
+ style: {
130
+ height: `calc(${AccordionHeight} - 5rem)`
131
+ },
113
132
  id: item.id,
114
133
  "aria-labelledby": item.id,
115
134
  "aria-hidden": activePanel !== item.id,
116
- role: "region",
117
- style: ContentStyle
118
- }, /*#__PURE__*/React__default["default"].createElement("p", {
119
- style: ContentStyle
120
- }, item.content), /*#__PURE__*/React__default["default"].createElement("img", {
135
+ role: "region"
136
+ }, /*#__PURE__*/React__default["default"].createElement("p", null, item.content), ShowButton && /*#__PURE__*/React__default["default"].createElement("button", {
137
+ className: "accordion-Link",
138
+ style: {
139
+ bottom: `calc((${AccordionHeight} - 12rem - 5px) * -1 )`,
140
+ zIndex: "100",
141
+ isolation: "isolate"
142
+ },
143
+ onClick: e => {
144
+ e.stopPropagation();
145
+ onClick({
146
+ id: item.id,
147
+ title: item.title
148
+ });
149
+ }
150
+ }, item.title), /*#__PURE__*/React__default["default"].createElement("img", {
121
151
  className: "accordion-image",
122
152
  src: item.image,
123
153
  alt: item.alt
@@ -128,13 +158,17 @@ const ReactImageAccordion = ({
128
158
  accordionData,
129
159
  AccordionWidth,
130
160
  AccordionHeight,
131
- ContentSize
161
+ ContentSize,
162
+ onClick,
163
+ ShowButton
132
164
  }) => {
133
165
  return /*#__PURE__*/React__default["default"].createElement(UseImageAccordion, {
134
166
  accordionData: accordionData,
135
167
  AccordionWidth: AccordionWidth,
136
168
  AccordionHeight: AccordionHeight,
137
- ContentSize: ContentSize
169
+ ContentSize: ContentSize,
170
+ onClick: onClick,
171
+ ShowButton: ShowButton
138
172
  });
139
173
  };
140
174
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-image-accordion",
3
- "version": "1.1.4",
3
+ "version": "1.1.8",
4
4
  "description": "Accordion component for React",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "dependencies": {
60
60
  "@rollup/plugin-terser": "^0.4.1",
61
- "react-image-accordion": "^1.0.8",
61
+ "react-image-accordion": "^1.1.6",
62
62
  "rollup-plugin-local-resolve": "^1.0.7",
63
63
  "rollup-plugin-terser": "^7.0.2"
64
64
  }
@@ -140,6 +140,7 @@ img {
140
140
  align-items: center;
141
141
  }
142
142
 
143
+ .accordion-panel:has([aria-expanded="false"]) .accordion-Link,
143
144
  .accordion-panel:has([aria-expanded="false"]) .accordion-title {
144
145
  display: none;
145
146
  }
@@ -158,6 +159,20 @@ img {
158
159
  }
159
160
  }
160
161
 
162
+ .accordion-Link {
163
+ all:revert;
164
+ display: block;
165
+ position: relative;
166
+ left: -0.1rem;
167
+ /* bottom: 1rem; */
168
+ width: 10rem;
169
+ height: var(--_button-size);
170
+ background: hsl(0 0% 0% /0.55);
171
+ border-radius: 100vw;
172
+ padding: 0.75rem;
173
+ font-weight: bolder;
174
+ }
175
+
161
176
  .accordion-image {
162
177
  position: absolute;
163
178
  inset: 0;
@@ -6,6 +6,8 @@ export const ReactImageAccordion = ({
6
6
  AccordionWidth,
7
7
  AccordionHeight,
8
8
  ContentSize,
9
+ onClick,
10
+ ShowButton,
9
11
  }) => {
10
12
  return (
11
13
  <UseImageAccordion
@@ -13,6 +15,8 @@ export const ReactImageAccordion = ({
13
15
  AccordionWidth={AccordionWidth}
14
16
  AccordionHeight={AccordionHeight}
15
17
  ContentSize={ContentSize}
18
+ onClick={onClick}
19
+ ShowButton={ShowButton}
16
20
  />
17
21
  );
18
22
  };
@@ -6,6 +6,8 @@ function UseImageAccordion({
6
6
  AccordionWidth,
7
7
  AccordionHeight,
8
8
  ContentSize,
9
+ onClick,
10
+ ShowButton,
9
11
  }) {
10
12
  const [activePanel, setActivePanel] = useState(null);
11
13
  const ContentSizeFont = ContentSize || [];
@@ -21,7 +23,7 @@ function UseImageAccordion({
21
23
  }
22
24
 
23
25
  const HeightStyle = `
24
- @media (min-width: 480px) {
26
+ @media (min-width: 768px) {
25
27
  .AccHeight {
26
28
  height: ${AccordionHeight};
27
29
  }
@@ -92,12 +94,31 @@ function UseImageAccordion({
92
94
  <style scoped>{css}</style>
93
95
  <div
94
96
  className="accordion-content ContentSize"
97
+ style={{ height: `calc(${AccordionHeight} - 5rem)` }}
95
98
  id={item.id}
96
99
  aria-labelledby={item.id}
97
100
  aria-hidden={activePanel !== item.id}
98
101
  role="region"
99
102
  >
100
103
  <p>{item.content}</p>
104
+
105
+ {ShowButton && (
106
+ <button
107
+ className="accordion-Link"
108
+ style={{
109
+ bottom: `calc((${AccordionHeight} - 12rem - 5px) * -1 )`,
110
+ zIndex: "100",
111
+ isolation: "isolate",
112
+ }}
113
+ onClick={(e) => {
114
+ e.stopPropagation();
115
+ onClick({ id: item.id, title: item.title });
116
+ }}
117
+ >
118
+ {item.title}
119
+ </button>
120
+ )}
121
+
101
122
  <img
102
123
  className="accordion-image"
103
124
  src={item.image}
@@ -40,7 +40,7 @@
40
40
  "svg": "../svg/image-svgrepo-com.svg"
41
41
  },
42
42
  {
43
- "title": "Scuba diving",
43
+ "title": "sleep",
44
44
  "id": 6,
45
45
  "image": "https://picsum.photos/401/602",
46
46
  "alt": "fifth panel image",
@@ -48,7 +48,7 @@
48
48
  "svg": "../svg/bitcoin-svgrepo-com.svg"
49
49
  },
50
50
  {
51
- "title": "Scuba diving",
51
+ "title": "running",
52
52
  "id": 7,
53
53
  "image": "https://picsum.photos/402/602",
54
54
  "alt": "fifth panel image",
@@ -56,7 +56,7 @@
56
56
  "svg": "../svg/chrome-svgrepo-com.svg"
57
57
  },
58
58
  {
59
- "title": "Scuba diving",
59
+ "title": "Cooking",
60
60
  "id": 8,
61
61
  "image": "https://picsum.photos/399/599",
62
62
  "alt": "fifth panel image",
@@ -15,4 +15,6 @@ App.args = {
15
15
  AccordionWidth: "100%",
16
16
  AccordionHeight: "30rem",
17
17
  ContentSize: ["0.5rem", "0.8rem", "1rem", "1.2rem", "1.5rem"],
18
+ onClick: (e) => console.log(e.id, e.title),
19
+ ShowButton: false,
18
20
  };