@geoinsight/react-components 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -79,7 +79,7 @@
79
79
  }
80
80
  }
81
81
 
82
- [palette-theme="water"] {
82
+ [data-palette="water"] {
83
83
  --color-primary-100: #d6efff;
84
84
  --color-primary-200: #ade0ff;
85
85
  --color-primary-300: #85d0ff;
@@ -91,7 +91,7 @@
91
91
  --color-primary-900: #00588f;
92
92
  }
93
93
 
94
- [palette-theme="earth"]{
94
+ [data-palette="earth"]{
95
95
  --color-primary-100: #f6e3cb;
96
96
  --color-primary-200: #edc897;
97
97
  --color-primary-300: #eabe86;
@@ -103,7 +103,7 @@
103
103
  --color-primary-900: #684312;
104
104
  }
105
105
 
106
- [palette-theme="forest"] {
106
+ [data-palette="forest"] {
107
107
  --color-primary-100: #bee8b0;
108
108
  --color-primary-200: #a4df90;
109
109
  --color-primary-300: #8ad671;
@@ -295,14 +295,18 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
295
295
  display: flex;
296
296
  flex-direction: column;
297
297
  align-items: flex-start;
298
+ width: 100%;
298
299
  }
299
300
 
300
301
  .input {
302
+ box-sizing: border-box;
301
303
  background-color: var(--color-white);
302
304
  border-radius: var(--spacing-8);
303
305
  border: 2px solid var(--color-primary);
304
306
  color: var(--color-black);
305
307
  padding: var(--spacing-16) var(--spacing-24);
308
+ font-size:var(--font-size-16);
309
+ width: 100%;
306
310
  }
307
311
 
308
312
  .input:hover {
@@ -318,6 +322,11 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
318
322
  border: 3px solid var(--color-danger);
319
323
  }
320
324
 
325
+ .input--error:focus {
326
+ border: 3px solid var(--color-danger);
327
+ outline: none;
328
+ }
329
+
321
330
  .error {
322
331
  font-size: 12px;
323
332
  color: var(--color-danger);
@@ -326,6 +335,7 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
326
335
  .textarea {
327
336
  margin-bottom: var(--spacing-8);
328
337
  position: relative;
338
+ width: 100%;
329
339
  }
330
340
 
331
341
  .textarea__input {
package/dist/cjs/index.js CHANGED
@@ -80,7 +80,7 @@ function Accordion({ children, expanded = "all",
80
80
  }
81
81
 
82
82
  function AccordionItem({ children, label, isExpanded = false, }) {
83
- const { toggle, setToggle } = useAccordion();
83
+ const { toggle } = useAccordion();
84
84
  return (jsxRuntime.jsx("div", { className: "accordion-item", style: {
85
85
  paddingLeft: toggle && label && toggle[label].paddingLeft,
86
86
  }, children: react.Children.map(children, (child) => react.cloneElement(child, {
@@ -98,12 +98,57 @@ function Button({ children = "Click me", className = "", icon = undefined, isNew
98
98
  return as === "link" ? (jsxRuntime.jsxs(Anchor, { Custom: CustomAnchor, ...(isNewWindow && { target: "_blank" }), className: clsx(`button ${className}`, mode === "secondary" ? `button button__${mode}` : "button__link", `button__${size}`), ...rest, children: [children, icon] })) : (jsxRuntime.jsxs("button", { className: clsx("button", `button__${mode}`, `button__${size}`, className), ...rest, children: [children, icon] }));
99
99
  }
100
100
 
101
- // import { useTheme } from "../../context/themeContext";
101
+ const ThemeContext = react.createContext(undefined);
102
+ function ThemeProvider({ children, dataTheme: dataThemeProp, dataPalette: dataPaletteProp = "water", }) {
103
+ const [dataTheme, setDataTheme] = react.useState();
104
+ const [dataPalette, setDataPalette] = react.useState();
105
+ react.useEffect(() => {
106
+ if (dataPaletteProp) {
107
+ switchDataPalette(dataPaletteProp);
108
+ }
109
+ }, [dataPaletteProp]);
110
+ react.useEffect(() => {
111
+ if (dataThemeProp) {
112
+ switchDataTheme(dataThemeProp);
113
+ }
114
+ }, [dataThemeProp]);
115
+ react.useEffect(() => {
116
+ if (window.matchMedia) {
117
+ if (localStorage.getItem("data-theme")) {
118
+ document.documentElement.setAttribute("data-theme", localStorage.getItem("data-theme"));
119
+ setDataTheme(localStorage.getItem("data-theme"));
120
+ }
121
+ else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
122
+ document.documentElement.setAttribute("data-theme", "dark");
123
+ setDataTheme("dark");
124
+ }
125
+ }
126
+ }, []);
127
+ const switchDataTheme = (mode) => {
128
+ document.documentElement.setAttribute("data-theme", mode);
129
+ setDataTheme(mode);
130
+ localStorage.setItem("data-theme", mode);
131
+ };
132
+ const switchDataPalette = (mode) => {
133
+ document.documentElement.setAttribute("data-palette", mode);
134
+ setDataPalette(mode);
135
+ localStorage.setItem("palette-theme", mode);
136
+ };
137
+ return (jsxRuntime.jsx(ThemeContext.Provider, { value: { dataTheme, switchDataTheme, dataPalette, switchDataPalette }, children: children }));
138
+ }
139
+ function useTheme() {
140
+ const context = react.useContext(ThemeContext);
141
+ if (context === undefined) {
142
+ throw new Error("useTheme must be used within a ThemeProvider");
143
+ }
144
+ return context;
145
+ }
146
+
102
147
  function AccordionButton({ children, is = "link", label,
103
148
  // toggle,
104
149
  // setToggle = (prev: any) => void,
105
150
  ...rest }) {
106
- // const { dataTheme } = useTheme();
151
+ const { dataTheme } = useTheme();
107
152
  const { toggle, setToggle } = useAccordion();
108
153
  const handleToggle = () => {
109
154
  setToggle((prev) => {
@@ -121,9 +166,7 @@ function AccordionButton({ children, is = "link", label,
121
166
  }
122
167
  });
123
168
  };
124
- return (jsxRuntime.jsx(Button, { as: is, className: clsx("accordion-button", `accordion-button__${is}`
125
- // `accordion-button__${is}--${dataTheme}`
126
- ), ...(is !== "link" && {
169
+ return (jsxRuntime.jsx(Button, { as: is, className: clsx("accordion-button", `accordion-button__${is}`, `accordion-button__${is}--${dataTheme}`), ...(is !== "link" && {
127
170
  icon: label && toggle && toggle[label].isToggle ? (jsxRuntime.jsx(tfi.TfiAngleDown, {})) : (jsxRuntime.jsx(tfi.TfiAngleUp, {})),
128
171
  }), ...(is !== "link" && { onClick: handleToggle }), ...rest, children: children }));
129
172
  }
@@ -134,11 +177,14 @@ const AccordionContent = function AccordionContent({ children, label, toggle, })
134
177
  toggle[label].isToggle && (jsxRuntime.jsx("div", { className: "accordion-content", children: children })));
135
178
  };
136
179
 
137
- function Input({ className = "", classNameGroup = "", errorMessage = "", inputRef, styleGroup, ...rest }) {
138
- return (jsxRuntime.jsxs("div", { className: `input-group ${classNameGroup}`, style: styleGroup, children: [jsxRuntime.jsx("input", { ref: inputRef, className: `input ${errorMessage ? "input--error" : ""} ${className}`, ...rest }), errorMessage && jsxRuntime.jsx("span", { className: "error", children: errorMessage })] }));
180
+ function Input({ className = "", classNameGroup = "", error = {
181
+ is: false,
182
+ message: "",
183
+ }, inputRef, styleGroup, placeholder = "Insert value", isRequired, ...rest }) {
184
+ return (jsxRuntime.jsxs("div", { className: clsx("input-group", classNameGroup), style: styleGroup, children: [jsxRuntime.jsx("input", { ref: inputRef, className: clsx("input", error.is ? "input--error" : "", className), placeholder: placeholder, ...rest }), error && error.is && jsxRuntime.jsx("span", { className: "error", children: error.message })] }));
139
185
  }
140
186
 
141
- function TextArea({ className = "", disabled = true, hasToggleButton = true, hideHeight = "5rem", placeholder = "", showHeight = "10rem", style = {}, textareaClassName = "", ...rest }) {
187
+ function TextArea({ className = "", disabled = true, hasToggleButton = true, hideHeight = "5rem", placeholder = "Insert value", showHeight = "10rem", style = {}, textareaClassName = "", ...rest }) {
142
188
  const ref = react.useRef();
143
189
  const [isShow, setIsShow] = react.useState(false);
144
190
  const handleClickToggle = () => {
@@ -154,7 +200,7 @@ function TextArea({ className = "", disabled = true, hasToggleButton = true, hid
154
200
  };
155
201
  return (jsxRuntime.jsxs("div", { className: clsx("textarea", className), style: style, children: [jsxRuntime.jsx("textarea", { ref: ref, className: clsx("textarea__input", textareaClassName), style: {
156
202
  height: hasToggleButton ? hideHeight : showHeight,
157
- }, placeholder: placeholder, disabled: disabled, ...rest }), hasToggleButton && (jsxRuntime.jsx("button", { className: clsx("textarea__button", isShow && "textarea__button--show"), onClick: handleClickToggle, disabled: disabled, children: jsxRuntime.jsx(tb.TbArrowsDiagonal2, { size: "1.5rem" }) }))] }));
203
+ }, placeholder: placeholder, disabled: disabled, ...rest }), hasToggleButton && (jsxRuntime.jsx("button", { type: "button", className: clsx("textarea__button", isShow && "textarea__button--show"), onClick: handleClickToggle, disabled: disabled, children: jsxRuntime.jsx(tb.TbArrowsDiagonal2, { size: "1.5rem" }) }))] }));
158
204
  }
159
205
 
160
206
  function Modal({ modalref, children, title, subtitle, footer, hasCloseButton = true, handleClose, }) {
@@ -165,54 +211,6 @@ function Loading({ img, children }) {
165
211
  return (jsxRuntime.jsxs("div", { className: "loading", children: [jsxRuntime.jsx("img", { src: img ? img : "../../stories/assets/loading.gif" }), children] }));
166
212
  }
167
213
 
168
- const ThemeContext = react.createContext(undefined);
169
- function ThemeProvider({ children }) {
170
- const [dataTheme, setDataTheme] = react.useState();
171
- const [paletteTheme, setPaletteTheme] = react.useState();
172
- react.useEffect(() => {
173
- if (window.matchMedia) {
174
- if (localStorage.getItem("data-theme")) {
175
- document.documentElement.setAttribute("data-theme", localStorage.getItem("data-theme"));
176
- setDataTheme(localStorage.getItem("data-theme"));
177
- }
178
- else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
179
- document.documentElement.setAttribute("data-theme", "dark");
180
- setDataTheme("dark");
181
- }
182
- }
183
- }, []);
184
- const switchDataTheme = (mode) => {
185
- document.documentElement.setAttribute("data-theme", mode);
186
- setDataTheme(mode);
187
- localStorage.setItem("data-theme", mode);
188
- };
189
- const switchPaletteTheme = (mode) => {
190
- document.documentElement.setAttribute("palette-theme", mode);
191
- setPaletteTheme(mode);
192
- localStorage.setItem("palette-theme", mode);
193
- };
194
- return (jsxRuntime.jsx(ThemeContext.Provider, { value: { dataTheme, switchDataTheme, paletteTheme, switchPaletteTheme }, children: children }));
195
- }
196
- function useTheme({ dataTheme = undefined, paletteTheme = "water", } = {}) {
197
- const context = react.useContext(ThemeContext);
198
- // only happens if there is an initial mode value.
199
- react.useEffect(() => {
200
- if (dataTheme && !localStorage.getItem("data-theme")) {
201
- context?.switchDataTheme(dataTheme);
202
- }
203
- else if (!dataTheme && localStorage.getItem("data-theme")) {
204
- localStorage.removeItem("data-theme");
205
- }
206
- }, []);
207
- react.useEffect(() => {
208
- context?.switchPaletteTheme(paletteTheme);
209
- }, []);
210
- if (context === undefined) {
211
- throw new Error("useTheme must be used within a ThemeProvider");
212
- }
213
- return context;
214
- }
215
-
216
214
  const LoadingContext = react.createContext(undefined);
217
215
  function loadingReducer(state, action) {
218
216
  switch (action.type) {
@@ -79,7 +79,7 @@
79
79
  }
80
80
  }
81
81
 
82
- [palette-theme="water"] {
82
+ [data-palette="water"] {
83
83
  --color-primary-100: #d6efff;
84
84
  --color-primary-200: #ade0ff;
85
85
  --color-primary-300: #85d0ff;
@@ -91,7 +91,7 @@
91
91
  --color-primary-900: #00588f;
92
92
  }
93
93
 
94
- [palette-theme="earth"]{
94
+ [data-palette="earth"]{
95
95
  --color-primary-100: #f6e3cb;
96
96
  --color-primary-200: #edc897;
97
97
  --color-primary-300: #eabe86;
@@ -103,7 +103,7 @@
103
103
  --color-primary-900: #684312;
104
104
  }
105
105
 
106
- [palette-theme="forest"] {
106
+ [data-palette="forest"] {
107
107
  --color-primary-100: #bee8b0;
108
108
  --color-primary-200: #a4df90;
109
109
  --color-primary-300: #8ad671;
@@ -295,14 +295,18 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
295
295
  display: flex;
296
296
  flex-direction: column;
297
297
  align-items: flex-start;
298
+ width: 100%;
298
299
  }
299
300
 
300
301
  .input {
302
+ box-sizing: border-box;
301
303
  background-color: var(--color-white);
302
304
  border-radius: var(--spacing-8);
303
305
  border: 2px solid var(--color-primary);
304
306
  color: var(--color-black);
305
307
  padding: var(--spacing-16) var(--spacing-24);
308
+ font-size:var(--font-size-16);
309
+ width: 100%;
306
310
  }
307
311
 
308
312
  .input:hover {
@@ -318,6 +322,11 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
318
322
  border: 3px solid var(--color-danger);
319
323
  }
320
324
 
325
+ .input--error:focus {
326
+ border: 3px solid var(--color-danger);
327
+ outline: none;
328
+ }
329
+
321
330
  .error {
322
331
  font-size: 12px;
323
332
  color: var(--color-danger);
@@ -326,6 +335,7 @@ transition: var(--transition-bg-cubic-bezier), var(--transition-box-shadow-cubic
326
335
  .textarea {
327
336
  margin-bottom: var(--spacing-8);
328
337
  position: relative;
338
+ width: 100%;
329
339
  }
330
340
 
331
341
  .textarea__input {
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { Children, isValidElement, cloneElement, createContext, useState, useContext, useRef, useEffect, useReducer } from 'react';
2
+ import { Children, isValidElement, cloneElement, createContext, useState, useContext, useEffect, useRef, useReducer } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { TfiAngleDown, TfiAngleUp } from 'react-icons/tfi';
5
5
  import { TbArrowsDiagonal2 } from 'react-icons/tb';
@@ -78,7 +78,7 @@ function Accordion({ children, expanded = "all",
78
78
  }
79
79
 
80
80
  function AccordionItem({ children, label, isExpanded = false, }) {
81
- const { toggle, setToggle } = useAccordion();
81
+ const { toggle } = useAccordion();
82
82
  return (jsx("div", { className: "accordion-item", style: {
83
83
  paddingLeft: toggle && label && toggle[label].paddingLeft,
84
84
  }, children: Children.map(children, (child) => cloneElement(child, {
@@ -96,12 +96,57 @@ function Button({ children = "Click me", className = "", icon = undefined, isNew
96
96
  return as === "link" ? (jsxs(Anchor, { Custom: CustomAnchor, ...(isNewWindow && { target: "_blank" }), className: clsx(`button ${className}`, mode === "secondary" ? `button button__${mode}` : "button__link", `button__${size}`), ...rest, children: [children, icon] })) : (jsxs("button", { className: clsx("button", `button__${mode}`, `button__${size}`, className), ...rest, children: [children, icon] }));
97
97
  }
98
98
 
99
- // import { useTheme } from "../../context/themeContext";
99
+ const ThemeContext = createContext(undefined);
100
+ function ThemeProvider({ children, dataTheme: dataThemeProp, dataPalette: dataPaletteProp = "water", }) {
101
+ const [dataTheme, setDataTheme] = useState();
102
+ const [dataPalette, setDataPalette] = useState();
103
+ useEffect(() => {
104
+ if (dataPaletteProp) {
105
+ switchDataPalette(dataPaletteProp);
106
+ }
107
+ }, [dataPaletteProp]);
108
+ useEffect(() => {
109
+ if (dataThemeProp) {
110
+ switchDataTheme(dataThemeProp);
111
+ }
112
+ }, [dataThemeProp]);
113
+ useEffect(() => {
114
+ if (window.matchMedia) {
115
+ if (localStorage.getItem("data-theme")) {
116
+ document.documentElement.setAttribute("data-theme", localStorage.getItem("data-theme"));
117
+ setDataTheme(localStorage.getItem("data-theme"));
118
+ }
119
+ else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
120
+ document.documentElement.setAttribute("data-theme", "dark");
121
+ setDataTheme("dark");
122
+ }
123
+ }
124
+ }, []);
125
+ const switchDataTheme = (mode) => {
126
+ document.documentElement.setAttribute("data-theme", mode);
127
+ setDataTheme(mode);
128
+ localStorage.setItem("data-theme", mode);
129
+ };
130
+ const switchDataPalette = (mode) => {
131
+ document.documentElement.setAttribute("data-palette", mode);
132
+ setDataPalette(mode);
133
+ localStorage.setItem("palette-theme", mode);
134
+ };
135
+ return (jsx(ThemeContext.Provider, { value: { dataTheme, switchDataTheme, dataPalette, switchDataPalette }, children: children }));
136
+ }
137
+ function useTheme() {
138
+ const context = useContext(ThemeContext);
139
+ if (context === undefined) {
140
+ throw new Error("useTheme must be used within a ThemeProvider");
141
+ }
142
+ return context;
143
+ }
144
+
100
145
  function AccordionButton({ children, is = "link", label,
101
146
  // toggle,
102
147
  // setToggle = (prev: any) => void,
103
148
  ...rest }) {
104
- // const { dataTheme } = useTheme();
149
+ const { dataTheme } = useTheme();
105
150
  const { toggle, setToggle } = useAccordion();
106
151
  const handleToggle = () => {
107
152
  setToggle((prev) => {
@@ -119,9 +164,7 @@ function AccordionButton({ children, is = "link", label,
119
164
  }
120
165
  });
121
166
  };
122
- return (jsx(Button, { as: is, className: clsx("accordion-button", `accordion-button__${is}`
123
- // `accordion-button__${is}--${dataTheme}`
124
- ), ...(is !== "link" && {
167
+ return (jsx(Button, { as: is, className: clsx("accordion-button", `accordion-button__${is}`, `accordion-button__${is}--${dataTheme}`), ...(is !== "link" && {
125
168
  icon: label && toggle && toggle[label].isToggle ? (jsx(TfiAngleDown, {})) : (jsx(TfiAngleUp, {})),
126
169
  }), ...(is !== "link" && { onClick: handleToggle }), ...rest, children: children }));
127
170
  }
@@ -132,11 +175,14 @@ const AccordionContent = function AccordionContent({ children, label, toggle, })
132
175
  toggle[label].isToggle && (jsx("div", { className: "accordion-content", children: children })));
133
176
  };
134
177
 
135
- function Input({ className = "", classNameGroup = "", errorMessage = "", inputRef, styleGroup, ...rest }) {
136
- return (jsxs("div", { className: `input-group ${classNameGroup}`, style: styleGroup, children: [jsx("input", { ref: inputRef, className: `input ${errorMessage ? "input--error" : ""} ${className}`, ...rest }), errorMessage && jsx("span", { className: "error", children: errorMessage })] }));
178
+ function Input({ className = "", classNameGroup = "", error = {
179
+ is: false,
180
+ message: "",
181
+ }, inputRef, styleGroup, placeholder = "Insert value", isRequired, ...rest }) {
182
+ return (jsxs("div", { className: clsx("input-group", classNameGroup), style: styleGroup, children: [jsx("input", { ref: inputRef, className: clsx("input", error.is ? "input--error" : "", className), placeholder: placeholder, ...rest }), error && error.is && jsx("span", { className: "error", children: error.message })] }));
137
183
  }
138
184
 
139
- function TextArea({ className = "", disabled = true, hasToggleButton = true, hideHeight = "5rem", placeholder = "", showHeight = "10rem", style = {}, textareaClassName = "", ...rest }) {
185
+ function TextArea({ className = "", disabled = true, hasToggleButton = true, hideHeight = "5rem", placeholder = "Insert value", showHeight = "10rem", style = {}, textareaClassName = "", ...rest }) {
140
186
  const ref = useRef();
141
187
  const [isShow, setIsShow] = useState(false);
142
188
  const handleClickToggle = () => {
@@ -152,7 +198,7 @@ function TextArea({ className = "", disabled = true, hasToggleButton = true, hid
152
198
  };
153
199
  return (jsxs("div", { className: clsx("textarea", className), style: style, children: [jsx("textarea", { ref: ref, className: clsx("textarea__input", textareaClassName), style: {
154
200
  height: hasToggleButton ? hideHeight : showHeight,
155
- }, placeholder: placeholder, disabled: disabled, ...rest }), hasToggleButton && (jsx("button", { className: clsx("textarea__button", isShow && "textarea__button--show"), onClick: handleClickToggle, disabled: disabled, children: jsx(TbArrowsDiagonal2, { size: "1.5rem" }) }))] }));
201
+ }, placeholder: placeholder, disabled: disabled, ...rest }), hasToggleButton && (jsx("button", { type: "button", className: clsx("textarea__button", isShow && "textarea__button--show"), onClick: handleClickToggle, disabled: disabled, children: jsx(TbArrowsDiagonal2, { size: "1.5rem" }) }))] }));
156
202
  }
157
203
 
158
204
  function Modal({ modalref, children, title, subtitle, footer, hasCloseButton = true, handleClose, }) {
@@ -163,54 +209,6 @@ function Loading({ img, children }) {
163
209
  return (jsxs("div", { className: "loading", children: [jsx("img", { src: img ? img : "../../stories/assets/loading.gif" }), children] }));
164
210
  }
165
211
 
166
- const ThemeContext = createContext(undefined);
167
- function ThemeProvider({ children }) {
168
- const [dataTheme, setDataTheme] = useState();
169
- const [paletteTheme, setPaletteTheme] = useState();
170
- useEffect(() => {
171
- if (window.matchMedia) {
172
- if (localStorage.getItem("data-theme")) {
173
- document.documentElement.setAttribute("data-theme", localStorage.getItem("data-theme"));
174
- setDataTheme(localStorage.getItem("data-theme"));
175
- }
176
- else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
177
- document.documentElement.setAttribute("data-theme", "dark");
178
- setDataTheme("dark");
179
- }
180
- }
181
- }, []);
182
- const switchDataTheme = (mode) => {
183
- document.documentElement.setAttribute("data-theme", mode);
184
- setDataTheme(mode);
185
- localStorage.setItem("data-theme", mode);
186
- };
187
- const switchPaletteTheme = (mode) => {
188
- document.documentElement.setAttribute("palette-theme", mode);
189
- setPaletteTheme(mode);
190
- localStorage.setItem("palette-theme", mode);
191
- };
192
- return (jsx(ThemeContext.Provider, { value: { dataTheme, switchDataTheme, paletteTheme, switchPaletteTheme }, children: children }));
193
- }
194
- function useTheme({ dataTheme = undefined, paletteTheme = "water", } = {}) {
195
- const context = useContext(ThemeContext);
196
- // only happens if there is an initial mode value.
197
- useEffect(() => {
198
- if (dataTheme && !localStorage.getItem("data-theme")) {
199
- context?.switchDataTheme(dataTheme);
200
- }
201
- else if (!dataTheme && localStorage.getItem("data-theme")) {
202
- localStorage.removeItem("data-theme");
203
- }
204
- }, []);
205
- useEffect(() => {
206
- context?.switchPaletteTheme(paletteTheme);
207
- }, []);
208
- if (context === undefined) {
209
- throw new Error("useTheme must be used within a ThemeProvider");
210
- }
211
- return context;
212
- }
213
-
214
212
  const LoadingContext = createContext(undefined);
215
213
  function loadingReducer(state, action) {
216
214
  switch (action.type) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoinsight/react-components",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "This library is the main UI component library for geoinsight",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -18,6 +18,7 @@
18
18
  "clsx": "^1.2.1",
19
19
  "react": "^18.2.0",
20
20
  "react-dom": "^18.2.0",
21
+ "react-hook-form": "^7.45.2",
21
22
  "react-icons": "^4.7.1",
22
23
  "typescript": "^4.9.4"
23
24
  },