@mwakidenis/logx-react 0.0.0-stage → 0.1.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +23 -0
  3. package/README.md +151 -3
  4. package/dist/components/index.d.mts +71 -0
  5. package/dist/components/index.d.ts +71 -0
  6. package/dist/components/index.js +268 -0
  7. package/dist/components/index.js.map +1 -0
  8. package/dist/components/index.mjs +262 -0
  9. package/dist/components/index.mjs.map +1 -0
  10. package/dist/hooks/index.d.mts +316 -0
  11. package/dist/hooks/index.d.ts +316 -0
  12. package/dist/hooks/index.js +638 -0
  13. package/dist/hooks/index.js.map +1 -0
  14. package/dist/hooks/index.mjs +615 -0
  15. package/dist/hooks/index.mjs.map +1 -0
  16. package/dist/hooks/storage/index.d.mts +40 -0
  17. package/dist/hooks/storage/index.d.ts +40 -0
  18. package/dist/hooks/storage/index.js +119 -0
  19. package/dist/hooks/storage/index.js.map +1 -0
  20. package/dist/hooks/storage/index.mjs +116 -0
  21. package/dist/hooks/storage/index.mjs.map +1 -0
  22. package/dist/index.d.mts +16 -0
  23. package/dist/index.d.ts +16 -0
  24. package/dist/index.js +1066 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/index.mjs +974 -0
  27. package/dist/index.mjs.map +1 -0
  28. package/dist/providers/LogxProvider.d.mts +134 -0
  29. package/dist/providers/LogxProvider.d.ts +134 -0
  30. package/dist/providers/LogxProvider.js +117 -0
  31. package/dist/providers/LogxProvider.js.map +1 -0
  32. package/dist/providers/LogxProvider.mjs +114 -0
  33. package/dist/providers/LogxProvider.mjs.map +1 -0
  34. package/dist/types/index.d.mts +87 -0
  35. package/dist/types/index.d.ts +87 -0
  36. package/dist/types/index.js +4 -0
  37. package/dist/types/index.js.map +1 -0
  38. package/dist/types/index.mjs +3 -0
  39. package/dist/types/index.mjs.map +1 -0
  40. package/dist/utilities/index.d.mts +140 -0
  41. package/dist/utilities/index.d.ts +140 -0
  42. package/dist/utilities/index.js +167 -0
  43. package/dist/utilities/index.js.map +1 -0
  44. package/dist/utilities/index.mjs +104 -0
  45. package/dist/utilities/index.mjs.map +1 -0
  46. package/package.json +127 -6
@@ -0,0 +1,167 @@
1
+ 'use strict';
2
+
3
+ require('@mwakidenis/logx/function');
4
+ var browser = require('@mwakidenis/logx/browser');
5
+ var validation = require('@mwakidenis/logx/validation');
6
+ var object = require('@mwakidenis/logx/object');
7
+ var number = require('@mwakidenis/logx/number');
8
+ var array = require('@mwakidenis/logx/array');
9
+ require('@mwakidenis/logx/async');
10
+ var date = require('@mwakidenis/logx/date');
11
+ var string = require('@mwakidenis/logx/string');
12
+
13
+ // src/internal/logx.ts
14
+
15
+ // src/utilities/array.ts
16
+ var chunk2 = array.chunk;
17
+ var compact2 = array.compact;
18
+ var difference2 = array.difference;
19
+ var drop2 = array.drop;
20
+ var flatten2 = array.flatten;
21
+ var flattenDeep2 = array.flattenDeep;
22
+ var intersection2 = array.intersection;
23
+ var last2 = array.last;
24
+ var partition2 = array.partition;
25
+ var sample2 = array.sample;
26
+ var shuffle2 = array.shuffle;
27
+ var take2 = array.take;
28
+ var union2 = array.union;
29
+ var unique2 = array.unique;
30
+ function first2(array) {
31
+ return array[0];
32
+ }
33
+ function distinct(array) {
34
+ return unique2(array);
35
+ }
36
+
37
+ // src/utilities/object.ts
38
+ var clone2 = object.clone;
39
+ var deepClone2 = object.deepClone;
40
+ var entries2 = object.entries;
41
+ var get2 = object.get;
42
+ var has2 = object.has;
43
+ var keys2 = object.keys;
44
+ var mapKeys2 = object.mapKeys;
45
+ var mapValues2 = object.mapValues;
46
+ var merge2 = object.merge;
47
+ var omit2 = object.omit;
48
+ var pick2 = object.pick;
49
+ var set2 = object.set;
50
+ var values2 = object.values;
51
+ function safeGet(object$1, path) {
52
+ const result = object.get(object$1, path);
53
+ return result === void 0 ? void 0 : result;
54
+ }
55
+
56
+ // src/utilities/string.ts
57
+ var camelCase2 = string.camelCase;
58
+ var capitalize2 = string.capitalize;
59
+ var escapeHtml2 = string.escapeHtml;
60
+ var kebabCase2 = string.kebabCase;
61
+ var pascalCase2 = string.pascalCase;
62
+ var snakeCase2 = string.snakeCase;
63
+ var trim2 = string.trim;
64
+ var truncate2 = string.truncate;
65
+ function htmlEscape(input) {
66
+ return escapeHtml2(input);
67
+ }
68
+
69
+ // src/utilities/number.ts
70
+ var clamp2 = number.clamp;
71
+ var inRange2 = number.inRange;
72
+ var round2 = number.round;
73
+ var percentage2 = number.percentage;
74
+ var randomInt2 = number.randomInt;
75
+
76
+ // src/utilities/validation.ts
77
+ var isArray2 = validation.isArray;
78
+ var isBoolean2 = validation.isBoolean;
79
+ var isEmail2 = validation.isEmail;
80
+ var isEmpty2 = validation.isEmpty;
81
+ var isFunction2 = validation.isFunction;
82
+ var isNil2 = validation.isNil;
83
+ var isNull2 = validation.isNull;
84
+ var isNumber2 = validation.isNumber;
85
+ var isObject2 = validation.isObject;
86
+ var isString2 = validation.isString;
87
+ var isURL2 = validation.isURL;
88
+ function required(value, fieldName = "This field") {
89
+ if (isNil2(value)) return `${fieldName} is required`;
90
+ if (isString2(value) && value.trim() === "") return `${fieldName} is required`;
91
+ return null;
92
+ }
93
+
94
+ // src/utilities/date.ts
95
+ var addDays2 = date.addDays;
96
+ var isValidDate2 = date.isValidDate;
97
+
98
+ // src/utilities/browser.ts
99
+ var hasLocalStorage = browser.hasLocalStorage;
100
+ var hasSessionStorage = browser.hasSessionStorage;
101
+ var isBrowser = browser.isBrowser;
102
+ var isNode = browser.isNode;
103
+
104
+ exports.addDays = addDays2;
105
+ exports.camelCase = camelCase2;
106
+ exports.capitalize = capitalize2;
107
+ exports.chunk = chunk2;
108
+ exports.clamp = clamp2;
109
+ exports.clone = clone2;
110
+ exports.compact = compact2;
111
+ exports.deepClone = deepClone2;
112
+ exports.difference = difference2;
113
+ exports.distinct = distinct;
114
+ exports.drop = drop2;
115
+ exports.entries = entries2;
116
+ exports.escapeHtml = escapeHtml2;
117
+ exports.first = first2;
118
+ exports.flatten = flatten2;
119
+ exports.flattenDeep = flattenDeep2;
120
+ exports.get = get2;
121
+ exports.has = has2;
122
+ exports.hasLocalStorage = hasLocalStorage;
123
+ exports.hasSessionStorage = hasSessionStorage;
124
+ exports.htmlEscape = htmlEscape;
125
+ exports.inRange = inRange2;
126
+ exports.intersection = intersection2;
127
+ exports.isArray = isArray2;
128
+ exports.isBoolean = isBoolean2;
129
+ exports.isBrowser = isBrowser;
130
+ exports.isEmail = isEmail2;
131
+ exports.isEmpty = isEmpty2;
132
+ exports.isFunction = isFunction2;
133
+ exports.isNil = isNil2;
134
+ exports.isNode = isNode;
135
+ exports.isNull = isNull2;
136
+ exports.isNumber = isNumber2;
137
+ exports.isObject = isObject2;
138
+ exports.isString = isString2;
139
+ exports.isURL = isURL2;
140
+ exports.isValidDate = isValidDate2;
141
+ exports.kebabCase = kebabCase2;
142
+ exports.keys = keys2;
143
+ exports.last = last2;
144
+ exports.mapKeys = mapKeys2;
145
+ exports.mapValues = mapValues2;
146
+ exports.merge = merge2;
147
+ exports.omit = omit2;
148
+ exports.partition = partition2;
149
+ exports.pascalCase = pascalCase2;
150
+ exports.percentage = percentage2;
151
+ exports.pick = pick2;
152
+ exports.randomInt = randomInt2;
153
+ exports.required = required;
154
+ exports.round = round2;
155
+ exports.safeGet = safeGet;
156
+ exports.sample = sample2;
157
+ exports.set = set2;
158
+ exports.shuffle = shuffle2;
159
+ exports.snakeCase = snakeCase2;
160
+ exports.take = take2;
161
+ exports.trim = trim2;
162
+ exports.truncate = truncate2;
163
+ exports.union = union2;
164
+ exports.unique = unique2;
165
+ exports.values = values2;
166
+ //# sourceMappingURL=index.js.map
167
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/array.ts","../../src/utilities/object.ts","../../src/utilities/string.ts","../../src/utilities/number.ts","../../src/utilities/validation.ts","../../src/utilities/date.ts","../../src/utilities/browser.ts"],"names":["chunk","compact","difference","drop","flatten","flattenDeep","intersection","last","partition","sample","shuffle","take","union","unique","first","clone","deepClone","entries","get","has","keys","mapKeys","mapValues","merge","omit","pick","set","values","object","camelCase","capitalize","escapeHtml","kebabCase","pascalCase","snakeCase","trim","truncate","clamp","inRange","round","percentage","randomInt","isArray","isBoolean","isEmail","isEmpty","isFunction","isNil","isNull","isNumber","isObject","isString","isURL","addDays","isValidDate","logxHasLocalStorage","logxHasSessionStorage","logxIsBrowser","logxIsNode"],"mappings":";;;;;;;;;;;;;;;AAyBO,IAAMA,MAAAA,GAAQA;AACd,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,KAAAA,GAAOA;AACb,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,YAAAA,GAAcA;AACpB,IAAMC,aAAAA,GAAeA;AACrB,IAAMC,KAAAA,GAAOA;AACb,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,OAAAA,GAASA;AACf,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,KAAAA,GAAOA;AACb,IAAMC,MAAAA,GAAQA;AACd,IAAMC,OAAAA,GAASA;AAKf,SAASC,OAAS,KAAA,EAAoC;AAC3D,EAAA,OAAO,MAAM,CAAC,CAAA;AAChB;AAKO,SAAS,SAAY,KAAA,EAA0B;AACpD,EAAA,OAAOD,QAAO,KAAK,CAAA;AACrB;;;AC9BO,IAAME,MAAAA,GAAQA;AACd,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,IAAAA,GAAMA;AACZ,IAAMC,IAAAA,GAAMA;AACZ,IAAMC,KAAAA,GAAOA;AACb,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,MAAAA,GAAQA;AACd,IAAMC,KAAAA,GAAOA;AACb,IAAMC,KAAAA,GAAOA;AACb,IAAMC,IAAAA,GAAMA;AACZ,IAAMC,OAAAA,GAASA;AAKf,SAAS,OAAA,CAAWC,UAAiB,IAAA,EAAsD;AAChG,EAAA,MAAM,MAAA,GAASV,UAAA,CAAQU,QAAA,EAAQ,IAAI,CAAA;AACnC,EAAA,OAAO,MAAA,KAAW,SAAY,MAAA,GAAa,MAAA;AAC7C;;;ACxBO,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,KAAAA,GAAOA;AACb,IAAMC,SAAAA,GAAWA;AAMjB,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,OAAOL,YAAW,KAAK,CAAA;AACzB;;;ACnBO,IAAMM,MAAAA,GAAQA;AACd,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,MAAAA,GAAQA;AACd,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,UAAAA,GAAYA;;;ACGlB,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,UAAAA,GAAYA;AAClB,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,QAAAA,GAAUA;AAChB,IAAMC,WAAAA,GAAaA;AACnB,IAAMC,MAAAA,GAAQA;AACd,IAAMC,OAAAA,GAASA;AACf,IAAMC,SAAAA,GAAWA;AACjB,IAAMC,SAAAA,GAAWA;AACjB,IAAMC,SAAAA,GAAWA;AACjB,IAAMC,MAAAA,GAAQA;AAMd,SAAS,QAAA,CAAS,KAAA,EAAgB,SAAA,GAAY,YAAA,EAA6B;AAChF,EAAA,IAAIL,MAAAA,CAAM,KAAK,CAAA,EAAG,OAAO,GAAG,SAAS,CAAA,YAAA,CAAA;AACrC,EAAA,IAAII,SAAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,MAAK,KAAM,EAAA,EAAI,OAAO,CAAA,EAAG,SAAS,CAAA,YAAA,CAAA;AAC/D,EAAA,OAAO,IAAA;AACT;;;ACjCO,IAAME,QAAAA,GAAUA;AAChB,IAAMC,YAAAA,GAAcA;;;ACKpB,IAAM,eAAA,GAAkBC;AACxB,IAAM,iBAAA,GAAoBC;AAC1B,IAAM,SAAA,GAAYC;AAClB,IAAM,MAAA,GAASC","file":"index.js","sourcesContent":["/**\r\n * Array utilities.\r\n *\r\n * Pure, tree-shakable wrappers around @mwakidenis/logx array functions plus a\r\n * few React-oriented helpers. LOGX provides the core transformations; this\r\n * module exposes them with stable, documented signatures.\r\n */\r\n\r\nimport {\r\n chunk as logxChunk,\r\n compact as logxCompact,\r\n difference as logxDifference,\r\n drop as logxDrop,\r\n flatten as logxFlatten,\r\n flattenDeep as logxFlattenDeep,\r\n intersection as logxIntersection,\r\n last as logxLast,\r\n partition as logxPartition,\r\n sample as logxSample,\r\n shuffle as logxShuffle,\r\n take as logxTake,\r\n union as logxUnion,\r\n unique as logxUnique,\r\n} from \"../internal/logx\";\r\n\r\nexport const chunk = logxChunk;\r\nexport const compact = logxCompact;\r\nexport const difference = logxDifference;\r\nexport const drop = logxDrop;\r\nexport const flatten = logxFlatten;\r\nexport const flattenDeep = logxFlattenDeep;\r\nexport const intersection = logxIntersection;\r\nexport const last = logxLast;\r\nexport const partition = logxPartition;\r\nexport const sample = logxSample;\r\nexport const shuffle = logxShuffle;\r\nexport const take = logxTake;\r\nexport const union = logxUnion;\r\nexport const unique = logxUnique;\r\n\r\n/**\r\n * Return the first element of an array, or undefined.\r\n */\r\nexport function first<T>(array: readonly T[]): T | undefined {\r\n return array[0];\r\n}\r\n\r\n/**\r\n * Remove duplicates from an array using LOGX unique.\r\n */\r\nexport function distinct<T>(array: readonly T[]): T[] {\r\n return unique(array);\r\n}\r\n","/**\r\n * Object utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx object functions with stable signatures.\r\n */\r\n\r\nimport {\r\n clone as logxClone,\r\n deepClone as logxDeepClone,\r\n entries as logxEntries,\r\n get as logxGet,\r\n has as logxHas,\r\n keys as logxKeys,\r\n mapKeys as logxMapKeys,\r\n mapValues as logxMapValues,\r\n merge as logxMerge,\r\n omit as logxOmit,\r\n pick as logxPick,\r\n set as logxSet,\r\n values as logxValues,\r\n} from \"../internal/logx\";\r\n\r\nexport const clone = logxClone;\r\nexport const deepClone = logxDeepClone;\r\nexport const entries = logxEntries;\r\nexport const get = logxGet;\r\nexport const has = logxHas;\r\nexport const keys = logxKeys;\r\nexport const mapKeys = logxMapKeys;\r\nexport const mapValues = logxMapValues;\r\nexport const merge = logxMerge;\r\nexport const omit = logxOmit;\r\nexport const pick = logxPick;\r\nexport const set = logxSet;\r\nexport const values = logxValues;\r\n\r\n/**\r\n * Safely get a nested value, returning undefined when the path is missing.\r\n */\r\nexport function safeGet<T>(object: unknown, path: string | Array<string | number>): T | undefined {\r\n const result = logxGet(object, path);\r\n return result === undefined ? undefined : (result as T);\r\n}\r\n","/**\r\n * String utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx string functions plus a React-oriented\r\n * HTML escaper for safe rendering.\r\n */\r\n\r\nimport {\r\n camelCase as logxCamelCase,\r\n capitalize as logxCapitalize,\r\n escapeHtml as logxEscapeHtml,\r\n kebabCase as logxKebabCase,\r\n pascalCase as logxPascalCase,\r\n snakeCase as logxSnakeCase,\r\n trim as logxTrim,\r\n truncate as logxTruncate,\r\n} from \"../internal/logx\";\r\n\r\nexport const camelCase = logxCamelCase;\r\nexport const capitalize = logxCapitalize;\r\nexport const escapeHtml = logxEscapeHtml;\r\nexport const kebabCase = logxKebabCase;\r\nexport const pascalCase = logxPascalCase;\r\nexport const snakeCase = logxSnakeCase;\r\nexport const trim = logxTrim;\r\nexport const truncate = logxTruncate;\r\n\r\n/**\r\n * Escape HTML special characters so a string can be interpolated safely.\r\n * Delegates to @mwakidenis/logx escapeHtml.\r\n */\r\nexport function htmlEscape(input: string): string {\r\n return escapeHtml(input);\r\n}\r\n","/**\r\n * Number utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx number functions.\r\n */\r\n\r\nimport {\r\n clamp as logxClamp,\r\n inRange as logxInRange,\r\n round as logxRound,\r\n percentage as logxPercentage,\r\n randomInt as logxRandomInt,\r\n} from \"../internal/logx\";\r\n\r\nexport const clamp = logxClamp;\r\nexport const inRange = logxInRange;\r\nexport const round = logxRound;\r\nexport const percentage = logxPercentage;\r\nexport const randomInt = logxRandomInt;\r\n","/**\r\n * Validation utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx validation functions with type-guard\r\n * signatures preserved, plus React-oriented helpers.\r\n */\r\n\r\nimport {\r\n isArray as logxIsArray,\r\n isBoolean as logxIsBoolean,\r\n isEmail as logxIsEmail,\r\n isEmpty as logxIsEmpty,\r\n isFunction as logxIsFunction,\r\n isNil as logxIsNil,\r\n isNull as logxIsNull,\r\n isNumber as logxIsNumber,\r\n isObject as logxIsObject,\r\n isString as logxIsString,\r\n isURL as logxIsURL,\r\n} from \"../internal/logx\";\r\n\r\nexport const isArray = logxIsArray;\r\nexport const isBoolean = logxIsBoolean;\r\nexport const isEmail = logxIsEmail;\r\nexport const isEmpty = logxIsEmpty;\r\nexport const isFunction = logxIsFunction;\r\nexport const isNil = logxIsNil;\r\nexport const isNull = logxIsNull;\r\nexport const isNumber = logxIsNumber;\r\nexport const isObject = logxIsObject;\r\nexport const isString = logxIsString;\r\nexport const isURL = logxIsURL;\r\n\r\n/**\r\n * Required-field validator: returns an error message when the value is nil or\r\n * an empty string, otherwise null.\r\n */\r\nexport function required(value: unknown, fieldName = \"This field\"): string | null {\r\n if (isNil(value)) return `${fieldName} is required`;\r\n if (isString(value) && value.trim() === \"\") return `${fieldName} is required`;\r\n return null;\r\n}\r\n","/**\r\n * Date utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx date functions.\r\n */\r\n\r\nimport { addDays as logxAddDays, isValidDate as logxIsValidDate } from \"../internal/logx\";\r\n\r\nexport const addDays = logxAddDays;\r\nexport const isValidDate = logxIsValidDate;\r\n","/**\r\n * Browser environment utilities.\r\n *\r\n * Re-exports @mwakidenis/logx browser detection helpers so consumers can\r\n * write SSR-safe code without importing @mwakidenis/logx directly.\r\n */\r\n\r\nimport {\r\n hasLocalStorage as logxHasLocalStorage,\r\n hasSessionStorage as logxHasSessionStorage,\r\n isBrowser as logxIsBrowser,\r\n isNode as logxIsNode,\r\n} from \"../internal/logx\";\r\n\r\nexport const hasLocalStorage = logxHasLocalStorage;\r\nexport const hasSessionStorage = logxHasSessionStorage;\r\nexport const isBrowser = logxIsBrowser;\r\nexport const isNode = logxIsNode;\r\n"]}
@@ -0,0 +1,104 @@
1
+ import '@mwakidenis/logx/function';
2
+ import { hasLocalStorage as hasLocalStorage$1, hasSessionStorage as hasSessionStorage$1, isBrowser as isBrowser$1, isNode as isNode$1 } from '@mwakidenis/logx/browser';
3
+ import { isArray, isBoolean, isEmail, isEmpty, isFunction, isNil, isNull, isNumber, isObject, isString, isURL } from '@mwakidenis/logx/validation';
4
+ import { clone, deepClone, entries, get, has, keys, mapKeys, mapValues, merge, omit, pick, set, values } from '@mwakidenis/logx/object';
5
+ import { clamp, inRange, percentage, randomInt, round } from '@mwakidenis/logx/number';
6
+ import { chunk, compact, difference, drop, flatten, flattenDeep, intersection, last, partition, sample, shuffle, take, union, unique } from '@mwakidenis/logx/array';
7
+ import '@mwakidenis/logx/async';
8
+ import { addDays, isValidDate } from '@mwakidenis/logx/date';
9
+ import { camelCase, capitalize, escapeHtml, kebabCase, pascalCase, snakeCase, trim, truncate } from '@mwakidenis/logx/string';
10
+
11
+ // src/internal/logx.ts
12
+
13
+ // src/utilities/array.ts
14
+ var chunk2 = chunk;
15
+ var compact2 = compact;
16
+ var difference2 = difference;
17
+ var drop2 = drop;
18
+ var flatten2 = flatten;
19
+ var flattenDeep2 = flattenDeep;
20
+ var intersection2 = intersection;
21
+ var last2 = last;
22
+ var partition2 = partition;
23
+ var sample2 = sample;
24
+ var shuffle2 = shuffle;
25
+ var take2 = take;
26
+ var union2 = union;
27
+ var unique2 = unique;
28
+ function first2(array) {
29
+ return array[0];
30
+ }
31
+ function distinct(array) {
32
+ return unique2(array);
33
+ }
34
+
35
+ // src/utilities/object.ts
36
+ var clone2 = clone;
37
+ var deepClone2 = deepClone;
38
+ var entries2 = entries;
39
+ var get2 = get;
40
+ var has2 = has;
41
+ var keys2 = keys;
42
+ var mapKeys2 = mapKeys;
43
+ var mapValues2 = mapValues;
44
+ var merge2 = merge;
45
+ var omit2 = omit;
46
+ var pick2 = pick;
47
+ var set2 = set;
48
+ var values2 = values;
49
+ function safeGet(object, path) {
50
+ const result = get(object, path);
51
+ return result === void 0 ? void 0 : result;
52
+ }
53
+
54
+ // src/utilities/string.ts
55
+ var camelCase2 = camelCase;
56
+ var capitalize2 = capitalize;
57
+ var escapeHtml2 = escapeHtml;
58
+ var kebabCase2 = kebabCase;
59
+ var pascalCase2 = pascalCase;
60
+ var snakeCase2 = snakeCase;
61
+ var trim2 = trim;
62
+ var truncate2 = truncate;
63
+ function htmlEscape(input) {
64
+ return escapeHtml2(input);
65
+ }
66
+
67
+ // src/utilities/number.ts
68
+ var clamp2 = clamp;
69
+ var inRange2 = inRange;
70
+ var round2 = round;
71
+ var percentage2 = percentage;
72
+ var randomInt2 = randomInt;
73
+
74
+ // src/utilities/validation.ts
75
+ var isArray2 = isArray;
76
+ var isBoolean2 = isBoolean;
77
+ var isEmail2 = isEmail;
78
+ var isEmpty2 = isEmpty;
79
+ var isFunction2 = isFunction;
80
+ var isNil2 = isNil;
81
+ var isNull2 = isNull;
82
+ var isNumber2 = isNumber;
83
+ var isObject2 = isObject;
84
+ var isString2 = isString;
85
+ var isURL2 = isURL;
86
+ function required(value, fieldName = "This field") {
87
+ if (isNil2(value)) return `${fieldName} is required`;
88
+ if (isString2(value) && value.trim() === "") return `${fieldName} is required`;
89
+ return null;
90
+ }
91
+
92
+ // src/utilities/date.ts
93
+ var addDays2 = addDays;
94
+ var isValidDate2 = isValidDate;
95
+
96
+ // src/utilities/browser.ts
97
+ var hasLocalStorage = hasLocalStorage$1;
98
+ var hasSessionStorage = hasSessionStorage$1;
99
+ var isBrowser = isBrowser$1;
100
+ var isNode = isNode$1;
101
+
102
+ export { addDays2 as addDays, camelCase2 as camelCase, capitalize2 as capitalize, chunk2 as chunk, clamp2 as clamp, clone2 as clone, compact2 as compact, deepClone2 as deepClone, difference2 as difference, distinct, drop2 as drop, entries2 as entries, escapeHtml2 as escapeHtml, first2 as first, flatten2 as flatten, flattenDeep2 as flattenDeep, get2 as get, has2 as has, hasLocalStorage, hasSessionStorage, htmlEscape, inRange2 as inRange, intersection2 as intersection, isArray2 as isArray, isBoolean2 as isBoolean, isBrowser, isEmail2 as isEmail, isEmpty2 as isEmpty, isFunction2 as isFunction, isNil2 as isNil, isNode, isNull2 as isNull, isNumber2 as isNumber, isObject2 as isObject, isString2 as isString, isURL2 as isURL, isValidDate2 as isValidDate, kebabCase2 as kebabCase, keys2 as keys, last2 as last, mapKeys2 as mapKeys, mapValues2 as mapValues, merge2 as merge, omit2 as omit, partition2 as partition, pascalCase2 as pascalCase, percentage2 as percentage, pick2 as pick, randomInt2 as randomInt, required, round2 as round, safeGet, sample2 as sample, set2 as set, shuffle2 as shuffle, snakeCase2 as snakeCase, take2 as take, trim2 as trim, truncate2 as truncate, union2 as union, unique2 as unique, values2 as values };
103
+ //# sourceMappingURL=index.mjs.map
104
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/array.ts","../../src/utilities/object.ts","../../src/utilities/string.ts","../../src/utilities/number.ts","../../src/utilities/validation.ts","../../src/utilities/date.ts","../../src/utilities/browser.ts"],"names":["chunk","compact","difference","drop","flatten","flattenDeep","intersection","last","partition","sample","shuffle","take","union","unique","first","clone","deepClone","entries","get","has","keys","mapKeys","mapValues","merge","omit","pick","set","values","camelCase","capitalize","escapeHtml","kebabCase","pascalCase","snakeCase","trim","truncate","clamp","inRange","round","percentage","randomInt","isArray","isBoolean","isEmail","isEmpty","isFunction","isNil","isNull","isNumber","isObject","isString","isURL","addDays","isValidDate","logxHasLocalStorage","logxHasSessionStorage","logxIsBrowser","logxIsNode"],"mappings":";;;;;;;;;;;;;AAyBO,IAAMA,MAAAA,GAAQ;AACd,IAAMC,QAAAA,GAAU;AAChB,IAAMC,WAAAA,GAAa;AACnB,IAAMC,KAAAA,GAAO;AACb,IAAMC,QAAAA,GAAU;AAChB,IAAMC,YAAAA,GAAc;AACpB,IAAMC,aAAAA,GAAe;AACrB,IAAMC,KAAAA,GAAO;AACb,IAAMC,UAAAA,GAAY;AAClB,IAAMC,OAAAA,GAAS;AACf,IAAMC,QAAAA,GAAU;AAChB,IAAMC,KAAAA,GAAO;AACb,IAAMC,MAAAA,GAAQ;AACd,IAAMC,OAAAA,GAAS;AAKf,SAASC,OAAS,KAAA,EAAoC;AAC3D,EAAA,OAAO,MAAM,CAAC,CAAA;AAChB;AAKO,SAAS,SAAY,KAAA,EAA0B;AACpD,EAAA,OAAOD,QAAO,KAAK,CAAA;AACrB;;;AC9BO,IAAME,MAAAA,GAAQ;AACd,IAAMC,UAAAA,GAAY;AAClB,IAAMC,QAAAA,GAAU;AAChB,IAAMC,IAAAA,GAAM;AACZ,IAAMC,IAAAA,GAAM;AACZ,IAAMC,KAAAA,GAAO;AACb,IAAMC,QAAAA,GAAU;AAChB,IAAMC,UAAAA,GAAY;AAClB,IAAMC,MAAAA,GAAQ;AACd,IAAMC,KAAAA,GAAO;AACb,IAAMC,KAAAA,GAAO;AACb,IAAMC,IAAAA,GAAM;AACZ,IAAMC,OAAAA,GAAS;AAKf,SAAS,OAAA,CAAW,QAAiB,IAAA,EAAsD;AAChG,EAAA,MAAM,MAAA,GAAS,GAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AACnC,EAAA,OAAO,MAAA,KAAW,SAAY,MAAA,GAAa,MAAA;AAC7C;;;ACxBO,IAAMC,UAAAA,GAAY;AAClB,IAAMC,WAAAA,GAAa;AACnB,IAAMC,WAAAA,GAAa;AACnB,IAAMC,UAAAA,GAAY;AAClB,IAAMC,WAAAA,GAAa;AACnB,IAAMC,UAAAA,GAAY;AAClB,IAAMC,KAAAA,GAAO;AACb,IAAMC,SAAAA,GAAW;AAMjB,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,OAAOL,YAAW,KAAK,CAAA;AACzB;;;ACnBO,IAAMM,MAAAA,GAAQ;AACd,IAAMC,QAAAA,GAAU;AAChB,IAAMC,MAAAA,GAAQ;AACd,IAAMC,WAAAA,GAAa;AACnB,IAAMC,UAAAA,GAAY;;;ACGlB,IAAMC,QAAAA,GAAU;AAChB,IAAMC,UAAAA,GAAY;AAClB,IAAMC,QAAAA,GAAU;AAChB,IAAMC,QAAAA,GAAU;AAChB,IAAMC,WAAAA,GAAa;AACnB,IAAMC,MAAAA,GAAQ;AACd,IAAMC,OAAAA,GAAS;AACf,IAAMC,SAAAA,GAAW;AACjB,IAAMC,SAAAA,GAAW;AACjB,IAAMC,SAAAA,GAAW;AACjB,IAAMC,MAAAA,GAAQ;AAMd,SAAS,QAAA,CAAS,KAAA,EAAgB,SAAA,GAAY,YAAA,EAA6B;AAChF,EAAA,IAAIL,MAAAA,CAAM,KAAK,CAAA,EAAG,OAAO,GAAG,SAAS,CAAA,YAAA,CAAA;AACrC,EAAA,IAAII,SAAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,MAAK,KAAM,EAAA,EAAI,OAAO,CAAA,EAAG,SAAS,CAAA,YAAA,CAAA;AAC/D,EAAA,OAAO,IAAA;AACT;;;ACjCO,IAAME,QAAAA,GAAU;AAChB,IAAMC,YAAAA,GAAc;;;ACKpB,IAAM,eAAA,GAAkBC;AACxB,IAAM,iBAAA,GAAoBC;AAC1B,IAAM,SAAA,GAAYC;AAClB,IAAM,MAAA,GAASC","file":"index.mjs","sourcesContent":["/**\r\n * Array utilities.\r\n *\r\n * Pure, tree-shakable wrappers around @mwakidenis/logx array functions plus a\r\n * few React-oriented helpers. LOGX provides the core transformations; this\r\n * module exposes them with stable, documented signatures.\r\n */\r\n\r\nimport {\r\n chunk as logxChunk,\r\n compact as logxCompact,\r\n difference as logxDifference,\r\n drop as logxDrop,\r\n flatten as logxFlatten,\r\n flattenDeep as logxFlattenDeep,\r\n intersection as logxIntersection,\r\n last as logxLast,\r\n partition as logxPartition,\r\n sample as logxSample,\r\n shuffle as logxShuffle,\r\n take as logxTake,\r\n union as logxUnion,\r\n unique as logxUnique,\r\n} from \"../internal/logx\";\r\n\r\nexport const chunk = logxChunk;\r\nexport const compact = logxCompact;\r\nexport const difference = logxDifference;\r\nexport const drop = logxDrop;\r\nexport const flatten = logxFlatten;\r\nexport const flattenDeep = logxFlattenDeep;\r\nexport const intersection = logxIntersection;\r\nexport const last = logxLast;\r\nexport const partition = logxPartition;\r\nexport const sample = logxSample;\r\nexport const shuffle = logxShuffle;\r\nexport const take = logxTake;\r\nexport const union = logxUnion;\r\nexport const unique = logxUnique;\r\n\r\n/**\r\n * Return the first element of an array, or undefined.\r\n */\r\nexport function first<T>(array: readonly T[]): T | undefined {\r\n return array[0];\r\n}\r\n\r\n/**\r\n * Remove duplicates from an array using LOGX unique.\r\n */\r\nexport function distinct<T>(array: readonly T[]): T[] {\r\n return unique(array);\r\n}\r\n","/**\r\n * Object utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx object functions with stable signatures.\r\n */\r\n\r\nimport {\r\n clone as logxClone,\r\n deepClone as logxDeepClone,\r\n entries as logxEntries,\r\n get as logxGet,\r\n has as logxHas,\r\n keys as logxKeys,\r\n mapKeys as logxMapKeys,\r\n mapValues as logxMapValues,\r\n merge as logxMerge,\r\n omit as logxOmit,\r\n pick as logxPick,\r\n set as logxSet,\r\n values as logxValues,\r\n} from \"../internal/logx\";\r\n\r\nexport const clone = logxClone;\r\nexport const deepClone = logxDeepClone;\r\nexport const entries = logxEntries;\r\nexport const get = logxGet;\r\nexport const has = logxHas;\r\nexport const keys = logxKeys;\r\nexport const mapKeys = logxMapKeys;\r\nexport const mapValues = logxMapValues;\r\nexport const merge = logxMerge;\r\nexport const omit = logxOmit;\r\nexport const pick = logxPick;\r\nexport const set = logxSet;\r\nexport const values = logxValues;\r\n\r\n/**\r\n * Safely get a nested value, returning undefined when the path is missing.\r\n */\r\nexport function safeGet<T>(object: unknown, path: string | Array<string | number>): T | undefined {\r\n const result = logxGet(object, path);\r\n return result === undefined ? undefined : (result as T);\r\n}\r\n","/**\r\n * String utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx string functions plus a React-oriented\r\n * HTML escaper for safe rendering.\r\n */\r\n\r\nimport {\r\n camelCase as logxCamelCase,\r\n capitalize as logxCapitalize,\r\n escapeHtml as logxEscapeHtml,\r\n kebabCase as logxKebabCase,\r\n pascalCase as logxPascalCase,\r\n snakeCase as logxSnakeCase,\r\n trim as logxTrim,\r\n truncate as logxTruncate,\r\n} from \"../internal/logx\";\r\n\r\nexport const camelCase = logxCamelCase;\r\nexport const capitalize = logxCapitalize;\r\nexport const escapeHtml = logxEscapeHtml;\r\nexport const kebabCase = logxKebabCase;\r\nexport const pascalCase = logxPascalCase;\r\nexport const snakeCase = logxSnakeCase;\r\nexport const trim = logxTrim;\r\nexport const truncate = logxTruncate;\r\n\r\n/**\r\n * Escape HTML special characters so a string can be interpolated safely.\r\n * Delegates to @mwakidenis/logx escapeHtml.\r\n */\r\nexport function htmlEscape(input: string): string {\r\n return escapeHtml(input);\r\n}\r\n","/**\r\n * Number utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx number functions.\r\n */\r\n\r\nimport {\r\n clamp as logxClamp,\r\n inRange as logxInRange,\r\n round as logxRound,\r\n percentage as logxPercentage,\r\n randomInt as logxRandomInt,\r\n} from \"../internal/logx\";\r\n\r\nexport const clamp = logxClamp;\r\nexport const inRange = logxInRange;\r\nexport const round = logxRound;\r\nexport const percentage = logxPercentage;\r\nexport const randomInt = logxRandomInt;\r\n","/**\r\n * Validation utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx validation functions with type-guard\r\n * signatures preserved, plus React-oriented helpers.\r\n */\r\n\r\nimport {\r\n isArray as logxIsArray,\r\n isBoolean as logxIsBoolean,\r\n isEmail as logxIsEmail,\r\n isEmpty as logxIsEmpty,\r\n isFunction as logxIsFunction,\r\n isNil as logxIsNil,\r\n isNull as logxIsNull,\r\n isNumber as logxIsNumber,\r\n isObject as logxIsObject,\r\n isString as logxIsString,\r\n isURL as logxIsURL,\r\n} from \"../internal/logx\";\r\n\r\nexport const isArray = logxIsArray;\r\nexport const isBoolean = logxIsBoolean;\r\nexport const isEmail = logxIsEmail;\r\nexport const isEmpty = logxIsEmpty;\r\nexport const isFunction = logxIsFunction;\r\nexport const isNil = logxIsNil;\r\nexport const isNull = logxIsNull;\r\nexport const isNumber = logxIsNumber;\r\nexport const isObject = logxIsObject;\r\nexport const isString = logxIsString;\r\nexport const isURL = logxIsURL;\r\n\r\n/**\r\n * Required-field validator: returns an error message when the value is nil or\r\n * an empty string, otherwise null.\r\n */\r\nexport function required(value: unknown, fieldName = \"This field\"): string | null {\r\n if (isNil(value)) return `${fieldName} is required`;\r\n if (isString(value) && value.trim() === \"\") return `${fieldName} is required`;\r\n return null;\r\n}\r\n","/**\r\n * Date utilities.\r\n *\r\n * Wrappers around @mwakidenis/logx date functions.\r\n */\r\n\r\nimport { addDays as logxAddDays, isValidDate as logxIsValidDate } from \"../internal/logx\";\r\n\r\nexport const addDays = logxAddDays;\r\nexport const isValidDate = logxIsValidDate;\r\n","/**\r\n * Browser environment utilities.\r\n *\r\n * Re-exports @mwakidenis/logx browser detection helpers so consumers can\r\n * write SSR-safe code without importing @mwakidenis/logx directly.\r\n */\r\n\r\nimport {\r\n hasLocalStorage as logxHasLocalStorage,\r\n hasSessionStorage as logxHasSessionStorage,\r\n isBrowser as logxIsBrowser,\r\n isNode as logxIsNode,\r\n} from \"../internal/logx\";\r\n\r\nexport const hasLocalStorage = logxHasLocalStorage;\r\nexport const hasSessionStorage = logxHasSessionStorage;\r\nexport const isBrowser = logxIsBrowser;\r\nexport const isNode = logxIsNode;\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,127 @@
1
- {
2
- "name": "@mwakidenis/logx-react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
1
+ {
2
+ "name": "@mwakidenis/logx-react",
3
+ "version": "0.1.0",
4
+ "description": "A modular, lightweight, SSR-safe React utility toolkit built on @mwakidenis/logx. Provides hooks, components, utilities and providers for production React applications.",
5
+ "author": "Mwaki Denis",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/mwakidenis/logx-react-toolkit",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/mwakidenis/logx-react-toolkit.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/mwakidenis/logx-react-toolkit/issues"
14
+ },
15
+ "keywords": [
16
+ "react",
17
+ "react-hooks",
18
+ "typescript",
19
+ "javascript",
20
+ "react-utilities",
21
+ "react-toolkit",
22
+ "custom-hooks",
23
+ "developer-tools",
24
+ "frontend",
25
+ "web-development",
26
+ "logx",
27
+ "open-source"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20"
31
+ },
32
+ "main": "dist/index.js",
33
+ "module": "dist/index.mjs",
34
+ "types": "dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.mjs",
39
+ "require": "./dist/index.js"
40
+ },
41
+ "./hooks": {
42
+ "types": "./dist/hooks/index.d.ts",
43
+ "import": "./dist/hooks/index.mjs",
44
+ "require": "./dist/hooks/index.js"
45
+ },
46
+ "./hooks/storage": {
47
+ "types": "./dist/hooks/storage/index.d.ts",
48
+ "import": "./dist/hooks/storage/index.mjs",
49
+ "require": "./dist/hooks/storage/index.js"
50
+ },
51
+ "./components": {
52
+ "types": "./dist/components/index.d.ts",
53
+ "import": "./dist/components/index.mjs",
54
+ "require": "./dist/components/index.js"
55
+ },
56
+ "./utilities": {
57
+ "types": "./dist/utilities/index.d.ts",
58
+ "import": "./dist/utilities/index.mjs",
59
+ "require": "./dist/utilities/index.js"
60
+ },
61
+ "./types": {
62
+ "types": "./dist/types/index.d.ts"
63
+ },
64
+ "./providers": {
65
+ "types": "./dist/providers/LogxProvider.d.ts",
66
+ "import": "./dist/providers/LogxProvider.mjs",
67
+ "require": "./dist/providers/LogxProvider.js"
68
+ },
69
+ "./package.json": "./package.json"
70
+ },
71
+ "files": [
72
+ "dist",
73
+ "README.md",
74
+ "LICENSE",
75
+ "CHANGELOG.md"
76
+ ],
77
+ "sideEffects": false,
78
+ "publishConfig": {
79
+ "access": "public"
80
+ },
81
+ "peerDependencies": {
82
+ "react": "^18.2.0 || ^19.0.0",
83
+ "react-dom": "^18.2.0 || ^19.0.0"
84
+ },
85
+ "dependencies": {
86
+ "@mwakidenis/logx": "^0.1.0"
87
+ },
88
+ "devDependencies": {
89
+ "@testing-library/dom": "^10.4.0",
90
+ "@testing-library/jest-dom": "^6.6.3",
91
+ "@testing-library/react": "^16.3.0",
92
+ "@testing-library/user-event": "^14.6.1",
93
+ "@types/node": "^26.6.6",
94
+ "@types/react": "^18.3.18",
95
+ "@types/react-dom": "^18.3.5",
96
+ "@typescript-eslint/eslint-plugin": "^8.72.1",
97
+ "@typescript-eslint/parser": "^8.72.1",
98
+ "@vitejs/plugin-react": "^4.5.2",
99
+ "@vitest/coverage-v8": "^4.1.12",
100
+ "eslint": "^9.39.5",
101
+ "eslint-plugin-react": "^7.37.4",
102
+ "eslint-plugin-react-hooks": "^5.2.0",
103
+ "jsdom": "^26.0.0",
104
+ "prettier": "^3.9.10",
105
+ "react": "^18.3.1",
106
+ "react-dom": "^18.3.1",
107
+ "std-env": "^3.10.0",
108
+ "tsup": "^8.5.1",
109
+ "typescript": "^5.9.3",
110
+ "typescript-eslint": "^8.72.1",
111
+ "vite": "^6.2.0",
112
+ "vitest": "^4.1.12"
113
+ },
114
+ "scripts": {
115
+ "build": "tsup",
116
+ "clean": "rm -rf dist .turbo node_modules/.cache",
117
+ "test": "vitest run",
118
+ "test:watch": "vitest",
119
+ "test:coverage": "vitest run --coverage",
120
+ "lint": "eslint . --ext .ts,.tsx,.js",
121
+ "lint:fix": "eslint . --ext .ts,.tsx,.js --fix",
122
+ "typecheck": "tsc --noEmit",
123
+ "format": "prettier --write \"src/**/*.{ts,tsx}\" \"tests/**/*.{ts,tsx}\" \"*.{js,json,md,ts}\"",
124
+ "format:check": "prettier --check \"src/**/*.{ts,tsx}\" \"tests/**/*.{ts,tsx}\" \"*.{js,json,md,ts}\"",
125
+ "pack:check": "npm pack --dry-run"
126
+ }
127
+ }