techsbcn-storybook 2.15.3 → 2.16.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.
@@ -0,0 +1,19 @@
1
+ export type StorageType = 'local' | 'session';
2
+ export interface StorageOptions {
3
+ storage?: StorageType;
4
+ }
5
+ export interface SetStorageOptions extends StorageOptions {
6
+ /** Lifetime of the item in milliseconds. Without it the item never expires. */
7
+ ttl?: number;
8
+ }
9
+ /**
10
+ * Reads an item saved with `setStorageItem`. Returns null when it is missing, expired, corrupt or the storage is
11
+ * unavailable (private mode, blocked site data). Expired items are removed when read.
12
+ */
13
+ export declare const getStorageItem: <T>(key: string, options?: StorageOptions) => T | null;
14
+ /**
15
+ * Saves a JSON-serializable value, optionally expiring after `ttl` milliseconds. Returns false when it could not be
16
+ * saved (storage unavailable or quota exceeded).
17
+ */
18
+ export declare const setStorageItem: <T>(key: string, value: T, options?: SetStorageOptions) => boolean;
19
+ export declare const removeStorageItem: (key: string, options?: StorageOptions) => void;
@@ -5,3 +5,4 @@ export * from './FileDownloader';
5
5
  export * from './hooks';
6
6
  export * from './NotificationHelper';
7
7
  export * from './PermissionHelpers';
8
+ export * from './StorageHelper';
package/dist/index.js CHANGED
@@ -549,7 +549,8 @@ var TextFieldComponent = ({
549
549
  ...rest,
550
550
  onChange: (event) => {
551
551
  if (maxDecimals !== void 0) {
552
- event.target.value = event.target.value.replace(new RegExp(`([.,]\\d{${maxDecimals}})\\d+$`), "$1");
552
+ const truncated = event.target.value.replace(new RegExp(`([.,]\\d{${maxDecimals}})\\d+$`), "$1");
553
+ if (truncated !== event.target.value) event.target.value = truncated;
553
554
  }
554
555
  onChange?.(event);
555
556
  },
@@ -781,6 +782,52 @@ var removeNotification = (id) => notistack.closeSnackbar(id);
781
782
 
782
783
  // src/helpers/PermissionHelpers.tsx
783
784
  var hasPermission = (permission) => getSession()?.role.includes(permission) ?? false;
785
+
786
+ // src/helpers/StorageHelper.tsx
787
+ var getStorage = (type = "local") => {
788
+ try {
789
+ if (typeof window === "undefined") return null;
790
+ return type === "session" ? window.sessionStorage : window.localStorage;
791
+ } catch {
792
+ return null;
793
+ }
794
+ };
795
+ var getStorageItem = (key, options) => {
796
+ const storage = getStorage(options?.storage);
797
+ try {
798
+ const raw = storage?.getItem(key);
799
+ if (raw == null) return null;
800
+ const entry = JSON.parse(raw);
801
+ if (entry.expiresAt !== void 0 && entry.expiresAt <= Date.now()) {
802
+ storage?.removeItem(key);
803
+ return null;
804
+ }
805
+ return entry.value ?? null;
806
+ } catch {
807
+ return null;
808
+ }
809
+ };
810
+ var setStorageItem = (key, value, options) => {
811
+ const storage = getStorage(options?.storage);
812
+ if (!storage) return false;
813
+ try {
814
+ const entry = {
815
+ value,
816
+ expiresAt: options?.ttl ? Date.now() + options.ttl : void 0
817
+ };
818
+ storage.setItem(key, JSON.stringify(entry));
819
+ return true;
820
+ } catch {
821
+ return false;
822
+ }
823
+ };
824
+ var removeStorageItem = (key, options) => {
825
+ try {
826
+ getStorage(options?.storage)?.removeItem(key);
827
+ } catch {
828
+ return;
829
+ }
830
+ };
784
831
  var Spinner = () => /* @__PURE__ */ React10__default.default.createElement(material.Box, { sx: { textAlign: "center" } }, /* @__PURE__ */ React10__default.default.createElement(material.CircularProgress, { color: "primary", size: 20 }));
785
832
 
786
833
  // src/components/tables/ImageTableComponent/ImageTableComponent.tsx
@@ -3032,12 +3079,15 @@ exports.getImageByBase64 = getImageByBase64;
3032
3079
  exports.getImageByBlob = getImageByBlob;
3033
3080
  exports.getJwtToken = getJwtToken;
3034
3081
  exports.getSession = getSession;
3082
+ exports.getStorageItem = getStorageItem;
3035
3083
  exports.hasPermission = hasPermission;
3036
3084
  exports.logout = logout;
3037
3085
  exports.readFileAsBase64 = readFileAsBase64;
3038
3086
  exports.redirectDownload = redirectDownload;
3039
3087
  exports.removeNotification = removeNotification;
3088
+ exports.removeStorageItem = removeStorageItem;
3040
3089
  exports.saveSession = saveSession;
3090
+ exports.setStorageItem = setStorageItem;
3041
3091
  exports.toBase64 = toBase64;
3042
3092
  exports.useFilters = useFilters;
3043
3093
  exports.useIsMounted = useIsMounted;